From 69d4b5ef0c3ebb6a8190c6e124b5ad147404384b Mon Sep 17 00:00:00 2001 From: Brian Stansberry Date: Sun, 21 Jul 2024 18:26:17 -0500 Subject: [PATCH] Add the main WildFly 33 documentation --- 33/Admin_Guide.html | 27695 ++++++++++++++++ 33/Bootable_Guide.html | 1543 + 33/Client_Guide.html | 2166 ++ 33/Cloud_References.html | 539 + 33/Developer_Guide.html | 25358 ++++++++++++++ 33/Extending_WildFly.html | 8755 +++++ 33/Galleon_Guide.html | 1642 + ...Started_Developing_Applications_Guide.html | 4591 +++ 33/Getting_Started_Guide.html | 1766 + 33/Getting_Started_on_OpenShift.html | 977 + 33/Glossary.html | 477 + 33/Hacking_On_WildFly.html | 1310 + 33/High_Availability_Guide.html | 6037 ++++ 33/Installation_Guide.html | 635 + 33/Migration_Guide.html | 901 + 33/Quickstarts.html | 509 + 33/Testsuite.html | 3699 +++ 33/WildFly_Elytron_Security.html | 16147 +++++++++ 33/WildFly_and_WildFly_Preview.html | 843 + 33/downloads/acme-subsystem.zip | Bin 0 -> 22344 bytes 33/downloads/test1.zip | Bin 0 -> 16503 bytes 33/downloads/test2.zip | Bin 0 -> 14591 bytes 33/images/250px-Public_key_making.svg.png | Bin 0 -> 47297 bytes 33/images/DC-HC-Server.png | Bin 0 -> 45053 bytes 33/images/Public_key_encryption-mod.svg.png | Bin 0 -> 43524 bytes 33/images/Public_key_making.png | Bin 0 -> 39497 bytes 33/images/add-app-user-interactive.png | Bin 0 -> 267623 bytes 33/images/add-app-user-non-interactive.png | Bin 0 -> 70649 bytes 33/images/add-mgmt-user-interactive.png | Bin 0 -> 178278 bytes 33/images/add-mgmt-user-non-interactive.png | Bin 0 -> 64564 bytes 33/images/add-user.png | Bin 0 -> 175837 bytes 33/images/addscopedrole.png | Bin 0 -> 69903 bytes 33/images/callersroles.png | Bin 0 -> 49338 bytes 33/images/clustering/Clustering.jpg | Bin 0 -> 18642 bytes 33/images/clustering/JBoss_Management.png | Bin 0 -> 117411 bytes 33/images/clustering/JBoss_Management_2.png | Bin 0 -> 113255 bytes .../http---10.211.55.2-8330-cluster-demo-.png | Bin 0 -> 33221 bytes .../http---10.211.55.7-8330-cluster-demo-.png | Bin 0 -> 44025 bytes ...ttp---10.211.55.7-cluster-demo-get.jsp.png | Bin 0 -> 48302 bytes ...ttp---10.211.55.7-cluster-demo-put.jsp.png | Bin 0 -> 49875 bytes 33/images/clustering/test_scenario.jpg | Bin 0 -> 47188 bytes 33/images/ejb/mdb-management-resource.png | Bin 0 -> 359813 bytes .../ejb/singleton-management-resource.png | Bin 0 -> 341040 bytes .../ejb/stateful-management-resource.png | Bin 0 -> 367540 bytes .../ejb/stateless-management-resource.png | Bin 0 -> 331706 bytes 33/images/excludemapping.png | Bin 0 -> 76820 bytes 33/images/gfx/Activator.png | Bin 0 -> 142074 bytes 33/images/gfx/Eclipse_Deploy_2.jpg | Bin 0 -> 28377 bytes 33/images/gfx/Eclipse_Detect_Servers_1.png | Bin 0 -> 36476 bytes 33/images/gfx/Eclipse_Detect_Servers_2.png | Bin 0 -> 56318 bytes 33/images/gfx/Eclipse_Detect_Servers_3.png | Bin 0 -> 104095 bytes 33/images/gfx/Eclipse_Detect_Servers_4.png | Bin 0 -> 38447 bytes 33/images/gfx/Eclipse_Greeter_Deploy_1.png | Bin 0 -> 75699 bytes 33/images/gfx/Eclipse_Greeter_Deploy_3.png | Bin 0 -> 42254 bytes 33/images/gfx/Eclipse_Helloworld_Deploy_1.jpg | Bin 0 -> 40371 bytes 33/images/gfx/Eclipse_Helloworld_Deploy_3.jpg | Bin 0 -> 34068 bytes 33/images/gfx/Eclipse_JBoss_Central_1.png | Bin 0 -> 22423 bytes 33/images/gfx/Eclipse_JBoss_Central_2.png | Bin 0 -> 133641 bytes 33/images/gfx/Eclipse_JavaEEWebProject_1.png | Bin 0 -> 84867 bytes 33/images/gfx/Eclipse_JavaEEWebProject_2.png | Bin 0 -> 46834 bytes 33/images/gfx/Eclipse_JavaEEWebProject_3.png | Bin 0 -> 33013 bytes 33/images/gfx/Eclipse_JavaEEWebProject_4.png | Bin 0 -> 81955 bytes .../gfx/Eclipse_KitchenSink_Deploy_1.jpg | Bin 0 -> 50721 bytes .../gfx/Eclipse_KitchenSink_Deploy_3.jpg | Bin 0 -> 31668 bytes 33/images/gfx/Eclipse_Login_Deploy_1.jpg | Bin 0 -> 34104 bytes 33/images/gfx/Eclipse_Login_Deploy_3.jpg | Bin 0 -> 35920 bytes 33/images/gfx/Eclipse_New_Server_1.jpg | Bin 0 -> 40375 bytes 33/images/gfx/Eclipse_New_Server_2.jpg | Bin 0 -> 21956 bytes 33/images/gfx/Eclipse_New_Server_3.jpg | Bin 0 -> 27583 bytes 33/images/gfx/Eclipse_New_Server_4.jpg | Bin 0 -> 29056 bytes 33/images/gfx/Eclipse_New_Server_5.jpg | Bin 0 -> 29578 bytes 33/images/gfx/Eclipse_New_Server_6.jpg | Bin 0 -> 28970 bytes .../gfx/Eclipse_Numberguess_Deploy_1.jpg | Bin 0 -> 35831 bytes .../gfx/Eclipse_Numberguess_Deploy_3.jpg | Bin 0 -> 30369 bytes 33/images/gfx/Eclipse_Server_Start_1.jpg | Bin 0 -> 18301 bytes 33/images/gfx/Eclipse_Server_Start_2.jpg | Bin 0 -> 51448 bytes 33/images/gfx/Eclipse_Server_Tab_1.jpg | Bin 0 -> 38578 bytes 33/images/gfx/Eclipse_Server_Tab_2.jpg | Bin 0 -> 20121 bytes 33/images/gfx/Eclipse_Server_Tab_3.jpg | Bin 0 -> 8818 bytes 33/images/gfx/Export.png | Bin 0 -> 86543 bytes 33/images/gfx/Import_Quickstarts_1.jpg | Bin 0 -> 22746 bytes 33/images/gfx/Import_Quickstarts_2.jpg | Bin 0 -> 23541 bytes 33/images/gfx/Import_Quickstarts_3.jpg | Bin 0 -> 25124 bytes 33/images/gfx/Import_Quickstarts_4.jpg | Bin 0 -> 38560 bytes 33/images/gfx/Import_Quickstarts_5.jpg | Bin 0 -> 8669 bytes 33/images/gfx/Manifest.png | Bin 0 -> 257185 bytes 33/images/gfx/Template.png | Bin 0 -> 83681 bytes 33/images/gfx/console.png | Bin 0 -> 144344 bytes 33/images/gfx/eclipse_arquillian_0.png | Bin 0 -> 32967 bytes 33/images/gfx/eclipse_arquillian_1.png | Bin 0 -> 123062 bytes 33/images/gfx/eclipse_arquillian_11.png | Bin 0 -> 95860 bytes 33/images/gfx/eclipse_arquillian_12.png | Bin 0 -> 122958 bytes 33/images/gfx/eclipse_arquillian_2.png | Bin 0 -> 44263 bytes 33/images/gfx/eclipse_arquillian_3.png | Bin 0 -> 46745 bytes 33/images/gfx/eclipse_arquillian_4.png | Bin 0 -> 21326 bytes 33/images/gfx/icons/callouts/1.png | Bin 0 -> 329 bytes 33/images/gfx/icons/callouts/10.png | Bin 0 -> 361 bytes 33/images/gfx/icons/callouts/11.png | Bin 0 -> 565 bytes 33/images/gfx/icons/callouts/12.png | Bin 0 -> 617 bytes 33/images/gfx/icons/callouts/13.png | Bin 0 -> 623 bytes 33/images/gfx/icons/callouts/14.png | Bin 0 -> 411 bytes 33/images/gfx/icons/callouts/15.png | Bin 0 -> 640 bytes 33/images/gfx/icons/callouts/2.png | Bin 0 -> 353 bytes 33/images/gfx/icons/callouts/3.png | Bin 0 -> 350 bytes 33/images/gfx/icons/callouts/4.png | Bin 0 -> 345 bytes 33/images/gfx/icons/callouts/5.png | Bin 0 -> 348 bytes 33/images/gfx/icons/callouts/6.png | Bin 0 -> 355 bytes 33/images/gfx/icons/callouts/7.png | Bin 0 -> 344 bytes 33/images/gfx/icons/callouts/8.png | Bin 0 -> 357 bytes 33/images/gfx/icons/callouts/9.png | Bin 0 -> 357 bytes 33/images/gfx/icons/caution.png | Bin 0 -> 2734 bytes 33/images/gfx/icons/example.png | Bin 0 -> 2599 bytes 33/images/gfx/icons/home.png | Bin 0 -> 1340 bytes 33/images/gfx/icons/important.png | Bin 0 -> 2980 bytes 33/images/gfx/icons/next.png | Bin 0 -> 1302 bytes 33/images/gfx/icons/note.png | Bin 0 -> 2494 bytes 33/images/gfx/icons/prev.png | Bin 0 -> 1348 bytes 33/images/gfx/icons/tip.png | Bin 0 -> 2718 bytes 33/images/gfx/icons/up.png | Bin 0 -> 1320 bytes 33/images/gfx/icons/warning.png | Bin 0 -> 3214 bytes 33/images/gfx/new.png | Bin 0 -> 84732 bytes 33/images/groupmapping.png | Bin 0 -> 109126 bytes 33/images/includeall.png | Bin 0 -> 110267 bytes 33/images/jaxrs/2_2_HVGA_Final.png | Bin 0 -> 175340 bytes 33/images/jaxrs/2_2_HVGA_Initial.png | Bin 0 -> 58240 bytes 33/images/jaxrs/2_2_HVGA_Next.png | Bin 0 -> 64453 bytes 33/images/jaxrs/AndroidLibraries.png | Bin 0 -> 58921 bytes 33/images/jaxrs/CreateAVD_.png | Bin 0 -> 48637 bytes 33/images/jaxrs/HostSettings.png | Bin 0 -> 78255 bytes .../jaxrs/ImportExistingMavenProject.png | Bin 0 -> 41663 bytes 33/images/jaxrs/ListOfBooks.png | Bin 0 -> 75222 bytes 33/images/jaxrs/NewAndroidProject.png | Bin 0 -> 62958 bytes 33/images/jaxrs/NoBooks.png | Bin 0 -> 70691 bytes 33/images/jaxrs/ProjectExplorerA.png | Bin 0 -> 8879 bytes 33/images/jaxrs/ProjectExplorerB.png | Bin 0 -> 37043 bytes 33/images/jaxrs/RunConfiguration.png | Bin 0 -> 67414 bytes ...222f3059e387df96ce04d2aea156c82af15096.jpg | Bin 0 -> 93452 bytes ...3d1cb5794fb54a2465da93648b5a0d1a6643f3.jpg | Bin 0 -> 56509 bytes ...96ebbbf2b29e694e300e02a48d0fa4207cb746.jpg | Bin 0 -> 29197 bytes ...31420c938f087030cb3dcd37237b5585beb154.jpg | Bin 0 -> 128405 bytes 33/images/jsf/2._java.jpg | Bin 0 -> 102077 bytes ...99d43c0dce2cab72ba472c8452a2b57999ac84.jpg | Bin 0 -> 169022 bytes ...192d02993248c97e2ac42ea8f3105d855e5cdf.jpg | Bin 0 -> 127477 bytes ...bbef45137c7d45ae300ba8d551423d1feefc96.png | Bin 0 -> 389572 bytes ...9484b8f6f2c655d94132e9cb6f9dbe5a058656.jpg | Bin 0 -> 25081 bytes ...3ee36eb581930822c4a66362795345f5d2f9a7.jpg | Bin 0 -> 60092 bytes ...369d67f9117c924213de24dd6642b48e47a436.png | Bin 0 -> 337516 bytes ...d5d0216d3326e9bc29705042db59f11c3c1e70.png | Bin 0 -> 136050 bytes ...a6987d1635c2c58d3ccdb1f5718f29d6a0fac3.png | Bin 0 -> 63555 bytes ...02fb7e29283d0e064a7cc4466b918995ba5645.jpg | Bin 0 -> 89493 bytes ...2296be1bb2d8a81952caef0f025a139a39b381.jpg | Bin 0 -> 18887 bytes ...03da6b6323e515a03a04cafe111aa7c6b3169d.jpg | Bin 0 -> 66867 bytes ...08c4f111aab2c3465472eb84cf1d9b7cf912d0.jpg | Bin 0 -> 17813 bytes ...27bbe0e83cb7170dd84767631c98956e91c42c.jpg | Bin 0 -> 13888 bytes ...8d0051f4f15033f17cb859c65f2d8481914678.jpg | Bin 0 -> 158893 bytes ...e40cd0b1545cff4622857d6dc9959f96faf056.jpg | Bin 0 -> 67166 bytes ...d781c6be9db755aef80a110f1d9b29590610d6.jpg | Bin 0 -> 42133 bytes ...88c572bad281146f405e9287f645a3da201885.jpg | Bin 0 -> 64097 bytes ...6b7d32e04aa67956bd00a187f09b75a5af241e.jpg | Bin 0 -> 104926 bytes ...323caf6980c40c3d635db5e308b03847618d06.jpg | Bin 0 -> 52412 bytes ...8a0cdbc8c90db3db8af998f34616f73c7fe809.jpg | Bin 0 -> 76811 bytes ...e6ab58230b2d31fdcd8fd5f14cd4eb47b05f64.jpg | Bin 0 -> 110369 bytes ...0550785aae11f9d3eb439fdc0c51069affd25d.jpg | Bin 0 -> 63368 bytes ...947b84a56a698ca1392a440081bddfb5cae284.jpg | Bin 0 -> 154365 bytes ...ac5cb1a836809ab29513346b527fe051b7c7ac.png | Bin 0 -> 307313 bytes ...b29ac8009f04fc7f209222ced0bcf54f4b8d9a.jpg | Bin 0 -> 64437 bytes 33/images/no-users.png | Bin 0 -> 145871 bytes 33/images/runasrole.png | Bin 0 -> 45198 bytes 33/images/scopedroles.png | Bin 0 -> 314181 bytes 33/images/splash_wildflylogo_small.png | Bin 0 -> 27578 bytes 33/images/update-app-user-interactive.png | Bin 0 -> 273213 bytes 33/images/update-mgmt-user-interactive.png | Bin 0 -> 198973 bytes 33/images/usermapping.png | Bin 0 -> 106415 bytes 33/images/wildfly.png | Bin 0 -> 137525 bytes 33/index.html | 680 + .../capability-registry/index.html | 41 + .../access/audit/file-handler/index.html | 1 + .../access/audit/in-memory-handler/index.html | 1 + .../management/access/audit/index.html | 1 + .../access/audit/json-formatter/index.html | 1 + .../audit/logger/audit-log/handler/index.html | 1 + .../access/audit/logger/audit-log/index.html | 1 + .../periodic-rotating-file-handler/index.html | 1 + .../size-rotating-file-handler/index.html | 1 + .../access/audit/syslog-handler/index.html | 1 + .../syslog-handler/protocol/tcp/index.html | 1 + .../client-certificate-store/index.html | 1 + .../tls/authentication/truststore/index.html | 1 + .../syslog-handler/protocol/tls/index.html | 1 + .../syslog-handler/protocol/udp/index.html | 1 + .../application-classification/index.html | 1 + .../type/classification/applies-to/index.html | 1 + .../type/classification/index.html | 1 + .../type/index.html | 1 + .../sensitivity-classification/index.html | 1 + .../type/classification/applies-to/index.html | 1 + .../type/classification/index.html | 1 + .../type/index.html | 1 + .../constraint/vault-expression/index.html | 1 + .../access/authorization/index.html | 1 + .../role-mapping/exclude/index.html | 1 + .../role-mapping/include/index.html | 1 + .../authorization/role-mapping/index.html | 1 + .../management/access/identity/index.html | 1 + .../core-service/management/index.html | 97 + .../http-interface/index.html | 1 + .../native-interface/index.html | 1 + .../native-remoting-interface/index.html | 1 + .../service/configuration-changes/index.html | 1 + .../active-operation/index.html | 1 + .../service/management-operations/index.html | 1 + .../core-service/module-loading/index.html | 146 + .../core-service/platform-mbean/index.html | 1 + .../type/buffer-pool/index.html | 1 + .../type/buffer-pool/name/index.html | 1 + .../type/class-loading/index.html | 1 + .../type/compilation/index.html | 1 + .../type/garbage-collector/index.html | 1 + .../type/garbage-collector/name/index.html | 1 + .../type/memory-manager/index.html | 1 + .../type/memory-manager/name/index.html | 1 + .../type/memory-pool/index.html | 1 + .../type/memory-pool/name/index.html | 1 + .../platform-mbean/type/memory/index.html | 1 + .../type/operating-system/index.html | 1 + .../platform-mbean/type/runtime/index.html | 1 + .../platform-mbean/type/threading/index.html | 904 + .../server-environment/index.html | 234 + .../core-service/service-container/index.html | 1 + 33/wildscribe/css/main.css | 71 + .../deployment-overlay/content/index.html | 1 + .../deployment-overlay/deployment/index.html | 1 + 33/wildscribe/deployment-overlay/index.html | 1 + 33/wildscribe/deployment/index.html | 29 + .../deployment/subdeployment/index.html | 1 + .../subsystem/batch-jberet/index.html | 1 + .../batch-jberet/job/execution/index.html | 1 + .../subsystem/batch-jberet/job/index.html | 1 + .../connection-properties/index.html | 1 + .../datasources/data-source/index.html | 1 + .../subsystem/datasources/index.html | 1 + .../datasources/xa-data-source/index.html | 1 + .../xa-datasource-properties/index.html | 1 + .../subdeployment/subsystem/ejb3/index.html | 1 + .../ejb3/message-driven-bean/index.html | 1 + .../service/timer-service/index.html | 1 + .../service/timer-service/timer/index.html | 1 + .../subsystem/ejb3/singleton-bean/index.html | 1 + .../service/timer-service/index.html | 1 + .../service/timer-service/timer/index.html | 1 + .../ejb3/stateful-session-bean/index.html | 1 + .../ejb3/stateless-session-bean/index.html | 1 + .../service/timer-service/index.html | 1 + .../service/timer-service/timer/index.html | 1 + .../subdeployment/subsystem/jaxrs/index.html | 41 + .../subsystem/jaxrs/rest-resource/index.html | 1 + .../subdeployment/subsystem/jpa/index.html | 1 + .../configuration/error-manager/index.html | 1 + .../logging/configuration/filter/index.html | 1 + .../configuration/formatter/index.html | 1 + .../logging/configuration/handler/index.html | 1 + .../logging/configuration/index.html | 1 + .../logging/configuration/logger/index.html | 1 + .../logging/configuration/pojo/index.html | 1 + .../subsystem/logging/index.html | 1 + .../connection-factory/index.html | 1 + .../external-jms-queue/index.html | 1 + .../external-jms-topic/index.html | 1 + .../subsystem/messaging-activemq/index.html | 1 + .../pooled-connection-factory/index.html | 1 + .../messaging-activemq/server/index.html | 1 + .../server/jms-queue/index.html | 176 + .../server/jms-topic/index.html | 421 + .../pooled-connection-factory/index.html | 1 + .../subsystem/resource-adapters/index.html | 1 + .../ironjacamar/ironjacamar/index.html | 1 + .../config-properties/index.html | 1 + .../resource-adapter/admin-objects/index.html | 1 + .../config-properties/index.html | 1 + .../config-properties/index.html | 1 + .../connection-definitions/index.html | 1 + .../ironjacamar/resource-adapter/index.html | 1 + .../subsystem/undertow/index.html | 1 + .../subsystem/undertow/servlet/index.html | 1 + .../subsystem/undertow/websocket/index.html | 1 + .../subsystem/webservices/endpoint/index.html | 1 + .../subsystem/webservices/index.html | 1 + .../subsystem/batch-jberet/index.html | 1 + .../batch-jberet/job/execution/index.html | 1 + .../subsystem/batch-jberet/job/index.html | 1 + .../connection-properties/index.html | 1 + .../datasources/data-source/index.html | 1 + .../subsystem/datasources/index.html | 1 + .../datasources/xa-data-source/index.html | 1 + .../xa-datasource-properties/index.html | 1 + .../deployment/subsystem/ejb3/index.html | 1 + .../ejb3/message-driven-bean/index.html | 1 + .../service/timer-service/index.html | 1 + .../service/timer-service/timer/index.html | 1 + .../subsystem/ejb3/singleton-bean/index.html | 1 + .../service/timer-service/index.html | 1 + .../service/timer-service/timer/index.html | 1 + .../ejb3/stateful-session-bean/index.html | 1 + .../ejb3/stateless-session-bean/index.html | 1 + .../service/timer-service/index.html | 1 + .../service/timer-service/timer/index.html | 1 + .../deployment/subsystem/jaxrs/index.html | 41 + .../subsystem/jaxrs/rest-resource/index.html | 1 + .../deployment/subsystem/jpa/index.html | 1 + .../configuration/error-manager/index.html | 1 + .../logging/configuration/filter/index.html | 1 + .../configuration/formatter/index.html | 1 + .../logging/configuration/handler/index.html | 1 + .../logging/configuration/index.html | 1 + .../logging/configuration/logger/index.html | 1 + .../logging/configuration/pojo/index.html | 1 + .../deployment/subsystem/logging/index.html | 1 + .../connection-factory/index.html | 1 + .../external-jms-queue/index.html | 1 + .../external-jms-topic/index.html | 1 + .../subsystem/messaging-activemq/index.html | 1 + .../pooled-connection-factory/index.html | 1 + .../messaging-activemq/server/index.html | 1 + .../server/jms-queue/index.html | 176 + .../server/jms-topic/index.html | 421 + .../pooled-connection-factory/index.html | 1 + .../subsystem/resource-adapters/index.html | 1 + .../ironjacamar/ironjacamar/index.html | 1 + .../config-properties/index.html | 1 + .../resource-adapter/admin-objects/index.html | 1 + .../config-properties/index.html | 1 + .../config-properties/index.html | 1 + .../connection-definitions/index.html | 1 + .../ironjacamar/resource-adapter/index.html | 1 + .../deployment/subsystem/undertow/index.html | 1 + .../subsystem/undertow/servlet/index.html | 1 + .../subsystem/undertow/websocket/index.html | 1 + .../subsystem/webservices/endpoint/index.html | 1 + .../subsystem/webservices/index.html | 1 + 33/wildscribe/extension/index.html | 1 + 33/wildscribe/extension/subsystem/index.html | 1 + 33/wildscribe/favicon.ico | Bin 0 -> 323 bytes 33/wildscribe/index.html | 257 + 33/wildscribe/interface/index.html | 1 + 33/wildscribe/js/main.js | 17 + .../js/vendor/ie10-viewport-bug-workaround.js | 24 + 33/wildscribe/log-message-reference.html | 1 + 33/wildscribe/path/index.html | 50 + 33/wildscribe/socket-binding-group/index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../socket-binding/index.html | 1 + .../in-memory-job-repository/index.html | 1 + .../subsystem/batch-jberet/index.html | 1 + .../jdbc-job-repository/index.html | 1 + .../batch-jberet/thread-factory/index.html | 1 + .../batch-jberet/thread-pool/index.html | 1 + .../subsystem/bean-validation/index.html | 1 + .../subsystem/core-management/index.html | 1 + .../process-state-listener/index.html | 1 + .../service/configuration-changes/index.html | 1 + .../unstable-api-annotations/index.html | 1 + .../datasources-agroal/datasource/index.html | 1 + .../datasources-agroal/driver/index.html | 1 + .../subsystem/datasources-agroal/index.html | 1 + .../xa-datasource/index.html | 1 + .../connection-properties/index.html | 1 + .../data-source/ExampleDS/index.html | 1 + .../ExampleDS/statistics/jdbc/index.html | 1 + .../ExampleDS/statistics/pool/index.html | 1 + .../subsystem/datasources/index.html | 257 + .../datasources/jdbc-driver/index.html | 1 + .../datasources/xa-data-source/index.html | 1 + .../xa-datasource-properties/index.html | 1 + .../subsystem/deployment-scanner/index.html | 1 + .../deployment-scanner/scanner/index.html | 50 + .../discovery/aggregate-provider/index.html | 1 + 33/wildscribe/subsystem/discovery/index.html | 1 + .../discovery/static-provider/index.html | 1 + .../infinispan/index.html | 1 + .../client-mappings-registry/local/index.html | 1 + .../subsystem/distributable-ejb/index.html | 1 + .../infinispan-bean-management/index.html | 1 + .../infinispan-timer-management/index.html | 1 + .../affinity/local/index.html | 1 + .../affinity/none/index.html | 1 + .../hotrod-session-management/index.html | 1 + .../index.html | 1 + .../subsystem/distributable-web/index.html | 1 + .../affinity/local/index.html | 1 + .../affinity/none/index.html | 1 + .../affinity/primary-owner/index.html | 1 + .../affinity/ranked/index.html | 1 + .../infinispan-session-management/index.html | 1 + .../index.html | 1 + .../routing/infinispan/index.html | 1 + .../routing/local/index.html | 1 + .../subsystem/ee-security/index.html | 1 + .../subsystem/ee/context-service/index.html | 1 + .../subsystem/ee/global-directory/index.html | 1 + 33/wildscribe/subsystem/ee/index.html | 1 + .../ee/managed-executor-service/index.html | 1 + .../index.html | 1 + .../ee/managed-thread-factory/index.html | 1 + .../ee/service/default-bindings/index.html | 1 + .../application-security-domain/index.html | 1 + 33/wildscribe/subsystem/ejb3/cache/index.html | 1 + .../ejb3/cluster-passivation-store/index.html | 1 + .../ejb3/distributable-cache/index.html | 1 + .../ejb3/file-passivation-store/index.html | 1 + 33/wildscribe/subsystem/ejb3/index.html | 1 + .../ejb3/mdb-delivery-group/index.html | 1 + .../ejb3/passivation-store/index.html | 1 + .../ejb3/remoting-profile/index.html | 1 + .../remote-http-connection/index.html | 1 + .../channel-creation-options/index.html | 1 + .../remoting-ejb-receiver/index.html | 1 + .../subsystem/ejb3/service/async/index.html | 1 + .../ejb3/service/identity/index.html | 1 + .../subsystem/ejb3/service/iiop/index.html | 1 + .../channel-creation-options/index.html | 1 + .../subsystem/ejb3/service/remote/index.html | 1 + .../database-data-store/index.html | 1 + .../timer-service/file-data-store/index.html | 1 + .../ejb3/service/timer-service/index.html | 1 + .../subsystem/ejb3/simple-cache/index.html | 1 + .../strict-max-bean-instance-pool/index.html | 1 + .../subsystem/ejb3/thread-pool/index.html | 1 + .../subsystem/elytron-oidc-client/index.html | 1 + .../elytron-oidc-client/provider/index.html | 1 + .../elytron-oidc-client/realm/index.html | 1 + .../secure-deployment/credential/index.html | 1 + .../secure-deployment/index.html | 1 + .../redirect-rewrite-rule/index.html | 1 + .../secure-server/credential/index.html | 1 + .../secure-server/index.html | 1 + .../redirect-rewrite-rule/index.html | 1 + .../elytron/add-prefix-role-mapper/index.html | 1 + .../elytron/add-suffix-role-mapper/index.html | 1 + .../aggregate-evidence-decoder/index.html | 1 + .../index.html | 1 + .../aggregate-principal-decoder/index.html | 1 + .../index.html | 1 + .../elytron/aggregate-providers/index.html | 1 + .../elytron/aggregate-realm/index.html | 1 + .../elytron/aggregate-role-decoder/index.html | 1 + .../elytron/aggregate-role-mapper/index.html | 1 + .../aggregate-sasl-server-factory/index.html | 1 + .../index.html | 1 + .../authentication-configuration/index.html | 1 + .../elytron/authentication-context/index.html | 1 + .../elytron/caching-realm/index.html | 1 + .../case-principal-transformer/index.html | 1 + .../certificate-authority-account/index.html | 1 + .../elytron/certificate-authority/index.html | 1 + .../chained-principal-transformer/index.html | 1 + .../elytron/client-ssl-context/index.html | 1 + .../client-ssl-context/ssl-session/index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../constant-permission-mapper/index.html | 1 + .../constant-principal-decoder/index.html | 1 + .../constant-principal-transformer/index.html | 1 + .../elytron/constant-realm-mapper/index.html | 1 + .../elytron/constant-role-mapper/index.html | 1 + .../elytron/credential-store/index.html | 1 + .../index.html | 1 + .../custom-evidence-decoder/index.html | 1 + .../custom-modifiable-realm/index.html | 1 + .../custom-permission-mapper/index.html | 1 + .../custom-principal-decoder/index.html | 1 + .../custom-principal-transformer/index.html | 1 + .../elytron/custom-realm-mapper/index.html | 1 + .../subsystem/elytron/custom-realm/index.html | 1 + .../elytron/custom-role-decoder/index.html | 1 + .../elytron/custom-role-mapper/index.html | 1 + .../custom-security-event-listener/index.html | 1 + .../subsystem/elytron/dir-context/index.html | 1 + .../elytron/distributed-realm/index.html | 1 + .../dynamic-client-ssl-context/index.html | 1 + .../elytron/expression/encryption/index.html | 1 + .../elytron/failover-realm/index.html | 1 + .../elytron/file-audit-log/index.html | 1 + .../elytron/filesystem-realm/index.html | 1 + .../elytron/filtering-key-store/index.html | 1 + .../http-authentication-factory/index.html | 1 + .../elytron/identity-realm/index.html | 1 + 33/wildscribe/subsystem/elytron/index.html | 1 + .../subsystem/elytron/jaas-realm/index.html | 1 + .../elytron/jaspi-configuration/index.html | 1 + .../subsystem/elytron/jdbc-realm/index.html | 1 + .../kerberos-security-factory/index.html | 1 + .../subsystem/elytron/key-manager/index.html | 1 + .../elytron/key-store-realm/index.html | 1 + .../subsystem/elytron/key-store/index.html | 1 + .../elytron/ldap-key-store/index.html | 1 + .../subsystem/elytron/ldap-realm/index.html | 1 + .../logical-permission-mapper/index.html | 1 + .../elytron/logical-role-mapper/index.html | 1 + .../mapped-regex-realm-mapper/index.html | 1 + .../elytron/mapped-role-mapper/index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../elytron/permission-set/index.html | 1 + .../subsystem/elytron/policy/index.html | 1 + .../elytron/properties-realm/index.html | 1 + .../index.html | 1 + .../elytron/provider-loader/index.html | 1 + .../provider-sasl-server-factory/index.html | 1 + .../regex-principal-transformer/index.html | 1 + .../elytron/regex-role-mapper/index.html | 1 + .../index.html | 1 + .../sasl-authentication-factory/index.html | 1 + .../secret-key-credential-store/index.html | 1 + .../elytron/security-domain/index.html | 1 + .../elytron/server-ssl-context/index.html | 1 + .../server-ssl-context/ssl-session/index.html | 1 + .../elytron/server-ssl-sni-context/index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../simple-permission-mapper/index.html | 1 + .../simple-regex-realm-mapper/index.html | 1 + .../elytron/simple-role-decoder/index.html | 1 + .../size-rotating-file-audit-log/index.html | 1 + .../source-address-role-decoder/index.html | 1 + .../elytron/syslog-audit-log/index.html | 1 + .../subsystem/elytron/token-realm/index.html | 1 + .../elytron/trust-manager/index.html | 1 + .../virtual-security-domain/index.html | 1 + .../index.html | 1 + .../x500-subject-evidence-decoder/index.html | 1 + .../index.html | 1 + 33/wildscribe/subsystem/health/index.html | 1 + .../subsystem/iiop-openjdk/index.html | 1 + .../cache/component/locking/index.html | 1 + .../component/partition-handling/index.html | 1 + .../cache/component/persistence/index.html | 1 + .../cache/component/transaction/index.html | 1 + .../cache-container/cache/index.html | 1 + .../component/backups/backup/index.html | 1 + .../component/backups/index.html | 1 + .../component/expiration/index.html | 1 + .../component/locking/index.html | 1 + .../component/partition-handling/index.html | 1 + .../component/state-transfer/index.html | 1 + .../component/transaction/index.html | 1 + .../distributed-cache/index.html | 1 + .../distributed-cache/memory/heap/index.html | 1 + .../memory/off-heap/index.html | 1 + .../distributed-cache/store/custom/index.html | 1 + .../store/custom/write/behind/index.html | 1 + .../store/custom/write/through/index.html | 1 + .../distributed-cache/store/file/index.html | 1 + .../store/file/write/behind/index.html | 1 + .../store/file/write/through/index.html | 1 + .../distributed-cache/store/hotrod/index.html | 1 + .../store/hotrod/write/behind/index.html | 1 + .../store/hotrod/write/through/index.html | 1 + .../distributed-cache/store/jdbc/index.html | 1 + .../store/jdbc/table/string/index.html | 1 + .../store/jdbc/write/behind/index.html | 1 + .../store/jdbc/write/through/index.html | 1 + .../distributed-cache/store/none/index.html | 1 + .../distributed-cache/store/remote/index.html | 1 + .../store/remote/write/behind/index.html | 1 + .../store/remote/write/through/index.html | 1 + .../infinispan/cache-container/index.html | 1 + .../component/expiration/index.html | 1 + .../component/locking/index.html | 1 + .../component/transaction/index.html | 1 + .../invalidation-cache/index.html | 1 + .../invalidation-cache/memory/heap/index.html | 1 + .../memory/off-heap/index.html | 1 + .../store/custom/index.html | 1 + .../store/custom/write/behind/index.html | 1 + .../store/custom/write/through/index.html | 1 + .../invalidation-cache/store/file/index.html | 1 + .../store/file/write/behind/index.html | 1 + .../store/file/write/through/index.html | 1 + .../store/hotrod/index.html | 1 + .../store/hotrod/write/behind/index.html | 1 + .../store/hotrod/write/through/index.html | 1 + .../invalidation-cache/store/jdbc/index.html | 1 + .../store/jdbc/table/string/index.html | 1 + .../store/jdbc/write/behind/index.html | 1 + .../store/jdbc/write/through/index.html | 1 + .../invalidation-cache/store/none/index.html | 1 + .../store/remote/index.html | 1 + .../store/remote/write/behind/index.html | 1 + .../store/remote/write/through/index.html | 1 + .../component/expiration/index.html | 1 + .../local-cache/component/locking/index.html | 1 + .../component/transaction/index.html | 1 + .../cache-container/local-cache/index.html | 1 + .../local-cache/memory/heap/index.html | 1 + .../local-cache/memory/off-heap/index.html | 1 + .../local-cache/store/custom/index.html | 1 + .../store/custom/write/behind/index.html | 1 + .../store/custom/write/through/index.html | 1 + .../local-cache/store/file/index.html | 1 + .../store/file/write/behind/index.html | 1 + .../store/file/write/through/index.html | 1 + .../local-cache/store/hotrod/index.html | 1 + .../store/hotrod/write/behind/index.html | 1 + .../store/hotrod/write/through/index.html | 1 + .../local-cache/store/jdbc/index.html | 1 + .../store/jdbc/table/string/index.html | 1 + .../store/jdbc/write/behind/index.html | 1 + .../store/jdbc/write/through/index.html | 1 + .../local-cache/store/none/index.html | 1 + .../local-cache/store/remote/index.html | 1 + .../store/remote/write/behind/index.html | 1 + .../store/remote/write/through/index.html | 1 + .../component/backups/backup/index.html | 1 + .../component/backups/index.html | 1 + .../component/expiration/index.html | 1 + .../component/locking/index.html | 1 + .../component/partition-handling/index.html | 1 + .../component/state-transfer/index.html | 1 + .../component/transaction/index.html | 1 + .../replicated-cache/index.html | 1 + .../replicated-cache/memory/heap/index.html | 1 + .../memory/off-heap/index.html | 1 + .../replicated-cache/store/custom/index.html | 1 + .../store/custom/write/behind/index.html | 1 + .../store/custom/write/through/index.html | 1 + .../replicated-cache/store/file/index.html | 1 + .../store/file/write/behind/index.html | 1 + .../store/file/write/through/index.html | 1 + .../replicated-cache/store/hotrod/index.html | 1 + .../store/hotrod/write/behind/index.html | 1 + .../store/hotrod/write/through/index.html | 1 + .../replicated-cache/store/jdbc/index.html | 1 + .../store/jdbc/table/string/index.html | 1 + .../store/jdbc/write/behind/index.html | 1 + .../store/jdbc/write/through/index.html | 1 + .../replicated-cache/store/none/index.html | 1 + .../replicated-cache/store/remote/index.html | 1 + .../store/remote/write/behind/index.html | 1 + .../store/remote/write/through/index.html | 1 + .../component/backups/backup/index.html | 1 + .../component/backups/index.html | 1 + .../component/expiration/index.html | 1 + .../component/locking/index.html | 1 + .../component/partition-handling/index.html | 1 + .../component/state-transfer/index.html | 1 + .../component/transaction/index.html | 1 + .../scattered-cache/index.html | 1 + .../scattered-cache/memory/heap/index.html | 1 + .../memory/off-heap/index.html | 1 + .../scattered-cache/store/custom/index.html | 1 + .../store/custom/write/behind/index.html | 1 + .../store/custom/write/through/index.html | 1 + .../scattered-cache/store/file/index.html | 1 + .../store/file/write/behind/index.html | 1 + .../store/file/write/through/index.html | 1 + .../scattered-cache/store/hotrod/index.html | 1 + .../store/hotrod/write/behind/index.html | 1 + .../store/hotrod/write/through/index.html | 1 + .../scattered-cache/store/jdbc/index.html | 1 + .../store/jdbc/table/string/index.html | 1 + .../store/jdbc/write/behind/index.html | 1 + .../store/jdbc/write/through/index.html | 1 + .../scattered-cache/store/none/index.html | 1 + .../scattered-cache/store/remote/index.html | 1 + .../store/remote/write/behind/index.html | 1 + .../store/remote/write/through/index.html | 1 + .../thread-pool/blocking/index.html | 1 + .../thread-pool/expiration/index.html | 1 + .../thread-pool/listener/index.html | 1 + .../thread-pool/non-blocking/index.html | 1 + .../transport/jgroups/index.html | 1 + .../cache-container/transport/none/index.html | 1 + 33/wildscribe/subsystem/infinispan/index.html | 1 + .../component/connection-pool/index.html | 1 + .../component/security/index.html | 1 + .../remote-cache-container/index.html | 1 + .../remote-cache/index.html | 1 + .../remote-cluster/index.html | 1 + .../thread-pool/async/index.html | 1 + .../subsystem/io/buffer-pool/index.html | 1 + 33/wildscribe/subsystem/io/index.html | 1 + 33/wildscribe/subsystem/io/worker/index.html | 1 + .../worker/outbound-bind-address/index.html | 1 + .../subsystem/io/worker/server/index.html | 1 + 33/wildscribe/subsystem/jaxrs/index.html | 1 + .../archive-validation/index.html | 1 + .../bean-validation/index.html | 1 + .../jca/bootstrap-context/index.html | 1 + .../cached-connection-manager/index.html | 1 + .../jca/distributed-workmanager/index.html | 1 + .../long-running-threads/index.html | 1 + .../short-running-threads/index.html | 1 + 33/wildscribe/subsystem/jca/index.html | 1 + .../subsystem/jca/tracer/tracer/index.html | 1 + .../jca/workmanager/default/index.html | 1 + .../default/long-running-threads/index.html | 1 + .../default/short-running-threads/index.html | 1 + .../default/statistics/local/index.html | 1 + 33/wildscribe/subsystem/jdr/index.html | 28 + .../jgroups/channel/ee/fork/index.html | 1 + .../ee/fork/protocol/ASYM_ENCRYPT/index.html | 1 + .../channel/ee/fork/protocol/AUTH/index.html | 1 + .../protocol/AUTH/token/cipher/index.html | 1 + .../protocol/AUTH/token/digest/index.html | 1 + .../fork/protocol/AUTH/token/plain/index.html | 1 + .../channel/ee/fork/protocol/FD/index.html | 1 + .../ee/fork/protocol/FD_SOCK/index.html | 1 + .../ee/fork/protocol/FD_SOCK2/index.html | 1 + .../ee/fork/protocol/JDBC_PING/index.html | 1 + .../channel/ee/fork/protocol/MPING/index.html | 1 + .../ee/fork/protocol/SYM_ENCRYPT/index.html | 1 + .../ee/fork/protocol/TCPGOSSIP/index.html | 1 + .../ee/fork/protocol/TCPPING/index.html | 1 + .../index.html | 1 + .../org.jgroups.protocols.AUTH/index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../org.jgroups.protocols.TCPPING/index.html | 1 + .../subsystem/jgroups/channel/ee/index.html | 1 + .../channel/ee/protocol/FD_ALL3/index.html | 1 + .../channel/ee/protocol/FD_SOCK2/index.html | 1 + .../channel/ee/protocol/FRAG4/index.html | 1 + .../channel/ee/protocol/MERGE3/index.html | 1 + .../channel/ee/protocol/MFC/index.html | 1 + .../channel/ee/protocol/PING/index.html | 1 + .../channel/ee/protocol/RED/index.html | 1 + .../channel/ee/protocol/UDP/index.html | 1 + .../channel/ee/protocol/UFC/index.html | 1 + .../channel/ee/protocol/UNICAST3/index.html | 1 + .../ee/protocol/VERIFY_SUSPECT2/index.html | 1 + .../channel/ee/protocol/pbcast.GMS/index.html | 1 + .../ee/protocol/pbcast.NAKACK2/index.html | 1 + .../ee/protocol/pbcast.STABLE/index.html | 1 + 33/wildscribe/subsystem/jgroups/index.html | 1 + .../subsystem/jgroups/stack/index.html | 1 + .../stack/protocol/ASYM_ENCRYPT/index.html | 1 + .../jgroups/stack/protocol/AUTH/index.html | 1 + .../protocol/AUTH/token/cipher/index.html | 1 + .../protocol/AUTH/token/digest/index.html | 1 + .../protocol/AUTH/token/plain/index.html | 1 + .../jgroups/stack/protocol/FD/index.html | 1 + .../jgroups/stack/protocol/FD_SOCK/index.html | 1 + .../stack/protocol/FD_SOCK2/index.html | 1 + .../stack/protocol/JDBC_PING/index.html | 1 + .../jgroups/stack/protocol/MPING/index.html | 1 + .../stack/protocol/SYM_ENCRYPT/index.html | 1 + .../stack/protocol/TCPGOSSIP/index.html | 1 + .../jgroups/stack/protocol/TCPPING/index.html | 1 + .../index.html | 1 + .../org.jgroups.protocols.AUTH/index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../org.jgroups.protocols.TCPPING/index.html | 1 + .../stack/relay/relay.RELAY2/index.html | 1 + .../relay/relay.RELAY2/remote-site/index.html | 1 + .../jgroups/stack/transport/TCP/index.html | 1 + .../TCP/thread-pool/default/index.html | 1 + .../stack/transport/TCP_NIO2/index.html | 1 + .../TCP_NIO2/thread-pool/default/index.html | 1 + .../jgroups/stack/transport/UDP/index.html | 1 + .../UDP/thread-pool/default/index.html | 1 + .../audit-log/handler/index.html | 1 + .../jmx/configuration/audit-log/index.html | 1 + .../jmx/expose-model/expression/index.html | 1 + .../jmx/expose-model/resolved/index.html | 1 + 33/wildscribe/subsystem/jmx/index.html | 1 + .../jmx/remoting-connector/jmx/index.html | 1 + 33/wildscribe/subsystem/jpa/index.html | 1 + 33/wildscribe/subsystem/jsf/index.html | 1 + .../logging/async-handler/index.html | 1 + .../logging/console-handler/index.html | 1 + .../logging/custom-formatter/index.html | 1 + .../logging/custom-handler/index.html | 1 + .../subsystem/logging/file-handler/index.html | 50 + .../subsystem/logging/filter/index.html | 1 + 33/wildscribe/subsystem/logging/index.html | 30 + .../logging/json-formatter/index.html | 1 + .../subsystem/logging/log-file/index.html | 1 + .../subsystem/logging/logger/index.html | 1 + .../logging-profile/async-handler/index.html | 1 + .../console-handler/index.html | 1 + .../custom-formatter/index.html | 1 + .../logging-profile/custom-handler/index.html | 1 + .../logging-profile/file-handler/index.html | 50 + .../logging/logging-profile/filter/index.html | 1 + .../logging/logging-profile/index.html | 1 + .../logging-profile/json-formatter/index.html | 1 + .../logging-profile/log-file/index.html | 1 + .../logging/logging-profile/logger/index.html | 1 + .../pattern-formatter/index.html | 1 + .../periodic-rotating-file-handler/index.html | 50 + .../index.html | 50 + .../root-logger/ROOT/index.html | 1 + .../size-rotating-file-handler/index.html | 1 + .../logging-profile/socket-handler/index.html | 1 + .../logging-profile/syslog-handler/index.html | 1 + .../logging-profile/xml-formatter/index.html | 1 + .../logging/pattern-formatter/index.html | 1 + .../periodic-rotating-file-handler/index.html | 50 + .../index.html | 50 + .../logging/root-logger/ROOT/index.html | 1 + .../size-rotating-file-handler/index.html | 1 + .../logging/socket-handler/index.html | 1 + .../logging/syslog-handler/index.html | 1 + .../logging/xml-formatter/index.html | 1 + 33/wildscribe/subsystem/mail/index.html | 1 + .../mail/mail-session/custom/index.html | 1 + .../subsystem/mail/mail-session/index.html | 1 + .../mail/mail-session/server/imap/index.html | 1 + .../mail/mail-session/server/pop3/index.html | 1 + .../mail/mail-session/server/smtp/index.html | 1 + .../connection-factory/index.html | 1 + .../messaging-activemq/connector/index.html | 1 + .../discovery-group/index.html | 1 + .../external-jms-queue/index.html | 1 + .../external-jms-topic/index.html | 1 + .../http-connector/index.html | 1 + .../in-vm-connector/index.html | 1 + .../subsystem/messaging-activemq/index.html | 1 + .../jgroups-discovery-group/index.html | 1 + .../messaging-activemq/jms-bridge/index.html | 1 + .../pooled-connection-factory/index.html | 1 + .../remote-connector/index.html | 1 + .../server/acceptor/index.html | 1 + .../server/address-setting/index.html | 1 + .../server/bridge/index.html | 1 + .../server/broadcast-group/index.html | 1 + .../server/cluster-connection/index.html | 1 + .../server/connection-factory/index.html | 1 + .../server/connector-service/index.html | 1 + .../server/connector/index.html | 1 + .../server/core-address/index.html | 1 + .../server/core-address/role/index.html | 1 + .../server/discovery-group/index.html | 1 + .../server/divert/index.html | 1 + .../server/grouping-handler/index.html | 1 + .../server/ha-policy/live-only/index.html | 1 + .../configuration/primary/index.html | 1 + .../configuration/secondary/index.html | 1 + .../replication-colocated/index.html | 1 + .../ha-policy/replication-primary/index.html | 1 + .../replication-secondary/index.html | 1 + .../configuration/primary/index.html | 1 + .../configuration/secondary/index.html | 1 + .../shared-store-colocated/index.html | 1 + .../ha-policy/shared-store-primary/index.html | 1 + .../shared-store-secondary/index.html | 1 + .../server/http-acceptor/index.html | 1 + .../server/http-connector/index.html | 1 + .../server/in-vm-acceptor/index.html | 1 + .../server/in-vm-connector/index.html | 1 + .../messaging-activemq/server/index.html | 366 + .../server/jgroups-broadcast-group/index.html | 1 + .../server/jgroups-discovery-group/index.html | 1 + .../server/jms-queue/index.html | 176 + .../server/jms-topic/index.html | 421 + .../legacy-connection-factory/index.html | 1 + .../server/path/bindings-directory/index.html | 1 + .../server/path/journal-directory/index.html | 1 + .../path/large-messages-directory/index.html | 1 + .../server/path/paging-directory/index.html | 1 + .../pooled-connection-factory/index.html | 1 + .../server/queue/index.html | 242 + .../server/remote-acceptor/index.html | 1 + .../server/remote-connector/index.html | 1 + .../server/runtime-queue/index.html | 242 + .../server/security-setting/index.html | 1 + .../server/security-setting/role/index.html | 1 + .../server/socket-broadcast-group/index.html | 1 + .../server/socket-discovery-group/index.html | 1 + .../socket-discovery-group/index.html | 1 + 33/wildscribe/subsystem/metrics/index.html | 1 + 33/wildscribe/subsystem/micrometer/index.html | 1 + .../config-source-provider/index.html | 1 + .../config-source/index.html | 1 + .../microprofile-config-smallrye/index.html | 1 + .../index.html | 1 + .../microprofile-jwt-smallrye/index.html | 1 + .../microprofile-openapi-smallrye/index.html | 1 + .../microprofile-telemetry/index.html | 1 + 33/wildscribe/subsystem/modcluster/index.html | 1 + .../subsystem/modcluster/proxy/index.html | 1 + .../dynamic/custom-load-metric/index.html | 1 + .../proxy/load-provider/dynamic/index.html | 1 + .../dynamic/load-metric/index.html | 1 + .../proxy/load-provider/simple/index.html | 1 + .../subsystem/naming/binding/index.html | 1 + 33/wildscribe/subsystem/naming/index.html | 1 + .../naming/service/remote-naming/index.html | 1 + .../subsystem/opentelemetry/index.html | 1 + 33/wildscribe/subsystem/pojo/index.html | 1 + .../subsystem/remoting/connector/index.html | 1 + .../remoting/connector/property/index.html | 1 + .../connector/security/sasl/index.html | 1 + .../security/sasl/property/index.html | 1 + .../sasl/sasl-policy/policy/index.html | 1 + .../remoting/http-connector/index.html | 1 + .../http-connector/property/index.html | 1 + .../http-connector/security/sasl/index.html | 1 + .../security/sasl/property/index.html | 1 + .../sasl/sasl-policy/policy/index.html | 1 + 33/wildscribe/subsystem/remoting/index.html | 1 + .../local-outbound-connection/index.html | 1 + .../property/index.html | 1 + .../remoting/outbound-connection/index.html | 1 + .../outbound-connection/property/index.html | 1 + .../remote-outbound-connection/index.html | 1 + .../property/index.html | 1 + .../subsystem/request-controller/index.html | 1 + .../subsystem/resource-adapters/index.html | 1 + .../config-properties/index.html | 1 + .../resource-adapter/admin-objects/index.html | 1 + .../config-properties/index.html | 1 + .../config-properties/index.html | 1 + .../connection-definitions/index.html | 1 + .../resource-adapter/index.html | 1 + 33/wildscribe/subsystem/rts/index.html | 1 + 33/wildscribe/subsystem/sar/index.html | 1 + .../deployment-permissions/default/index.html | 1 + .../subsystem/security-manager/index.html | 1 + 33/wildscribe/subsystem/singleton/index.html | 1 + .../singleton-policy/deployment/index.html | 1 + .../election-policy/random/index.html | 1 + .../election-policy/simple/index.html | 1 + .../singleton/singleton-policy/index.html | 1 + .../singleton-policy/service/index.html | 1 + .../commit-markable-resource/index.html | 1 + .../subsystem/transactions/index.html | 1 + .../log-store/log-store/index.html | 1 + .../log-store/transactions/index.html | 1 + .../transactions/participants/index.html | 1 + .../application-security-domain/index.html | 1 + .../setting/single-sign-on/index.html | 1 + .../undertow/buffer-cache/index.html | 1 + .../undertow/byte-buffer-pool/index.html | 1 + .../filter/custom-filter/index.html | 1 + .../filter/error-page/index.html | 1 + .../filter/expression-filter/index.html | 1 + .../configuration/filter/gzip/index.html | 1 + .../undertow/configuration/filter/index.html | 1 + .../mod-cluster/affinity/none/index.html | 1 + .../mod-cluster/affinity/ranked/index.html | 1 + .../mod-cluster/affinity/single/index.html | 1 + .../filter/mod-cluster/balancer/index.html | 1 + .../balancer/load-balancing-group/index.html | 1 + .../balancer/node/context/index.html | 1 + .../mod-cluster/balancer/node/index.html | 1 + .../filter/mod-cluster/index.html | 1 + .../filter/request-limit/index.html | 1 + .../filter/response-header/index.html | 1 + .../configuration/filter/rewrite/index.html | 1 + .../configuration/handler/file/index.html | 1 + .../undertow/configuration/handler/index.html | 1 + .../handler/reverse-proxy/host/index.html | 1 + .../handler/reverse-proxy/index.html | 1 + 33/wildscribe/subsystem/undertow/index.html | 1 + .../undertow/server/ajp-listener/index.html | 1 + .../server/host/filter-ref/index.html | 1 + .../subsystem/undertow/server/host/index.html | 1 + .../host/location/filter-ref/index.html | 1 + .../undertow/server/host/location/index.html | 1 + .../server/host/setting/access-log/index.html | 1 + .../setting/console-access-log/index.html | 1 + .../host/setting/http-invoker/index.html | 1 + .../host/setting/single-sign-on/index.html | 1 + .../undertow/server/http-listener/index.html | 1 + .../undertow/server/https-listener/index.html | 1 + .../subsystem/undertow/server/index.html | 1 + .../undertow/servlet-container/index.html | 1 + .../servlet-container/mime-mapping/index.html | 1 + .../setting/affinity-cookie/index.html | 1 + .../crawler-session-management/index.html | 1 + .../servlet-container/setting/jsp/index.html | 1 + .../setting/persistent-sessions/index.html | 1 + .../setting/session-cookie/index.html | 1 + .../setting/websockets/index.html | 1 + .../servlet-container/welcome-file/index.html | 1 + .../webservices/client-config/index.html | 1 + .../post-handler-chain/handler/index.html | 1 + .../post-handler-chain/index.html | 1 + .../pre-handler-chain/handler/index.html | 1 + .../pre-handler-chain/index.html | 1 + .../client-config/property/index.html | 1 + .../webservices/endpoint-config/index.html | 1 + .../post-handler-chain/handler/index.html | 1 + .../post-handler-chain/index.html | 1 + .../pre-handler-chain/handler/index.html | 1 + .../pre-handler-chain/index.html | 1 + .../endpoint-config/property/index.html | 1 + .../subsystem/webservices/index.html | 1 + 33/wildscribe/subsystem/weld/index.html | 1 + 33/wildscribe/subsystem/xts/index.html | 1 + 33/wildscribe/system-property/index.html | 1 + index.adoc | 5 +- index.html | 9 +- sitemap.xml | 38 +- 1000 files changed, 112347 insertions(+), 22 deletions(-) create mode 100644 33/Admin_Guide.html create mode 100644 33/Bootable_Guide.html create mode 100644 33/Client_Guide.html create mode 100644 33/Cloud_References.html create mode 100644 33/Developer_Guide.html create mode 100644 33/Extending_WildFly.html create mode 100644 33/Galleon_Guide.html create mode 100644 33/Getting_Started_Developing_Applications_Guide.html create mode 100644 33/Getting_Started_Guide.html create mode 100644 33/Getting_Started_on_OpenShift.html create mode 100644 33/Glossary.html create mode 100644 33/Hacking_On_WildFly.html create mode 100644 33/High_Availability_Guide.html create mode 100644 33/Installation_Guide.html create mode 100644 33/Migration_Guide.html create mode 100644 33/Quickstarts.html create mode 100644 33/Testsuite.html create mode 100644 33/WildFly_Elytron_Security.html create mode 100644 33/WildFly_and_WildFly_Preview.html create mode 100644 33/downloads/acme-subsystem.zip create mode 100644 33/downloads/test1.zip create mode 100644 33/downloads/test2.zip create mode 100644 33/images/250px-Public_key_making.svg.png create mode 100644 33/images/DC-HC-Server.png create mode 100644 33/images/Public_key_encryption-mod.svg.png create mode 100644 33/images/Public_key_making.png create mode 100644 33/images/add-app-user-interactive.png create mode 100644 33/images/add-app-user-non-interactive.png create mode 100644 33/images/add-mgmt-user-interactive.png create mode 100644 33/images/add-mgmt-user-non-interactive.png create mode 100644 33/images/add-user.png create mode 100644 33/images/addscopedrole.png create mode 100644 33/images/callersroles.png create mode 100644 33/images/clustering/Clustering.jpg create mode 100644 33/images/clustering/JBoss_Management.png create mode 100644 33/images/clustering/JBoss_Management_2.png create mode 100644 33/images/clustering/http---10.211.55.2-8330-cluster-demo-.png create mode 100644 33/images/clustering/http---10.211.55.7-8330-cluster-demo-.png create mode 100644 33/images/clustering/http---10.211.55.7-cluster-demo-get.jsp.png create mode 100644 33/images/clustering/http---10.211.55.7-cluster-demo-put.jsp.png create mode 100644 33/images/clustering/test_scenario.jpg create mode 100644 33/images/ejb/mdb-management-resource.png create mode 100644 33/images/ejb/singleton-management-resource.png create mode 100644 33/images/ejb/stateful-management-resource.png create mode 100644 33/images/ejb/stateless-management-resource.png create mode 100644 33/images/excludemapping.png create mode 100644 33/images/gfx/Activator.png create mode 100644 33/images/gfx/Eclipse_Deploy_2.jpg create mode 100644 33/images/gfx/Eclipse_Detect_Servers_1.png create mode 100644 33/images/gfx/Eclipse_Detect_Servers_2.png create mode 100644 33/images/gfx/Eclipse_Detect_Servers_3.png create mode 100644 33/images/gfx/Eclipse_Detect_Servers_4.png create mode 100644 33/images/gfx/Eclipse_Greeter_Deploy_1.png create mode 100644 33/images/gfx/Eclipse_Greeter_Deploy_3.png create mode 100644 33/images/gfx/Eclipse_Helloworld_Deploy_1.jpg create mode 100644 33/images/gfx/Eclipse_Helloworld_Deploy_3.jpg create mode 100644 33/images/gfx/Eclipse_JBoss_Central_1.png create mode 100644 33/images/gfx/Eclipse_JBoss_Central_2.png create mode 100644 33/images/gfx/Eclipse_JavaEEWebProject_1.png create mode 100644 33/images/gfx/Eclipse_JavaEEWebProject_2.png create mode 100644 33/images/gfx/Eclipse_JavaEEWebProject_3.png create mode 100644 33/images/gfx/Eclipse_JavaEEWebProject_4.png create mode 100644 33/images/gfx/Eclipse_KitchenSink_Deploy_1.jpg create mode 100644 33/images/gfx/Eclipse_KitchenSink_Deploy_3.jpg create mode 100644 33/images/gfx/Eclipse_Login_Deploy_1.jpg create mode 100644 33/images/gfx/Eclipse_Login_Deploy_3.jpg create mode 100644 33/images/gfx/Eclipse_New_Server_1.jpg create mode 100644 33/images/gfx/Eclipse_New_Server_2.jpg create mode 100644 33/images/gfx/Eclipse_New_Server_3.jpg create mode 100644 33/images/gfx/Eclipse_New_Server_4.jpg create mode 100644 33/images/gfx/Eclipse_New_Server_5.jpg create mode 100644 33/images/gfx/Eclipse_New_Server_6.jpg create mode 100644 33/images/gfx/Eclipse_Numberguess_Deploy_1.jpg create mode 100644 33/images/gfx/Eclipse_Numberguess_Deploy_3.jpg create mode 100644 33/images/gfx/Eclipse_Server_Start_1.jpg create mode 100644 33/images/gfx/Eclipse_Server_Start_2.jpg create mode 100644 33/images/gfx/Eclipse_Server_Tab_1.jpg create mode 100644 33/images/gfx/Eclipse_Server_Tab_2.jpg create mode 100644 33/images/gfx/Eclipse_Server_Tab_3.jpg create mode 100644 33/images/gfx/Export.png create mode 100644 33/images/gfx/Import_Quickstarts_1.jpg create mode 100644 33/images/gfx/Import_Quickstarts_2.jpg create mode 100644 33/images/gfx/Import_Quickstarts_3.jpg create mode 100644 33/images/gfx/Import_Quickstarts_4.jpg create mode 100644 33/images/gfx/Import_Quickstarts_5.jpg create mode 100644 33/images/gfx/Manifest.png create mode 100644 33/images/gfx/Template.png create mode 100644 33/images/gfx/console.png create mode 100644 33/images/gfx/eclipse_arquillian_0.png create mode 100644 33/images/gfx/eclipse_arquillian_1.png create mode 100644 33/images/gfx/eclipse_arquillian_11.png create mode 100644 33/images/gfx/eclipse_arquillian_12.png create mode 100644 33/images/gfx/eclipse_arquillian_2.png create mode 100644 33/images/gfx/eclipse_arquillian_3.png create mode 100644 33/images/gfx/eclipse_arquillian_4.png create mode 100644 33/images/gfx/icons/callouts/1.png create mode 100644 33/images/gfx/icons/callouts/10.png create mode 100644 33/images/gfx/icons/callouts/11.png create mode 100644 33/images/gfx/icons/callouts/12.png create mode 100644 33/images/gfx/icons/callouts/13.png create mode 100644 33/images/gfx/icons/callouts/14.png create mode 100644 33/images/gfx/icons/callouts/15.png create mode 100644 33/images/gfx/icons/callouts/2.png create mode 100644 33/images/gfx/icons/callouts/3.png create mode 100644 33/images/gfx/icons/callouts/4.png create mode 100644 33/images/gfx/icons/callouts/5.png create mode 100644 33/images/gfx/icons/callouts/6.png create mode 100644 33/images/gfx/icons/callouts/7.png create mode 100644 33/images/gfx/icons/callouts/8.png create mode 100644 33/images/gfx/icons/callouts/9.png create mode 100644 33/images/gfx/icons/caution.png create mode 100644 33/images/gfx/icons/example.png create mode 100644 33/images/gfx/icons/home.png create mode 100644 33/images/gfx/icons/important.png create mode 100644 33/images/gfx/icons/next.png create mode 100644 33/images/gfx/icons/note.png create mode 100644 33/images/gfx/icons/prev.png create mode 100644 33/images/gfx/icons/tip.png create mode 100644 33/images/gfx/icons/up.png create mode 100644 33/images/gfx/icons/warning.png create mode 100644 33/images/gfx/new.png create mode 100644 33/images/groupmapping.png create mode 100644 33/images/includeall.png create mode 100644 33/images/jaxrs/2_2_HVGA_Final.png create mode 100644 33/images/jaxrs/2_2_HVGA_Initial.png create mode 100644 33/images/jaxrs/2_2_HVGA_Next.png create mode 100644 33/images/jaxrs/AndroidLibraries.png create mode 100644 33/images/jaxrs/CreateAVD_.png create mode 100644 33/images/jaxrs/HostSettings.png create mode 100644 33/images/jaxrs/ImportExistingMavenProject.png create mode 100644 33/images/jaxrs/ListOfBooks.png create mode 100644 33/images/jaxrs/NewAndroidProject.png create mode 100644 33/images/jaxrs/NoBooks.png create mode 100644 33/images/jaxrs/ProjectExplorerA.png create mode 100644 33/images/jaxrs/ProjectExplorerB.png create mode 100644 33/images/jaxrs/RunConfiguration.png create mode 100644 33/images/jsf/05222f3059e387df96ce04d2aea156c82af15096.jpg create mode 100644 33/images/jsf/0b3d1cb5794fb54a2465da93648b5a0d1a6643f3.jpg create mode 100644 33/images/jsf/1096ebbbf2b29e694e300e02a48d0fa4207cb746.jpg create mode 100644 33/images/jsf/1231420c938f087030cb3dcd37237b5585beb154.jpg create mode 100644 33/images/jsf/2._java.jpg create mode 100644 33/images/jsf/2499d43c0dce2cab72ba472c8452a2b57999ac84.jpg create mode 100644 33/images/jsf/2f192d02993248c97e2ac42ea8f3105d855e5cdf.jpg create mode 100644 33/images/jsf/30bbef45137c7d45ae300ba8d551423d1feefc96.png create mode 100644 33/images/jsf/359484b8f6f2c655d94132e9cb6f9dbe5a058656.jpg create mode 100644 33/images/jsf/3a3ee36eb581930822c4a66362795345f5d2f9a7.jpg create mode 100644 33/images/jsf/52369d67f9117c924213de24dd6642b48e47a436.png create mode 100644 33/images/jsf/5ad5d0216d3326e9bc29705042db59f11c3c1e70.png create mode 100644 33/images/jsf/5ea6987d1635c2c58d3ccdb1f5718f29d6a0fac3.png create mode 100644 33/images/jsf/6802fb7e29283d0e064a7cc4466b918995ba5645.jpg create mode 100644 33/images/jsf/6b2296be1bb2d8a81952caef0f025a139a39b381.jpg create mode 100644 33/images/jsf/7103da6b6323e515a03a04cafe111aa7c6b3169d.jpg create mode 100644 33/images/jsf/8108c4f111aab2c3465472eb84cf1d9b7cf912d0.jpg create mode 100644 33/images/jsf/8327bbe0e83cb7170dd84767631c98956e91c42c.jpg create mode 100644 33/images/jsf/8b8d0051f4f15033f17cb859c65f2d8481914678.jpg create mode 100644 33/images/jsf/91e40cd0b1545cff4622857d6dc9959f96faf056.jpg create mode 100644 33/images/jsf/97d781c6be9db755aef80a110f1d9b29590610d6.jpg create mode 100644 33/images/jsf/9988c572bad281146f405e9287f645a3da201885.jpg create mode 100644 33/images/jsf/a96b7d32e04aa67956bd00a187f09b75a5af241e.jpg create mode 100644 33/images/jsf/b8323caf6980c40c3d635db5e308b03847618d06.jpg create mode 100644 33/images/jsf/d68a0cdbc8c90db3db8af998f34616f73c7fe809.jpg create mode 100644 33/images/jsf/d7e6ab58230b2d31fdcd8fd5f14cd4eb47b05f64.jpg create mode 100644 33/images/jsf/dc0550785aae11f9d3eb439fdc0c51069affd25d.jpg create mode 100644 33/images/jsf/e6947b84a56a698ca1392a440081bddfb5cae284.jpg create mode 100644 33/images/jsf/eaac5cb1a836809ab29513346b527fe051b7c7ac.png create mode 100644 33/images/jsf/f7b29ac8009f04fc7f209222ced0bcf54f4b8d9a.jpg create mode 100644 33/images/no-users.png create mode 100644 33/images/runasrole.png create mode 100644 33/images/scopedroles.png create mode 100644 33/images/splash_wildflylogo_small.png create mode 100644 33/images/update-app-user-interactive.png create mode 100644 33/images/update-mgmt-user-interactive.png create mode 100644 33/images/usermapping.png create mode 100644 33/images/wildfly.png create mode 100644 33/index.html create mode 100644 33/wildscribe/core-service/capability-registry/index.html create mode 100644 33/wildscribe/core-service/management/access/audit/file-handler/index.html create mode 100644 33/wildscribe/core-service/management/access/audit/in-memory-handler/index.html create mode 100644 33/wildscribe/core-service/management/access/audit/index.html create mode 100644 33/wildscribe/core-service/management/access/audit/json-formatter/index.html create mode 100644 33/wildscribe/core-service/management/access/audit/logger/audit-log/handler/index.html create mode 100644 33/wildscribe/core-service/management/access/audit/logger/audit-log/index.html create mode 100644 33/wildscribe/core-service/management/access/audit/periodic-rotating-file-handler/index.html create mode 100644 33/wildscribe/core-service/management/access/audit/size-rotating-file-handler/index.html create mode 100644 33/wildscribe/core-service/management/access/audit/syslog-handler/index.html create mode 100644 33/wildscribe/core-service/management/access/audit/syslog-handler/protocol/tcp/index.html create mode 100644 33/wildscribe/core-service/management/access/audit/syslog-handler/protocol/tls/authentication/client-certificate-store/index.html create mode 100644 33/wildscribe/core-service/management/access/audit/syslog-handler/protocol/tls/authentication/truststore/index.html create mode 100644 33/wildscribe/core-service/management/access/audit/syslog-handler/protocol/tls/index.html create mode 100644 33/wildscribe/core-service/management/access/audit/syslog-handler/protocol/udp/index.html create mode 100644 33/wildscribe/core-service/management/access/authorization/constraint/application-classification/index.html create mode 100644 33/wildscribe/core-service/management/access/authorization/constraint/application-classification/type/classification/applies-to/index.html create mode 100644 33/wildscribe/core-service/management/access/authorization/constraint/application-classification/type/classification/index.html create mode 100644 33/wildscribe/core-service/management/access/authorization/constraint/application-classification/type/index.html create mode 100644 33/wildscribe/core-service/management/access/authorization/constraint/sensitivity-classification/index.html create mode 100644 33/wildscribe/core-service/management/access/authorization/constraint/sensitivity-classification/type/classification/applies-to/index.html create mode 100644 33/wildscribe/core-service/management/access/authorization/constraint/sensitivity-classification/type/classification/index.html create mode 100644 33/wildscribe/core-service/management/access/authorization/constraint/sensitivity-classification/type/index.html create mode 100644 33/wildscribe/core-service/management/access/authorization/constraint/vault-expression/index.html create mode 100644 33/wildscribe/core-service/management/access/authorization/index.html create mode 100644 33/wildscribe/core-service/management/access/authorization/role-mapping/exclude/index.html create mode 100644 33/wildscribe/core-service/management/access/authorization/role-mapping/include/index.html create mode 100644 33/wildscribe/core-service/management/access/authorization/role-mapping/index.html create mode 100644 33/wildscribe/core-service/management/access/identity/index.html create mode 100644 33/wildscribe/core-service/management/index.html create mode 100644 33/wildscribe/core-service/management/management-interface/http-interface/index.html create mode 100644 33/wildscribe/core-service/management/management-interface/native-interface/index.html create mode 100644 33/wildscribe/core-service/management/management-interface/native-remoting-interface/index.html create mode 100644 33/wildscribe/core-service/management/service/configuration-changes/index.html create mode 100644 33/wildscribe/core-service/management/service/management-operations/active-operation/index.html create mode 100644 33/wildscribe/core-service/management/service/management-operations/index.html create mode 100644 33/wildscribe/core-service/module-loading/index.html create mode 100644 33/wildscribe/core-service/platform-mbean/index.html create mode 100644 33/wildscribe/core-service/platform-mbean/type/buffer-pool/index.html create mode 100644 33/wildscribe/core-service/platform-mbean/type/buffer-pool/name/index.html create mode 100644 33/wildscribe/core-service/platform-mbean/type/class-loading/index.html create mode 100644 33/wildscribe/core-service/platform-mbean/type/compilation/index.html create mode 100644 33/wildscribe/core-service/platform-mbean/type/garbage-collector/index.html create mode 100644 33/wildscribe/core-service/platform-mbean/type/garbage-collector/name/index.html create mode 100644 33/wildscribe/core-service/platform-mbean/type/memory-manager/index.html create mode 100644 33/wildscribe/core-service/platform-mbean/type/memory-manager/name/index.html create mode 100644 33/wildscribe/core-service/platform-mbean/type/memory-pool/index.html create mode 100644 33/wildscribe/core-service/platform-mbean/type/memory-pool/name/index.html create mode 100644 33/wildscribe/core-service/platform-mbean/type/memory/index.html create mode 100644 33/wildscribe/core-service/platform-mbean/type/operating-system/index.html create mode 100644 33/wildscribe/core-service/platform-mbean/type/runtime/index.html create mode 100644 33/wildscribe/core-service/platform-mbean/type/threading/index.html create mode 100644 33/wildscribe/core-service/server-environment/index.html create mode 100644 33/wildscribe/core-service/service-container/index.html create mode 100644 33/wildscribe/css/main.css create mode 100644 33/wildscribe/deployment-overlay/content/index.html create mode 100644 33/wildscribe/deployment-overlay/deployment/index.html create mode 100644 33/wildscribe/deployment-overlay/index.html create mode 100644 33/wildscribe/deployment/index.html create mode 100644 33/wildscribe/deployment/subdeployment/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/batch-jberet/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/batch-jberet/job/execution/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/batch-jberet/job/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/datasources/data-source/connection-properties/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/datasources/data-source/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/datasources/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/datasources/xa-data-source/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/datasources/xa-data-source/xa-datasource-properties/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/ejb3/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/ejb3/message-driven-bean/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/ejb3/message-driven-bean/service/timer-service/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/ejb3/message-driven-bean/service/timer-service/timer/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/ejb3/singleton-bean/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/ejb3/singleton-bean/service/timer-service/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/ejb3/singleton-bean/service/timer-service/timer/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/ejb3/stateful-session-bean/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/ejb3/stateless-session-bean/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/ejb3/stateless-session-bean/service/timer-service/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/ejb3/stateless-session-bean/service/timer-service/timer/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/jaxrs/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/jaxrs/rest-resource/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/jpa/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/logging/configuration/error-manager/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/logging/configuration/filter/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/logging/configuration/formatter/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/logging/configuration/handler/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/logging/configuration/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/logging/configuration/logger/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/logging/configuration/pojo/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/logging/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/connection-factory/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/external-jms-queue/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/external-jms-topic/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/pooled-connection-factory/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/server/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/server/jms-queue/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/server/jms-topic/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/messaging-activemq/server/pooled-connection-factory/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/resource-adapters/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/admin-objects/config-properties/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/admin-objects/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/config-properties/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/connection-definitions/config-properties/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/connection-definitions/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/undertow/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/undertow/servlet/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/undertow/websocket/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/webservices/endpoint/index.html create mode 100644 33/wildscribe/deployment/subdeployment/subsystem/webservices/index.html create mode 100644 33/wildscribe/deployment/subsystem/batch-jberet/index.html create mode 100644 33/wildscribe/deployment/subsystem/batch-jberet/job/execution/index.html create mode 100644 33/wildscribe/deployment/subsystem/batch-jberet/job/index.html create mode 100644 33/wildscribe/deployment/subsystem/datasources/data-source/connection-properties/index.html create mode 100644 33/wildscribe/deployment/subsystem/datasources/data-source/index.html create mode 100644 33/wildscribe/deployment/subsystem/datasources/index.html create mode 100644 33/wildscribe/deployment/subsystem/datasources/xa-data-source/index.html create mode 100644 33/wildscribe/deployment/subsystem/datasources/xa-data-source/xa-datasource-properties/index.html create mode 100644 33/wildscribe/deployment/subsystem/ejb3/index.html create mode 100644 33/wildscribe/deployment/subsystem/ejb3/message-driven-bean/index.html create mode 100644 33/wildscribe/deployment/subsystem/ejb3/message-driven-bean/service/timer-service/index.html create mode 100644 33/wildscribe/deployment/subsystem/ejb3/message-driven-bean/service/timer-service/timer/index.html create mode 100644 33/wildscribe/deployment/subsystem/ejb3/singleton-bean/index.html create mode 100644 33/wildscribe/deployment/subsystem/ejb3/singleton-bean/service/timer-service/index.html create mode 100644 33/wildscribe/deployment/subsystem/ejb3/singleton-bean/service/timer-service/timer/index.html create mode 100644 33/wildscribe/deployment/subsystem/ejb3/stateful-session-bean/index.html create mode 100644 33/wildscribe/deployment/subsystem/ejb3/stateless-session-bean/index.html create mode 100644 33/wildscribe/deployment/subsystem/ejb3/stateless-session-bean/service/timer-service/index.html create mode 100644 33/wildscribe/deployment/subsystem/ejb3/stateless-session-bean/service/timer-service/timer/index.html create mode 100644 33/wildscribe/deployment/subsystem/jaxrs/index.html create mode 100644 33/wildscribe/deployment/subsystem/jaxrs/rest-resource/index.html create mode 100644 33/wildscribe/deployment/subsystem/jpa/index.html create mode 100644 33/wildscribe/deployment/subsystem/logging/configuration/error-manager/index.html create mode 100644 33/wildscribe/deployment/subsystem/logging/configuration/filter/index.html create mode 100644 33/wildscribe/deployment/subsystem/logging/configuration/formatter/index.html create mode 100644 33/wildscribe/deployment/subsystem/logging/configuration/handler/index.html create mode 100644 33/wildscribe/deployment/subsystem/logging/configuration/index.html create mode 100644 33/wildscribe/deployment/subsystem/logging/configuration/logger/index.html create mode 100644 33/wildscribe/deployment/subsystem/logging/configuration/pojo/index.html create mode 100644 33/wildscribe/deployment/subsystem/logging/index.html create mode 100644 33/wildscribe/deployment/subsystem/messaging-activemq/connection-factory/index.html create mode 100644 33/wildscribe/deployment/subsystem/messaging-activemq/external-jms-queue/index.html create mode 100644 33/wildscribe/deployment/subsystem/messaging-activemq/external-jms-topic/index.html create mode 100644 33/wildscribe/deployment/subsystem/messaging-activemq/index.html create mode 100644 33/wildscribe/deployment/subsystem/messaging-activemq/pooled-connection-factory/index.html create mode 100644 33/wildscribe/deployment/subsystem/messaging-activemq/server/index.html create mode 100644 33/wildscribe/deployment/subsystem/messaging-activemq/server/jms-queue/index.html create mode 100644 33/wildscribe/deployment/subsystem/messaging-activemq/server/jms-topic/index.html create mode 100644 33/wildscribe/deployment/subsystem/messaging-activemq/server/pooled-connection-factory/index.html create mode 100644 33/wildscribe/deployment/subsystem/resource-adapters/index.html create mode 100644 33/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/index.html create mode 100644 33/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/admin-objects/config-properties/index.html create mode 100644 33/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/admin-objects/index.html create mode 100644 33/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/config-properties/index.html create mode 100644 33/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/connection-definitions/config-properties/index.html create mode 100644 33/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/connection-definitions/index.html create mode 100644 33/wildscribe/deployment/subsystem/resource-adapters/ironjacamar/ironjacamar/resource-adapter/index.html create mode 100644 33/wildscribe/deployment/subsystem/undertow/index.html create mode 100644 33/wildscribe/deployment/subsystem/undertow/servlet/index.html create mode 100644 33/wildscribe/deployment/subsystem/undertow/websocket/index.html create mode 100644 33/wildscribe/deployment/subsystem/webservices/endpoint/index.html create mode 100644 33/wildscribe/deployment/subsystem/webservices/index.html create mode 100644 33/wildscribe/extension/index.html create mode 100644 33/wildscribe/extension/subsystem/index.html create mode 100644 33/wildscribe/favicon.ico create mode 100644 33/wildscribe/index.html create mode 100644 33/wildscribe/interface/index.html create mode 100644 33/wildscribe/js/main.js create mode 100644 33/wildscribe/js/vendor/ie10-viewport-bug-workaround.js create mode 100644 33/wildscribe/log-message-reference.html create mode 100644 33/wildscribe/path/index.html create mode 100644 33/wildscribe/socket-binding-group/index.html create mode 100644 33/wildscribe/socket-binding-group/local-destination-outbound-socket-binding/index.html create mode 100644 33/wildscribe/socket-binding-group/remote-destination-outbound-socket-binding/index.html create mode 100644 33/wildscribe/socket-binding-group/socket-binding/index.html create mode 100644 33/wildscribe/subsystem/batch-jberet/in-memory-job-repository/index.html create mode 100644 33/wildscribe/subsystem/batch-jberet/index.html create mode 100644 33/wildscribe/subsystem/batch-jberet/jdbc-job-repository/index.html create mode 100644 33/wildscribe/subsystem/batch-jberet/thread-factory/index.html create mode 100644 33/wildscribe/subsystem/batch-jberet/thread-pool/index.html create mode 100644 33/wildscribe/subsystem/bean-validation/index.html create mode 100644 33/wildscribe/subsystem/core-management/index.html create mode 100644 33/wildscribe/subsystem/core-management/process-state-listener/index.html create mode 100644 33/wildscribe/subsystem/core-management/service/configuration-changes/index.html create mode 100644 33/wildscribe/subsystem/core-management/service/unstable-api-annotations/index.html create mode 100644 33/wildscribe/subsystem/datasources-agroal/datasource/index.html create mode 100644 33/wildscribe/subsystem/datasources-agroal/driver/index.html create mode 100644 33/wildscribe/subsystem/datasources-agroal/index.html create mode 100644 33/wildscribe/subsystem/datasources-agroal/xa-datasource/index.html create mode 100644 33/wildscribe/subsystem/datasources/data-source/ExampleDS/connection-properties/index.html create mode 100644 33/wildscribe/subsystem/datasources/data-source/ExampleDS/index.html create mode 100644 33/wildscribe/subsystem/datasources/data-source/ExampleDS/statistics/jdbc/index.html create mode 100644 33/wildscribe/subsystem/datasources/data-source/ExampleDS/statistics/pool/index.html create mode 100644 33/wildscribe/subsystem/datasources/index.html create mode 100644 33/wildscribe/subsystem/datasources/jdbc-driver/index.html create mode 100644 33/wildscribe/subsystem/datasources/xa-data-source/index.html create mode 100644 33/wildscribe/subsystem/datasources/xa-data-source/xa-datasource-properties/index.html create mode 100644 33/wildscribe/subsystem/deployment-scanner/index.html create mode 100644 33/wildscribe/subsystem/deployment-scanner/scanner/index.html create mode 100644 33/wildscribe/subsystem/discovery/aggregate-provider/index.html create mode 100644 33/wildscribe/subsystem/discovery/index.html create mode 100644 33/wildscribe/subsystem/discovery/static-provider/index.html create mode 100644 33/wildscribe/subsystem/distributable-ejb/client-mappings-registry/infinispan/index.html create mode 100644 33/wildscribe/subsystem/distributable-ejb/client-mappings-registry/local/index.html create mode 100644 33/wildscribe/subsystem/distributable-ejb/index.html create mode 100644 33/wildscribe/subsystem/distributable-ejb/infinispan-bean-management/index.html create mode 100644 33/wildscribe/subsystem/distributable-ejb/infinispan-timer-management/index.html create mode 100644 33/wildscribe/subsystem/distributable-web/hotrod-session-management/affinity/local/index.html create mode 100644 33/wildscribe/subsystem/distributable-web/hotrod-session-management/affinity/none/index.html create mode 100644 33/wildscribe/subsystem/distributable-web/hotrod-session-management/index.html create mode 100644 33/wildscribe/subsystem/distributable-web/hotrod-single-sign-on-management/index.html create mode 100644 33/wildscribe/subsystem/distributable-web/index.html create mode 100644 33/wildscribe/subsystem/distributable-web/infinispan-session-management/affinity/local/index.html create mode 100644 33/wildscribe/subsystem/distributable-web/infinispan-session-management/affinity/none/index.html create mode 100644 33/wildscribe/subsystem/distributable-web/infinispan-session-management/affinity/primary-owner/index.html create mode 100644 33/wildscribe/subsystem/distributable-web/infinispan-session-management/affinity/ranked/index.html create mode 100644 33/wildscribe/subsystem/distributable-web/infinispan-session-management/index.html create mode 100644 33/wildscribe/subsystem/distributable-web/infinispan-single-sign-on-management/index.html create mode 100644 33/wildscribe/subsystem/distributable-web/routing/infinispan/index.html create mode 100644 33/wildscribe/subsystem/distributable-web/routing/local/index.html create mode 100644 33/wildscribe/subsystem/ee-security/index.html create mode 100644 33/wildscribe/subsystem/ee/context-service/index.html create mode 100644 33/wildscribe/subsystem/ee/global-directory/index.html create mode 100644 33/wildscribe/subsystem/ee/index.html create mode 100644 33/wildscribe/subsystem/ee/managed-executor-service/index.html create mode 100644 33/wildscribe/subsystem/ee/managed-scheduled-executor-service/index.html create mode 100644 33/wildscribe/subsystem/ee/managed-thread-factory/index.html create mode 100644 33/wildscribe/subsystem/ee/service/default-bindings/index.html create mode 100644 33/wildscribe/subsystem/ejb3/application-security-domain/index.html create mode 100644 33/wildscribe/subsystem/ejb3/cache/index.html create mode 100644 33/wildscribe/subsystem/ejb3/cluster-passivation-store/index.html create mode 100644 33/wildscribe/subsystem/ejb3/distributable-cache/index.html create mode 100644 33/wildscribe/subsystem/ejb3/file-passivation-store/index.html create mode 100644 33/wildscribe/subsystem/ejb3/index.html create mode 100644 33/wildscribe/subsystem/ejb3/mdb-delivery-group/index.html create mode 100644 33/wildscribe/subsystem/ejb3/passivation-store/index.html create mode 100644 33/wildscribe/subsystem/ejb3/remoting-profile/index.html create mode 100644 33/wildscribe/subsystem/ejb3/remoting-profile/remote-http-connection/index.html create mode 100644 33/wildscribe/subsystem/ejb3/remoting-profile/remoting-ejb-receiver/channel-creation-options/index.html create mode 100644 33/wildscribe/subsystem/ejb3/remoting-profile/remoting-ejb-receiver/index.html create mode 100644 33/wildscribe/subsystem/ejb3/service/async/index.html create mode 100644 33/wildscribe/subsystem/ejb3/service/identity/index.html create mode 100644 33/wildscribe/subsystem/ejb3/service/iiop/index.html create mode 100644 33/wildscribe/subsystem/ejb3/service/remote/channel-creation-options/index.html create mode 100644 33/wildscribe/subsystem/ejb3/service/remote/index.html create mode 100644 33/wildscribe/subsystem/ejb3/service/timer-service/database-data-store/index.html create mode 100644 33/wildscribe/subsystem/ejb3/service/timer-service/file-data-store/index.html create mode 100644 33/wildscribe/subsystem/ejb3/service/timer-service/index.html create mode 100644 33/wildscribe/subsystem/ejb3/simple-cache/index.html create mode 100644 33/wildscribe/subsystem/ejb3/strict-max-bean-instance-pool/index.html create mode 100644 33/wildscribe/subsystem/ejb3/thread-pool/index.html create mode 100644 33/wildscribe/subsystem/elytron-oidc-client/index.html create mode 100644 33/wildscribe/subsystem/elytron-oidc-client/provider/index.html create mode 100644 33/wildscribe/subsystem/elytron-oidc-client/realm/index.html create mode 100644 33/wildscribe/subsystem/elytron-oidc-client/secure-deployment/credential/index.html create mode 100644 33/wildscribe/subsystem/elytron-oidc-client/secure-deployment/index.html create mode 100644 33/wildscribe/subsystem/elytron-oidc-client/secure-deployment/redirect-rewrite-rule/index.html create mode 100644 33/wildscribe/subsystem/elytron-oidc-client/secure-server/credential/index.html create mode 100644 33/wildscribe/subsystem/elytron-oidc-client/secure-server/index.html create mode 100644 33/wildscribe/subsystem/elytron-oidc-client/secure-server/redirect-rewrite-rule/index.html create mode 100644 33/wildscribe/subsystem/elytron/add-prefix-role-mapper/index.html create mode 100644 33/wildscribe/subsystem/elytron/add-suffix-role-mapper/index.html create mode 100644 33/wildscribe/subsystem/elytron/aggregate-evidence-decoder/index.html create mode 100644 33/wildscribe/subsystem/elytron/aggregate-http-server-mechanism-factory/index.html create mode 100644 33/wildscribe/subsystem/elytron/aggregate-principal-decoder/index.html create mode 100644 33/wildscribe/subsystem/elytron/aggregate-principal-transformer/index.html create mode 100644 33/wildscribe/subsystem/elytron/aggregate-providers/index.html create mode 100644 33/wildscribe/subsystem/elytron/aggregate-realm/index.html create mode 100644 33/wildscribe/subsystem/elytron/aggregate-role-decoder/index.html create mode 100644 33/wildscribe/subsystem/elytron/aggregate-role-mapper/index.html create mode 100644 33/wildscribe/subsystem/elytron/aggregate-sasl-server-factory/index.html create mode 100644 33/wildscribe/subsystem/elytron/aggregate-security-event-listener/index.html create mode 100644 33/wildscribe/subsystem/elytron/authentication-configuration/index.html create mode 100644 33/wildscribe/subsystem/elytron/authentication-context/index.html create mode 100644 33/wildscribe/subsystem/elytron/caching-realm/index.html create mode 100644 33/wildscribe/subsystem/elytron/case-principal-transformer/index.html create mode 100644 33/wildscribe/subsystem/elytron/certificate-authority-account/index.html create mode 100644 33/wildscribe/subsystem/elytron/certificate-authority/index.html create mode 100644 33/wildscribe/subsystem/elytron/chained-principal-transformer/index.html create mode 100644 33/wildscribe/subsystem/elytron/client-ssl-context/index.html create mode 100644 33/wildscribe/subsystem/elytron/client-ssl-context/ssl-session/index.html create mode 100644 33/wildscribe/subsystem/elytron/concatenating-principal-decoder/index.html create mode 100644 33/wildscribe/subsystem/elytron/configurable-http-server-mechanism-factory/index.html create mode 100644 33/wildscribe/subsystem/elytron/configurable-sasl-server-factory/index.html create mode 100644 33/wildscribe/subsystem/elytron/constant-permission-mapper/index.html create mode 100644 33/wildscribe/subsystem/elytron/constant-principal-decoder/index.html create mode 100644 33/wildscribe/subsystem/elytron/constant-principal-transformer/index.html create mode 100644 33/wildscribe/subsystem/elytron/constant-realm-mapper/index.html create mode 100644 33/wildscribe/subsystem/elytron/constant-role-mapper/index.html create mode 100644 33/wildscribe/subsystem/elytron/credential-store/index.html create mode 100644 33/wildscribe/subsystem/elytron/custom-credential-security-factory/index.html create mode 100644 33/wildscribe/subsystem/elytron/custom-evidence-decoder/index.html create mode 100644 33/wildscribe/subsystem/elytron/custom-modifiable-realm/index.html create mode 100644 33/wildscribe/subsystem/elytron/custom-permission-mapper/index.html create mode 100644 33/wildscribe/subsystem/elytron/custom-principal-decoder/index.html create mode 100644 33/wildscribe/subsystem/elytron/custom-principal-transformer/index.html create mode 100644 33/wildscribe/subsystem/elytron/custom-realm-mapper/index.html create mode 100644 33/wildscribe/subsystem/elytron/custom-realm/index.html create mode 100644 33/wildscribe/subsystem/elytron/custom-role-decoder/index.html create mode 100644 33/wildscribe/subsystem/elytron/custom-role-mapper/index.html create mode 100644 33/wildscribe/subsystem/elytron/custom-security-event-listener/index.html create mode 100644 33/wildscribe/subsystem/elytron/dir-context/index.html create mode 100644 33/wildscribe/subsystem/elytron/distributed-realm/index.html create mode 100644 33/wildscribe/subsystem/elytron/dynamic-client-ssl-context/index.html create mode 100644 33/wildscribe/subsystem/elytron/expression/encryption/index.html create mode 100644 33/wildscribe/subsystem/elytron/failover-realm/index.html create mode 100644 33/wildscribe/subsystem/elytron/file-audit-log/index.html create mode 100644 33/wildscribe/subsystem/elytron/filesystem-realm/index.html create mode 100644 33/wildscribe/subsystem/elytron/filtering-key-store/index.html create mode 100644 33/wildscribe/subsystem/elytron/http-authentication-factory/index.html create mode 100644 33/wildscribe/subsystem/elytron/identity-realm/index.html create mode 100644 33/wildscribe/subsystem/elytron/index.html create mode 100644 33/wildscribe/subsystem/elytron/jaas-realm/index.html create mode 100644 33/wildscribe/subsystem/elytron/jaspi-configuration/index.html create mode 100644 33/wildscribe/subsystem/elytron/jdbc-realm/index.html create mode 100644 33/wildscribe/subsystem/elytron/kerberos-security-factory/index.html create mode 100644 33/wildscribe/subsystem/elytron/key-manager/index.html create mode 100644 33/wildscribe/subsystem/elytron/key-store-realm/index.html create mode 100644 33/wildscribe/subsystem/elytron/key-store/index.html create mode 100644 33/wildscribe/subsystem/elytron/ldap-key-store/index.html create mode 100644 33/wildscribe/subsystem/elytron/ldap-realm/index.html create mode 100644 33/wildscribe/subsystem/elytron/logical-permission-mapper/index.html create mode 100644 33/wildscribe/subsystem/elytron/logical-role-mapper/index.html create mode 100644 33/wildscribe/subsystem/elytron/mapped-regex-realm-mapper/index.html create mode 100644 33/wildscribe/subsystem/elytron/mapped-role-mapper/index.html create mode 100644 33/wildscribe/subsystem/elytron/mechanism-provider-filtering-sasl-server-factory/index.html create mode 100644 33/wildscribe/subsystem/elytron/periodic-rotating-file-audit-log/index.html create mode 100644 33/wildscribe/subsystem/elytron/permission-set/index.html create mode 100644 33/wildscribe/subsystem/elytron/policy/index.html create mode 100644 33/wildscribe/subsystem/elytron/properties-realm/index.html create mode 100644 33/wildscribe/subsystem/elytron/provider-http-server-mechanism-factory/index.html create mode 100644 33/wildscribe/subsystem/elytron/provider-loader/index.html create mode 100644 33/wildscribe/subsystem/elytron/provider-sasl-server-factory/index.html create mode 100644 33/wildscribe/subsystem/elytron/regex-principal-transformer/index.html create mode 100644 33/wildscribe/subsystem/elytron/regex-role-mapper/index.html create mode 100644 33/wildscribe/subsystem/elytron/regex-validating-principal-transformer/index.html create mode 100644 33/wildscribe/subsystem/elytron/sasl-authentication-factory/index.html create mode 100644 33/wildscribe/subsystem/elytron/secret-key-credential-store/index.html create mode 100644 33/wildscribe/subsystem/elytron/security-domain/index.html create mode 100644 33/wildscribe/subsystem/elytron/server-ssl-context/index.html create mode 100644 33/wildscribe/subsystem/elytron/server-ssl-context/ssl-session/index.html create mode 100644 33/wildscribe/subsystem/elytron/server-ssl-sni-context/index.html create mode 100644 33/wildscribe/subsystem/elytron/service-loader-http-server-mechanism-factory/index.html create mode 100644 33/wildscribe/subsystem/elytron/service-loader-sasl-server-factory/index.html create mode 100644 33/wildscribe/subsystem/elytron/simple-permission-mapper/index.html create mode 100644 33/wildscribe/subsystem/elytron/simple-regex-realm-mapper/index.html create mode 100644 33/wildscribe/subsystem/elytron/simple-role-decoder/index.html create mode 100644 33/wildscribe/subsystem/elytron/size-rotating-file-audit-log/index.html create mode 100644 33/wildscribe/subsystem/elytron/source-address-role-decoder/index.html create mode 100644 33/wildscribe/subsystem/elytron/syslog-audit-log/index.html create mode 100644 33/wildscribe/subsystem/elytron/token-realm/index.html create mode 100644 33/wildscribe/subsystem/elytron/trust-manager/index.html create mode 100644 33/wildscribe/subsystem/elytron/virtual-security-domain/index.html create mode 100644 33/wildscribe/subsystem/elytron/x500-attribute-principal-decoder/index.html create mode 100644 33/wildscribe/subsystem/elytron/x500-subject-evidence-decoder/index.html create mode 100644 33/wildscribe/subsystem/elytron/x509-subject-alt-name-evidence-decoder/index.html create mode 100644 33/wildscribe/subsystem/health/index.html create mode 100644 33/wildscribe/subsystem/iiop-openjdk/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/cache/component/locking/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/cache/component/partition-handling/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/cache/component/persistence/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/cache/component/transaction/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/cache/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/backups/backup/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/backups/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/expiration/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/locking/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/partition-handling/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/state-transfer/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/distributed-cache/component/transaction/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/distributed-cache/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/heap/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/distributed-cache/memory/off-heap/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/custom/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/custom/write/behind/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/custom/write/through/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/file/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/file/write/behind/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/file/write/through/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/hotrod/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/hotrod/write/behind/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/hotrod/write/through/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/table/string/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/write/behind/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/jdbc/write/through/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/none/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/remote/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/remote/write/behind/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/distributed-cache/store/remote/write/through/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/component/expiration/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/component/locking/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/component/transaction/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/heap/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/memory/off-heap/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/custom/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/custom/write/behind/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/custom/write/through/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/file/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/file/write/behind/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/file/write/through/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/hotrod/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/hotrod/write/behind/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/hotrod/write/through/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/table/string/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/write/behind/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/jdbc/write/through/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/none/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/remote/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/remote/write/behind/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/invalidation-cache/store/remote/write/through/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/local-cache/component/expiration/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/local-cache/component/locking/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/local-cache/component/transaction/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/local-cache/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/heap/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/local-cache/memory/off-heap/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/local-cache/store/custom/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/local-cache/store/custom/write/behind/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/local-cache/store/custom/write/through/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/local-cache/store/file/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/local-cache/store/file/write/behind/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/local-cache/store/file/write/through/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/local-cache/store/hotrod/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/local-cache/store/hotrod/write/behind/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/local-cache/store/hotrod/write/through/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/table/string/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/write/behind/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/local-cache/store/jdbc/write/through/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/local-cache/store/none/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/local-cache/store/remote/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/local-cache/store/remote/write/behind/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/local-cache/store/remote/write/through/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/backups/backup/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/backups/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/expiration/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/locking/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/partition-handling/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/state-transfer/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/replicated-cache/component/transaction/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/replicated-cache/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/heap/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/replicated-cache/memory/off-heap/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/custom/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/custom/write/behind/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/custom/write/through/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/file/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/file/write/behind/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/file/write/through/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/hotrod/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/hotrod/write/behind/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/hotrod/write/through/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/table/string/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/write/behind/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/jdbc/write/through/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/none/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/remote/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/remote/write/behind/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/replicated-cache/store/remote/write/through/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/backups/backup/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/backups/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/expiration/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/locking/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/partition-handling/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/state-transfer/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/scattered-cache/component/transaction/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/scattered-cache/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/heap/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/scattered-cache/memory/off-heap/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/custom/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/custom/write/behind/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/custom/write/through/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/file/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/file/write/behind/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/file/write/through/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/hotrod/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/hotrod/write/behind/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/hotrod/write/through/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/table/string/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/write/behind/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/jdbc/write/through/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/none/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/remote/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/remote/write/behind/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/scattered-cache/store/remote/write/through/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/thread-pool/blocking/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/thread-pool/expiration/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/thread-pool/listener/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/thread-pool/non-blocking/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/transport/jgroups/index.html create mode 100644 33/wildscribe/subsystem/infinispan/cache-container/transport/none/index.html create mode 100644 33/wildscribe/subsystem/infinispan/index.html create mode 100644 33/wildscribe/subsystem/infinispan/remote-cache-container/component/connection-pool/index.html create mode 100644 33/wildscribe/subsystem/infinispan/remote-cache-container/component/security/index.html create mode 100644 33/wildscribe/subsystem/infinispan/remote-cache-container/index.html create mode 100644 33/wildscribe/subsystem/infinispan/remote-cache-container/remote-cache/index.html create mode 100644 33/wildscribe/subsystem/infinispan/remote-cache-container/remote-cluster/index.html create mode 100644 33/wildscribe/subsystem/infinispan/remote-cache-container/thread-pool/async/index.html create mode 100644 33/wildscribe/subsystem/io/buffer-pool/index.html create mode 100644 33/wildscribe/subsystem/io/index.html create mode 100644 33/wildscribe/subsystem/io/worker/index.html create mode 100644 33/wildscribe/subsystem/io/worker/outbound-bind-address/index.html create mode 100644 33/wildscribe/subsystem/io/worker/server/index.html create mode 100644 33/wildscribe/subsystem/jaxrs/index.html create mode 100644 33/wildscribe/subsystem/jca/archive-validation/archive-validation/index.html create mode 100644 33/wildscribe/subsystem/jca/bean-validation/bean-validation/index.html create mode 100644 33/wildscribe/subsystem/jca/bootstrap-context/index.html create mode 100644 33/wildscribe/subsystem/jca/cached-connection-manager/cached-connection-manager/index.html create mode 100644 33/wildscribe/subsystem/jca/distributed-workmanager/index.html create mode 100644 33/wildscribe/subsystem/jca/distributed-workmanager/long-running-threads/index.html create mode 100644 33/wildscribe/subsystem/jca/distributed-workmanager/short-running-threads/index.html create mode 100644 33/wildscribe/subsystem/jca/index.html create mode 100644 33/wildscribe/subsystem/jca/tracer/tracer/index.html create mode 100644 33/wildscribe/subsystem/jca/workmanager/default/index.html create mode 100644 33/wildscribe/subsystem/jca/workmanager/default/long-running-threads/index.html create mode 100644 33/wildscribe/subsystem/jca/workmanager/default/short-running-threads/index.html create mode 100644 33/wildscribe/subsystem/jca/workmanager/default/statistics/local/index.html create mode 100644 33/wildscribe/subsystem/jdr/index.html create mode 100644 33/wildscribe/subsystem/jgroups/channel/ee/fork/index.html create mode 100644 33/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/ASYM_ENCRYPT/index.html create mode 100644 33/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/index.html create mode 100644 33/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/token/cipher/index.html create mode 100644 33/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/token/digest/index.html create mode 100644 33/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/AUTH/token/plain/index.html create mode 100644 33/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/FD/index.html create mode 100644 33/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/FD_SOCK/index.html create mode 100644 33/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/FD_SOCK2/index.html create mode 100644 33/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/JDBC_PING/index.html create mode 100644 33/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/MPING/index.html create mode 100644 33/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/SYM_ENCRYPT/index.html create mode 100644 33/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPGOSSIP/index.html create mode 100644 33/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/TCPPING/index.html create mode 100644 33/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.ASYM_ENCRYPT/index.html create mode 100644 33/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.AUTH/index.html create mode 100644 33/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.JDBC_PING/index.html create mode 100644 33/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.SYM_ENCRYPT/index.html create mode 100644 33/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPGOSSIP/index.html create mode 100644 33/wildscribe/subsystem/jgroups/channel/ee/fork/protocol/org.jgroups.protocols.TCPPING/index.html create mode 100644 33/wildscribe/subsystem/jgroups/channel/ee/index.html create mode 100644 33/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_ALL3/index.html create mode 100644 33/wildscribe/subsystem/jgroups/channel/ee/protocol/FD_SOCK2/index.html create mode 100644 33/wildscribe/subsystem/jgroups/channel/ee/protocol/FRAG4/index.html create mode 100644 33/wildscribe/subsystem/jgroups/channel/ee/protocol/MERGE3/index.html create mode 100644 33/wildscribe/subsystem/jgroups/channel/ee/protocol/MFC/index.html create mode 100644 33/wildscribe/subsystem/jgroups/channel/ee/protocol/PING/index.html create mode 100644 33/wildscribe/subsystem/jgroups/channel/ee/protocol/RED/index.html create mode 100644 33/wildscribe/subsystem/jgroups/channel/ee/protocol/UDP/index.html create mode 100644 33/wildscribe/subsystem/jgroups/channel/ee/protocol/UFC/index.html create mode 100644 33/wildscribe/subsystem/jgroups/channel/ee/protocol/UNICAST3/index.html create mode 100644 33/wildscribe/subsystem/jgroups/channel/ee/protocol/VERIFY_SUSPECT2/index.html create mode 100644 33/wildscribe/subsystem/jgroups/channel/ee/protocol/pbcast.GMS/index.html create mode 100644 33/wildscribe/subsystem/jgroups/channel/ee/protocol/pbcast.NAKACK2/index.html create mode 100644 33/wildscribe/subsystem/jgroups/channel/ee/protocol/pbcast.STABLE/index.html create mode 100644 33/wildscribe/subsystem/jgroups/index.html create mode 100644 33/wildscribe/subsystem/jgroups/stack/index.html create mode 100644 33/wildscribe/subsystem/jgroups/stack/protocol/ASYM_ENCRYPT/index.html create mode 100644 33/wildscribe/subsystem/jgroups/stack/protocol/AUTH/index.html create mode 100644 33/wildscribe/subsystem/jgroups/stack/protocol/AUTH/token/cipher/index.html create mode 100644 33/wildscribe/subsystem/jgroups/stack/protocol/AUTH/token/digest/index.html create mode 100644 33/wildscribe/subsystem/jgroups/stack/protocol/AUTH/token/plain/index.html create mode 100644 33/wildscribe/subsystem/jgroups/stack/protocol/FD/index.html create mode 100644 33/wildscribe/subsystem/jgroups/stack/protocol/FD_SOCK/index.html create mode 100644 33/wildscribe/subsystem/jgroups/stack/protocol/FD_SOCK2/index.html create mode 100644 33/wildscribe/subsystem/jgroups/stack/protocol/JDBC_PING/index.html create mode 100644 33/wildscribe/subsystem/jgroups/stack/protocol/MPING/index.html create mode 100644 33/wildscribe/subsystem/jgroups/stack/protocol/SYM_ENCRYPT/index.html create mode 100644 33/wildscribe/subsystem/jgroups/stack/protocol/TCPGOSSIP/index.html create mode 100644 33/wildscribe/subsystem/jgroups/stack/protocol/TCPPING/index.html create mode 100644 33/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.ASYM_ENCRYPT/index.html create mode 100644 33/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.AUTH/index.html create mode 100644 33/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.JDBC_PING/index.html create mode 100644 33/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.SYM_ENCRYPT/index.html create mode 100644 33/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPGOSSIP/index.html create mode 100644 33/wildscribe/subsystem/jgroups/stack/protocol/org.jgroups.protocols.TCPPING/index.html create mode 100644 33/wildscribe/subsystem/jgroups/stack/relay/relay.RELAY2/index.html create mode 100644 33/wildscribe/subsystem/jgroups/stack/relay/relay.RELAY2/remote-site/index.html create mode 100644 33/wildscribe/subsystem/jgroups/stack/transport/TCP/index.html create mode 100644 33/wildscribe/subsystem/jgroups/stack/transport/TCP/thread-pool/default/index.html create mode 100644 33/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/index.html create mode 100644 33/wildscribe/subsystem/jgroups/stack/transport/TCP_NIO2/thread-pool/default/index.html create mode 100644 33/wildscribe/subsystem/jgroups/stack/transport/UDP/index.html create mode 100644 33/wildscribe/subsystem/jgroups/stack/transport/UDP/thread-pool/default/index.html create mode 100644 33/wildscribe/subsystem/jmx/configuration/audit-log/handler/index.html create mode 100644 33/wildscribe/subsystem/jmx/configuration/audit-log/index.html create mode 100644 33/wildscribe/subsystem/jmx/expose-model/expression/index.html create mode 100644 33/wildscribe/subsystem/jmx/expose-model/resolved/index.html create mode 100644 33/wildscribe/subsystem/jmx/index.html create mode 100644 33/wildscribe/subsystem/jmx/remoting-connector/jmx/index.html create mode 100644 33/wildscribe/subsystem/jpa/index.html create mode 100644 33/wildscribe/subsystem/jsf/index.html create mode 100644 33/wildscribe/subsystem/logging/async-handler/index.html create mode 100644 33/wildscribe/subsystem/logging/console-handler/index.html create mode 100644 33/wildscribe/subsystem/logging/custom-formatter/index.html create mode 100644 33/wildscribe/subsystem/logging/custom-handler/index.html create mode 100644 33/wildscribe/subsystem/logging/file-handler/index.html create mode 100644 33/wildscribe/subsystem/logging/filter/index.html create mode 100644 33/wildscribe/subsystem/logging/index.html create mode 100644 33/wildscribe/subsystem/logging/json-formatter/index.html create mode 100644 33/wildscribe/subsystem/logging/log-file/index.html create mode 100644 33/wildscribe/subsystem/logging/logger/index.html create mode 100644 33/wildscribe/subsystem/logging/logging-profile/async-handler/index.html create mode 100644 33/wildscribe/subsystem/logging/logging-profile/console-handler/index.html create mode 100644 33/wildscribe/subsystem/logging/logging-profile/custom-formatter/index.html create mode 100644 33/wildscribe/subsystem/logging/logging-profile/custom-handler/index.html create mode 100644 33/wildscribe/subsystem/logging/logging-profile/file-handler/index.html create mode 100644 33/wildscribe/subsystem/logging/logging-profile/filter/index.html create mode 100644 33/wildscribe/subsystem/logging/logging-profile/index.html create mode 100644 33/wildscribe/subsystem/logging/logging-profile/json-formatter/index.html create mode 100644 33/wildscribe/subsystem/logging/logging-profile/log-file/index.html create mode 100644 33/wildscribe/subsystem/logging/logging-profile/logger/index.html create mode 100644 33/wildscribe/subsystem/logging/logging-profile/pattern-formatter/index.html create mode 100644 33/wildscribe/subsystem/logging/logging-profile/periodic-rotating-file-handler/index.html create mode 100644 33/wildscribe/subsystem/logging/logging-profile/periodic-size-rotating-file-handler/index.html create mode 100644 33/wildscribe/subsystem/logging/logging-profile/root-logger/ROOT/index.html create mode 100644 33/wildscribe/subsystem/logging/logging-profile/size-rotating-file-handler/index.html create mode 100644 33/wildscribe/subsystem/logging/logging-profile/socket-handler/index.html create mode 100644 33/wildscribe/subsystem/logging/logging-profile/syslog-handler/index.html create mode 100644 33/wildscribe/subsystem/logging/logging-profile/xml-formatter/index.html create mode 100644 33/wildscribe/subsystem/logging/pattern-formatter/index.html create mode 100644 33/wildscribe/subsystem/logging/periodic-rotating-file-handler/index.html create mode 100644 33/wildscribe/subsystem/logging/periodic-size-rotating-file-handler/index.html create mode 100644 33/wildscribe/subsystem/logging/root-logger/ROOT/index.html create mode 100644 33/wildscribe/subsystem/logging/size-rotating-file-handler/index.html create mode 100644 33/wildscribe/subsystem/logging/socket-handler/index.html create mode 100644 33/wildscribe/subsystem/logging/syslog-handler/index.html create mode 100644 33/wildscribe/subsystem/logging/xml-formatter/index.html create mode 100644 33/wildscribe/subsystem/mail/index.html create mode 100644 33/wildscribe/subsystem/mail/mail-session/custom/index.html create mode 100644 33/wildscribe/subsystem/mail/mail-session/index.html create mode 100644 33/wildscribe/subsystem/mail/mail-session/server/imap/index.html create mode 100644 33/wildscribe/subsystem/mail/mail-session/server/pop3/index.html create mode 100644 33/wildscribe/subsystem/mail/mail-session/server/smtp/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/connection-factory/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/connector/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/discovery-group/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/external-jms-queue/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/external-jms-topic/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/http-connector/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/in-vm-connector/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/jgroups-discovery-group/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/jms-bridge/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/pooled-connection-factory/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/remote-connector/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/acceptor/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/address-setting/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/bridge/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/broadcast-group/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/cluster-connection/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/connection-factory/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/connector-service/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/connector/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/core-address/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/core-address/role/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/discovery-group/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/divert/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/grouping-handler/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/ha-policy/live-only/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/primary/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/configuration/secondary/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-colocated/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-primary/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/ha-policy/replication-secondary/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/primary/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/configuration/secondary/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-colocated/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-primary/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/ha-policy/shared-store-secondary/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/http-acceptor/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/http-connector/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/in-vm-acceptor/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/in-vm-connector/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/jgroups-broadcast-group/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/jgroups-discovery-group/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/jms-queue/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/jms-topic/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/legacy-connection-factory/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/path/bindings-directory/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/path/journal-directory/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/path/large-messages-directory/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/path/paging-directory/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/pooled-connection-factory/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/queue/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/remote-acceptor/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/remote-connector/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/runtime-queue/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/security-setting/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/security-setting/role/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/socket-broadcast-group/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/server/socket-discovery-group/index.html create mode 100644 33/wildscribe/subsystem/messaging-activemq/socket-discovery-group/index.html create mode 100644 33/wildscribe/subsystem/metrics/index.html create mode 100644 33/wildscribe/subsystem/micrometer/index.html create mode 100644 33/wildscribe/subsystem/microprofile-config-smallrye/config-source-provider/index.html create mode 100644 33/wildscribe/subsystem/microprofile-config-smallrye/config-source/index.html create mode 100644 33/wildscribe/subsystem/microprofile-config-smallrye/index.html create mode 100644 33/wildscribe/subsystem/microprofile-fault-tolerance-smallrye/index.html create mode 100644 33/wildscribe/subsystem/microprofile-jwt-smallrye/index.html create mode 100644 33/wildscribe/subsystem/microprofile-openapi-smallrye/index.html create mode 100644 33/wildscribe/subsystem/microprofile-telemetry/index.html create mode 100644 33/wildscribe/subsystem/modcluster/index.html create mode 100644 33/wildscribe/subsystem/modcluster/proxy/index.html create mode 100644 33/wildscribe/subsystem/modcluster/proxy/load-provider/dynamic/custom-load-metric/index.html create mode 100644 33/wildscribe/subsystem/modcluster/proxy/load-provider/dynamic/index.html create mode 100644 33/wildscribe/subsystem/modcluster/proxy/load-provider/dynamic/load-metric/index.html create mode 100644 33/wildscribe/subsystem/modcluster/proxy/load-provider/simple/index.html create mode 100644 33/wildscribe/subsystem/naming/binding/index.html create mode 100644 33/wildscribe/subsystem/naming/index.html create mode 100644 33/wildscribe/subsystem/naming/service/remote-naming/index.html create mode 100644 33/wildscribe/subsystem/opentelemetry/index.html create mode 100644 33/wildscribe/subsystem/pojo/index.html create mode 100644 33/wildscribe/subsystem/remoting/connector/index.html create mode 100644 33/wildscribe/subsystem/remoting/connector/property/index.html create mode 100644 33/wildscribe/subsystem/remoting/connector/security/sasl/index.html create mode 100644 33/wildscribe/subsystem/remoting/connector/security/sasl/property/index.html create mode 100644 33/wildscribe/subsystem/remoting/connector/security/sasl/sasl-policy/policy/index.html create mode 100644 33/wildscribe/subsystem/remoting/http-connector/index.html create mode 100644 33/wildscribe/subsystem/remoting/http-connector/property/index.html create mode 100644 33/wildscribe/subsystem/remoting/http-connector/security/sasl/index.html create mode 100644 33/wildscribe/subsystem/remoting/http-connector/security/sasl/property/index.html create mode 100644 33/wildscribe/subsystem/remoting/http-connector/security/sasl/sasl-policy/policy/index.html create mode 100644 33/wildscribe/subsystem/remoting/index.html create mode 100644 33/wildscribe/subsystem/remoting/local-outbound-connection/index.html create mode 100644 33/wildscribe/subsystem/remoting/local-outbound-connection/property/index.html create mode 100644 33/wildscribe/subsystem/remoting/outbound-connection/index.html create mode 100644 33/wildscribe/subsystem/remoting/outbound-connection/property/index.html create mode 100644 33/wildscribe/subsystem/remoting/remote-outbound-connection/index.html create mode 100644 33/wildscribe/subsystem/remoting/remote-outbound-connection/property/index.html create mode 100644 33/wildscribe/subsystem/request-controller/index.html create mode 100644 33/wildscribe/subsystem/resource-adapters/index.html create mode 100644 33/wildscribe/subsystem/resource-adapters/resource-adapter/admin-objects/config-properties/index.html create mode 100644 33/wildscribe/subsystem/resource-adapters/resource-adapter/admin-objects/index.html create mode 100644 33/wildscribe/subsystem/resource-adapters/resource-adapter/config-properties/index.html create mode 100644 33/wildscribe/subsystem/resource-adapters/resource-adapter/connection-definitions/config-properties/index.html create mode 100644 33/wildscribe/subsystem/resource-adapters/resource-adapter/connection-definitions/index.html create mode 100644 33/wildscribe/subsystem/resource-adapters/resource-adapter/index.html create mode 100644 33/wildscribe/subsystem/rts/index.html create mode 100644 33/wildscribe/subsystem/sar/index.html create mode 100644 33/wildscribe/subsystem/security-manager/deployment-permissions/default/index.html create mode 100644 33/wildscribe/subsystem/security-manager/index.html create mode 100644 33/wildscribe/subsystem/singleton/index.html create mode 100644 33/wildscribe/subsystem/singleton/singleton-policy/deployment/index.html create mode 100644 33/wildscribe/subsystem/singleton/singleton-policy/election-policy/random/index.html create mode 100644 33/wildscribe/subsystem/singleton/singleton-policy/election-policy/simple/index.html create mode 100644 33/wildscribe/subsystem/singleton/singleton-policy/index.html create mode 100644 33/wildscribe/subsystem/singleton/singleton-policy/service/index.html create mode 100644 33/wildscribe/subsystem/transactions/commit-markable-resource/index.html create mode 100644 33/wildscribe/subsystem/transactions/index.html create mode 100644 33/wildscribe/subsystem/transactions/log-store/log-store/index.html create mode 100644 33/wildscribe/subsystem/transactions/log-store/log-store/transactions/index.html create mode 100644 33/wildscribe/subsystem/transactions/log-store/log-store/transactions/participants/index.html create mode 100644 33/wildscribe/subsystem/undertow/application-security-domain/index.html create mode 100644 33/wildscribe/subsystem/undertow/application-security-domain/setting/single-sign-on/index.html create mode 100644 33/wildscribe/subsystem/undertow/buffer-cache/index.html create mode 100644 33/wildscribe/subsystem/undertow/byte-buffer-pool/index.html create mode 100644 33/wildscribe/subsystem/undertow/configuration/filter/custom-filter/index.html create mode 100644 33/wildscribe/subsystem/undertow/configuration/filter/error-page/index.html create mode 100644 33/wildscribe/subsystem/undertow/configuration/filter/expression-filter/index.html create mode 100644 33/wildscribe/subsystem/undertow/configuration/filter/gzip/index.html create mode 100644 33/wildscribe/subsystem/undertow/configuration/filter/index.html create mode 100644 33/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/affinity/none/index.html create mode 100644 33/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/affinity/ranked/index.html create mode 100644 33/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/affinity/single/index.html create mode 100644 33/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/balancer/index.html create mode 100644 33/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/balancer/load-balancing-group/index.html create mode 100644 33/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/balancer/node/context/index.html create mode 100644 33/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/balancer/node/index.html create mode 100644 33/wildscribe/subsystem/undertow/configuration/filter/mod-cluster/index.html create mode 100644 33/wildscribe/subsystem/undertow/configuration/filter/request-limit/index.html create mode 100644 33/wildscribe/subsystem/undertow/configuration/filter/response-header/index.html create mode 100644 33/wildscribe/subsystem/undertow/configuration/filter/rewrite/index.html create mode 100644 33/wildscribe/subsystem/undertow/configuration/handler/file/index.html create mode 100644 33/wildscribe/subsystem/undertow/configuration/handler/index.html create mode 100644 33/wildscribe/subsystem/undertow/configuration/handler/reverse-proxy/host/index.html create mode 100644 33/wildscribe/subsystem/undertow/configuration/handler/reverse-proxy/index.html create mode 100644 33/wildscribe/subsystem/undertow/index.html create mode 100644 33/wildscribe/subsystem/undertow/server/ajp-listener/index.html create mode 100644 33/wildscribe/subsystem/undertow/server/host/filter-ref/index.html create mode 100644 33/wildscribe/subsystem/undertow/server/host/index.html create mode 100644 33/wildscribe/subsystem/undertow/server/host/location/filter-ref/index.html create mode 100644 33/wildscribe/subsystem/undertow/server/host/location/index.html create mode 100644 33/wildscribe/subsystem/undertow/server/host/setting/access-log/index.html create mode 100644 33/wildscribe/subsystem/undertow/server/host/setting/console-access-log/index.html create mode 100644 33/wildscribe/subsystem/undertow/server/host/setting/http-invoker/index.html create mode 100644 33/wildscribe/subsystem/undertow/server/host/setting/single-sign-on/index.html create mode 100644 33/wildscribe/subsystem/undertow/server/http-listener/index.html create mode 100644 33/wildscribe/subsystem/undertow/server/https-listener/index.html create mode 100644 33/wildscribe/subsystem/undertow/server/index.html create mode 100644 33/wildscribe/subsystem/undertow/servlet-container/index.html create mode 100644 33/wildscribe/subsystem/undertow/servlet-container/mime-mapping/index.html create mode 100644 33/wildscribe/subsystem/undertow/servlet-container/setting/affinity-cookie/index.html create mode 100644 33/wildscribe/subsystem/undertow/servlet-container/setting/crawler-session-management/index.html create mode 100644 33/wildscribe/subsystem/undertow/servlet-container/setting/jsp/index.html create mode 100644 33/wildscribe/subsystem/undertow/servlet-container/setting/persistent-sessions/index.html create mode 100644 33/wildscribe/subsystem/undertow/servlet-container/setting/session-cookie/index.html create mode 100644 33/wildscribe/subsystem/undertow/servlet-container/setting/websockets/index.html create mode 100644 33/wildscribe/subsystem/undertow/servlet-container/welcome-file/index.html create mode 100644 33/wildscribe/subsystem/webservices/client-config/index.html create mode 100644 33/wildscribe/subsystem/webservices/client-config/post-handler-chain/handler/index.html create mode 100644 33/wildscribe/subsystem/webservices/client-config/post-handler-chain/index.html create mode 100644 33/wildscribe/subsystem/webservices/client-config/pre-handler-chain/handler/index.html create mode 100644 33/wildscribe/subsystem/webservices/client-config/pre-handler-chain/index.html create mode 100644 33/wildscribe/subsystem/webservices/client-config/property/index.html create mode 100644 33/wildscribe/subsystem/webservices/endpoint-config/index.html create mode 100644 33/wildscribe/subsystem/webservices/endpoint-config/post-handler-chain/handler/index.html create mode 100644 33/wildscribe/subsystem/webservices/endpoint-config/post-handler-chain/index.html create mode 100644 33/wildscribe/subsystem/webservices/endpoint-config/pre-handler-chain/handler/index.html create mode 100644 33/wildscribe/subsystem/webservices/endpoint-config/pre-handler-chain/index.html create mode 100644 33/wildscribe/subsystem/webservices/endpoint-config/property/index.html create mode 100644 33/wildscribe/subsystem/webservices/index.html create mode 100644 33/wildscribe/subsystem/weld/index.html create mode 100644 33/wildscribe/subsystem/xts/index.html create mode 100644 33/wildscribe/system-property/index.html diff --git a/33/Admin_Guide.html b/33/Admin_Guide.html new file mode 100644 index 000000000..b61cfc53d --- /dev/null +++ b/33/Admin_Guide.html @@ -0,0 +1,27695 @@ + + + + + + + + +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. Feature stability levels

+
+

The WildFly project has high standards related to quality, stability and backwards compatibility. A key way an open source project like WildFly can ensure high standards are met is by "community bake" — allowing interested users to have access to features that are still undergoing a hardening process, while not forcing users who are not interested in such things to consume them.

+
+
+

To better facilitate this, WildFly 31 introduced the notion of formal "stability levels" that can be associated with functionality. When starting a WildFly process, users can use the --stability command line parameter to control the minimum stability level of available features, with a value of experimental, preview, community or default.

+
+
+
+
bin/standalone.sh --stability=preview
+
+
+
+

Features at a lower stability level will not be available for use.

+
+
+

A WildFly installation will have a standard stability level, determined by the Galleon feature-pack used to provision the installation. This level is used if the --stability param is not set. For a standard WildFly installation, this level is community. For WildFly Preview it is preview.

+
+
+

Some details on the stability levels:

+
+
+
    +
  • +

    experimental — This level is for true bleeding edge functionality that may never advance to a higher stability level. No WildFly feature-pack or distribution zip/tar would enable this level by default.

    +
  • +
  • +

    preview — This is the level for features that are of a sufficient stability to be available by default in WildFly Preview, but not in standard WildFly. The general expectation for features at this level is that they will eventually move to community level in substantially similar form (although this is not guaranteed).

    +
  • +
  • +

    community-- This is the level for features that are of a sufficient stability to be available by default in standard WildFly. Features at this level are not expected to change incompatibly over time in a manner inconsistent with the expectations of the Galleon feature-pack that provides them.

    +
  • +
  • +

    default — Features at this level have gone through additional vetting to ensure they are suitable for the long-term compatibility expectations of the Galleon feature-pack that provides them.

    +
  • +
+
+
+ + + + + +
+ + +The vast majority of functionality provided in both standard WildFly and WildFly Preview is at the default stability level. Over time the amount of functionality at other levels, particularly community, is expected to increase. +
+
+
+ + + + + +
+ + +A feature being ‘available by default’ in a WildFly installation might not mean ‘enabled by default’, i.e. turned on in a standard out-of-the-box configuration. It could just mean a user could turn it on if they so choose using normal configuration tools like the CLI. +
+
+
+

2.2.1. Relationship to feature-packs

+
+

The Galleon feature-packs that WildFly produces themselves incorporate expectations for long-term feature stability and compatibility. The --stability startup setting discussed above just allows users to use a different setting than the standard one for the feature-pack.

+
+
+
    +
  • +

    wildfly-ee — This feature-pack is not widely used directly and WildFly does not produce any downloadable zip/tar built solely using it. However, it is transparently used internally in provisioning any standard WildFly installation, and most standard WildFly functionality is provisioned from this feature-pack. It can be used directly by users who wish to limit their installation to what it provides. The defining characteristic of this feature-pack is that it integrates technologies where we have the highest confidence in our ability to provide them in a largely compatible way for many years.

    +
  • +
  • +

    wildfly — This is the feature-pack most people use. It depends upon wildfly-ee and adds functionality in addition to what is provisioned by wildfly-ee. The traditional standard WildFly server zip is built using this feature-pack. The primary reason things are provided in this feature-pack instead of wildfly-ee is because the technology that is integrated is more likely to change in incompatible ways over a relatively short time period. For example, MicroProfile specifications are comfortable introducing breaking changes on an annual basis, making them a poor fit for wildfly-ee. The observability space, particularly metrics and tracing, is evolving rapidly, so our Micrometer and OpenTelemetry extensions are not in wildfly-ee.

    +
  • +
  • +

    wildfly-preview — This feature-pack provisions WildFly Preview and is all about the fact that it provides no long term guarantees and can change significantly from release to release.

    +
  • +
+
+
+

What we mean by the community and default levels is relative to the generally expected long-term maintainability and compatibility level of the feature-pack that provides it. In other words, just because a feature provided by the wildfly feature-pack has been vetted as suitable for the default level does not mean it comes with higher expectations than the feature-pack as a whole.

+
+
+ + + + + +
+ + +WildFly Preview is also used to showcase functionality whose scope is not tied to a particular reasonably scoped ‘feature’. Using it in the past for Jakarta EE 9 was an example. Not having an embedded messaging broker in the standard configs is not a ‘feature’. +
+
+
+
+
+

2.3. General configuration concepts

+
+

For both a managed domain or a standalone server, a number of common +configuration concepts apply:

+
+
+

2.3.1. Extensions

+
+

An extension is a module that extends the capabilities and management API of the +server kernel. The WildFly kernel 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. An extension module provides an implementation of the org.jboss.as.controller.Extension interface, which is used to add one or more new subsystems to WildFly’s management API. 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.3.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 a 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.3.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.3.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.3.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.3.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.3.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.4. 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.4.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.4.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 33 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.4.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.4.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.4.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.4.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.4.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. 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.6. 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.7. 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.8. 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.9. 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.10. 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.11. 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. 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.5.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 -c or --server-config command line argument:

+
+
+
    +
  • +

    bin/standalone.sh -c=standalone-full.xml

    +
  • +
  • +

    bin/standalone.sh --server-config=standalone-ha.xml

    +
  • +
+
+
+
Aliases
+
+

The configuration files can also be referenced by an alias instead of the file name:

+
+
+
    +
  • +

    bin/standalone.sh -c ha

    +
  • +
+
+ + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1. Available aliases
Configuration fileAliases

standalone-full.xml

full

standalone-ha.xml

ha

standalone-full-ha.xml

fha, full-ha

standalone-load-balancer.xml

lb, load-balancer

standalone-microprofile.xml

mp, microprofile

standalone-microprofile-ha.xml

mpha, microprofile-ha

+
+
+
+

3.5.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:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + +
Configuration fileUse

host-primary.xml

A 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

+
+ +
+

The following chapters will focus on the high level subsystem 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.

+
+
+ + + + + +
+ + +The configuration schemas can found in the $JBOSS_HOME/docs/schema directory. +
+
+
+

7.1. Agroal Subsystem

+
+

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.1.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.1.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.1.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.1.4. Agroal known limitations

+
+

The subsystem to define default datasources remains "datasources" at the moment.

+
+
+
+
+

7.2. Core Management Subsystem

+
+

The core management subsystem is composed of 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.2.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.2.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.2.3. [Preview Feature] Reporting of API elements annotated with annotations indicating unstable API

+
+

Note: This feature only exists at the preview stability level or lower.

+
+
+

Some libraries use annotations on classes/interfaces/members to indicate that the API is considered to be unstable, and likely to change or go away in a future release. For example Hibernate uses the org.hibernate.Incubating annotation to mark such API elements.

+
+
+

WildFly can scan for the use of such API when your applications are deployed into WildFly, but it needs to be enabled via addition of the /subsystem=core-management/service=unstable-api-annotations resource. Once enabled, you can choose whether the use of these API elements should result in a warning in the logs, or a failed deployment. The next two child sections show examples of how to configure the scanner.

+
+
+
Log a warning
+
+

To enable the scanner and log a warning if annotated API elements are used in your code, execute the following CLI command:

+
+
+
+
/subsystem=core-management/service=unstable-api-annotations:add(level=log)
+
+
+
+

The warning message in the log will contain information about which API elements were called, from where, and which annotations they contain that indicate unstable API.

+
+
+
+
Throw an error
+
+

To enable the scanner and throw an error if annotated API elements are used in your code, execute the following CLI command:

+
+
+
+
/subsystem=core-management/service=unstable-api-annotations:add(level=error)
+
+
+
+

If you use annotated API elements in your code, the deployment will fail, and the error message will contain information about which API elements were called, from where, and which annotations they contain that indicate unstable API.

+
+
+
+
+
+

7.3. DataSource Subsystem

+
+

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 33 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. Deployment Scanner Subsystem

+
+

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.5. EE Subsystem

+
+

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 spec-mandated default JNDI bindings for services that must be made available via JNDI to applications.

    +
  • +
+
+
+

This document covers EE subsystem version +5.0, whose 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.5.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.5.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.5.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.6. Elytron OpenID Connect Client Subsystem

+
+

The ability to secure applications using OpenID Connect is +provided by the elytron-oidc-client subsystem.

+
+
+

7.6.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.6.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,
+  "scope" : "profile email phone",
+  "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>
+        <scope>email profile phone</scope>
+        <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.

+
+
+
+
Scope Configuration
+
+ + + + + +
+ + +Since this attribute is a preview level feature, the WildFly server’s stability level must be set to preview +or lower to enable it. The stability level must not be changed to community or default after configuring the +scope attribute. For more information about the stability levels of the WildFly server, please refer to the +Admin Guide, particularly the +Feature stability levels section. +
+
+
+

OpenID Connect allows the client to use scope values to request access to specific privileges for access tokens. An access token’s scopes determine what resources will be available when using the access token to access an OAuth2 protected endpoint. The OpenID Connect specification defines a few scope values including:

+
+
+
    +
  • +

    profile : requests access to the End-User’s default profile Claims, such as name, family_name, given_name, middle_name, nickname, preferred_username, profile, picture, website, gender, birthday etc.

    +
  • +
  • +

    email : requests access to the email and email_verified Claims.

    +
  • +
  • +

    address : requests access to the address Claim.

    +
  • +
  • +

    phone : requests access to the phone_number and phone_number_verified Claims.

    +
  • +
+
+
+

Scopes can be used to request that specific sets of information be made available as Claim Values. The scope values must be added as a space separated, case-sensitive list of ascii values.

+
+
+
Subsystem Configuration
+
+

It is possible to configure the scope values that would be used in the OIDC authentication request using the scope attribute of a secure-deployment or a secure-server resource in the elytron-oidc-client subsystem.

+
+
+
+
Deployment Configuration
+
+

It is also possible to configure the scope values that would be used via the scope attribute in a deployment’s oidc.json file.

+
+
+ + + + + +
+ + +If both the deployment and subsystem configuration is present, then the subsystem configuration will override the deployment values. +
+
+
+
+
+
+

7.6.3. Sending a Request Object as a JWT

+
+ + + + + +
+ + +Sending the request object as a JWT is a preview level feature, meaning the WildFly server’s stability level must +be set to preview or lower to enable the ability to add request or request_uri to authentication requests. The +stability level must not be changed to community or higher after configuring the attributes related to this feature. +For more information about the stability levels of the WildFly server, please refer to the +Admin Guide, particularly the +Feature stability levels section. +
+
+
+

When securing an application using OpenID Connect, the request or request_uri parameters enable Authentication +Requests to be signed and optionally encrypted and sent as a Json Web Token (JWT). The elytron-oidc-client subsystem +allows you to specify if you want to enable this using the authentication-request-format attribute.

+
+
+

The authentication-request-format attribute has values of type String and has 3 allowed values:

+
+
+
    +
  • +

    oauth2: This sends the authentication request as usual following the oauth2 syntax. Parameters, such as, +state are added to the authentication request directly.

    +
  • +
  • +

    request: This sends the authentication request as a signed and optionally encrypted JWT, which the OpenID provider +can verify and/or decrypt. The OpenID provider must support request parameters, which is indicated using the +request_parameter_supported field inside the OpenID metadata. Using request, the request object is sent by value.

    +
  • +
  • +

    request_uri: This also sends the authentication request as a signed and optionally encrypted JWT, but request_uri +sends the JWT by reference, as opposed to by value. The OpenID provider must support the request_uri parameter, indicated +using the request_uri_parameter_supported field inside the OpenID metadata. Using request_uri, the request object is +sent by reference using a URL which is obtained through a push request to the Pushed Authentication Request Endpoint of +the OpenID provider.

    +
  • +
+
+
+ + + + + +
+ + +The default value for authentication-request-format is oauth2. If the OpenID provider does not support request +parameters, then the request will be sent following the OAuth2 format and a warning will appear on the log messages. +
+
+
+
Signing Configuration
+
+

The JWT containing the Request Object can be signed using one of the algorithms supported by the OpenID Provider, or can be sent as +plaintext, indicated by the none algorithm in the JWS Header. The signature algorithm for the request object can be +specified using the request-object-signing-algorithm attribute. This attribute is of type string and the default value +is none, indicating that the request object will be sent as plaintext. In a production environment, you should +configure the signature algorithm for the request object to be signed.

+
+
+

If any asymmetric signing algorithm is specified as the signing algorithm for the request object, then keystore attributes +should be configured. This is done using the following attributes:

+
+
+
    +
  • +

    request-object-signing-keystore-file: The absolute path to the client keystore file.

    +
  • +
  • +

    request-object-signing-keystore-password: The password to access the keystore file.

    +
  • +
  • +

    request-object-signing-key-password: The password to access the key within the keystore file.

    +
  • +
  • +

    request-object-signing-key-alias: The alias by which the key identified with within the keystore file.

    +
  • +
  • +

    request-object-signing-keystore-type: The keystore type for the file. This can be either "PKCS12" or "JKS".

    +
  • +
+
+
+

When request-object-signing-algorithm is set to none, the JWT won’t be signed so there’s no need to configure a +keystore in this case. Similarly, for HMAC algorithms, the client secret will be used to sign the JWT, so, there is no +need to configure a keystore.

+
+
+ + + + + +
+ + +Although the default value for the request-object-signing-algorithm is none, indicating an unsigned JWT, this may not +be allowed by all OpenID providers. Please refer to the metadata for your OpenID Provider, specifically the +request_object_signing_alg_values_supported section to determine which algorithms are supported. +
+
+
+

The keystore file can be created using keytool on the terminal using the following commands:

+
+
+
+
keytool -genkeypair -alias <keystore_alias> -keyalg <algorithm> -keysize <key_size> -validity <validity_in_days>
+-keystore <keystore_name> -dname "<distinguished_name>" -keypass <private_key_password> -storepass <keystore_password>
+
+
+
+

An example for this is:

+
+
+
+
$ keytool -genkeypair -alias exampleClientKeyStore -keyalg RSA -keysize 2048 -validity 365 -keystore
+exampleclient.keystore.pkcs12 -dname "CN=client" -keypass secret -storepass secret
+
+
+
+

Alternatively, the keystore file can also be created using the Elytron subsystem.

+
+
+ + + + + +
+ + +For elliptical curve keys, if you are using a keystore of type JKS, then keysize may not matter. However, if you are +using PKCS12, you cannot specify keysize using the keysize argument. Instead, you must use -groupname and set it to +"secp256r1" if you are planning on using the "ES256" algorithm, "secp384r1" for "ES384" and so on. However, for RSA keys, +keys of size 2048 would be applicable for the supported RSXXX and PSXXX algorithms regardless of the SHA value. +
+
+
+
+
Encryption Configuration
+
+

Request Objects can be optionally encrypted using one of the encryption and content encryption algorithms supported +by the OpenID provider. In order to specify these algorithms when configuring the server, the +request-object-encryption-alg-value and the request-object-encryption-enc-value attributes must be +specified. If only one is specified, then both will remain undefined and the JWT will not be +encrypted. These two attributes are of type string and their default value is undefined.

+
+
+

No additional keys need to be configured for this, since the JWT will be encrypted using the public realm key that the +OpenID provider will share. The JWT will be signed first and then encrypted as a nested JWT. It is possible to mix and +match between the types of algorithms for signing and encrypting. For example, a JWT can be signed using elliptical +algorithms and encrypted using RSA algorithms.

+
+
+ + + + + +
+ + +Not all OpenID providers will support encrypted request objects. Please refer to the metadata for your OpenID +provider, specifically request_object_encryption_alg_values_supported and request_object_encryption_enc-values_supported +sections for supported algorithms. If this section is not present, the OpenID provider does not support encrypted +request objects. +
+
+
+

All the attributes mentioned above are available under the secure-server, secure-deployment, realm or provider +resources. When securing applications with OIDC using elytron-oidc-client subsystem configuration, if you want all +requests within a realm to be sent following the same format, you can configure it inside the realm settings. +Otherwise, if you want each deployment to have different authentication formats, you can configure that using the +secure-server or the secure-deployment resources.

+
+
+
Example Configuration
+
+

The WildFly server can be configured to send the authentication request using request as follows:

+
+
+
    +
  • +

    Subsystem configuration:

    +
  • +
+
+
+
+
/subsystem=elytron-oidc-client/secure-deployment=oidc.war:add(client-id=myclient,
+provider-url=http://localhost:8080/realms/myrealm, authentication-request-format=request,
+request-object-signing-algorithm=RS256, request-object-encryption-alg-value=RSA-OAEP,
+request-object-encryption-enc-value=A256GCM, request-object-signing-keystore-file="path/to/jwt.keystore",
+request-object-signing-key-password=password, request-object-signing-keystore-password=password,
+request-object-signing-key-alias=rsaKey, request-object-signing-keystore-type=JKS, public-client=false)
+
+
+
+
    +
  • +

    Deployment Configuration:

    +
  • +
+
+
+
+
    "client-id" : "wildfly",
+    "provider-url" : "${env.OIDC_PROVIDER_URL:http://localhost:8080}/realms/myrealm",
+    "public-client" : "false",
+    "authentication-request-format" : "request",
+    "request-object-signing-algorithm" : "ES384",
+    "request-object-encryption-alg-value" : "RSA-OAEP",
+    "request-object-encryption-enc-value" : "A256GCM",
+    "request-object-signing-keystore-file" : "/path/to/keycloak.keystore.pkcs12",
+    "request-object-signing-keystore-password" : "password",
+    "request-object-signing-key-password" : "password",
+    "request-object-signing-key-alias" : "ec384key",
+    "request-object-signing-keystore-type" : "PKCS12",
+    "ssl-required" : "EXTERNAL"
+    "credentials" : {
+        "secret" : "client_secret"
+    }
+
+
+
+
+
+
+

7.6.4. 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.6.5. 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.

+
+
+
+
Query Parameters
+
+

In general, having dynamic query strings in redirect URIs isn’t recommended because of the potential for things +like HTTP parameter pollution attacks. For this reason, by default, the elytron-oidc-client subsystem doesn’t +include any query params that were previously present when redirecting back to an application after authentication +with an OpenID provider. However, it’s possible to explicitly allow query params if desired. To specify that any +query params that were present prior to being redirected to the OpenID provider be included upon being +redirected back to the application after authentication, the wildfly.elytron.oidc.allow.query.params system +property can be set to true.

+
+
+
+
+

7.6.6. 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.6.7. Identity Propagation

+
+

When securing an application with OpenID Connect, a virtual security domain +will be created automatically 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 web component, 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 web component, 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 web component, +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.6.8. 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.6.9. 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.7. Health Subsystem

+
+ + + + + +
+ + +
+

This subsystem exposes only healthiness checks for the WildFly runtime. +Support for MicroProfile Health is provided by +the microprofile-health-smallrye subsystem.

+
+
+
+
+

7.7.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.7.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.7.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.8. Jakarta Batch Subsystem

+
+
+The batch subsystem is used to configure an environment for running +batch applications. WildFly uses +JBeret for its Jakarta 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.8.1. Default Subsystem Configuration

+
+

For up to date information about subsystem configuration options see the +WildFly model reference.

+
+
+
+

7.8.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.8.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.8.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.8.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.9. Jakarta Enterprise Beans Subsystem

+
+

The ejb3 subsystem provides support for Jakarta Enterprise Beans. This page lists the options that are available for configuring the ejb3 +subsystem.

+
+
+

A complete example of the config is shown below, with a full explanation +of each item.

+
+
+
+
<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.9.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.9.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.9.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.9.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.9.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.9.6. <async>

+
+

This element enables async EJB invocations. It is also used to specify +the thread pool that these invocations will use.

+
+
+
+

7.9.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.9.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.9.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.9.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.9.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.9.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.9.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.10. Jakarta Faces Subsystem

+
+

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.10.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.10.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.10.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.10.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.11. Jakarta MVC Subsystem

+
+
+The mvc-krazo subsystem provides support for the use of Jakarta MVC in deployments. +
+
+
+ + + + + +
+ + +The mvc-krazo subsystem is currently provided at preview stability. This means use of the subsystem requires running WildFly Preview or using the --stability=preview parameter when starting standard WildFly. +
+
+
+

7.11.1. Provisioning the subsystem

+
+

When provisioning a WildFly instance, you can include Jakarta MVC support in your server configuration by specifying the mvc-krazo Galleon layer.

+
+
+
+

7.11.2. Enabling the subsystem

+
+

If the WildFly configuration does not have the mvc-krazo subsystem enabled, it can be enabled using the CLI:

+
+
+
+
[standalone@localhost:9990  /] org.wildfly.extension.mvc-krazo:add
+{"outcome" => "success"}
+[standalone@localhost:9990  /] /subsystem=mvc-krazo:add
+{
+    "outcome" => "success",
+    "response-headers" => {
+        "operation-requires-reload" => true,
+        "process-state" => "reload-required"
+    }
+}
+
+
+
+
+

7.11.3. Configuration

+
+

The mvc-krazo subsystem doesn’t offer any configuration options beyond its presence in the overall configuration.

+
+
+
+

7.11.4. Jakarta RESTful Web Services Subsystem

+
+

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.12. JMX Subsystem

+
+

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.12.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.13. Logging Subsystem

+
+
+
+

The overall server logging configuration is represented by the logging +subsystem. It consists of four notable parts: handler configurations, +logger and the root logger declarations (aka log categories) and +logging profiles. Each logger references a handler (or set of +handlers). Each handler declares the log format and output.

+
+
+
+
+ + + + + +
+ + +The WildFly Model Reference provides a complete description of the management API for the logging subsystem. +
+
+
+

Here is an example of the logging subsystem XML configuration:

+
+
+
+
<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.13.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.13.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.13.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.13.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.13.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.13.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.13.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 2. 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 3. 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.13.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;

+
+ +
+
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.13.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.13.10. Loggers

+
+ + + + + +
+ + +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.13.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.14. Messaging Subsystem

+
+

Support for an embedded messaging broker or integration with a remote broker, including support for the Jakarta Messaging specification, 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.14.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.14.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.14.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 a Jakarta Enterprise Beans bean 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.14.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.14.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.14.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.14.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.14.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.14.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.14.10. Deployment of -jms.xml files

+
+

Starting with WildFly 33, 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.14.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.14.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.14.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.14.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 33 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 33 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 33 +servers.

+
+
+
+
+
Backward Compatibility
+
+

Backward compatibility requires no configuration change in the legacy +server.
+WildFly 33 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 33 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.14.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.14.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 Subsystem subsystem documentation and perform tests and peroformance runs before going to production.

+
+
+
Reference
+
+
+
+ +
+
+
+
+
+
+

7.14.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.15. Metrics Subsystem

+
+ + + + + +
+ + +
+

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.15.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.15.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.15.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.15.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.16. Micrometer Metrics Subsystem

+
+

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.16.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.16.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.16.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.16.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.17. MicroProfile Config Subsystem

+
+

Support for MicroProfile Config is provided by + the microprofile-config-smallrye subsystem.

+
+
+

7.17.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.17.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.17.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.17.4. Component Reference

+
+

The MicroProfile Config implementation is provided by the SmallRye Config project.

+
+
+ +
+
+
+
+

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 4. 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 Health Subsystem

+
+

Support for MicroProfile Health is provided by + the microprofile-health-smallrye subsystem.

+
+
+

7.19.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.19.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.19.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 do 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 the default 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 the 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 disable all the default procedures, including +server ones. +Setting this property in a deployment has higher priority than the global server configuration, based on the principle that +microservices applications - and specifically MicroProfile based - usually endorse a single-deployment model. +With respect to this scenario, it is quite natural to let the deployment override the global configuration. +When set to true WildFly will also 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.19.4. Component Reference

+
+

The MicroProfile Health implementation is provided by the SmallRye Health project.

+
+
+ +
+
+
+
+

7.20. MicroProfile JWT Subsystem

+
+

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.20.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.20.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.20.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.

+
+
+ + + + + +
+ + +
+

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.20.4. Identity Propagation

+
+

When securing an application with MicroProfile JWT, a virtual security domain +will be created automatically 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 MicroProfile JWT 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 web component, 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 MicroProfile JWT).

    +
  • +
  • +

    auth-method - The authentication mechanism that will be used with the virtual security domain. +If your application is secured with MicroProfile JWT, the auth-method should be set to MP-JWT.

    +
  • +
  • +

    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 MicroProfile JWT 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 web component, 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 MicroProfile JWT 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 web component, +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.21. MicroProfile LRA Subsystems

+
+
+
: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.21.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.21.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.21.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.21.4. Component Reference

+
+

The MicroProfile LRA implementation is provided by the Narayana project - https://www.narayana.io/.

+
+ +
+
+
+

7.22. MicroProfile OpenAPI Subsystem

+
+

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.22.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.22.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.22.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.22.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.23. MicroProfile Reactive Messaging Subsystem

+
+
+
:smallrye-reactive-messaging-version:       4.5.0
+:smallrye-reactive-messaging-tag:           {smallrye-reactive-messaging-version}
+:eclipse-mp-reactive-messaging-api-version: 2.0
+
+
+
+

Support for MicroProfile Reactive Messaging is +provided by the microprofile-reactive-messaging-smallrye subsystem.

+
+
+

7.23.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.

+
+
+

Similarly, to enable the AMQP connector functionality, you need to provision the microprofile-reactive-messaging-amqp layer, which in turn includes the microprofile-reactive-messaging layer.

+
+
+
+

7.23.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.23.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 connectors at the moment are the Kafka connector, and the AMQP 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

      +
    • +
    +
    +
  • +
+
+
+
+
+
AMQP Connector
+
+

An example of a minimal microprofile-config.properties file for AMQP for the example application shown previously:

+
+
+
+
amqp-host=localhost
+amqp-port=5672
+amqp-username=artemis
+amqp-password=artemis
+
+mp.messaging.outgoing.to.connector=smallrye-amqp
+mp.messaging.outgoing.to.address=my-topic
+
+mp.messaging.incoming.from.connector=smallrye-amqp
+mp.messaging.incoming.from.address=my-topic
+
+
+
+

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.

+
+
+

The entries amqp-host=localhost and amqp-port=5672 point the connector to an AMQP broker running on localhost:5672. As before we could also have done these for an individual channel by for example specifying mp.messaging.outgoing.to.host=localhost instead. If the host is not specified, it defaults to localhost.

+
+
+

mp.messaging.outgoing.to.connector=smallrye-amqp says that we want to use AMQP to back the to channel. Note that the value smallrye-amqp is SmallRye Reactive Messaging specific, and will only be understood if the AMQP connector is enabled.

+
+
+

mp.messaging.outgoing.to.address=my-topic says that we will send data via to channel to the AMQP queue on address called my-topic.

+
+
+

mp.messaging.incoming.from.connector=smallrye-amqp says that we want to use AMQP to back the from channel. As above, the value smallrye-amqp is SmallRye Reactive Messaging specific.

+
+
+

mp.messaging.incoming.from.address=my-topic says says that the channel named from will read data from the AMQP topic (or queue) on address called my-topic.

+
+
+

The full set of properties understood by the SmallRye Reactive Messaging’s AMQP connector can be found in the SmallRye Reactive Messaging AMQP connector documentation.

+
+
+

The prefixes discussed above are stripped off before passing the property to the AMQP connector.

+
+
+Connecting to a secure AMQP broker +
+

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-amqp. and mp.messaging.incoming.from-amqp. prefixes from the previous examples rather than the connector-wide mp.messaging.connector.smallrye-kafka prefix).

+
+
+
+
# As seen above
+amqp-host=localhost
+amqp-port=5672
+amqp-username=artemis
+amqp-password=artemis
+
+# New entries
+amqp-use-ssl=true
+mp.messaging.connector.smallrye-amqp.wildfly.elytron.ssl.context=test
+
+# Channel configuration would follow here, but is left out for brevity
+
+
+
+

Each of the new lines has the following meaning:

+
+
+
    +
  • +

    amqp-use-ssl=true - specifies that we want to use a secure connection when connecting to the broker.

    +
  • +
  • +

    mp.messaging.connector.smallrye-amqp.wildfly.elytron.ssl.context=test - this is not needed if AMQ broker 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 AMQ broker.

    +
  • +
+
+
+

Instead of configuring these properties on the connector level, we could also have defined them on the individual channels. E.g.: mp.messaging.incoming.from.wildfly.elytron.ssl.context=test would choose the test SSLContext for the from incoming channel.

+
+
+
+
+
+
+

7.23.4. Component Reference

+
+

The MicroProfile Reactive Messaging implementation is provided by the SmallRye Reactive Messaging project.

+
+ +
+
+
+

7.24. MicroProfile Reactive Streams Operators Subsystem

+
+

Support for MicroProfile Reactive Streams Operators is +provided as a Tech Preview feature by the microprofile-reactive-streams-operators-smallrye subsystem.

+
+
+

7.24.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.24.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.24.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.24.4. Component Reference

+
+

The MicroProfile Reactive Streams Operators implementation is provided by the SmallRye Mutiny project.

+
+ +
+
+
+

7.25. MicroProfile Telemetry Subsystem

+
+

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.25.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.25.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.26. OpenTelemetry Subsystem

+
+

7.26.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.26.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 currently supports only one exporter

    +
    +
      +
    • +

      otlp: The default, which use the OpenTelemetry protocol

      +
    • +
    +
    +
  • +
  • +

    endpoint: The URL via which OpenTelemetry will push traces. The default is OTLP’s gRPC-based endpoint, http://localhost:4317

    +
  • +
+
+
+ + + + + +
+ + +
IMPORTANT CHANGE
+
+

Earlier versions of WildFly supported jaeger as a valid exporter type. Jaeger support, however, has been dropped by +the OpenTelemetry project upstream, so its support has been removed from WildFly as well. Any server configurations with +jaeger still configured will fail to start the opentelemetry subsystem and apps using OpenTelemetry will fail to +deploy until the server is reconfigured to use otlp. You can, however, start the server in admin-only mode in order +to reconfigure the value. Of course, editing the XML config file is also a valid option should you prefer that approach.

+
+
+

Note also that OTLP has a different default value for the endpoint, so that will need to be configured appropriately for +your environment.

+
+
+
+
+
+
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="otlp"
+        endpoint="http://localhost:4317"/>
+    <span-processor
+        type="batch"
+        batch-delay="4500"
+        max-queue-size="128"
+        max-export-batch-size="512"
+        export-timeout="45"/>
+    <sampler
+        type="on"/>
+</subsystem>
+
+
+
+
+
+

7.26.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.26.4. Component Reference

+
+

OpenTelemetry support is provided via the OpenTelemetry project.

+
+
+
+
+

7.27. Naming Subsystem

+
+

The Naming subsystem provides the JNDI implementation on WildFly, and +its configuration allows you 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.27.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.27.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.28. Resource adapters Subsystem

+
+

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.28.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.28.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.28.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.29. Transactions Subsystem

+
+

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.29.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.30. Undertow Subsystem

+
+
+
+

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.30.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.30.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.30.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.30.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.30.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.31. Web services Subsystem

+
+

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.31.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.31.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.31.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.32. Simple configuration subsystems

+
+

The following subsystems currently have no configuration beyond their root +element in the configuration

+
+
+
+
<subsystem xmlns="urn:jboss:domain:jdr:1.0"/>
+<subsystem xmlns="urn:jboss:domain:mvc-krazo: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, it is primarily useful for JBoss EAP +subscribers who would provide the data to Red Hat when requesting +support.

mvc-krazo

Provides support for use of Jakarta MVC in deployments. Currently provided at preview stability.

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 (-D and -P) 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.

--stability

community (standard WildFly) +preview (WildFly Preview)

Minimum feature stability level that the server should support. Features with a lower stability level will not be exposed by the management API.

+
+
+
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.

--stability

community (standard WildFly) +preview (WildFly Preview)

Minimum feature stability level that the server should support. Features with a lower stability level will not be exposed by the management API. All +Host Controllers in the domain must have the same stability setting.

+
+

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"
+        }
+    }}}}}}
+}
+
+
+
+
+
Other server properties that can be resolved as JVM options on domain mode
+
+

In addition to the aforementioned server properties, the Host Controller can resolve the following jboss.server-xyz properties as JVM options:

+
+
+
    +
  • +

    jboss.server.name

    +
  • +
+
+
+
+
+

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
+
+
+
+

You can’t configure everything in YAML. Configuring the following resource types is not supported:

+
+
+
    +
  • +

    extension: to add an extension to the server as this might require modules which may be missing.

    +
  • +
  • +

    deployment: to add managed deployments to the server as this requires more than just some configuration.

    +
  • +
  • +

    deployment-overlay: to add deployment-overlays to the server as this requires more than just some configuration.

    +
  • +
  • +

    path: since those should already have been defined when the YAML files are parsed.

    +
  • +
+
+
+

While managed deployments are not supported you can still define unmanaged deployments. An unmanaged deployment is one where the server does not make an internal copy of the deployment content for its use; instead it directly uses the configured content. See Managed and Unmanaged Deployments.

+
+
+ + + + + +
+ + +All your changes using the management API aren’t persisted since the server is in read-only mode with YAML. +
+
+
+

This is a sample to install two deployments but with only one deployed:

+
+
+
+
wildfly-configuration:
+  deployment:
+    test.jar:
+      content:
+        -
+          path: test.jar
+          relative-to: jboss.server.base.dir
+          archive: true
+      enabled: true
+    hello.jar:
+      content:
+        -
+          path: test.jar
+          relative-to: jboss.server.base.dir
+          archive: true
+
+
+
+ + + + + +
+ + +For historical reasons, the content attribute is of type LIST so you must add a - before defining the archive or the directory of your deployment. The list should only contain a single element. +
+
+
+
+
+
+
+

10. CLI Recipes

+
+
+

10.1. Properties

+
+

10.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
+
+
+
+
+

10.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)
+
+
+
+
+
+

10.2. Configuration

+
+

10.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"
+    ]
+}
+
+
+
+
+

10.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"
+            },
+           ...
+
+
+
+
+

10.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
+
+
+
+
+

10.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
+    }
+}
+
+
+
+
+

10.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
+    }
+}
+
+
+
+
+

10.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"
+}
+
+
+
+
+
+

10.3. Runtime

+
+

10.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)"
+
+
+
+
+
+

10.4. Scripting

+
+

10.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 33 .bat script or include it in your custom script before +invoking scripts from WildFly.

+
+
+
+
+

10.5. Statistics

+
+

10.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)
+
+
+
+
+
+

10.6. Deployment

+
+

10.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.

    +
  • +
+
+
+
+

10.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.

+
+
+
+
+
+

10.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.

    +
  • +
+
+
+
+

10.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.

    +
  • +
+
+
+
+

10.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.

    +
  • +
+
+
+
+

10.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>

      +
    • +
    +
    +
  • +
+
+
+
+
+
+

11. 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.

+
+
+

11.1. Global operations

+
+

The WildFly management API includes a number of operations that apply to +every resource.

+
+
+

11.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.

    +
  • +
+
+
+
+

11.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.

    +
  • +
+
+
+
+

11.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.

    +
  • +
+
+
+
+

11.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.

    +
  • +
+
+
+
+

11.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.

+
+
+
+

11.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.

+
+
+
+

11.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.

+
+
+
+

11.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.

+
+
+
+

11.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.

+
+
+
+

11.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.

+
+
+
+

11.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.

+
+
+
+

11.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.

+
+
+
+

11.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.

+
+
+
+

11.1.14. The read-operation-names operation

+
+

Returns a list of the names of all the operations the resource supports. +Takes no parameters.

+
+
+
+

11.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.

+
+
+
+

11.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.

    +
  • +
+
+
+
+

11.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

    +
  • +
+
+
+
+

11.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.

    +
  • +
+
+
+
+

11.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.

    +
  • +
+
+
+
+

11.1.20. The read-attribute-group-names operation

+
+

Returns a list of attribute groups names for a given type. +Takes no parameters.

+
+
+
+

11.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.

+
+
+
+
+
+

11.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.

+
+
+

11.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

+
+
+
+
+
+

11.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.

+
+
+

11.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.)

    +
  • +
+
+
+
+
+

11.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).

    +
  • +
+
+
+
+
+

11.4. The HTTP management API

+
+

11.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.

+
+
+
+

11.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".

+
+
+
+

11.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
+
+
+
+
+

11.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"}
      +
      +
      +
    • +
    +
    +
  • +
+
+
+
+

11.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}}
+
+
+
+
+
+

11.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.

+
+
+

11.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.)

+
+
+
+

11.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();
+
+
+
+
+
+

11.5.3. Format of a Detyped Operation Request

+
+

The basic method a user of the WildFly 33 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}
+
+
+
+
+
+
+

11.5.4. Format of a Detyped Operation Response

+
+

As noted previously, the basic method a user of the WildFly 33 +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
+                }
+            }
+        }
+    }
+}
+
+
+
+
+
+
+
+
+ + + \ No newline at end of file diff --git a/33/Bootable_Guide.html b/33/Bootable_Guide.html new file mode 100644 index 000000000..fa9ea8234 --- /dev/null +++ b/33/Bootable_Guide.html @@ -0,0 +1,1543 @@ + + + + + + + + +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. Setting a stability level when building a Bootable JAR

+
+

In order to support WildFly feature stability levels, Galleon defines +some options that can be used at provisioning time +to provision server features at a specific stability level.

+
+
+

The stability levels handling described in the Stability levels at provisioning time +applies when building a WildFly Bootable JAR.

+
+
+

For example, building a WildFly Bootable JAR that includes preview features and packages:

+
+
+
+
<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>
+        <layers>
+          <layer>jaxrs-server</layer>
+        </layers>
+        <plugin-options>
+          <stability-level>preview</stability-level>
+        </plugin-options>
+      </configuration>
+      <executions>
+        <execution>
+          <goals>
+            <goal>package</goal>
+          </goals>
+        </execution>
+      </executions>
+    </plugin>
+  </plugins>
+</build>
+
+
+
+
+

2.2. 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.2.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)

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.2.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.

health

Support for liveness and readiness checks for the server runtime.

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

metrics

Support for base server metrics in Prometheus format.

management

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-lra-coordinator

Support for acting as coordinator of MicroProfile LRA long-running actions.

cdi
+jaxrs
+transactions
+microprofile-config (optional)

microprofile-lra-participant

Support for acting as a participant in MicroProfile LRA long-running actions.

cdi
+jaxrs
+microprofile-config (optional)

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-amqp

Support for MicroProfile Reactive Messaging AMQP connector

reactive-messaging

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-telemetry

Support for MicroProfile Telemetry

cdi
+microprofile-config
+opentelemetry

mod_cluster

Support for mod_cluster subsystem.

web-server

mvc-krazo

Support for Jakarta MVC (preview stability)

bean-validation
+cdi
+jaxrs-core
+jsf (optional)

naming

Support for JNDI.

base-server

observability

Support for MicroProfile monitoring features.

microprofile-config (optional)
+microprofile-health (optional)
+microprofile-telemetry (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.

--stability[=value]

Runs the server using a specific stability level. Possible values: [default, community, preview, experimental], Default = community

-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/33/Client_Guide.html b/33/Client_Guide.html new file mode 100644 index 000000000..65c39ecbe --- /dev/null +++ b/33/Client_Guide.html @@ -0,0 +1,2166 @@ + + + + + + + +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/33/Cloud_References.html b/33/Cloud_References.html new file mode 100644 index 000000000..2c894345c --- /dev/null +++ b/33/Cloud_References.html @@ -0,0 +1,539 @@ + + + + + + + +References + + + + + + +
+ +
+ + + \ No newline at end of file diff --git a/33/Developer_Guide.html b/33/Developer_Guide.html new file mode 100644 index 000000000..2b6ab7848 --- /dev/null +++ b/33/Developer_Guide.html @@ -0,0 +1,25358 @@ + + + + + + + + +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 33 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) a 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 a 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?

+
+ + + + + +
+ + +The sun.jdk is no longer added by the Core Server as an implicit dependency. +
+
+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
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 a 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 a 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 a 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 a 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 33 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 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 33 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 a Jakarta Enterprise Beans bean 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 33.

+
+
+

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 a Jakarta Enterprise Beans bean is 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 a Jakarta Interceptors interceptor 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 +a Jakarta Enterprise Beans bean.

+
+
+
+
<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 33 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:3.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>
+        <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 33, 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 33, 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 33, 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 33, 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 33, 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-31.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. For detailed documentation see the +RESTEasy 6.2.9.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 33. 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 33.

+
+
+

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(args[0]));
+   }
+}
+
+
+
+

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 33 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 33 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 33 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 33 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 33 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 33 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 33 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 33 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 33. 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 33.

+
+
+

25.1. Dependencies and Modularity

+
+

WildFly 33 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 33.

+
+
+

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 33.

+
+
+

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 33 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/33/Extending_WildFly.html b/33/Extending_WildFly.html new file mode 100644 index 000000000..6f6134e7f --- /dev/null +++ b/33/Extending_WildFly.html @@ -0,0 +1,8755 @@ + + + + + + + + +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 33, 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 33 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 33 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 33 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 33 make their servers reference the +main-server-group server group, and the HCs using older versions of +WildFly 33 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 33.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 33, 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 33 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 a Jakarta Enterprise Beans bean

    +
  • +
  • +

    java:module - the standard EE namespace for entries scoped to specific +module, such as a 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/33/Galleon_Guide.html b/33/Galleon_Guide.html new file mode 100644 index 000000000..75706c14c --- /dev/null +++ b/33/Galleon_Guide.html @@ -0,0 +1,1642 @@ + + + + + + + + +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

+
+

The WildFly project provides a number of Galleon feature-pack maven artifacts. A feature-pack is a zipped file that contains everything needed to dynamically provision a server. +These feature-packs are deployed in public maven repositories.

+
+
+

When Galleon is used to install WildFly, the desired WildFly feature-packs are retrieved and +their content is assembled to create an installation.

+
+
+

The main WildFly project provides the following feature-packs for use with standard WildFly:

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Maven GroupId:ArifactIdShort nameUse

org.wildfly:wildfly-galleon-pack

wildfly

The feature-pack most WildFly users use. Provisions a standard WildFly installation. Internally depends on the wildfly-ee feature-pack, but also provides integration of technologies like MicroProfile, Micrometer and Open Telemetry that are evolving rapidly, possibly in incompatible ways.

org.wildfly:wildfly-ee-galleon-pack

wildfly-ee

Provisions the most long-term stable functionality of standard WildFly. Does not include MicroProfile or other rapidly evolving technologies that may frequently introduce incompatible changes.

org.wildfly.cloud:wildfly-cloud-galleon-pack

-

Provisions a set of additional features allowing you to better configure a standard WildFly server to work on the cloud. It brings to the server some configuration aspects that are generally expected in a cloud context. See the feature-pack documentation for more details.

org.wildfly:wildfly-datasources-galleon-pack

-

Easy integration of popular JDBC drivers and associated datasources into a standard WildFly installation. See the feature-pack project README for more details.

org.wildfly:wildfly-myfaces-feature-pack

-

Provides MyFaces 4.x support for standard WildFly. See the feature-pack project README for more details.

+
+

The main WildFly project also provides feature-packs for use with WildFly Preview:

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + +
Maven GroupId:ArifactIdShort nameUse

org.wildfly:wildfly-preview-feature-pack

wildfly-preview

Provides a technology preview of things that may be coming in standard WildFly. Likely to have significant incompatible changes with every release.

org.wildfly.cloud:wildfly-preview-cloud-galleon-pack

-

WildFly Preview analogue to wildfly-cloud-galleon-pack.

org.wildfly:wildfly-datasources-preview-galleon-pack

-

WildFly Preview analogue to wildfly-datasources-galleon-pack.

+
+

There are also a number of feature-packs of varying levels of stability available from the wildfly-extras GitHub organization.

+
+
+

In most cases, people working with WildFly are using the wildfly feature-pack, so that is the one used in most of the examples in this document.

+
+
+
+

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 standard 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. Stability levels at provisioning time

+
+

In order to support WildFly feature stability levels, Galleon defines +some options that can be used at provisioning time +to provision server features at a specific stability level.

+
+
+

The stability-level option applies to both the features present in the provisioned configuration +and the provisioned packages (mainly JBoss Modules modules). You can specify a different stability level for each of them by using +the config-stability-level and the package-stability-level options.

+
+
+

If no stability level is provided, the WildFly feature-pack default stability levels for both configurations (community) +and packages (experimental) apply. When provisioning WildFly with no stability level set, +the community and default features are provisioned, the preview and experimental features are ignored. +The experimental, preview, community and default packages are provisioned.

+
+
+ + + + + +
+ + +
+

Having JBoss Modules modules at a lower stability level present in the installation +allows you to modify a provisioned server configuration to contain extensions and subsystems +or finer grained configuration elements that are at a lower stability level than what was originally provisioned.

+
+
+
+
+

1.5.1. Galleon CLI examples

+
+

Installing a WildFly server that contains preview features and packages +(any feature and package at a lower stability level are not provisioned):

+
+
+
+
galleon.sh install wildfly:current --dir=my-wildfly-server --stability-level=preview
+
+
+
+

Installing a WildFly server that contains preview features and packages +at the WildFly feature-pack packages default stability level (experimental)

+
+
+
+
galleon.sh install wildfly:current --dir=my-wildfly-server --config-stability-level=preview
+
+
+
+
+
+

1.6. WildFly Galleon layers

+
+

WildFly Galleon feature-packs expose 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.6.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)

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.

health

Support for liveness and readiness checks for the server runtime.

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

metrics

Support for base server metrics in Prometheus format.

management

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-lra-coordinator

Support for acting as coordinator of MicroProfile LRA long-running actions.

cdi
+jaxrs
+transactions
+microprofile-config (optional)

microprofile-lra-participant

Support for acting as a participant in MicroProfile LRA long-running actions.

cdi
+jaxrs
+microprofile-config (optional)

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-amqp

Support for MicroProfile Reactive Messaging AMQP connector

reactive-messaging

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-telemetry

Support for MicroProfile Telemetry

cdi
+microprofile-config
+opentelemetry

mod_cluster

Support for mod_cluster subsystem.

web-server

mvc-krazo

Support for Jakarta MVC (preview stability)

bean-validation
+cdi
+jaxrs-core
+jsf (optional)

naming

Support for JNDI.

base-server

observability

Support for MicroProfile monitoring features.

microprofile-config (optional)
+microprofile-health (optional)
+microprofile-telemetry (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.6.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/33/Getting_Started_Developing_Applications_Guide.html b/33/Getting_Started_Developing_Applications_Guide.html new file mode 100644 index 000000000..0cf4bc420 --- /dev/null +++ b/33/Getting_Started_Developing_Applications_Guide.html @@ -0,0 +1,4591 @@ + + + + + + + + +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.

+
+
+

3.1. 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 Starting the JBoss server from JBDS or Eclipse with JBoss Tools) and to have imported the quickstarts into Eclipse (as described in 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:

+
+
+

Eclipse Helloworld Deploy 1

+
+
+

Make sure the correct server is selected, and hit Finish:

+
+
+

Eclipse Deploy 2

+
+
+

You should see the server start up (unless you already started it in Starting the JBoss server from JBDS or Eclipse with JBoss Tools) and the application deploy in the Console log

+
+
+

Eclipse Helloworld Deploy 3

+
+
+
+

3.2. 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
+
+
@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();
+   }
+
+}
+
+
+
+ + + + + + + + + + + + + + + + + +
1If 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!
2Every web page needs to be correctly formed HTML. We’ve created static Strings to hold the minimum header and footer to write out.
3We 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 ).
4We call into the service to generate the message "Hello World", and write it out to the HTTP request.
+
+
+ + + + + +
+ + +
+

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!

+
+
+
+
+
+

4. CDI + JSF: Numberguess quickstart

+
+
+

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 Installing and starting the JBoss server on Linux, Unix or Mac OS X or 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.

+
+
+ + + + + +
+ + +
+

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.

+
+
+

4.1. 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 Starting the JBoss server from JBDS or Eclipse with JBoss Tools) and to have imported the quickstarts into Eclipse (as described in 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:

+
+
+

Eclipse Numberguess Deploy 1

+
+
+

Make sure the correct server is selected, and hit Finish:

+
+
+

Eclipse Deploy 2

+
+
+

You should see the server start up (unless you already started it in Starting the JBoss server from JBDS or Eclipse with JBoss Tools) and the application deploy in the Console log:

+
+
+

Eclipse Numberguess Deploy 3

+
+
+
+

4.2. 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
+
+
<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.

+
+
+ + + + + +
+ + +
+

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
+
+
<!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>
+
+
+
+ + + + + + + + + + + + + + + + + + + + + +
1There are a number of messages which can be sent to the user, "Higher!" and "Lower!"
2As 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.
3This input field is bound to a bean property using a value expression.
4A 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.
5There 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:

+
+
+ + + + + +
+ + +
+

A qualifier is used to disambiguate between two beans both of which +are eligible for injection based on their type. For more, see the +Weld Reference Guide.

+
+
+
+
+
src/main/java/org/jboss/as/quickstarts/numberguess/Random.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
+
+
@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
+
+
@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
+
+
@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);
+      }
+   }
+}
+
+
+
+
+
+
+

5. CDI + JPA + EJB + JTA + JSF: Greeter quickstart

+
+
+

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 Installing and starting the JBoss server on Linux, Unix or Mac OS X or 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:

+
+
+

Eclipse Greeter Deploy 1

+
+
+

Make sure the server is selected, and hit Finish:

+
+
+

Eclipse Deploy 2

+
+
+

You should see the server start up (unless you already started it in Starting the JBoss server from JBDS or Eclipse with JBoss Tools) and the application deploy in the Console log:

+
+
+

Eclipse Greeter Deploy 3

+
+
+

To use the application, visit http://localhost:8080/greeter/.

+
+
+

5.1. 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
+
+
<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>
+
+
+
+ + + + + + + + + + + + + +
1The 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.
2The persistence unit references a data source. Here we are using the built in, sample, data source.
3JPA 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).
+
+
+ + + + + +
+ + +
+

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 Administration and Configuration Guide for JBoss Enterprise Application Platform 6 or the +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
+
+
<!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>
+
+
+
+ + + + + + + + + + + + + + + + + +
1As 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.
2We output any messages for the user at the top of the form, e.g. when a new user is created.
3The greeting message is only rendered if there is a message.
4We 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
+
+
<!-- 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>
+
+
+
+ + + + + + + + + +
1The head, defined in case a page wants to add some content to the head of the page.
2The 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
+
+
<!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
+
+
@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;
+    }
+
+}
+
+
+
+ + + + + + + + + + + + + + + + + +
1The @Entity annotation used on the class tells JPA that this class should be mapped as a table in the database.
2Every 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).
3The entity also stores the real name of the user
4As 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
+
+
@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;
+    }
+
+}
+
+
+
+ + + + + + + + + + + + + + + + + +
1The bean is given a name, so we can access it from JSF
2The bean is request scoped, a different greeting can be made in each request
3We inject the UserDao, which handles database abstraction
4We 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
+
+
@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));
+        }
+    }
+}
+
+
+
+ + + + + + + + + + + + + + + + + + + + + +
1The bean is given a name, so we can access it from JSF
2The bean is request scoped, a different user can be added in each request
3We inject the FacesContext, to allow us to send messages to the user when the user is created, or if an error occurs
4We inject the UserDao, which handles database abstraction
5We 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
+
+
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
+
+
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);
+        }
+    }
+}
+
+
+
+ + + + + + + + + + + + + + + + + +
1We inject the entity manager. This was set up in persistence.xml.
2We inject the UserTransaction, to allow us to programmatically control the transaction
3The getUserForUsername method can check whether a user with a matching username and password exists, and return it if it does.
4createUser 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
+
+
<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
+
+
@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!

+
+
+ + + + + +
+ + +
+

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
+
+
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();
+    }
+
+}
+
+
+
+ + + + + + + + + + + + + +
1We 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.
2We 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!
3We 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!

+
+
+
+
+
+

6. CDI + JSF + EJB + JTA + Bean Validation + JAX-RS + Arquillian: Kitchensink quickstart

+
+
+

This quickstart shows off all the new features of Jakarta EE, and makes a great starting point for your project.

+
+
+ + + + + +
+ + +
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.

+
+
+
+
+ + + + + +
+ + +
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 Installing and starting the JBoss server on Linux, Unix or Mac OS X or 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!

+
+
+ + + + + +
+ + +
+

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/33/Getting_Started_Guide.html b/33/Getting_Started_Guide.html new file mode 100644 index 000000000..78622cbb2 --- /dev/null +++ b/33/Getting_Started_Guide.html @@ -0,0 +1,1766 @@ + + + + + + + + +Getting Started Guide + + + + + + + +
+
+
+
+

© 2017 The original authors.

+
+ +
+
+
+

1. Getting Started with WildFly 33

+
+
+

WildFly 33 is the latest release in a series of JBoss open-source +application server offerings. WildFly 33 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 Jakarta technologies available in WildFly 33 +server configuration profiles.

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Jakarta EE Platform TechnologyJakarta EE Full PlatformJakarta EE Web +ProfileWildFly 33 Full ConfigurationWildFly 33 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 MVC 2.1 +(preview stability)

 — 

 — 

 — 

 — 

Jakarta Pages 3.1

X

X

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 Servlet 6.0

X

X

X

X

Jakarta SOAP with Attachments 3.0

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 Preview 33 is currently aiming at providing an early look at Jakarta EE 11, and therefore provides different versions of a number of the Jakarta specifications listed above. See EE 11 Support in WildFly Preview for details.

+
+
+
+
+

WildFly 33 also provides support for a number of MicroProfile technologies:

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MicroProfile TechnologyWildFly 33 Default ConfigurationWildFly 33 MicroProfile Configuration

MicroProfile Config 3.1

X

X

MicroProfile Fault Tolerance 4.0

 — 

X

MicroProfile Health 4.0

 — 

X

MicroProfile JWT Authentication 2.1

X

X

MicroProfile LRA 2.0

 — 

 — 

MicroProfile OpenAPI 3.1

 — 

X

MicroProfile Reactive Messaging 3.0

 — 

 — 

MicroProfile Rest Client 3.0

X

X

MicroProfile Streams Operators 3.0

 — 

 — 

MicroProfile Telemetry 1.1

 — 

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 33 for your application development. For in-depth +content on administrative features, refer to the WildFly 33 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 33 distributions can be obtained from:

+
+ +
+

Standard WildFly 33 provides a single distribution available in zip or tar file +formats.

+
+
+
    +
  • +

    wildfly-33.0.0.Final.zip

    +
  • +
  • +

    wildfly-33.0.0.Final.tar.gz

    +
  • +
+
+
+

WildFly Preview 33 also provides a single distribution available in zip or tar file +formats.

+
+
+
    +
  • +

    wildfly-preview-33.0.0.Final.zip

    +
  • +
  • +

    wildfly-preview-33.0.0.Final.tar.gz

    +
  • +
+
+
+
+

3.2. Installation

+
+

Simply extract your chosen download to the directory of your choice. You +can install WildFly 33 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 33, 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 33 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 33 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 33 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 33

+
+
+

To start WildFly 33 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 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 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 33 but can easily be replaced with your own if desired.

+
+
+
+
+
+

6. Managing your WildFly 33

+
+
+

WildFly 33 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 33 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/33/Getting_Started_on_OpenShift.html b/33/Getting_Started_on_OpenShift.html new file mode 100644 index 000000000..68d5828f5 --- /dev/null +++ b/33/Getting_Started_on_OpenShift.html @@ -0,0 +1,977 @@ + + + + + + + +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
+
+
+
+
+ +
+ + + \ No newline at end of file diff --git a/33/Glossary.html b/33/Glossary.html new file mode 100644 index 000000000..885319f57 --- /dev/null +++ b/33/Glossary.html @@ -0,0 +1,477 @@ + + + + + + + +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/33/Hacking_On_WildFly.html b/33/Hacking_On_WildFly.html new file mode 100644 index 000000000..57dace921 --- /dev/null +++ b/33/Hacking_On_WildFly.html @@ -0,0 +1,1310 @@ + + + + + + + + +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/33/High_Availability_Guide.html b/33/High_Availability_Guide.html new file mode 100644 index 000000000..2b8114aab --- /dev/null +++ b/33/High_Availability_Guide.html @@ -0,0 +1,6037 @@ + + + + + + + + +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 a 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 provided by the org.wildfly.extension.mod_cluster extension and the modcluster subsystem.

+
+
+

For more information about the project visit the project website (modcluster.io) and the documentation website (docs.modcluster.io).

+
+
+

5.1.1. Configuration

+
+
Instance ID
+
+

The instance-id (also called jvmRoute in the JBoss Web / Tomcat nomenclature) defaults to the jboss.node.name property passed on server startup (e.g. via -Djboss.node.name=myroute).

+
+
+
+
[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 attribute in the 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"
+    }
+}
+
+[standalone@localhost:9990 /] reload
+
+
+
+
+
Proxies
+
+

By default, mod_cluster is configured for discovery based on UDP Multicast. +To specify a static list of proxies, create a remote-socket-binding for each proxy and then reference them by the proxies attribute. +See the following configuration example:

+
+
+
+
[standalone@localhost:9990 /] /socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=proxy1:add(host=10.21.152.86, port=6666)
+{"outcome" => "success"}
+
+[standalone@localhost:9990 /] /socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=proxy2:add(host=10.21.152.87, port=6666)
+{"outcome" => "success"}
+
+[standalone@localhost:9990 /] /subsystem=modcluster/proxy=default:write-attribute(name=proxies, value=[proxy1, proxy2])
+{
+    "outcome" => "success",
+    "response-headers" => {
+        "operation-requires-reload" => true,
+        "process-state" => "reload-required"
+    }
+}
+
+[standalone@localhost:9990 /] reload
+
+
+
+
+
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, listener=ajp-other)
+reload
+
+
+
+
+
+

5.1.2. Runtime Operations

+
+

The mod_cluster subsystem supports several runtime operations on the proxy:

+
+
+
    +
  • +

    add-proxy

    +
  • +
  • +

    disable

    +
  • +
  • +

    disable-context

    +
  • +
  • +

    enable

    +
  • +
  • +

    enable-context

    +
  • +
  • +

    query

    +
  • +
  • +

    read-proxies-configuration

    +
  • +
  • +

    read-proxies-info

    +
  • +
  • +

    refresh

    +
  • +
  • +

    remove-proxy

    +
  • +
  • +

    reset

    +
  • +
  • +

    stop

    +
  • +
  • +

    stop-context

    +
  • +
+
+
+

The operations specific to the mod_cluster subsystem are divided into 3 categories:

+
+
+
    +
  • +

    ones that affect the configuration and require a restart of the subsystem

    +
  • +
  • +

    ones that just modify the behaviour temporarily,

    +
  • +
  • +

    and the ones that display information from the proxy.

    +
  • +
+
+
+
Operations displaying reverse proxy information
+
+

There are 2 operations that display how the proxy sees the node:

+
+
+
read-proxies-configuration
+
+

Sends a DUMP message to all reverse proxies the node is connected to, and displays the message received from them.

+
+
+
+
[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
+
+

Sends an INFO message to all reverse proxies the node is connected to, and displays the message received from them.

+
+
+
+
[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 to
+
+

There are 3 operations that could be used to manipulate the list of reverse proxies the node is connected to.

+
+
+
+
list-proxies
+
+

Displays the reverse proxies that are connected to the node. +The proxies are either discovered by the advertise mechanism or by the configured proxies attribute.

+
+
+
+
[standalone@localhost:9990 /] /subsystem=modcluster/proxy=default:list-proxies
+{
+    "outcome" => "success",
+    "result" => [
+        "proxy1:6666",
+        "proxy2:6666"
+    ]
+}
+
+
+
+
+
add-proxy
+
+

Adds a proxy to the discovered proxies at runtime without persisting to the server configuration:

+
+
+
+
[standalone@localhost:9990 /] /subsystem=modcluster/proxy=default:add-proxy(host=localhost, port=8090)
+{"outcome" => "success"}
+
+
+
+
+
remove-proxy
+
+

Removes a proxy from the discovered proxies at runtime without persisting to the server configuration:

+
+
+
+
[standalone@localhost:9990 /] /subsystem=modcluster/proxy=default:remove-proxy(host=localhost, port=8090)
+{"outcome" => "success"}
+
+
+
+
+
+ +
+

These operations allow you to send context related commands to the reverse proxies. +These are also issued automatically when deploying or un-deploying webapps.

+
+
+
enable-context
+
+

Informs reverse proxies that the given web context is ready receive requests.

+
+
+
+
[standalone@localhost:9990 /] /subsystem=modcluster/proxy=default:enable-context(context=/myapp, virtualhost=default-host)
+{"outcome" => "success"}
+
+
+
+
+
disable-context
+
+

Informs reverse proxies that they should not send any new session requests to the specified web context.

+
+
+
+
[standalone@localhost:9990 /] /subsystem=modcluster/proxy=default:disable-context(context=/myapp, virtualhost=default-host)
+{"outcome" => "success"}
+
+
+
+
+
stop-context
+
+

Informs reverse proxies that they should not send requests to the web context.

+
+
+
+
[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
+
+

Refreshes the node by sending a new CONFIG message to the reverse proxies.

+
+
+
+
[standalone@localhost:9990 /] /subsystem=modcluster/proxy=default:refresh
+{"outcome" => "success"}
+
+
+
+
+
reset
+
+

Reset the connection between the reverse proxy and the node.

+
+
+
+
+
+

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. Clustering in the Cloud

+
+
+

This section of the documentation describes topics relating to the deploying and running in a cloud environment.

+
+
+

6.1. Kubernetes

+
+

Kubernetes is an ideal environment for deploying and running highly available services. +This section describes the specifics of deploying HA applications built on WildFly in this cloud environment.

+
+
+

6.1.1. Role of the Distributed Cache Mode

+
+

WildFly uses Infinispan to provide high-availability of server-side state. +While there are multiple cache modes available, the 'distributed-cache' cache is optimal for cloud environments. +This cache mode stores data in a configurable number of cluster members (defaults to 2), +and thus allows users to elect the desired balance between availability and capacity. +The higher the number of owners, the greater availability (i.e. tolerance to failures), but reduces the effective heap capacity of the cluster. +There is a marginal network cost associated with more owners, but this is a secondary concern.

+
+
+

This cache mode relies on consistent hashing to determine the 'primary owner' and the 'backup owners' of given cache entries. +In order to achieve optimal performance, the load balancer deployed in front of the application server cluster:

+
+
+
    +
  1. +

    should route HTTP requests for a given session to the current primary owner,

    +
  2. +
  3. +

    as the cluster topology changes, in response to scaling or failures, Infinispan will rebalance its distributed session state in response. +To ensure optimal performance, the application server must be able to influence the session affinity decisions made by the load balancer such that subsequent requests for a given are routed to the preferred pod.

    +
  4. +
+
+
+

This can be achieved by configuring HAProxy Ingress Controller described below.

+
+
+
Changing Cache Mode in Deployment Image
+
+

Presently, the default configuration currently uses replicated caches. +This effectively fixes the heap capability of the cluster such that it cannot be increased by scaling up. +Thus, existing applications need to update the default cache mode to optimize scalability.

+
+
+

Applications built using Maven with WildFly Maven Plugin +to create an image can be easily configured to update the default cache mode. +This can be done by configuring a set of commands in the packaging step to reconfigure the bundled server. +The following infinispan.cli configuration script will reconfigure the infinispan subsystem to use the distributed cache for web sessions:

+
+
+
infinispan.cli
+
+
/subsystem=infinispan/cache-container=web/distributed-cache=sessions:add
+/subsystem=infinispan/cache-container=web/distributed-cache=sessions/component=expiration:add(interval=0)
+/subsystem=infinispan/cache-container=web:write-attribute(name=default-cache,value=sessions)
+
+
+
+

The Maven plugin configuration can then be updated to update the generated container image:

+
+
+
+
<plugin>
+    <groupId>org.wildfly.plugins</groupId>
+    <artifactId>wildfly-maven-plugin</artifactId>
+    <executions>
+        <execution>
+            <!-- ... -->
+            <configuration>
+                <!-- ... -->
+                <packaging-scripts>
+                    <packaging-script>
+                        <scripts>
+                            <script>infinispan.cli</script>
+                        </scripts>
+                    </packaging-script>
+                </packaging-scripts>
+            </configuration>
+        </execution>
+    </executions>
+</plugin>
+
+
+
+
+
+

6.1.2. Ingress Configuration

+
+

A Kubernetes Ingress is an object that manages external access to the services in a cluster, typically via HTTP. +It provides load balancing, SSL termination and name-based virtual hosting. +In order to support the affinity requirements described above, an Ingress Controller implementation, supporting L7 load balancing and exposes the requisite annotations for configuring session affinity, will need to be configured. +The following sections will configure an HAProxy Ingress Controller for optimal routing.

+
+
+
Configuring Affinity in Deployment Image
+
+

First, we will need to reconfigure the application server to store the affinity information in a separate cookie. +By default, WildFly encodes session affinity information in the JSESSIONID cookie value, which is already used to uniquely identify a session. +While this works well with the httpd family of load balancer modules (e.g. mod_cluster, mod_proxy_balancer, mod_jk) for which this mechanism was designed, +the current set of load balancers used in the cloud rely on a separate cookie for implementing sticky sessions (e.g. HAProxy), +and thus the default WildFly configuration lacks the ability to allow WildFly to guide requests for a given session to the server that can most efficiently handle it. +To resolve this, we need to configure the Undertow subsystem to use a separate cookie to send affinity information. +For configured distribution or replication mode caches, the load balancer needs to be made aware of the affinity. +As the topology of the cluster changes, the affinity will need to be updated.

+
+
+

The following undertow.cli configuration script will reconfigure the undertow subsystem to use a separate cookie named INGRESSCOOKIE to store the affinity information:

+
+
+
undertow.cli
+
+
/subsystem=undertow/servlet-container=default/setting=affinity-cookie:add(name=INGRESSCOOKIE)
+
+
+
+
+
Installing HAProxy Ingress Controller
+
+

The HAProxy Ingress Controller can be installed using Helm. First add the required repository:

+
+
+
+
$ helm repo add haproxy-ingress https://haproxy-ingress.github.io/charts
+"haproxy-ingress" has been added to your repositories
+
+
+
+

Now, the Ingress Controller can be installed to the Kubernetes cluster.

+
+
+
+
$ helm install haproxy-ingress haproxy-ingress/haproxy-ingress --create-namespace --namespace=ingress-controller
+NAME: haproxy-ingress
+LAST DEPLOYED: Tue Nov 14 16:18:10 2023
+NAMESPACE: ingress-controller
+STATUS: deployed
+REVISION: 1
+TEST SUITE: None
+NOTES:
+HAProxy Ingress has been installed!
+
+HAProxy is exposed as a `LoadBalancer` type service.
+It may take a few minutes for the LoadBalancer IP to be available.
+You can watch the status by running:
+
+    kubectl --namespace ingress-controller get services haproxy-ingress -o wide -w
+
+
+
+

Once the controller is available in the Kubernetes cluster, we can configure an Ingress object.

+
+
+
+
Configuring an Ingress
+
+

The following Ingress configuration can be used for optimal handling of session affinity. +Note that the name of the ingress, hosts, and the service name needs to be updated to actual values.

+
+
+
+
apiVersion: networking.k8s.io/v1
+kind: Ingress
+metadata:
+  name: example-ingress
+  namespace: default
+  annotations:
+    haproxy-ingress.github.io/affinity: cookie (1)
+    haproxy-ingress.github.io/backend-server-naming: pod (2)
+    haproxy-ingress.github.io/session-cookie-dynamic: "false" (3)
+    haproxy-ingress.github.io/session-cookie-keywords: preserve (4)
+    haproxy-ingress.github.io/session-cookie-preserve: "true" (5)
+spec:
+  ingressClassName: haproxy
+  tls:
+    - hosts:
+        - example.com
+  rules:
+    - host: example.com
+      http:
+        paths:
+          - path: /
+            pathType: Prefix
+            backend:
+              service:
+                name: example-service
+                port:
+                  number: 8080
+
+
+
+ + + + + + + + + + + + + + + + + + + + + +
1Use a cookie to store the affinity.
2Use the pod’s unique name as the backend server identity. This allows WildFly to update the existing affinity.
3Instructs the proxy to use a predictable backend server name.
4Configures preserving cookies as additional options for handling cookies.
5Prevent HAProxy from overwriting the Set-Cookie header written by the backend server.
+
+
+
+
+

6.1.3. Verifying Session Affinity

+
+

Verifying session affinity has proven to be notoriously challenging for users. +This is primarily because, even if the affinity handling is not set up optimally, +the tester will not observe any data loss in a distributed HA application. +If a request for a given HTTP session is routed to a pod that does not contain the requested session data locally, +it will remotely fetch the session data from another pod. +While this does not affect functionality per se, this has implications for performance, response time, concurrency, consistency, etc.

+
+
+

The following is a simple guide how to verify correctly functioning session affinity.

+
+
+

First, configure the Undertow web server to attach information about which cluster node actually processed the request. +This can be done by creating a filter that adds a header (called JBoss-Node-Name in this example) with a value of the jboss.node.name expression. +This value is equal to the Kubernetes pod ID.

+
+
+
undertow-filter.cli
+
+
/subsystem=undertow/configuration=filter/response-header=node-name-header:add(header-name="JBoss-Node-Name",header-value=${jboss.node.name})
+/subsystem=undertow/server=default-server/host=default-host/filter-ref=node-name-header:add()
+
+
+
+

Secondly, after deploying any distributable application, query any URL that creates an HTTP session.

+
+
+
undertow-filter.cli
+
+
$ curl http://example.com:8080/clusterbench/session --verbose --insecure --cookie-jar cookies.txt --cookie cookies.txt
+*   Trying 127.0.0.1:8080...
+* Connected to localhost (127.0.0.1) port 8080 (#0)
+> GET /clusterbench/session HTTP/1.1
+> Host: localhost:8080
+> User-Agent: curl/8.1.2
+> Accept: */*
+>
+< HTTP/1.1 200 OK
+< Connection: keep-alive
+< JBoss-Node-Name: de551585-8c99-4791-bcdb-45fdac253d87 (1)
+< Set-Cookie: INGRESSCOOKIE=de551585-8c99-4791-bcdb-45fdac253d87; path=/ (2)
+< Set-Cookie: JSESSIONID=EgxQStQ8zJ60lmDDO0VeY2H2OiLH3fdHRn2rqh5g; path=/clusterbench
+< X-JBoss-Node-Name: ribera
+< Content-Type: text/plain;charset=ISO-8859-1
+< Content-Length: 1
+< Date: Tue, 21 Nov 2023 14:58:48 GMT
+<
+* Connection #0 to host localhost left intact
+5
+
+
+
+ + + + + + + + + +
1This is the identity of the pod that actually processed the request.
2This is the affinity supplied by the application server.
+
+
+

If the affinity is working correctly, these two value will match when the cluster topology is stable.

+
+
+
+
+
+
+

7. 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.

+
+
+

7.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.

+
+
+

7.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)
+
+
+
+
+
+

7.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.

+
+
+
+
+

7.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.

+
+
+

7.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
+
+
+
+
+

7.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)
+
+
+
+
+
+

7.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.

+
+
+

7.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();
+    }
+}
+
+
+
+
+

7.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)
+
+
+
+
+

7.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();
+    }
+}
+
+
+
+
+
+
+
+

8. 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.

+
+
+

8.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;
+
+
+
+

8.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.

+
+
+
+
+
+

8.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.

+
+
+
+
+
+

8.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.

+
+
+
+
+
+

8.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!
+
+
+
+
+

8.2. Command Dispatcher

+
+

A command dispatcher is a mechanism for dispatching commands to be executed on members of a group.

+
+
+

8.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;
+
+
+
+
+

8.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.

+
+
+
+
+
+

8.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.

+
+
+
+

8.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.

+
+
+
+
+

8.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.

+
+
+

8.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!
+
+
+
+
+

8.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.

+
+
+

8.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!
+
+
+
+
+
+
+

9. JGroups

+
+
+

9.1. JGroups Subsystem

+
+

9.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). +
+
+
+
+

9.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.

    +
  • +
+
+
+
+
+
+

9.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>)
+
+
+
+
+
+
+

9.2. Member Discovery

+
+

9.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.

+
+
+
+

9.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.

+
+
+
+
+
+
+

10. Infinispan

+
+
+

10.1. Infinispan Subsystem

+
+

The Infinispan subsystem configures a set of Infinispan cache containers and cache configurations for use by WildFly clustering services.

+
+
+

10.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")
+
+
+
+
+
+
+

10.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.

+
+
+
+
+
+
+
+
+

11. Advanced Topics

+
+
+

This section aims to describe cross-cutting topics, such as marshalling.

+
+
+

11.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.

+
+
+

11.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

+
+
+
+

11.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.

+
+
+
+
+
+
+

12. 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.

+
+
+

12.1. Preparation & Scenario

+
+

12.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).

    +
  • +
+
+
+
+

12.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.

+
+
+
+
+

12.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-33.0.0.Final.zip
+cd wildfly-33.0.0.Final/bin
+./domain.sh
+
+
+
+

If everything ok we should see WildFly successfully startup in domain +mode:

+
+
+
+
wildfly-33.0.0.Final/bin$ ./domain.sh
+=========================================================================
+
+  JBoss Bootstrap Environment
+
+  JBOSS_HOME: /Users/weli/Downloads/wildfly-33.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 33.0.0.Final "Kenny" started in 8860ms - Started 210 of 258 services (833 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.

+
+
+
+

12.3. Domain Configuration

+
+

12.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>
+
+
+
+
+

12.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!

+
+
+
+
+
+

12.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.

+
+
+
+

12.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
+
+
+
+
+

12.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. +
+
+
+
+

12.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/33/Installation_Guide.html b/33/Installation_Guide.html new file mode 100644 index 000000000..e9bc55797 --- /dev/null +++ b/33/Installation_Guide.html @@ -0,0 +1,635 @@ + + + + + + + + +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/33/Migration_Guide.html b/33/Migration_Guide.html new file mode 100644 index 000000000..36a9cc968 --- /dev/null +++ b/33/Migration_Guide.html @@ -0,0 +1,901 @@ + + + + + + + + +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/33/Quickstarts.html b/33/Quickstarts.html new file mode 100644 index 000000000..bb247e658 --- /dev/null +++ b/33/Quickstarts.html @@ -0,0 +1,509 @@ + + + + + + + + +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/33/Testsuite.html b/33/Testsuite.html new file mode 100644 index 000000000..8cfb424d1 --- /dev/null +++ b/33/Testsuite.html @@ -0,0 +1,3699 @@ + + + + + + + + +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 33 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
+
+
+
+
+
+

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 main: +git fetch upstream # Provided you have the wildfly/wildfly 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://ci.wildfly.org/viewType.html?buildTypeId=WF_Nightly.

    +
    +
      +
    • +

      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.

    +
  • +
  • +

    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 33 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 33 +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 33 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 a Jakarta Enterprise Beans bean, 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 33 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 finally {…​} 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/33/WildFly_Elytron_Security.html b/33/WildFly_Elytron_Security.html new file mode 100644 index 000000000..b2b79faad --- /dev/null +++ b/33/WildFly_Elytron_Security.html @@ -0,0 +1,16147 @@ + + + + + + + +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. When credentials are updated externally, the user’s obsolete credential will be removed when the user authenticates with the updated credential.

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.

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.

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.

jaas-realm

A security realm definition that uses JAAS configuration file to initialize LoginContext that is used to obtain identities.

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.

+
+
+

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.

dynamic-client-ssl-context

An SSL context for use on the client side of a +connection. It delegates to alternate instances based on peer information +and rules provided in its authentication-context attribute.

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}])
+
+
+
+
+
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.

+
+
+
Dynamic client SSLContext
+
+

The dynamic-client-ssl-context resource is only available in the community stability level. For more information on how to configure stability levels, please refer to the Admin Guide, particularly the +Feature stability levels section.

+
+
+

Using the Elytron subsystem, it is possible to configure an SSLContext that will delegate to alternate instances based on host and port you are connecting to.

+
+
+

You can add such SSLContext as follows:

+
+
+
+
/subsystem=elytron/dynamic-client-ssl-context=example-dynamic-ssl-context:add(authentication-context=example-authentication-context)
+
+
+
+

The attribute authentication-context refers to the resource authentication-context configured in the elytron subsystem. +This attribute will be used to obtain rules based on which the dynamic client SSL context chooses the specific SSL context to use when making a connection.

+
+
+

Example of adding authentication-context:

+
+
+
+
/subsystem=elytron/authentication-context=ac:add(match-rules=[{match-port=9443,ssl-context=client1-ssl-context},{match-host="www.example.com",ssl-context=client2-ssl-context}])
+
+
+
+
+
+

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. Distributed Security Realm

+
+

The distributed realm allows combining identities located across multiple security realms of any type into a single security realm.

+
+
+

The distributed-realm resource contains the following attributes: -

+
+
+
    +
  • +

    realms - List of realms in the order they should be queried

    +
  • +
  • +

    ignore-unavailable-realms - Whether subsequent realms should be checked after an unavailable realm is reached. The default value is false.

    +
  • +
  • +

    emit-events - Whether a SecurityEvent signifying realm unavailability should be emitted. The default value is true.

    +
  • +
+
+
+
Defining a Distributed Realm
+
+

As an example, assuming realms named properties-realm, ldap-realm and jdbc-realm have already been configured, then a distributed-realm that references these three realms can be created as follows:

+
+
+
+
/subsystem=elytron/distributed-realm=distributedRealmExample:add(realms=[properties-realm, ldap-realm, jdbc-realm])
+
+
+
+

When configuring a distributed-realm, it is possible to ignore any unavailable realms by setting ignore-unavailable-realms to true. When retrieving an identity from a distributed-realm, each of the configured realms is attempted sequentially until a realm containing the identity is found. If a security realm becomes unavailable for some reason, if ignore-unavailable-realms is true, any subsequent realms will still be checked. If ignore-unavailable-realms is true and searched identity happened to be stored in the unavailable realm, authentication fails, and 401 response wil be received. If ignore-unavailable-realms is set to false or not set, and the realm happens to be unavailable then an org.wildfly.security.auth.server.RealmUnavailableException will be thrown and no further realms will be attempted.

+
+
+
+
/subsystem=elytron/distributed-realm=distributedRealmExample:add(realms=[properties-realm, ldap-realm, jdbc-realm], ignore-unavailable-realms=true)
+
+
+
+

While ignore-unavailable-realms is set to true, emit-events is also set to true by default, so the SecurityEvent will be emitted in case any of the attempted realms is unavailable. +This can be turned off by setting emit-events to false.

+
+
+
+
/subsystem=elytron/distributed-realm=distributedRealmExample:add(realms=[properties-realm, ldap-realm, jdbc-realm], ignore-unavailable-realms=true, emit-events=false)
+
+
+
+
+
+

4.5.4. Failover Security Realm

+
+

The failover security realm allows for a realm to fail-over to another realm in case the first is unavailable.

+
+
+

The failover-realm resource contains the following attributes: -

+
+
+
    +
  • +

    delegate-realm - The realm to use as a default.

    +
  • +
  • +

    failover-realm - The realm to use in case delegate-realm is not available.

    +
  • +
  • +

    emit-events - Whenever to emit SecurityEvent in case the delegate-realm is unavailable.

    +
  • +
+
+
+
Defining a Failover
+
+

Assuming two realms properties-realm and jdbc-realm already exist an failover-realm combining these two can be created with the following command.

+
+
+
+
/subsystem=elytron/failover-realm=theRealm:add(delegate-realm=jdbc-realm, failover-realm=properties-realm)
+
+
+
+ + + + + +
+ + +The failover-realm keeps modifiability of the delegate-realm unless failover happens. In that case, the failover-realm +will function as unmodifiable. +
+
+
+
+
+

4.5.5. 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.

+
+
+
+
batch
+/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)
+run-batch
+reload
+/subsystem=elytron/filesystem-realm=fsRealm:update-key-pair()
+
+
+
+ + + + + +
+ + +An update of attributes requires a reload or restart +to take effect. Otherwise, the update-key-pair operation can result in an inconsistent state. +
+
+
+
+
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.

+
+
+
+
Adding Integrity Checking for an Existing Filesystem Realm
+
+

Integrity checking can also be added to an existing filesystem realm using the WildFly Elytron Tool. This takes an existing filesystem realm and creates a new filesystem realm with integrity checking support. The integrity checking uses a public and private key pair. The key pair will be used to create a new filesystem realm where each identity will be signed using the private key. This makes it possible to verify that identities in the realm haven’t been tampered with.

+
+
+

The feature also creates a CLI script that can be used to add a key-store resource and a filesystem-realm resource in the Elytron subsystem that makes use of the newly signed realm content.

+
+
+

In order to use this feature, we can make use of the elytron-tool.sh (or .bat for windows) script. The format for the command to add integrity checking is as follows:

+
+
+
+
$ WILDFLY_HOME/bin/elytron-tool.sh filesystem-realm-integrity --input-location <existing_path> --output-location <new_path> --keystore <ks_path> --password <ks_password> --summary
+
+
+
+

The required options include:

+
+
+
    +
  • +

    input-location: This is the path for the existing filesystem realm that does not have an integrity checking. This must be the path to the directory containing the filesystem. This can also be specified using -i. This must be an existing path.

    +
  • +
  • +

    output-location: This attribute will be the path for the new filesystem realm. This filesystem realm will include integrity checking. This can also be specified using -o. This path is also a path to a directory.

    +
  • +
  • +

    keystore: Path for the keystore that holds the key pair for integrity checking. Can also be specified using -k.

    +
  • +
  • +

    password: This is the password for the keystore. This can also be specified using -p.

    +
  • +
+
+
+

The elytron tool also allows for the conversion to be done in bulk, as in multiple filesystems can be converted all at once. This can be done using the following command:

+
+
+
+
$ WILDFLY_HOME/bin/elytron-tool.sh filesystem-realm-integrity --bulk-convert <descriptor>
+
+
+
+

In this case <descriptor> is a file, which contains the instructions for bulk conversion. An example of a descriptor file is shown below. Notice that each block contains the options to use for converting a single realm. Additionally, in addition to specifying the input-location, we have specified the realm-name as well.

+
+
+
+
input-location:standalone/configuration/unsigned-realm-one
+output-location:standalone/configuration/signed
+keystore:myKeyStore
+password:myPassword
+key-pair:myKeyPair
+realm-name:realm-one
+
+input-location:standalone/configuration/unsigned-realm-two
+output-location:standalone/configuration/signed
+keystore:myKeyStore
+password:myPassword
+key-pair:myKeyPair
+realm-name:realm-two
+
+
+
+

There are other options that can be specified for converting a filesystem realm, the details of which can be found using the ./bin/elytron-tool.sh filesystem-realm-integrity -h command.

+
+
+
+
Updating WildFly Elytron Tool Generated CLI Scripts for Domain Mode
+
+

As mentioned above, some of the WildFly Elytron Tool commands create a CLI script that can be used to add resources to +the Elytron subsystem. Some examples of these CLI scripts include:

+
+
+
    +
  1. +

    The <FILESYSTEM-REALM-NAME>.cli script generated when the filesystem-realm-encrypt command is used to encrypt an existing filesystem realm.

    +
  2. +
  3. +

    The <FILESYSTEM-REALM-NAME>.cli script generated when the filesystem-realm-integrity command is used to add integrity checking to existing filesystem realms.

    +
  4. +
  5. +

    The <FILESYSTEM-REALM-NAME>.sh script generated when the filesystem-realm command is used to create a filesystem realm from a legacy properties file.

    +
  6. +
+
+
+

However, the generated CLI script can only be used directly if the server is running in Standalone mode. For Domain mode +the script needs to be updated. The steps for updating the script are as follows:

+
+
+
    +
  • +

    Update the file contents to add a /profile=<PROFILE_NAME> in front of all occurrences of the +/subsystem=…​ strings as found in the file (so in front of /subsystem=elytron…​); where <PROFILE_NAME> is the profile +name that you are using in your WildFly domain.xml (Hence, <PROFILE_NAME> can be either default, ha, full, full-ha, or +any other profile-name defined and used in the domain.xml.)

    +
  • +
  • +

    Save and Exit the file editor.

    +
  • +
+
+
+

Now you can use the CLI script to update server configurations in domain mode.

+
+
+

Please note that this same basic procedure can also apply to a Host Controller configuration (i.e. host.xml content). +However, in that case, instead of specifying profile=<PROFILE_NAME>, we would use host=<HC_NAME> to specify the Host +Controller name.

+
+
+
+
+

4.5.6. 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.

+
+
+
+
+

4.5.7. 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

+
+
+
+
+
+
+
+
+

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.

+
+
+ + + + + +
+ + +
+

During JWT validation, if the jku header is present in a token, it must exactly match one of the values +from a configured string of allowed values or token validation will fail. The allowed jku values for a token-realm +can be specified as a space separated string using the wildfly.elytron.jwt.allowed.jku.values.<realm-name> system +property.

+
+
+

As an example, to set the allowed jku values for the JwtRealm to https://somehost.com and https://someotherhost.com, +we’d need to set the wildfly.elytron.jwt.allowed.jku.values.JwtRealm system property to "https://somehost.com https://someotherhost.com".

+
+
+
+
+
+

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 33 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. When credentials are updated externally in the LDAP server, the user’s obsolete credential will be removed when the user successfully authenticates with the updated credential.

+
+
+

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/33/WildFly_and_WildFly_Preview.html b/33/WildFly_and_WildFly_Preview.html new file mode 100644 index 000000000..7e599a318 --- /dev/null +++ b/33/WildFly_and_WildFly_Preview.html @@ -0,0 +1,843 @@ + + + + + + + + +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) and the Maven coordinate is org.wildlfly:wildfly-preview-feature-pack. +This feature pack is the WildFly Preview analogue to main WildFly’s wildfly@maven(org.jboss.universe:community-universe) (Maven coordinate org.wildfly:wildfly-galleon-pack).

+
+
+
+
+

2. WildFly Preview and Jakarta EE

+
+
+

Often, but not always, a key difference between standard WildFly and WildFly Preview is support for different versions of Jakarta EE. The WildFly project uses WildFly Preview to showcase full or partial support for new versions of Jakarta EE, including releases like EE 11 that are not yet released for general availability.

+
+
+

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.

+
+
+

EE 11 Support in WildFly Preview

+
+

The 32 release introduces a significant inflection in how we are using WildFly Preview. Beginning with this release we are starting to use WildFly Preview to provide a look at what we’re doing for Jakarta EE 11 support. EE 11 is not yet GA, and standard WildFly won’t support EE 11 before the WildFly 34 release, at earliest. But there are milestone, release candidate and final releases of many EE 11 specs and implementations available, so we decided to provide those in WildFly Preview. This means for a number of EE APIs, WildFly Preview no long provides an EE 10 compatible implementation.

+
+
+

However, for a number of specifications that are planning changes for EE 11 we are still offering the EE 10 variant. In future releases we’ll shift those to the EE 11 variants.

+
+
+

The following table lists the various Jakarta technologies offered by WildFly Preview 32, along with information about which EE platform version the specification relates to. Note that a number of Jakarta specifications are unchanged between EE 10 and EE 11, while other EE technologies that WildFly offers are not part of EE 11.

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Jakarta EE TechnologySpecification VersionEE Version

Jakarta Activation

2.1

10 & 11

Jakarta Annotations

3.0.0

11

Jakarta Authentication

3.0

10

Jakarta Authorization

3.0.0-M2

11

Jakarta Batch

2.1

10 & 11

Jakarta Concurrency

3.1.0-M1

11

Jakarta Connectors

2.1

10 & 11

Jakarta Contexts and Dependency Injection

4.1.0

11

Jakarta Debugging Support for Other Languages

2.0

10 & 11

Jakarta Dependency Injection

2.0

10 & 11

Jakarta Enterprise Beans

4.0

10 & 11

Jakarta Enterprise Web Services

2.0

10 1

Jakarta Expression Language

6.0.0

11

Jakarta Faces

4.1.0-M1

11

Jakarta Interceptors

2.2.0

11

Jakarta JSON Binding

3.0

10 & 11

Jakarta JSON Processing

2.1

10 & 11

Jakarta Mail

2.1

10 & 11

Jakarta Messaging

3.1

10 & 11

Jakarta MVC +(preview stability only)

2.1

N/A 2

Jakarta Pages

3.1

10

Jakarta Persistence

3.2.0-M2

11

Jakarta RESTful Web Services

4.0

11

Jakarta Security

4.0.0-M2

11

Jakarta Servlet

6.1.0-M2

11

Jakarta SOAP with Attachments

3.0

10 1

Jakarta Standard Tag Library

3.0

10 & 11

Jakarta Transactions

2.0

10 & 11

Jakarta Validation

3.1.0-M2

11

Jakarta WebSocket

2.2.0-M1

11

Jakarta XML Binding

4.0

10 1

Jakarta XML Web Services

4.0

10 1

+
+

Notes:

+
+
+
    +
  1. +

    This Jakarta EE 10 technology is not part of EE 11 but is still provided by WildFly Preview.

    +
  2. +
  3. +

    Jakarta MVC is an independent specification that is not part of the Jakarta EE Platform or the Web or Core Profile.

    +
  4. +
+
+
+
+

2.1. WildFly Preview Support for EE 8 Deployments

+
+

The APIs that WildFly Preview exposes to deployments are the EE 10 or 11 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 or later. 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. WildFly Preview and Java SE 11

+
+
+

Standard WildFly supports Java SE 11, 17 and 21, but, as a result of this shift to EE 11 APIs, WildFly Preview no longer supports running on Java SE 11. Going forward, if you want to use WildFly Preview you’ll need to use SE 17 or higher. A number of EE 11 APIs no longer produce SE 11 compatible binaries, which means an EE 11 runtime can no longer support SE 11.

+
+
+ + + + + +
+ + +
+

This removal of support for SE 11 has no impact on standard WildFly. Standard WildFly 32 continues to support running on SE 11. We do, however, encourage users to move to SE 17 or later, as the general Java ecosystem is moving away from SE 11 support, and eventually standard WildFly will as well.

+
+
+
+
+
+
+

4. 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 differences 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.

    +
  • +
  • +

    The Hibernate ORM integration used by the JPA subsystem’s Hibernate Search feature supports using outbox polling as coordination strategy for automatic indexing.

    +
  • +
+
+
+
+
+ + + \ No newline at end of file diff --git a/33/downloads/acme-subsystem.zip b/33/downloads/acme-subsystem.zip new file mode 100644 index 0000000000000000000000000000000000000000..c486cccb12fa60a3f4a301bcbb3190b16803e66d GIT binary patch literal 22344 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 literal 0 HcmV?d00001 diff --git a/33/downloads/test1.zip b/33/downloads/test1.zip new file mode 100644 index 0000000000000000000000000000000000000000..d9e10cbd0b9057c4a1de1656a0e0daa795e5066d GIT binary patch literal 16503 zcmeHNcRba9)V~dTBzw=uURja7vkKYd#T?O zO&twzs^lKM@^|R#mJMCV9^Vts{{ z*=N0)O_RZLAtH|tlqo7c+%&D|xUnOTM)1bUvR@TE#vu==tdm81S|(9EA*9?#fIsJh zJv8T@I4D*;qWC;zUa!XS5^&+;h2j+ILJRVD*~{un9ydB$GYX`OA68C))+0?Z95U6W zU(@!gR|~51JfS+TrQ;MDsaqEJzz@0anQ&1fvgG>0R>;iRcg`9}?EN>WCyh zSoiAnxg}vB)zg1tWj68pt`m!)PIN;et7(Tikr3)c>|H0?fo&~7Mv!e6_8#uSw20T( zcR6vS+7=1C%hd&(pM*d8IxW5Fp~IKzTb#;P+vb?;!x#_{P!c<@Xuz+~oMAOa8BCxv zAIUm&j*BseC3!|4T%OP~kjhHiPr3>C9BNp0HoL~|Z1$5IxacT7p!>n3rg{o!O$7H9 z(fyKbP?SErt-w>dW$yVH?Xw4OdKM4|wZDsLL8g$fLv}(n2MfKYfa{EjuaRf$3$iCY zx{ISs+PLoGP2`tU^C{IUw}?oQftDZ3T0O#CHr;?*B1sK{51PhmraJQYI#1f-KG&Q4ks&JntSHLmqhjn>`-FXY>(XjpnTtQ2lB zV)Mnsdy;GZjHukbRV2DgA_AQ}#wJjcA<);~Ot$6*?KkN73I@`=eZ$h} zq+%SyiSv`&0#60%8oGJu$d#C8JjW-il;>zJ|1pflG#R8(+OWB&$dEvbl(p_)+K*EJ z00A}tfVC4mJ6mgZCu^(i_~b$BRN28=)va;WcAO8>-N4<4aIi+BMWe%}CfUxd(U-tc zvXfAu_}hF^pJGY^8%bnbs=#tpSoB<9!2F<%v(CC|1eN?(JoyVwB?@@?C(_FB`D^k- zNpW!^g3GjqFt_4{U2OfnREvi*tzkyc_!F+1l=3l@r}Kcwa73E53X!j85xCus>7d%Y zI$B4Y>-g|X`@nq9uz~jAgc(n|N@qC1OS)mZh#nJ2tVZzGmf ztbDHF*~Bt~Geb4>Z`^MIWQ+3)Fz1f;>dj!%ZpB*nwe}JVpBTqCa9-4^7d2RW9ES8< z4t>j}%Hfq9Mg2Jw2gs8m6sn8pk8SaQw(pVLX~W@oKtw-B!_-VNb>&uNmpHtiKvx` zYW~FL&~LLAPFQAGPZaadHJDmll9O~{yp+S&tEKgbL`BTGHC5jYW%Alv{dLWsrC0B= zQKy%Fe5&`J)@qhbrddzg18Kotta+>4(>IfV7=?AqRyOs##0_Z(PDh)ny~zFX#<%H_ z^P$@9ZO>Z?Sj+C_g1*nMVY2vh*%?m?Xi(J*?k9V$@9YsSpI`5*K|CEU>luaolql}?byrCeP`Y_BU{TT?odszsW z2b4E}+_3hhnD*XuOuk-<8NFV0nRSHr^5S>n5A^3=mL?I^k^OAq>C+~8ce#81QGx>{ zYuY+bU6?uJP273MOgeRgoZJW4!vw7DwMVNEklOes(@ebGmJ*kzc9>~ z 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 literal 0 HcmV?d00001 diff --git a/33/downloads/test2.zip b/33/downloads/test2.zip new file mode 100644 index 0000000000000000000000000000000000000000..1e0d50ad52dd31dac1e52033c3deceaa9b010ff5 GIT binary patch literal 14591 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 AU;qFB literal 0 HcmV?d00001 diff --git a/33/images/250px-Public_key_making.svg.png b/33/images/250px-Public_key_making.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..a26373b2d67140618b8b5eb59e718a6c52e59258 GIT binary patch literal 47297 zcmXtf1yozj^EMP(C=@I1)*{8-p`}=%IK|y5?hd867k4RAptw6h3KW7ACjcoj8Qx%H zl3-)Xk)S`<%=YynEFgGyJGDbKd;S|N4C zB>EnNSpPIS&x>E*G>fr2z6BYMw_B^Uq1w)q>lVfrb4q>8sb{`uMXS9xnXH9LmhRH{ z(AxoUD9x?V2I&3WA&L3_djI#I0uP)HtlPA;K-at31{u2XOZuINt|H|s{orGU@|?r7h~jnn#P(l`@^p`ic9{a+I{rb7=2L3QeDBy*b-YumYvBL9zOX%(NsIj1Ru~72=jk?>P6$Z4l|Hbg^ zpMC9%D&gB5kpNmh_BlZ5Lf1LdnMTW^JuTiJ6^C*}@*-93{kG~y!<-9_bglOxf$%LM zW%+Q}>@O3BR_>sSS1pDF>xYBU7%(kyhr3qYN_#?6rgABob&t=%&+SQT35r@OwB$4! zSk~wDiodj|^)zS#Nv(1j3|n5G6V!@+C0`i26;zmvF#y)P=L=tc-EMAV@Qx`-Z=8MY#h{GV^Vl_Vf1ke>kx|0T$bU;L7Ng1U6}Z1 zpXAfH(3LM}4GqC`Db0e-{vw^V;yrcTG#N{9uP_B9IJo&dPYbE)@^t1)`@?ZreQ5!& zZC^6z_tWc*<57Zj>BYoDzch9F-ik7zhp@w`5`5Nhm_Ov&^9uro_=yn2JIs$}S4;M; z3nT9>_yi~-;I`^xrqQo39tF`C#!my5+aJRV&+gAb?I8kJ^-UGNC5@=kUoqABqUn3||>RXjmK9uhk!>g$iA#$*JvRI=NjY z@9V0b6gHBZ$+e<=kN%37(a8^RT&O6!u&w|~Y1*tN>$44UA-kM95P6O}&p?EDUkI+@ zJ!L>>P$)vmX5lIa8V{2q=!86)e}^Jm2>VPHeM6XW&g zwLUuzFbg?D!Jn%VoMmPj7H%f-BEa{ImVcO#DJgUdlCzLPRsMk^@hm1OHRs#eF~(Iz zJ+zoKcR!k(cI{)x)pC4R3lMV>tLjW$!j0!QDgSz{=>1`d)sp2`V7kV?ByC#P(O0h8t$T1t)|sQ|HJ1Bj%O3P6tM~W)@A9-izBm3Q5NaqVzpk6g|59DMooN75$|!r zelU55v=uZDJ{4b!rQgd^b{yp8w{W8HA9-Y&Q8O6!Lta!Az&INaD1rhJ-l@b?T`U7G7tJ zrzmf633DLGc`VcT&uaxDVZvuF_+mqbC9N|=5suS8oyIbqqS(r@TV9|iHAJtAEh^&l zPb(AF8$x*od6ms#;uWKu6S*F5_>oMz_ua*}ym62@Ub}}us{1r_=dF{%m+-a0Q0V5Q z@=+^BH6tAI)hM&s=&%x67%i9nBJquuh3#9=aKHDbi}2P??q)B$TyHl`TZ$J~0Udnc z&(Caaz=W&WhCfR__))e`6W+cG&RLw%@M~c*Ogo-c_#=A!Fa4=3gsa?U59OVjnTO5bUm-1ysgfUs8`xiDNOg5~&pOc5i2JEmd z!(lLAkT7B65KYANW1w@-;p1EZoh(Bw(l5u|6iv1+ti9`8wl1~;3&LZw09;^?h!i4p zjVS=bGxU8zdu+t2npNQ7DYPE24FLis8?#L5eI#N-^8x}SSQ%lJYu#gxkRo)o%g6m@ zOl%gzz7S(Z4or9F3R+c=UHO#|eh#|#*-Z2O!l61Cxg6H+Gz7^ZDkn*avkXGlQf6=T z@z0mFd#J}Ma;684GzHu#6ZdSBY@xT@#ZIt4%?*)Duz4|AlA(-oT)2JVwv05I9X>uk++QaJ(ukrk2fI& zehd9bLwekjxT>MYef==E@@Kg7%+DS+Mi*t5;oFOp_JkZpILZ;h9dSBQD)ieih z0dRl{a?Xg+^@n{yeA?Yyz+-ad*8&Xay-6-svfJ)MNPG%)oxHv-R$oP*;pG816wh_v zr|s!Vz2UaJK98;6-Obn8?rM*^aeTP%lo_kd&h;Umz_eB;WtV9Ik?eUZvOY>0dYhN9 z?zZNCKwtORnV;s^YA4bMq!T~)hdy+jcWvJ{T-SV@0wd>+#~#Wlv#8ccb$5J&4fCk? zy*>SJk^DO}Q-pUAb@B4kQGA*+ zYq-kjHh4S|@jGf?pKcG`sjXQ@)K0v2)9CGn%LMn}GhYL)_bX-Gvs0++hrrF@+o89c zm-7&HVKm4n(>>@i;FOCVkaUm#uim50+fG1b(l-8Us~Ta{VLKWJ#}}%^>^qiN%;(RK z&7P{;5fAvzog|jUI{f`bPSXcjyE9h#8V;#OzvjmA09L8=~6LGCm`7E1*!_O%!MSvb5ID0Aj2wk6^)jKQkxK!02mNgF1E+l?Bf{y1DhGB8hflF>#=!Y-k*0o-;^`*vdRf#gy{E`=gb zDF)G-qY0)O?F20~uNH6M59$mk#7AzE%Lo~9o8}~(D^!4T=|3dhY zP2^jj)vsGj)?wV@GJBX1GT2Ve?sTM$BqVLk>gK?f| zBm8Th_DL>kc8v4&KRMU~L)vyF=7_Wmk`gBi`m+J5Rbp6B3V5iP=-Ks7kcPg zA3ZPgZ#NWk0v3Q8OqQ@V3DN690$v~BK1dy6O_>l z4Hc0M|W%Ya; z4TV9NzHNtI6RABeB{Mtc%`WI&oVNEA?9C9*)BC5+_5oo&&UR;3p`$yFF2e;Ut+2jP zt6})5JIU{4Df@{>?_?zMIxU(U<9ya9AWons_*w!#;qfp`AMmy|J@GB_nS&T-eN9tG zhg>tLOt+Rf@=sGjps}GTda=g2mZVpjBEimxj#QnGY8{Z9a>6@j-yX}|q^_u?MMfI% z81=69SfXJ6T;Mi;;QigmF`?G^L0)JM@zWh(&hLW#SIEg1(dIe1>Mz@?nYxw1`!AFF zZZOh|T9Xe&`cO8Hr2hIqk5TM>@k+()?gbDM^zA>BRWa*Kn|neKe>)SEa76)Gf+RGm z>^&MM#G7XyiF_(6T09hBz+Aw(_T0jtx4F6#F;`FWJPD>R^A1Q_2&CWI=nhG~z+2+I zB(C55OaDlTTZDM6*{T5VL*yfuA$;&$BX%iAdZ6z*@M4Vs&23M+=sECv$wzn?BLDFm z!iyNu+df@S`PKL!6=>bOn%WGkmCDGBKCg^e?|5~RvNx6Q&J0~QoFA)Qlaufm+ zw3u$??m75IFyaeXc65`!&S$Q~@+4@3ooagWn6|^DBoiFnWE5(3JP*f#l>UoCoI#t_ zD0z^oUWEL2rS;#~w)!PPamzNwAy2BhXQA25&<8a8%Cpe)Ir@9*9w`YnQ-8|DaK*~t zhnM+>FGtMoEYW-(Px2^3599TbBZvuz%k24O=##t-p?R|2>_tQ^RW(6K9%>1Ub2STT z+3pqf7P`6T+!IHOA`U}04(Jijvydwi*?u5`^JN~SI6RHjpbwEpb64;ryBjIO2Rkwn zy_X0b+{%LfG0V5xUB?o;Tq?4?_m+{nTdCH6oTZ(=mcj2|g&p%mui9=zU zK93W5ZWXLzS5HXvfmH*RkOMNbwq95?yKz_iIIgOJ-dRX-7P*$=_psH}{qSi&=E)!T zSleHgkFIu6KRQGO;+V}sgsC~Ru)lrDl1RVktiHFvbRui0HnO~dr5c!V2%E*!|8U~*^9pgXq z>ASRRzdk2kEHG?>Csy{sXPgPuZYht*(2VsbHiE zN&T7%%F>Om3q#YSw_}X}MKk*{SO#njSLG5_(pPN5!CB}UtG?`u%h-mBqG{W=6#-NB zg5GhmEm|xWOM7>CO*8QX^b}-%4k>b5;pdtp#p$x+*?C?=Fll9ZB}z|$-vbXP;_#sz zN7vou2bs@0jty74-4vaN0X=JA2O4pOdIZIy$%y7(9q~v4$67fi4{j01gFG@z)snr`iz~0__4V z3KKu8Hos<+g8^Y*-tj-}*8eQUrj6oUgQ@-|kp9l;=k%22s-QG>%Ozr^p49x<8i{Ls<2`Ks1cv*Y5m zcExf1AQiQcHy7Et`ZQ6b^t-qpnewuI(hZ2{5v)q30xZ+q!{6|gp@v)47CXR#xmVe@ zedT<<xa(!e*LS0NW4{EPV+hnjs7{=6Mscwb1T%LLl>JHtWp# zF6m+U()AVfPZ!EjlrlHZR!4TGj3zC^Z>6}6g|m~TaWHDw%H!QS|IE0JLPk5 z&J9W_^x{KA>3Lpj7gaRav7&-{E17di9iSXe)4@;g2pW#O3wWc|=5i%3<*I_5SRnJm z*bQa~@#$RKa}||%rJv`LSyff;dsEzQwl3(5{m0{}UuofmetmDLS+Snr(2D|*-tZ#? zWTYss0(Sc$hUp}BD%?+H$>e!I=;_YDa8#}F5gr)bl}y7PZbQV$?Q85xC#`V0IXbJp z9Xo^pPp=11onmnYBTNlh)h;(wLQ@6k@4Tpg)2darEN5W}M%*ij4nEgA{;TI3gQ z3sM}Xz&XbsZM4w0G-@oS@YjT?#Gw~@34krE28Hp0n`Gu+bkw02?7t!R_!UnV#1n{Q zfYp(A{U1f4r&b2Y`(8r%nh{~so+JJUs~5iq9$%a17yn+Ioj=KRs`;Ft z_liSBvN%(#$vNQlQsc}!88@oJKzo%%uB@JiEdT!^WMY{oNBi=WLf}qvPd=!~A0v^q zNZGxV#}6MIa-=AB1L#vaO~FVAfi&yKX>%SEF+SgQtSd(TC8k|UMhsv{AWb^9Ue`T! z0}iU~j^OoW_qDE`2YTxm&))F_af8>dm>rY_I2P@5V)c3>?m{15X93QzB>Fsmv4Wmf zikS2B?Culme?8_qGRCo?yuuJPfJd|R(_L4!2K>dYok{OmfXkS#-Y?S|Wqf3{gz7s< zAEhRpoz&2$deM9EQ)F||J&mqSI>-9M@yFxL=gDJBJ^9T=x19fpH+RgwtdiiQf)Wq+AIj0-kR#0f~D0E)-_5C}29hZhLDBqv^+SBFHIyXSz4LNFqGv$lkd zIwWjGZ-GxqK*$ZX=p3%#(8u=C%o?u3{U*=R&x*SLn%)QqXba}mu4f#rx=0CSKAe>3@+Gg8MWf zR`+mKRIxf0Zp zbI-ne{VtNUAkw=4+R?~_DVh{+RX?d%*~)^=^vDqUb2_&~NV9gGI0uh8Is`5?PZyke z{ItnKr1d9QwR=eHE-abBx&OVJ7u@P%*JXyqXusy!+pU%i zfa{@m+%rQ(?vL>L;3Xmr4|*YmIqf}kwO#APwXwR6C_kFidoykDxJ4`Z5Kj*@iwv0= z8(wf_*%HT3N&_r4fSiaFh@MXmPknw~TchJnlV{oJDR3`Ov6(~ab3B4W&gE401@rJ{ zYog63PT-(BZbyQ9=B?hOwxu?^#Th?ifjti}$2m1Xc z$X&+I@#a(3knGOn;HbIKyO%x)85t46qTNp?dUSmK{9hqr{R5#03AuQn@m&~X3UcBA zmhwz7R~Xsc;`c0iF73JrMJ9d|ita_~{I zb&=$4AYEhO$2gwF`?^T-XO3kwu1^L}#yy0oBLmDdx8=Uu(>xx-^hn#DQn|DfgzA|L zT)TeviuFmPLgw0cqVJS74Q!cTpx~HtqMqE&^s+{lv0d`hJzu?Ku|ekzW8r<`4Uz8g z$-_VBz7;Js$i$4X;TXqQsY)YQPb(LjCvMC>jXZ>R>8+%R%Y<5; z3YRe-gPIIBP z$;Y!yAj*=GA4fyU#b3Q~9=JzyXr>1U_PU&Cr9L$@{P~->H2i@5mS4(UlnML$YD!3x zx~8Gp<1<#`zjwx2zt@YAw-)1pJfk_epJDHC^m}hCRtp5A;?bK{GX_BZN72a|A=lCe zp37F$JlkBZdBY~1FP4fLc#~=geev-PsaHftecVh4M%^1}so7UFKV9r^%`y#Jrp&P> zYkHA+kQ-%RI7!}E2@j^t@_T(|muA4pqs4zqz4_9@!ma}+5ors#P;#&U6|6>C%pZX( z-uV5f)Qw+=?n~@-q+Z<7XR&ecp{17Ah;6|UOr~M2S)}ZAaeeF|c^T$*ZDl~#W+JQ4 z2Ua5?j0y)@frncVL*;LE=>uOuo7QMO-3-}(69naLl?Sq&uB7>!7Tkx=**Vb4sNQuh zF_)dpplsNSqNZ9Z4blJ7)Z*qkPs`ju*z{-2aZNqs>JL*A*P=5)?=^9LyVSnCpR9g< zj?o~yUqZS{OA?a+xB@YZLc-GPTSBYy8OjB-dAD)SE8lm zU*6anIQ#GzwMpud`g<80^Ex9%2ND z!^YZ_80XP6Bz))G^n6g>5myDrsr~)Hr5gYSQR=BT}87UDa zJpV$8ru}oWRJ9wgY0I5|>tZEu|IIO*O`9Nl?e;KM6t3o+kf{cd#q!_$Os(3$@HW+kzlG>3oRMW-h0H4XJk1&roVMw;(W z(b7oK@fy@IM=(8{OC05mF0{GS0pT0dW}!#PT^$^%is-Yca+QgV&=z6tFna zr1?Ym+fF4TgoqS$efOtrHVley{xhLc=&>Mi9{sH%ehs|5&N+VLPU zxkX=%>b#F0%JUd6WGfvlOzRW`Dn#7*&B-;EYDZPdGR88=ljKO%zSELZW-L>!+&+*t z(q)YKPKfT_rkFeQkv3k*;SCl07sF!Y?xB?oDzoV@eL0|5=kA134-*x6*?Ta4;kJth zz(4&kP5}pl|GF7@L15?F8}aDe^HRZS)YitEbhHsBnU#~{phi=Fw2#5kspW z;&je=L`^>i%aW~wdbHQg?QU^y2Jph^bpb?N3jG&9bQz~;uxUmIE>R;#Z;KvU-|${% z`f^Rbn9HzyrZ8?}$VD%M<8H(9np%HT8l$NXFg8RW{oIDPFR*0}11iyf8XX;xr&q3N zOagW$jEb;OB9WI%;U_B8$rkJKGbJd%pVHZ}J6RrVdLz5C*G~1`hmI@F2#J1rXEGE% zsIdKq9ymdi^``DLCwK+nv1X0sPTSjQ-(d(X~!hEy43__1Oo)Eq|9DE{izN z{XH0hq4Y!9*DjjEGcKtDyd{piTPMDZd`k}x>cag^@n7b>1oHLGo@1fr{!2{+nj?&T zF{QcAb70ZH>sQ3P`6MN}J9N(=QiGp)IOG5yw>@E+^g%L+7ZAij2LEM*A+;j8d@e7J zYFUNT;9sX5ofM1M8T&!eU3)DVel-zgNxf0ps6#mlwT2|_PFsVhW`V|Dm~v!ivnr>a zl?66ddfY{=BK+q;Jd=ld>d{=`I~+z=K1;~;D@Le2W$nGj6`YYkqxUxbx!mttOfurJ zNR*ZpZn=th6R=Bv@FvXGL^j~S-cQBET&kpe9Z4zZZ*vyt|M$(yoj?9pSvnyBT6bww z-!9Y$BJD^dTpYaO_n}fDCp&-Say7mJlD{&t+9_ts`q^xu{n1|$9o{HH8hNLPRetRR z-*TRIQdt%QyWp0mq!v2ARE|_iK;lQY&#Y!Uyi@yV(~=t1{OcR_OlM8~_9ra;oMaoL zghchGp5K%lUca(G=e|7><8dX-vdvR?7d~A808{jQQh(td{qyAzHst2z5TQ&0c6bci zceaGtnPx5Y+@1Ftu?ew}&R`}tW}2m;MrWF(VO^Yv!PL`vX4qfx&AN2{x%eYg60m$? z>SNucx5L_t3YG<v9j!rDdOF%F^nLaW-H#ea^)>>Zl!GJLc_AXPod?GABIg~)fDH>S zvIUO1-U%8?*Ji3yV9Je8fUC0e)EE*<)1Im1DowS$QLTtP?(%z1AmZju8|w_V2M;zW zl@3@p0*6OUayDxH-cW{d=eDh-D{(`+O@rN?R$=tmEEN^mdAK=LUzCXOrkzCvmn?B> zWg}VyZjn$olKVpj4oWv?OzE6vZ42CTBe|538;nO?T$%Hi-~R<|#i%<(&mQ<(8+$yr zvf36+BKEB$nzRki*tJnBl2&LIQzv21U*61lh>$CcwgM?tZ3{iK?c?jVukH?x36<#R z%S*hO@oC}Co9u1_A$}ca>eoFakX>LM?pw(Wc_eakaW@-QkM0T%C=s&dCX!VzP&Er^ zA9@Wx-<w$}PUJHSQROwg^woT#Lk;6xM7xjE8|j<} z?4chFG4_H+g4C*1lVq&{1-8}l)rZ>;j270fYX80ym~vpr_a8BkWfLVfnPRV#2lCe) zZ*@s?K`J&nNpM(firr`1W(|G3UX#<4+lZJ}6qsE=E1(A#_1=(=?8D>Z{7Kuq!qSUY zzOw!E^Md<((|jgX%$iQZ?LW1MUacy(_}^M1C#|UxhH!@dzFPd=FDfO|Par$UfLT4b zbE3w=TEUi~JTW!(i`9&^>gEp_55SVgZYqDXf16SJz3t`bh>w#KQ1qkc{KW8r zbmy&|J;1*YPPn=76_=2h=yRoFLE?UW@@(O&)LQ0`0{{c{bn7A;-lr5R#pOBRkOQN(hZMmPHtb`4@juKfGz9yp5Uah(nAg9@{ zcL^SuSqW>CeX&*v&_2w<2Q@Zl0R?>tyjE?EK%A#5Vj2n2(Y0#VUsO)aIHl?FYJ^bd zI55YU7J;f?1YGw7Y!!*<>jRy6`rncroO4Ejg3uCdHGwMNTz6fsWA>y7>?=r z_q>Od_1k4pT#nqsnSg+LsL3ZL9?}Z_A;A*I)@P3l#ULDzaG+2#*q2bAWw2`Lm_|CN zLov@8oRFL>AT2#bs%JcKbtOo!8cGm?uokaW;-}Plr_+UF&^$6;886#*KRHk$wCn@L zu~W$fz8TNOq_eZ5y0&kFD=3H>dVY9i(y_yre@_i;+sOLeCwjQP3!oP za>i~3Rd>zk9iR|Ss+_fkJsYKcLjiQ+?oZ+Ix*j*z)i$}b?Km23Fom=BT!HBaIxp!( zH9}1StJiw@c>lVq>ioBKx_X*hvrpS0I~z|Q$%o?W$O zzDST~=$aJERCBjA?`G4ihECkw;ZNxEPo)y1L<(`dakJR!n;v%=)4#N;Hbn6`I5-ZW zQ-xB%Ap)7tr8E8RG*e~9R7`dt# z-Re)JpyKt)nHc&^`WE)$2*Qp!#VS!*i<0*P99x~wX+}@=ty5?-u`No2nY{1B7=to&_e%TyvdH=vCzkk|aH>^(M-@n#CQG9jTh<-Tm+a8DTuPgq08 z3{$T)ES>o}Yu|$XNM=z+QBOitZgCvQ=O%zZ;^@40CV1*)`+8G8#Xv_$s5{HDQK{4T z%*|)vYsSM_H^GM(tB)j+ClEl9a{1u0{)0VxISH$J;ZCXww}p>SW@GHyyk634`4uPg zWRh{M(~kU@)OLW2M>7q5ywRZwC+`n#r=;^$)Yr^ z;Dup*5w(EEp{w{)gmuK)MV?@u_Yqt?(Kb<``9t->iU0dZ*%VmgC!EOFg?jy-V3pwR zL?$pu-s10Lr@wCXm!m|5haIfit(LTY_w8WA2o(A8d5Ei%EQD9YR%E@23)?w}B&4`% zA@{InO?1?6NQi)er}uf?qvq`jAW<(D`@05g9$lWI#T&Z(mZC^-B=UuB(%>3^pdCrH z^&BwBG2IidUeJxxzDp>|_>=gxf^JX7hi7~@Rx8po8pc`2+ap)A%?mAtSR%hp%kNup zRD-d~1Tu6FWw8tHWTdK!+pac(2Xww@lacl=o*LQS&8|bFUi!9%C##bLRGc&Ub3-^8pFI{XP zJk9;F!2+zkjtet9Zvy$#eAj&9e(aXKqQ*GtzVj<-6(A-z0)V)m&R2g9EjJUA{e9)@ zLh@Q3@2K?!Tp{i7@Z}H_DMV&-wgrrXiCrxt@~a_+U-GLg_7B8)iQ}~XjS^)l*7X4~ z!JL!uY!VhP!CwvyO4*0#yV8!Th zbI}4T!QhGH{Y)2pGE^1=hP*8a%r7{*Z+!bp;l90t0=F!eNyvAs+^J?#91rY z=$x06L#b9MnX{FZm6em9Z~gTvjx|xaEU^g=u0O^-0HDwZhzEQAU%)n7<-W;Gwo1B_(^gac+|1_*}{?%|s&T*a1(( zmab1gz1VA(9lMFKgHYpKIU!S#on)K@=ecCPJqyE9XDS<%@oTO9ophh8g2be5cqZh{ z`A4rVEUb6T%%2lft-!hg$wx>02#<%n;lxk($4I|&Oy!h1r_12xrMiVHcHmnd)x{aT zzOjk1$jNz-1J~_wX}vY$3Yh=_o7w`;Zh25fqh~az&*=NOXfJd7fRM~f39~;!yVK_x z8@7Xf%x+~m6FwH#_&!VK3|Y2n4^FQ{Y`;%CgyxuE-q6{Y`SFK3S3^&nUiTaapqzyE zyNpVmcL@neGxkDNi(gR`T#248Wv!0BzCK!lHb=%J?x`sEwv`p1Sw&hOM<4WNzEeie zf<91!-em+OzkJcfU!iklc^HH2XmA+sOsjC!RAb}IxM53$qR$dd7k?>$@fAvbzld~rPyRR?zZFjZt7SFdg~Ww-OA+jxt3plt&bMR%Egox!_*bL zOWL-n4r)oIdRFLeL5f(r2-vvQ}SXfvpb*tyU3QgsUVf3Gza87vyPQ45ept7LgmjS#l zHQh($;V396Pp#&}GX6RiN}hd4xogIfDeJ}i6TiL`j7DBEwaSqAyH!a$&%&PV)Y_Kt zz@P2|p+=R?a_@r{*;Ii&PYq$zvG>E23VRlimPn1M&$S`a@+H83YBg&ot!$%NmG>Kv zucB{1dfHK2O8-fq7VM@35L5xgC znxfR6uhZ?f6~rPHN0I;Lb#k^UaU)sgX;%(8@G8!tsv!~0$1hF-$zyatqCL0EWVBV> zE+f~HJ0qS}wu&La9ZX*$CLBW+OmT|rTt5(cJT8ACBPYu#GBXbeDQxz%>x3^Fv6JAq z6M?6#P-hHl3uYZF9#^ic8qvG;vlAY3`a2TodmZ6l2%dnX05^Y{S4QG<>d zp+Wj)LAHf5!O)3*RR^o-59WO+t`r_nfC3~11qF?xNE#U=$)rLWuM@vmXTfn1+{xC? z&i@fM8t9TI+GE-H=fYA8A1_5Vo{&qTg80>vr5fb-#c{RHa`XeLo@q(`_oFxAOC$=g zSoDMk*D;*~&zO=H-l0iys-QyZPo*=~?(R7Xr50@_-Vk9NEyG@J?#Y4GY?G|}t=7dK zo3j&5CN=Q>LEbXZ?>T#6d*KO;uXl+_#N`4(106AbC z^V#uqz#mEkL2G(L{9-)zACx3ss>)K(zW&1@G{k0Eq91+nsuHc`S(U|CdL8-~JR7?Y zNp61LtXRJTXLpC|mqU2cnyF}gDUe5o*!;hHOsw|0MYM{mlki|(kyejOk6Qp z%+uF1$p}ni*kgbBmX{N6b5^Zvv1iTZ!P}~wX9nQ`O zTg`a6WV08A0sBA<9NS`?$e~BYQy9RhGFN@wRP@8fA0fBGs33GFE=|CH`e9;*`v`=qlP)Int@blNBH%-M7oQ?G7 z_ZOLS1`vjmg@Q$2r5>CkrHc750<0}+Hlab(@(|pm&&=}*Hm)hS6&7)7)bIDCohr;L z)vdMiEwC-xO{Gmz(Jr7zkyT6;0_3&nwiYl>cogVl*-3aSBTm5yJmMLjpvMBkdE4Ws z)fW6)$cyUz&Cr3&{mat+ld!nX^;GEWOgsOT$(ZD>t(z5#-*cFfE8)6`+&_!=B#{w) z1_L_9Nwptia*M5^E10hep^B10gyXoP+tRL~n``q&z5?xrCDsoUXTOK+aew36^@9-=!;qjiuA$r2?w5K%;mp=bTBOlEk9xX@SjtG#my43I}3`N zepm%O4s9DLk>W+_{qFw{eyp22^uf2LfrS(t+E*98EAke&q>Q0>6mzNnF)e1NV)`sgzL{DP|-%^ek!IHqh4{R?3osTjE$Ht>KWn_7kMg6@Du zTx>@*A(LIx_7(|oFnoXZgf7EJqW^3_tsM0XhHaEHxJ{F?TH_sAWkMqC`#vN;C!8N( zWNK*b?=RMw+NmgEGT&!ce;PU+TkNculYDGQBNLJ@6?m=jF2jRd^37$HdH(v=mgN%| z`$LsZ$&7tN1Fzx?qse5JIQZ4eet9k<#NPWHGkqrPiIwl=d>bmHg-P zzdGA_F1+fARxr6`ZO5MxH%;YI&HDr#j8lJGWcIC~)!&}$oAwLZVYr4l=zzmC3g1;> ze(z^zf@mYXz-pA>@3}6ii*+Anw3*mI(W;`+7?Q)62Of!<7xHh#rw0zy(46x~WE&ip zxW6;(Oyr1tZKbNNuIA+7X>4hk0Gfv2_CeM~C=?iDtfwl0AAViWyI0T8_<#d%?2&=; z6B6_U)BH)?V&9g%ImyWO4D|KQt*y&g$B#32$|9ze`nbSt&L5S>wzil)IA)~okL=6X zp1CSFHXYC3`Q~i#S`b;H72$9j_Ge9@o>Y+QvwK zR(6Ff)46e;v#D!Cpv#Ry%Cj~0ER~JNJxI0~NUTBkaY73Hr~1)}I1-cF|2d}j9-Tk- zW)FpmA#4^lHFG!2O;sSC-NWYU)iTI~n3bTQt=;f<5x4ByFATgL5jnHvl2H2mc3QJs zMZ-g92OQX>cp9kwS&Ly0oJ?ClxM!>YOif7aq7ilbc6jJuyks)hmii@s4aGH4(9_%5 z*hHds^~v9}yc_((TjRk=?I>o>5=7Q&SRgx4s(*ft(Y(wV$27We z$15GEY85ce70>>xz(du9Ol)D7ATn~?J!lWoB^jolgTd9c2mQ9z-hV(R`siP1+=JO| z-yz7QLdD9FhFA2dGgbccarI^7$iBR9)zuCyCIEpOQx}n*oUpK=+2gjw>qQ#de!jfL@h*lur*GtFUTKL zret5X8{U3+gc&6yC1`V|ONi6eX2kkNoS6U6|IbgFI`taoes4p5FwWIl7Oj&f`Gg}M zspq=c$z6BsR_Tv7ZFWyqyGy#-sW=0!bCT$G8Lc2CQM7>5ND-}1sJbD*=BU)b%_E-r zLHp(~E|wGU+#ZLh`2m-5&i^e3U~wohXR~kacw?lc$ICHZcazEw7dUmG$9VhGT{-x) z)VHusFZe|ozP0x>!AjQF)Qb;Q#}jGYTT1Qcq#tuW=|(}N+X`p-ou(MvPFp3l3L3C_|V|YVsKy{3P>+*{fwsD z+RK{^vagy48@#my3u`H-Yt_`%@r#LlqKJ}&&ugP-`)nH>!h?9CpPlC+sSkq7aB5VluMrbmt8{&bQhQe)ZuUn$FM^1p{ zhqk5si4AKcJX@Wc)(zGm;o0kcf`$wh94=eC5x>WN_OqT#HPhQca(-!PH5ARaattC{ z@)ire7evv0Adta#hK)b5#3zs^3Yuir|6dEhE09K4r}sx=ZP-BvIPCt`9xw_*)ra(? zbo9Z#4g0vsQ36_Xjm$==X310q4)zGgi-$P=$T@b4hY>S-(WBFJr!&zJI5t=gQPZb7@eals ze+8{&xaU2r9C?akhw405e2W<=Iwr!iY(xJfq%gVu+;q@zT$%&%dHVZtY4+pp6SBjh zK+nSV;+1Xik?%c%{m+z%g8KYDzrew#<%PV~S>tE}*uhyE$sR=BZWr^ub z|Mb{&jx#m&T?hAIa(xIcP0b*#&hy~X%qmXO-6^-E85AcGo-Hkuwy~AMiEJWAQ7RVL zvulcDC+4~H&O3SbvkjAq>zcXMB&tjP^gNG7qrsC;KFM>R`&{bvI;T#aV0yyFE7)BYE)-chx`HkXqVkPcE8k%8$paiY6!3ua zMj~en+p@52$3%Einw52HZcE6mz^3B+wZEA&Q}jBRPUmAru1-woY;)61H}SmZJs;O? zpRNrsH8q`yIC^cQ!x1MPRbua%>v>sfBD;6*rc^31Jv~jaSWM5%a~y}6 znHe5<;DK}z%)YCy;pA~QK7qj8J6jhKFZ^mZRPs03u2Xl_bLzWM+?%>DzC929jOsUI zqZB#LE>pQ7?Jeh0Y;W7PO~qRh%>LGul`74qkM9R~%@(C%0ncksbHD}V(j5H2v{nQ` zfFCqtrtW4MT4(QXTMn-4Q7n$&I_AJa$8H~5n0Jr$Jh1Gjzwc&nohs<6-_zsLOk`nk ziOOg(7jHI`s`mVc7ZH>^{8oW5D5JIJ(dx^vgNUooeTOHPTTJb#FuuKtWlOMawC$iK zra*%BJfcX`I(|2!&%POJ^_x6#w8WkIwP4RO8n2*}l6ERnnlxx~L{Pg?VyoOhF3pAI zB_=1w>9F`=xioeDmW1Tl+qTX2?c00OW>FN;YPGsm(YEWnXt2xX<7eMwvEqrfaVx7g>9Mh>6CWj6qzae=!nCfon_7~G^y1a z95`?w{oS?KUdxqNUYVYoS1Og5n3&-3;loT!OrW*q%6-p5Yt4Zt9ya9=5PMql{Iy~4 zNt~}~wg8J_yWDHkSE&F?_r9my_=Uw~CMU*FDnOEhAIQBqV1d)c+Ha=KutD~=2A5{5 z<)_&v&vGf3iiANe9jK;ro)?-+Q>*+&R7!Jt?pPXDXD4AT%fWM9iiMFlwdUbEUhjQq zJJj_)s4(&gg1|&C8CC+FacJKSF3m4}^)99+D}3LL*LSQi(pty&HX~WvGEUEPB&AZ3 zFf{EZh2W9;4-rKkSMv~ahZdPTw1`u%ncOwXNJ(iyOCj7uJ!dbzd zD_mwzEOSf2m*)TZ;#b(Sdney_({m`5ilEPfOEU`N zC@wY!;~ zp5o>gJfD$rvhhiGaA_vaMN0GDqgq&&gOj{-S`!9!T*qOg1g;}#wnD14fFM)^f#E*A z;)*K>f&j;Ha9x*e+qQAwzyV(T;uq6ww(B3XT9k^V)Mf<`MRlxXY^K}6r{TuzO6p*L7&M zYD8g#T`Y8LNx0x#nsF1-%?St4YBjMei_wvBJhzDJx-nCCyqc+Nbe?yu^Fg(ZLa6{h z2+~zXK^PEaRuYbuCn%T3I`sX2?7eA_97%TP_jC7%$jrJgpm5)J1C67PnZBoIdS>Tt z&J4-ra8@LDwOW0knPeujrS_xDWcnyGt(jzNl&w}P9;+p_Bxgv@eKe=18-s3i1KmIa zXx#Tv1)%OTGa_6c+&zxW$gCF8sw zT)oNl8^i3{v6;tqZb|S3<2Xz+5QRqQ2tV-CtUp(yrxfRBKh4GJezxhiSuU>8IXBMG z`BA)*M`v3ZU6N=ID!mn=Q`gX54+zPs!H{n)f0N-mZ}E2{{|X^=ijE=k?x6>bjj46S zxeJ%Lbmba*c5P+n_DwnWVtp&b(u_4)#!X-7qTqdg49Rb~pGCX9?ERgc9R%ev%s`$PKzKJK-d(l#?ONF+^>cUu;3(;#XUb@EBYqxl8*A{l~ z+>Y-Di|$|R^i0b~MQ*zGFt9W`DvHkbZsXF7=FyQUK)*XOhUY0dJ3DBrloR@gh@~kh z7A~4~YqpSG%&gU0Pv308q9~+VGsTsz$g&pZ>rtdsc*>^~RPa6Hr*;6SIi@h`4G{dQ zur#A6;`oU(oV#$91ABL}Vf|_=EG+VZ2G5shyu>;dQs8+K-#3B%xjCN`bD!nixp{Or z$L`<=8_Gk7Y6u3d8r4z4FDa@c7b#cPz}$5})73VQ8VQj?T7(r_u$v9ZxbZ(gY)oVI z*EstANzRW8KC@ol!bL=sn4 zAczpeC?yGeFPVEY&)R0$YI+AY(AU=oq{sgVAs84K!1sMdM@R8}pXuo-%0YzZ1wc$3 z*U*tf`!Y?YX%aGeP}rDZ81nwH4>@=K@`5~^>%XZ{_VJdR>HIt#{tSG9Dp&A4!$0M6 z$z(&#Ggl8$S-BU+uP}0Lk_)4&(cM8EvdRL|zI82)=LyT75~Vcx=!#jlD2jm3iHCnJHy77Rr8Jb$)zuob;Nf6t#+q1zY&f~M zcfuPb=X8hVA;?4gJI{Z6sT#q@?{tCWKi-emM>t4KcjbFa~-hF%iY%4m+8enMn zF5mmn&)K?ZJ$v`;D1;Ak%{_lsxn+4EibAely~gd^!wd}#Gdyhm`M%HbL6)$af->(YctmDBcqwg>0P#muZP>YKd(rd<$8nCy_FHuLs(k z5)j9l$c7byDCWY23tYZ@nJ9|bv1124Jw1uSTfTfbXU?4Az<~qw_VsgnsP1Hh7SI22 z=HY*=a`RW&9x8aWv108t`^$WFhWYvV1kAKntrBJ21O{NXWELnW;VGA0wD>~{7h;rL z>arnUREy*2o&?0bG_5rkE?(vOjUoQYE6>x_*c%ip3k>(;Gr@?3eBkh@m2qf3;X&fb}) zZ>(2cywF$_?+MUC+XSRV^l9Cy_p=r8E!6MyY;0CI7{Zu1HYE!>HaynV;S)wNf#-4S z)-ASf-AYG?feu@}dNoIn9yPKe2=M$4pf2GdSqC%!Zc0ARJp7MUZvHCU!^6^yHCi?v zetG@oWwh2vA@TiyN~N7rP{LCs{2)L!Ikd1*fHn7H$2uac)l8OASS1W=L~)JI_Fl@R z>!<*j!e6}7yz>;BGBU#1WiRF=z3r;RQi054_eKQ_*?a`K-?r|S9HtEvdmlR7=Yjo4H1b} zGAUv;2^wKyDH|hMp%s)$F;S#JOX65@E&3War}l7Tu8*hZ|B4MWAzp_M9*B~l)LCNY z`VmTPyV%fql^atAVAe5HeJDh0jg*S5Teh%y^XAO+E*?uWUI2UZufFpmYPBe%Y&Dvg z-kxrr+`pT_<^7HQd+AXoIu1e1=G>ACxn|PmEBaeE{Tz&No}QjzdU~3fnHg@}yvc`W z&M-DM&gA4IQ5++HSHJRA%F8Nt%$Z3Q0#NuCqAQMSNycVT`;9MuF8{m**qcHa=riB* z4BV1mN#DsZkBzCdrdErn+QU^Fu@IYMb^h)5e#Z3794WF8AT(W_?L2khF;)yNYq%$i z)v2{64r^4aGoZ{&`@T-rE{@HXOnGH$wTSk17#bR)ySv+DCtA1W*|TSP;e{9I>FMXz z^bM3(LHZR`P{#8lnkdnGZkM-l!y4AFTb02AO|dRpV?TOk{4MDJ>N`KAS`CxMFo;!x z{=QzGI`B9HeVr}(S7yAAnB2^cKZo_Y2y9H{rKhsTQAiZcwU8$U8#AS^5rqrT`{fLl zrVxhtT48CDeVIf{?9E(_SzJHy=>i0{HmKP`6)jjCYic&5D6GvBMm1`+YOXHOWEgq` zzB&FvNgvPmkv45t)JgHwQn2?oU}H97X{KrN0_FM1@1`lViko6-Dle$JrW#yarIOF% zyLYf{%SQaVS{ehEOoF{>Eak|cp(vlWHV>FHDcw;Illn1yG0n*IYG%f+(%l!Jy~wyV zyDQ9IKSbxw-3)e}Ku-Zk1Ibg+3<7-#M5g{6g;riuEKO5mlPXY!B5pxn4`)}dl-d9I zE;ephRRD%jjJ+v@pHp~HFBqCxg?WB+&GS4~ty)cAUoRaUodiKZXJ;pGyz!`O$dJkhAqZ=YwMzyCKaX{ZQmEL=VGp`GL(lUG${qPp1PbMO z2{xutETCdjD&rURue@SxLqw7e4^S=z?AyDW?OQiC8GjzDQwV|dd;-zN{M-~uYqU~$ zo+(V%8kE<@e6@_{tXzj9K%`PuN*(r7A7fF?K^HV?mrO;!I|4O;U{{4@$ZOayu3=)Seuu0n?u0C>d zGa0|b#^!9zJ7WMDwSpt@(Q+7Ii-sV`E`Fg2(q2sRQ zf11v-3l+zv*tlA)QVZt@!y2`)YEKnN9u?m+AgaD!LP-x#c{X)69cMZ=C|WT0nMoc0 zDA<_k1T7UyGb;eLZrQ-z-8(3i{Dy+|RB|c7;Xb7s427?o2}EX|(pNt4tyzMXXKcW?P%)=Fn{p9z4ib zzxq{zAfT_W58wA08ymy-eU#r$6wTTMnAr3qB88?%VMk^fWd--m;xnVj5PB!G;&FpNTr z^=6T}YgKciG|pvcaNm5dM0=$ZrF@hMk}R}(E8e&)8egj7-`#WAakU6p6=J~^JaK9j z6wx>Tf)y*4@#Oy9^mKQ&pl|FyaX$))ryv3YGF=L6EYAq&>C$>8ho_htnxSoj4* zSsUT;a}X@YFZ=Y!TSW1u1m`e4jobWdosqSu3Cd73qZh1Qy^^P%*h^PuXXd76^m$?K z=ry`QaJb()JG=P9Km0@b`ugeW>Y}Z!f>Me<|MUNs_uqfd($a8W_6hRuR@N%WjHb?W z*^Cdd6E2_6{t$|3^-4CfDodC;wh7iQfu09?j&Zdw1&iKhuZTctfKw zYw(Na`Yoo<4#^cz=Hn@5!G>;MZ76nB(!=ut%H?(f3ufBv&_d7+%+T5zDPA!5yV=b& z!_w4^W;o_K8nH2TdQSs=F_z}@&pgRMUsoYLi|pS$p7InvCR;O#LTa@V)u763(80*; z0REXFHm+TV_9DD?g$g{X6SpV@{j4jWVO)sRo z_~fb}*`??Di;JH(j=~%oe0D(1=l^!D6n0`pP}+CT z93v!6JWp!~Bk&Yn4xt@q`<3!3aNBgn7Q&xDl2xgvg0jIk402#RZ5XE7IN;TGYA$^ zW~8WYjis5=r`A%`0!wq*Kz&iJZi&4aMOBmv$e7pm$djO{`={7t1k@?N^t1Y1UDiOX zvx+h4_9Z{S^L>lWXc7U^-FW7{dY`6-TGSZdOrO_cX=VmqYl1zP#S+ZY7sW@Q4y!Yn zg67zU%LaPy6L#WkZf+cqf{-yHs^KY_oOLFJ`j*bpWr4p-Ft>W#s-%iRC zG%C&Zj3R2)5YHFHS|gLS6Q+Ep2s^at{49>%B~~rHe}iTED9X)b{Ly?~i7mvRh4d}> zKb))MXIl4Pn@9Rf#nRME!_w4Ib~~P(Xp+Bsx|ijIOrub8_dJLNYy2#BajQ5o27qwb zj|*XAMhN|2u{U)>kF^Y&(VGMov?*FO$zc(mQuv-n)hk179uc>rnL*2tN^d(;*AEeG z_$C8gKc_l8M-+O*aVb5*B~cLKfn#aj7y8(o!d%Z&WUjfEcU><2GnIhonl%bTv+Ecg zxy#jy7wg^=!KYvTOcS0IW;Y(r+x1-tOS48C#Ykleh8LzcSb|bHEY0Q_vWEUaVcC>bNDB1*=cr{frH z3$2}~SQ>Wd!=r!H25viaoT9n3XMV}R0 zI*VDbR-e`XZWM(}vJi>1bHKOhJ#KU)^6yuLy_s#^*6J=4V$|7hAS$X2XUJbaZrB+)Q&Y>Fn$*M~@z@i=hj`Fe}jN`LKZZ03qTevA_xZ zbS%0dPOpiH!q$dTj$TJZ;l~Givl)F_Y9r9vBK|0ahz#zg6s8PkSznpkcjq{K_%K_x zY{B<^R<2yhxpU`u?z!ja?&)Xf`VGPwc&bDcs|3X*HNsQZ=En}3^bwVtSx-}(IaoHw z&&hx3FH7amd!c_gNGm#Ju#aMqJjeyJ6xbSA5cv$$v?fjDgpU;2&3wkC0QIZ-ked;# z&O&ylMtiFopWmz2e&_V z&1{u2iY@;$tL!Ew#<_X(Cbw=4v3c_rUVi!IM7epMaV4KWf1%Fc(BvW4>gS_)ewy*2 z;XRQI-F%+syWICel62@iDM=2*k_^+2YfG_QrG>gv)~)F&MSI1^AB5q%Rp#dAs8lMf zU%#Fo{_ux%c6QR$)y=JIk|>HT@=%_S4G({OdHL6J^ZvJoqVTX5m1w|(Yh|r0X2GEO zA}wvflD~z;Urgkh9fL?o^Se5oU9Y5nYm+4|&W9<0oQ0fo3n_)?8JDK#mpNSdJ+{w& zm&t2W^zAAkR7k0#!rZM7D3v#{w&Oa((~q01xF{nieq{=L=}n`_V`=93?dHv!{M&!~ zzj5cz9p>g{lh6L>kN$|2D_1o1Cq#A`igDD<+O&w3k&RALIG?wcNb#aUdK_On=P6HBpfyvU|Ao1KoS1Jc^1>N`jsk+HI^J*IW~-N`op;l5l#U@c<<+2na1 zzVG3C9@C}uyy5>I^HXN*T2`s_wKIF|5TV-1VAo`#?96#&=K0b0od+Lib8C?o4Cdd| z)HK(wU1fH5Hu-E}%d(z_%(YaR*(-H|!~NOFljeTyVt5(ei!JZDl=>)2W0G;=W=`L) z*fC!+xV&P06q}nbA+z2JiRT#wsFdRF-4TBFv!4;iF+mWpV#Ny1oH>K<`*e2pS%b|1 zQpcH?bTha1$D{pPZr*>n`EZU0BD*N=YAcH*{p_P|yIXx$Xtij}fstX9Foa7MF*JF1 zk`Nfc-K^E4wN0L=doE{s=UU;#7Hui?0)t4Ox`BMp#}AC+Q(i!&zXx=P5VLd)wljS8 z5PIKN=Uw^AOR zot^C2vxmOEeg*~x7#QfMuWx{^uC780*=^pUD9-n*vAkrmJL4#MF_6OA#KMeOBGAGJ z66Y{VHiQN9vzYea=@-II6bNB3Bc;+P&&Q7q44U#HR83MTE5;_qxp3hETefUr!-fqU zJ$jV=`}fn^H^AtfbJl2!s87Jk#_$$5o~4fe-svB0xoLS)D#MFcSk|<>=`h~Q| zme^Cto$|B#4=q3<5K@_g2eBm^S_84^!#sIrYz}+V2-17O-i$H@ru9uqWirBIgFv9Q zpjr#@d_~~<1cA?>xXRG`=Lp(X(7r-b>GP=pN^JpcVvHziOJX28BPgU42FuaK zpNJQMrRkFt)jN;5SO5SZ07*naR4x*GlZ4-vj@5~n&lJrU3x=Zk%ky46AEwu(l$6V5 zHg4QZTU&)nrHx9Z&7zDH^H(cAjN=$hV7^~RN!f|8ka0RThLjK>G4O5)DoPX*$5rz< zMyA@3im*QomY^#YilcC0>_M-Tl+G-K?V0qy6fDFA=(7n}p68*w3Q9#tSwqJrHWzv! zeLZE$CBe08m)Npp3xk7$OifKCm4?1v+cLzpG2O-i{NL!l-c14 zfj~7?Vp1psaXy&d3VYKjJIECOHWxhUf~Av~d{5!;t?1Ivnk`Z@L8O5=GPr`82&qjG ztdPbm(J>gGy0i9;!je`wCYFqlAY;(NlpN&v(9$POTZJZ?VsF-Cdm@ZNuCK*&^hy~V zNrX8KU3or1sYJC}HEvDcr&?Oh$lO}WAKs*WuoqPdk)9%)9;M`Uv7!AU7ixnUm!@;0 z38P%H^N&O-zwpFvAw*7jnQIEEXhC1fKdw+nC7NPydR{3vKT>!|;aL}KF~2Qj6*{E; zFf`=`LEz4FOV5}S0yb^xOnzUyqBDP|7P8@^Ff@SRQVI|rI<5kOIJP_<#|R}+e#wZA z*sQOR9uh$m%_Yz0_z@xSgGz4x4Zl{JV-Nb3)S^Qyi0x_U>-%qkg}6w1_kMX^g)okh z8kCChf)b@LrdqAq)6x~ynPI{(q*AHS-QCTlOPA>B>7i8aB(9AjgqQB{+&>AB#d5TA zNO_CIetdBBTHk%dy z9}Z2%(+ulUG{Jtn2dvI4wokgG%7Q5rTgO^MXJ;q<{R8y(575`w$G|{8O8H#Bek&7C zFimFG;ePO1p3WVI6X7seO96x=XBuEke&^YGMqAqGqs37mxk8FqY}k=pQ|~X*@wnNb}ys01_cI2$?Yy>&BkU zvpKubByX8rUlbR~H)s4e^3_88yhtp~CYrF>XLg5U)+!CCnu#$aAAP}!Kl`Y{N9V?y ze-WJGGD0N1&nY{1(5A@EiOwmz{8JRPqUmgPM+^F7@kM%ix$+dAZ^qyg2 z{4Bi#b9An3XY$%1x>kRMfu6UChGLt%5+x^4w+taRW1poxz&+DvgWN`-k*ud_snA%v zb}j$U*i{NcX12x+QM|^?_!<=ms^=lu+chi04458+mCP^Xq|WCTS}l4r`la;mgr$WYbBQZ9F0GVANkuJ;85tR2_3G8ES+j6ebVw};jQ3iW@lJAt(2Q8$qyS97`Pe_3&hBb)Xxy7(?(fZfB z7<HGhv#9$fapsJ1Vq};RWN{or+z7n;tBP}EKMTVu zlT%YnOinQ|F~<1#IOQO%J4*~Ip&R%O9V18+qom!@i#SR`63*%d1520VhD7%l&u1J* z$@J%DswuW-glb?VpX=ne zOG(XIs>$@V6e>$wuvT=lv$IT2O)@b#$;8AMlT%YfVU1GYQ4R!wFX-v?Su@y|6dEg~ zQ1)dqTW#ZRlEQSJU85)tQBtLWSYiVoRy3Qs7#lNg0!nMFr+Vy7y(p~CbeCc>{iMni zp?k(cUL`LQ%_=Bs{EmotegaJe>H91Xt}z*P7^Hd&9&8j}je15bjwg}`6?fRMgOZYR zNm333<&t9K>NeWj+YEo%QWA)gzg=9MdR0nygIW_7#8Vu7BUUHWTG2;yb=Zl`u|vVca-=L7K^dF(F^)r9h;IJ%_m;Rd zY!2b=?CfO2h7FuKbA~Njw$R?u!{qoF%JUO1h4sB~PgssirZ2!gjck%pA~#K9Qlukd zW{Ja(soacel!Jg$0D(tNZpwsDBb4$I<4p>P<63ISxp8VutRp+04hz@tZrEZzaaB3l$edE$Zbwyn_6vPozm-zw?^)L!Q9zp;}heI zkB>7sJxN%rp(F&p!1n~@l4SLON8q;^1t1+Lt+JM*tzDBO$_@+|Ghl^L`t8Qmr0pr& z!lpg9hJ0E&R_D^OHywSf)6?3eNZp%KDWp>Lh8MYd@HE@L)Q1q$1nm{(hEG$ftY%&3 zb&gMO%k1uqkcgs?D5|nJY|o`)fi}a^v@!Yf(rPMrdo(J?J<` z6l-Q?rkI+VVr<;(*rsP@5CTfRz!MRHFX(Rb80;%2#+02WtQ&?o1oPNU<3gi%q&z zdh@)>Gszq}F;+#P+>D}myP^2i%T3=G1WHpbd#qhv!uQKa%bSgIQ(8G0gRa@QFBUXC z9b+Olg)@k&2J3av{I)cHj-x6%4)GRSzu+dvoGE2&$|OeOKzd{Ix5F=VNab2LL5OE5 zi``P6O$9nSLaa{XHV!VfhXuFDS~!~&XDeEnkzc9V2MR7z{HS6 zqUhXWIsdwO)}>&Qnr2?QrC`C`8}_EN5*@=yArc{>q~uEZ1$rhg64fdwe}v9e9n4-k zMBBD4tmytJ?@#HR3&_2p4+0Ccfj)9&9Y)YQ9p?mv*4kR^c8qbDj5V?`o0RuH`Yuju zn3|eqYI=(C@iE56$C#O!C5mf!QX_PTQkuXQEbB7auu2M~3QWAo^BNRg>Y|fKX3zLR6@bQgh?R4Jwri{r&w+ zO--ScA_xMELo0O|r+sI}^8m0Mox2h=Q5Yt2lSF<#YI3u=qD$qbv@ztgE^lGE`JnkN zUS#39Fc08j2`;F+V>CXe1$VG>^bo z&z*tHxavwKK|?8&XRK-S(;O&SENtBNyS1<}Lf7FIHn*xjUd525uZuh7 zUC3Y@;=8mD1`M4!M7;ao(AW1UIODLrMd?LOQt)# z#DysmVd1Q09vQy7KP?rKB(Wi7y%e5jPVbJqh?&`G4j(?u<;$0O{`uz_93150#f#Lc z^C%go?qcEQ)4UfCqGjFg?iqe9H-EKqa{-0tOdsIIIoQjE_!T{L64w6?P2 zIAVHwCb66+rzV-1okgM%B0@)1ga}b0rrkFdhM8O+rAm0pLwU+FbSh{}qDE$sloR$U zw^(K;r;=Sz@{`mmF=^t~r>-B0$iFYmWziY_vtJMf*?%bW>&YjzQ``h1UaBz?}-gtxFF2(X??dB{! zdvE-LJE|HaONz9O6%gtZ0+-$1wa_QaFEfyrgCvRPoESk0pmS}R}+!8S}vnH@S zH95}2KDt*L+XFN7q{idtBDko(1A(&rY5ib?inur_!fivHq*0q5+Na)n_*%kA{1>@+`P%g z`mg&t#B^8Z_K^Z%k|*N43&`H@OLFLrV1*oOGbfUDJcrlx0@o|eyV&=lBQ5n3+fXb;Qzwu*;V*{ zfbS_hm9>l?!1yi0C4ycE1Zk2^qU7Aq41hAw5VY0^?%Ww>Y;=_Qs&PM-N{W&PWlzw# zOd^HJv@@{)uaNiL%Pg&>>*|T5bq}}VJ@>nFQ6}!5`ot%v?4(im$vJ)t&1S}3wy4>E z#OYlzzCrsjvchxjcH5tGEw@z+x{ph2@m-<1ReEkcid=?EA3up#LS~em^FBDa>G(Rq zkz9=2oSlJqadOisAG5PsSZ+GyhE-$>%1wJM>!wWS0#do@=1-*0v!wZaF!YUBn#s;C zU8vN~R_2A&8Z0VAk|`8Mpe4f9StoA7 zrA(~s>>{`XlhhJP7fMRAb=Mf|%Q%ieWR6p@6X%%DlnpqyuC~uxJh5g>8LZKGvGfiL zE?$scN-vSbI+J->OrOW>&m@M7nMcUHFR^m+NTEV@iXSn#C$? z*}vt7CD41G!A@K(z3&HT>)KW-q*j|H)-j$oGR(Q_Loc#WYwbNxq);^$&4O>2dcvz#2XmYHI#LWnJ>u#^Vx4+Kh?B|w9g(B5vX zbZsnk58W^@De^U4!p^pi(^CtaGBI0hQ|N6Li)3q!EA)0-ZR@j8N+nEaAltMRreTJ0 zl5e*)Zz4M&`@BW9Zvr7bM5YsCJ*paXFjMfs* zQ^pOX19S|^3-ITw%m&YKs%sZsJVUj-ii)QwmrDetz+@aM4 z_RNo8p*$>o8ovVbGW&kX!h)sro+k*ys`Cq39yLnG^MWLPC#=;PD@jkcxj&9IDyv*% zkT*|pO1oxvWT~|*q{R2i3BLhJVu{vv{O&Vt3c?LAa++O=b|AXdWZlh9)d)II<*`5w zc4*K7JG7j?CKZaHuy#p^6id*Vc0ze5(HtAo^U67GETo4*6xKQ!`qBfYFK2cX8l=MW z%Ea+3SUb?groA{u%2F=rL)rHW!c5F6EkW{pH=pi(R47W#$CINMUsCVIYUir;<%cVn}(+)zF)~GKPT@4qG&!N zH%Yt?o&_q`R>2_^5}!DnYcO$(`DX$CwClTQdcREWeUS<&N<_8h>!lHRsl+0+vdJ1K zE;BCOYD*!BF-P1A0l1iia0nSPvBX@^(oK3~1#~@ffGfhzZc)wmrS%)aDJ-Ro1!8Wn z%x)m!b2!bGUMZ)nQz4UlUf^C%T^!lTvGY^ll1s*%rPfZ2H=(Z+wyCAptpA1^5Q&9a zNAIk>x+bL}B0@@Sl%8*Dl7v+FwHVLyDV0K^r~*JqDU{R%fjM2l^K1}XdAXfQ`s@ph z$L*u-brg_S*c!9G3ACGbrz4yGg>XA`&;qnhaT%S$L0F4Z2FAG2sa5ReO~`zGUb-_^ zbsh(E+>el6VqCfPGYU+nGS3=`QhCV4W;6ie>3TI9dj>(jaebvw#G=t1B(lb#&R;Kb zALWhJ^d^U7U)X>B0z-4G!llwT!O~m|7NYq+yWYx2DFZ%k+{`YyPcCTo(Ub# zCrU2ak*nfVhL+=LLNBE`#UXhOv;jgkpG%y8(ipzdx`sK@1Pnf^w*91h2u^1CC|SRg z5=f;oMeyzz9>aifWCx<%d#F*;L;0RnX4dVAf_kg4;j?B;bsxsl@`eI~snFOnbSBf) z3V9hLW9w}Z^|rj>`6vvHQpuipai7MM#OoX@I|Chu3==1Yx&vW1t~{q3jVWggN|k(T zPQl?NiYIaYdp@2@QH-*$W+XhERd4v&^e>gn@jVG&yYJJuTodiin_A@j6i%nkez;Wr zslQY#Z=3g@Udxy^n#6@^C&F!CtvE_va%JNlkU<@>N-c@^SwxU@z;jF7GWph+vDcZewsz3ArjMPQN5##4YNmyBhJ z^obC+J8=ZaSep~1J(Zk$2j-D<9O0>a{aE3)*gZhOc(jhtxHwA_`V8NpBM>$|tKCNi zlT~0?O$uqVz>HPwEcPU}VVPX3#(6gUma!h4CQYQ2NQ^kQn^Q`rUI#lU2}H@chshHW zN1(hSm|9Iy;l05Q&6!D-ytq(*saT`BC`(Q+KwpS;*^0h^51Z0Q#r-$KqKqSoHdSV( z(m21+GO?|T=3fYiMSALmGq9WW-)w#w>9un#Br-JX^)a~-n6ok+yW8ECagNo?$~ZxF z%Dpk#8d$hw6cR6p^3q%kDV=VNp}|M~xv_FrIqV-r{G(GQ6gO~&1boBTAUmOxmE^mrO!7dU%OI%bt7 z)f=?UA`)m)AY5ZLV;Ls4!aKVwu!pX;X!X02)(6-Y&^I~z&&^k!UM~Rum5J{d@|H;} z>3E!hVVHC1_FXPry-BSa($(3X&|bQHlW%|b=PV!SrBW&LC;#cY%+1fSdgZeG&PJs1 zCwD5k=ec?^@RTV^y?k|uiK%J&dd!L4(gG1=pEqumv|^2*Y%`#}1qu?k<{4M0Ab}4` zct)hIY_l6p3%HFtCbTqpeoJcKY(j}~dAaczxGL-Xwz487CQiP~&3_bEDJ~Z<9dRW(gZanCG|9bKCw}$U> z@zOPBXJ_c@Y)hyvUB1P4zW)XT{autR0e|wJ{+{`2l{KqZfVSh$?A)Ca11nD~mZOm; zaPGn-#wMod>+Q;UlUyJ9@i)#-e*DGsNny1ndAHIrru;8}Fq$_Wij3S$l(#f-@6`RO ziFM7&&@{W$+$(?>PkDB&H9}*PP~yyxQ=}wKy!7>23O|T?dc7$6tm)|Z+10t$uUF1% zrw!a#tMw96;W>Y8qu|lWC2da#HYohI&m_iXe`fA;LIUlSfSKqpjJSOD7Gq-*lu7}s zRt(VJ*KI$K?AdYFkkK(CqvQPD4}QthPwZspw)OeZS;#Cm2|s)N9c~TZ<(uF5Y{3It z`Y4O4-zccwe)lA&&RpSJzx7!>4-19h=ykyyW&4kef1YfdrUiW*5sSrRX*R>&{Mpan z<@(Lrbau4yum0dSk{5n%ZjRyGcbT1=N1{2fZyN)>-ARAh%rLE8FxqGljjf?kshj!e z`)3eRvU$U5YZc!+w&#NMT3c+!$hdX{U^7yaxUMyJw18@@#+eTefh5 zwG@C{gVqaS58j{gFNXd{KY5euH-{T|c)nWY_MH*tt2HFC;o<&XqHsRfe_jw8C7|Po zNY9%@ix?o{og=4^O0i|*>K5~})cI_rcXuT*I6;CHXwKyHGqOO2@6@r>LZ=R4p3MWNiRpa0i>afDmLclhQvK6}sWo0pqvLHeck z-+KO)kpqjQPYaJ0Y#Nj5nz`Z@xXz`MyUSjGjZe|uR$*?wN)*RDxo-!b zdVYU$cXl|Ha+xRgZ)0#-Z__ck@7}U;H7f`E7kq|RlQKCq!|gjGbp9;~~^r2kJ$Ow-<$X7*jUbc4%RZ{d52o!d9k z*V~EKnz{KZ$4;DQYHF61EBfsVBM8bquKp|xBaWRs&)vJ@l*<8+?bt+LZ|5S$e?PD{ z>v&FUW@cvj!H*9jrGc2rwy%BpCE6?bqgmX&%}%FiIiBbqut0%hADrjIb65E7-*|aR z{m;zJbNkK+QIV_ZBaG+cLO(V-!S$QNEqNHs?sI%%ing{Aacm5?ED!I>@Sx-2$;p`v z4?|E6a1oehJbeG3S7-JP5xNQXW8uC;$J`!XjNHtRr&RJ5keey}<_#-ZvAnmXT&(ZE zzSYakh3J>s|NW$29G2!sY+A$je|(6U*($&Lo1bIV$^qgy=7&Fhi+7HmV%5riwryU= zdmo&`_dLph$MD@T_B^(kiHR8odW~S3pRaN3#5rc?=6P(#CN5vQMWtL~=eG4s&(1M1 zISs(A;Snxey20Mvn>lmt8e`*=?A*4V6;>gRPfT&*!%NK0&e<1YV|^U-k!UAAyo3;f zmtNS$m{fKhlvuWcRUVHrrckYhy(sTRSv1MJdd;0qy9%N|vE|2Zp#O*ty{Mldrkbm*5 zFVWFaY54Ak+4k+(%BNp^qT%|~)GWtNo@e`(b=(;lTWC-hTHaPd~AXD2n;u4{);1Axp|w7>sPRI+j>4cdxfi4hj{vlUCL*b zLjV9E07*naR16J|a`3HV+#0$|5O`d?bd%#JFYw>~!K>7wkU#y;KcKg_i*>69`Tma& zF*Y{Ev!B@WFs9T>;9JKyedY>6829MGw~te;*7(%(`nhCwWyzxo6D0G4p!El&0O-@fmw1J|Kc?2+p=agMe`1Ist0NPBem}$kwV(|z zv6lLZeQuB_>>H))%hM;k@k<1TMM4K_(i?w3G&l~vx;WcUYzU**D#yD>@qbb;UvE{) ze{;ThsBp5{mNd~0Cy;886>zy_;jXblJ`TNM^@N4IK(f{Ch~VC@xGV;mcQ?0Q)y@Iu zlDP|8zs8y*%NNER>JW3u_zZi@5b=!z9>Eiao0Y5f^1n~6kdkgbL>U`;`-ua6u5-pYj1oQ{lnl=@iOgxai5P4W<3+|1U#DnTd(44h_ot1uLZOeZTo?HoTPJR<&QdF8f4YrsdMI57yF3W-#<3; zMw*LJymhcs0*}yU({Gyv^u3^v7a$|TIO(i6ZBRhSz@ z{NLP+!b(ctoqS)Ez?15c8N9wF%@N}K7yLRXd`N~qfs1u;4Sf6px6KzNK1}2Z`3)G z1pJO@RZf=U8d;UI+CILU({8aAEJrY72GL)=UuH4mZt{?QkMujUOsyp3cegsIVK5bc z#~-T?I8IKx53f6(TZ~L~{Q3Ri{`@uWY!3=*XxVzn42?m1wWFPZ%|sK$%!y-#XdrZ- zx2UQFE_*A4b7h8IDdNxiAFuMVDE0t}iqzE9nqRh&1#JY$itPu|JH!7)TnQ}rM}WOoA^hz zzS9@+v3}4gxIm{mvIpo%;@6uD&Ms_;WKS>6X6w8q7*gr6QDYGjTBcD|3>rGL;xHmH zx%nHo)2_zcX&h+3+?qN*?jh)V#-dgJ>H;_myE0tDHmHi)+bW~R!4_R<|Qh_A6a z>vPvmI2PjuW=~7A@O~|^gn!THg$|4&`s?D|1WAvQWWx1!JJ*W}f|Q6OVk6V5f?0S^ zI`m?shw;AmZOql4aZe9`C!SF$(l6*mTJ0GC4=m^JKuld!TbI`wLE+yxxSxdg%g@mf z4M1?)g&Y?e()M8xHw=VY*%YT4-a*eGn*8R9Qaj4t4i=+O79%kH@65KKu z=v%D92}4P*co6tj$K7@n69sWNFWv)M7aF(e@C*w?*c*E8U1Sg*JW?8Y?k2SQ?(hIs zT5@T5r1i46aIxJj_^U}|*R3l~Bf-g+5RLA+VcsdajiWjmzXv=Ai*lQ}G93uhZ*T9{ zY({ev5=MB1%0?!O5}-l=0$<+H_&ui^jjnE1N`(9vpjsZ+gOX$9xH!=Ss275`fR1Ta ztuW+;W-E$sDbW|Fu>q!0rcypN>_F?zat*n(?{4NvDNO~j5qnRdIKbXx+tniDR( zKLo9rXIF%&w4MJ6JbDwvl+hppf4Sy;C*^lO-Ed$Dx>!sR2Tm-RBg*uJ-W7~_^C*#u zpzY216t>D`PZs%(I0Cj_V|S$ssGYbtPp`$ml*oP?lU+td>V~2PV zA8zmUJ8c{8$58wAF<;>N040?Mo%!fn`RMkRk{2`^4IKzUL-Bi#u$YY8ytYw?wg-UQ z5GG0g%>&j@cEUowJz42Zcc3sEsELW^)KAh6NA<_E|c_Hui<{tnF1D) zBuD#&_G0PZQVV_}QjcjxSHDj#{8p+GN>T1`-bGq}Cm@X z8#^QaGK)-f{nsS`R}=pFrR;bMCj{nTbiVzP1c+hmfTc_v93%Lb8$eZS_*)!kw92Vq z?9lQ;*;;~S+03_*Xd&}N^3`e8>6T@Wm%nCZYoHhx`-tBhUZosCMcb0+y?+puLWC#5z8;n{=H2iX)$&FPY{S0VvXm}@)rz3wU zNu?d3J|By&gowGEd@(;j`lNJVmT>V&mHT0ft(nRC6NU~;TjF142?wsW`Ji@u-%Ywn zn=w78U#EEM1;_JALwjcgVOusYfVkm@M(_ZYj(b#~J$y7HRP|rPKjA;ul$dR=Hy*|E zvrSbRn6mNqIYU~~blG!tOLiYC-s%?|2tSW2?9!MyiTGAs>)Pz?m&oC(PeiDB%~+Eb zD`uLN5xp7U%2zw@?7xZ$N1Vqc{5Mdsw)D73Cqz${Z;XX_Qx_cwfkF*}(LVcB{J(hWsH1sU8on{WiRW4pC;Hj@5Lcd@L~`+mTY`41{=)9Uaqx zrF7g`J3XT{b474J?Ta}CMlp-nuQm6y3@9_q`|eIoulAp1rUSjCIKFi5TdQ$Sh^H(# zFG#Exver9yI+)RyxPx{|I0(Gkk&xbWB0zR8q6Jj^o z@xPolr(TJPc%-tE%~#tD%yq-O1hnJul7XC2iHyCN??x5M1Ce&(mgMDr+dpEa)@1m} z3!!KBvUtsiaYKN`%$+3ng7N?;Uc0I_>xEAP;}aG5Sm1ktx~+Cgkijzl64}v@TKkh{ zAhH4?=)kIQW|rLm2;?lorxND5vRVHj@3-q&YaQ(a`pG~+5tC3z-_WlPlD0Wgwx`}+ z9!6!uZ!ig})m6Kd%#6JSfbtS`PhNk{1btzF33>-q`0kpypm-+Gr+Gh|yfb(N`9I=` z)HyK5K-YfNzvQb%cpX1bky38%6i0%$I=|O?^a8iML_xuK`?kx~(d=Ye#3&QZ7rjn1 z0lSSn4|{`5?{ks)LSn`?*2KAUS+LFS%h`HYXexSp1H>Rl|r%4#Tikjhwm>w z&36QHJv=%1k#y`#t}ez!GTz>}U6rjrkQ*3K4BfAK#;>{=!zV=@v@Ldz9u=r&NlQ&! zz8#u88hOIE-zI<^FUeVxZ>DEw$1{iU*M#k@DW5kyIuhwiQnek}*Zr$bQ~z0r!%qsu zx)dfTIJNVX4z?SUmy=dn-O}-tGqyV+?5=M0z~Z^JKdl;7T5Vecc63!DW=`Sg*>9@j zag90j>{pd_pEKZYSabZJHd=luDeml=*ZZq>7@GUmIM?W70nST;c`}R$K!w{OdzUqVZ{F{N4ENz7$3WCZ!pz`u^%b|x1*MFaVO@o2 zywhBVP07b!wM0Yy^KgC6B>Um?=DSX-4+{|N$^9=A!~wm!Kv5`u8`;3NPkrTt`3VL1 z@da+X+b@6y$pQB*Lm{Tm5W7~O1VZfYQ020#_-b@Q%j;s%7ycBpW(p8CC;lt+m939! zR^tY({Ut`=K){LOQX&Fc=-vW7yI0-ZF*RTvkpIQJxUs8iP(utPmuSutph=W{Jp=Qo zG8nMv_#CuH7$Hj`Y%BF??t3d{h}*}GZ;#2Zz=tjq?>}1Ef+P5GDYnNmxgH*yJujMk zftkIU_rFq4W{2+f?c)Z70!-d^@8K2rB1vT`sW?V{ukfY2Wew3loT!d2rzmd^2IDyL zdl{gOm?A*(M&M?Xp?0nnzJh%GUWb&((%*=Y)Xu}5xedy!S^my4oA~1!P_@5>snsJq zhP2J8qNlxWd9m&Li)>gQXnnuTL)j5_#J;!pmt5QpQUOMIEiDgci1~!m4Jcp1v>*x} zPPRDrFvNY+b2jn$%8k0PCr%XN5B2xfTA-Ob!*zNu6_;Vy^PYEY+@qsoRqi*=5MOV+ zq=-dW$&771DAMpQ#I7uY9pZB5w_><(HrpaAc; zR7_8=rp}l^1l-~P1o+>}b1DjboUXPjX^FYAQYzLyIA6hegFERMfXZ5OA#kgt{oVud z*yF^|n2-LtKhCuwYwlJ(&jaKP_x*c|MsK^{H^-WehnGqy>$2w2S%~Ll;j06I^5fCx zzkkUjzGGBDsU?D_I|)~`;s_WbYuOhgV(gfs8Dh5CoMWIt`rkczYN#B^Tff9r&5wLLQi_tu(Fbh|0L-`tIUrB~KhM>=o%I@&?J)UiW zw%;ACLQ}_F^qbwo&LA{zwiHj6ngaC;t0l%VA6M)w&Bm?ixJ5%4Z|!Jk#G+GmxWA@Y z19v9%e2ZmbWe0Z52UN-Inv$#%{xdFKQ3V;@HyC$z3|urs(s9Mj+EPCINQZ}?3HHof z3foihL~3I0wclonzR+)3>m2=+3U9^1JzK3V+UkKfzkJWwD|(f|-^wcoQLnQYBWm_R zPfg=f*Z-}g_$v_6g%8{Ux3#ULJ*sJKo!*ABCi>>>*3XC!mrE1luWceWQ|W}g?oQnN z9_GCKj`J;;IfnB~EMkLJaGYznEl&@2$2>SLd)v$Y{Gk^}a3^$!&S>8v=`Q;S_`~=Z zO0EPD*Y^61Is)V$DxOYwoT}bKgsOvC=a23u!>8eU4&Z>_jh6N^Jk=Hh=s4)%%Wg{A zWw>MC_RA@xX#~ntbqr=5$4#~J>76?AM<~v9bz5|j;(G@V8q?QjriRMW-m|&55D=Qz z_}{(%q-ttnl6IBiz%3vmsgc-QaLGHqSUK8OfNMX?$7PdB=k^ttKwI;#^0a&{!PqGd z(~F`%nO@qu8@~9*&)E$dsarVZbJs|AX=o40DCKdttLU_@b82dijvg0NeE(LsK3P@c zH{r&USP`EU6Kvf5gjc``7DF$usQmZyKlgN@1V~zHeu)oKq}iM=Wcd_O1V35*F=oBH z6y+WN_U(!rru6`?h>(oO1XA{%JmQ+&t)M=yHG_NqKT>k6Le#?&^7L2qG}BkV)jO;k z&L(z0Dt3qTHQCJ2XB$UV6&)hfnrXv-1iLtfUZkc#7&zuW0lVmAwJGkvlCJJ%Y;^SZ zXXRhm@-e)>A6#$JDKgu}{c7%LZqu>$IndS}%3E)lZOY-H1n9wm!06I+g^(N9mz0eC z3RJ#%9?zKRE_n-hTMA#ibb{aa`ize19vo6^rC5~c=*3S=hq-g|ijKfo>yUs5EaB`- z5|?5@ez!pFuLIw|S>eIa($p+?E7s>Xp6hWGuD3YON43pgpET{>&hnEDPAC-$h==`+ zY&bY0`Q*+7@MD(=S(yxi%n&IIRx7LH&C|Q`&=&8NM&H8JtW1%C7?q4Yc#^J~7K6IR z?`;Hl1gJ8iu`&!O((Xu$t8xND-_b6uJm*rm#sSTXk${Uw`IJYfxCTwpN<41$x7 zOIi}b=uzC@@H?x`4RTVdaSL5lG>{_uN^FDV`FQ;`RQA2+l{Ael*1Y$1TN(7zdzKU9%p4^O7IJk~4+-a$)YWB*Cx&AN^uEnrM+UHpBr~V8K z>06!G(%HX3fxPc;A@%9W-7~d9U)F1lU*U!Y&qW)K?g@H7gf4zD%zdQDk@&NYgV$YN zn>+ZWS}5g6?@j>RDXAw*r9!bLS?Kb^yg}IV_$0rGI!vb~8vtezv#O zPz85&ZoWvu43f}-X6r@#Z7RbE>*@NNh+68RIW-k;WqtO^&${6ZxBpAGB>|TV8CR-e zDf7_x?FSR8{MVwpSJhJ};|70oiu17}&2WReBo5P1_V#RBAC_81b@!NtCrrTlU-M&k zL%6@xEaC)piWdI(YSQ|0sL21J>oIFhL0=!|`C^(IzLlcodDhs>#v`2fHv$JI%Gmwy zQ7QZQ3uNb-X*s3O1s8sd=2zrF)L&GI)&f!zGL@g&+|T$ujB6G@fBx*c?}W@#=NgzB z8z29(=ZsoVFz}(D50|Q_chiycJ0CYEkG!(GP{&pA{%h&Dt{g4`X=6vvjO!WGXv!sJ zwRj;+LGU-SbpFyllT?>N37l6d)IVu!YRqq;i;7mCDVr9HXZStQ38KbU{}eKCSyaVC zl7nbRR$A7F)-uVub;UP>OcOa}$ikzdjFmofkg?8LKE&ou5^ZnI-2JWMnv{$GF`N5D zIS`VnQ#aOhBs^05CO7Q6>|JceyMY+x)`6i0&;`6E>@_Oq#9yd?XlQ@sc=5BLUPc%b zmZ@3Mk#N+V@M_I;#LcE%OPn9Kh&GW`RUHFN!=SaVj_gK&99KTVS-@BM$+my-Gmx)S z^H(`Vog>=EfBW`yjdFLY<;sZ?H{OV?7(^a&}>RFQNd{bAg)Q{Q*5XlcKwB?ix$-z~9|h$W^F z)|mB>u1?(4-!S$L#HA!CE9mia*SG+CgHC8^@M(@CRCd5??|>3uQpZ%*icCCRS1hjL zjt5i!^m=|FfQYmP13q>8?X(>FQ-4}qa&CLpa!o2=${O_z27qZ@8A)J}7Cc$4!ym~= zTGWa3(QNjbCLK3wjvBMJa5Ju-aFX5(pnpkFF`iRama^C+C?DzTQll>k^HX5VrG8EJ zHiVh+g^sF#yDQ#4M@a+)UwTw;ucz4UCY|Y@!t>FDmL{*3xQ6u>l+OOkHxRMvg#TXc z)Djmz+jK@~Ege_2WUK5mBgEVHsU>CV#2v%EB`TGqM&&Vvw~UQu`&(r(_!SusN)U~_ zUC%VPd3^j93AwK4pV5Oxp&AOZtnN+6*x!FTc3#DvB+`(RQql>tMga~6kR#qa$T>}e zl^+&=HWf&@AJ6C*3Sn&!thC?`4?pTJm<&CS1nVJue79YtDG8tbNoe>=^4`;%D1(x z2-s`SGdh*HgrxqC=MAMhAs;Z9ZM7}i5UF51&+bG*5jMxh8EFwdL&$ zu*Ln4Q2>*@^4HEp)=coxRYRkaBMI07I=EhXdq!A5gmRU>v=1ZzMUuz&!xNHG!! zr4LW6VBK2jBV7{m@w&b5LV_wAl`CdJB@ffU%8=%uRr~#7DdB@tDtG@qtbZ7H_6%-c zY2Ut`rv5AVCj$6#;itb9xvsBqFSg%8C;!cK%|#u{DJbkEfXI73SO94>QtRWi|5l{I zI(=|rY)5JU@87=#WfvP_EXq^mlp<(=OETt>Fh>G&T5qoa#OGPk6ir5^-&eT;&-dv^ zLPd;7A;H{`2Ph#fxjVycv%Gn{99cQDyr2fqX(Zr9DTH3FRy)0_^GNsFCMISYohWFp ziULA*Z!}@M#|As*ybAvxCG*FFqjEX5e*)sSMC|AIXjnf`WIkz^@)PR;sCn^eWRzRs!o!?yVSj8RZUd>E0bj%G^F${W7O zl8P0Zquvh|`Oa5D=3_)l!aj>_WkJ8L2>`Sao1CUNbfj;~C+tDCRHQ(Ps}>)! zx7rHE+IvQZZ=7-fTvs)0CzX8tGbVHy_ zp5m3p!Hb!mnp2YX5ch5C0VsmFxb_I%zMJgW1tg?*D4#z`YItE{t`yst&DriM`(p2N zteP8G55VxMV!`tWY$bIVc$1@-4Q@l3Q4f0GMzWtYG@nvMee@S}Az zmVhCyb%m|^!_@27pB0p7L5#t_515AM2x&jRsb;IOQ%H4@V5A}WC3p6K|5;IE_ck|U zSh-KS=^gzG&6doS6GfJ}l-E>bBiFw|GEQ9g17uGd89wLMSiFwx8|IevD7g`;fJ+}U zN+5t}gw2JoUQ6>EpPtq6i7_-9khf=0_pR}h?6BgSaLOx)W1YRRWiwLHTIZ~Ix)vQZ zFLCeCS?&e0oL!qv-Vf-DhB}gp8az>B6r@k)A|Wsx9-iU>e79>HPZx7H?RLIG3n`#Xb^{iZX|ej{zxbk_;HX zF8K3QIhE+C(&x(+D1hdd>wsNf5RkYd0Gw$c#;vTU&q4&^>k2>o$BD?~#Q|*3*<1tX zcTE*fke+$~b&&$E2eb}oQkGU!}6GT zpR7iKw|aa@Tmn2YKC&P^zLYmMA141TL~J>J(TE)re}=xbUDY@eiI>SPa|swP7o-3D zC%5!RZLKNXDnTCo>+*D=Uk1$1K3UzW&yv%GQ|9ozY~0@`Q4@uIeV#HZ>9sVV)aYG% z4;W$nW22d-ev{%k`y<@0U7vk94#AY5-s= z>MPaT`+GsVs=uvwd2UU?#)lX;Y_)JbBfZ9{At&h~oFq3dkBMb8hf|zPS``S!!U4i3 z%a41Gpr=2A7bi+_YL#0;(_Dz%&OpD(FKqpJR5m<38T>GIJww2!nRsvI;C+*~zLxt- zhAN-1?E&YHFP6cW1>rhqN}hB6rDr)_UHeB_keV2l zBe&vEVUKiXj`8hpznM%+kwWoXSj?YBoAJ?&p|3=L}0yqfM0>_E?P&6w}k;Q5--ee)Uo6_n^Jjf3`^^3<@YLnJpgk2nPw1 ze}F>TWLy;Z0Sr+(`juSp%c0@g)g}hv`6miyUM=O{GGUZhb}IhxFKCsVmVw^Bxn*c9 za(=_}leaUIVzcuouQY{c`mzeyNwVE7f&B;M+bv9O-y|?cygH6tY_Op#|DM&I!+TVg zUrbh+xs-EN$CILz&eLrK+~|Uz`DC85l|H6nvjW0ULZ&yz1zy72WTt zs4wJShkcE-3LNL3%pxk9Ydd^}?h5m(ofDr27f4IqMcm8$ekLSqih@rCTZy-b_D*K?rNo5fQ4G5#DYGQ zk`hRjQEz<@+x$E6Eo)wFsb|<~f&)>#vxyc)9eh-cy6JcsT(>{D3nJ2}g>_k4aRgE& zYFhk&W`Qtf5nAv4&8)=BOCNNsPT4&X!_$7@)IpfEKdFN_so$Lc_ZO4alkN3OPyA1> zB~kH3h%i5FuyZgHNuuHrchyfCnYFv0eLonEIj4imMpFGNAk>OjG4VFT!+nkbrGc}Q z(jxWgFs}{}u<{>n^MsMBk8pkQXHZcH+U_!iJKzVZbnAAVG@A9aZ1H_Ec70x=vJDe| z^+DAK)e`TwSZj#J0TreZx%+h!`-IO zJ|+6-oya=IuFqw%NK*u4pW*S`cPT;(7BoFTAjs*n(&Da#X{1T;@F@E`y@mq;mYysW z6_*FA638hiIbr8kBtG2L`G=qCoY$HGg?5o3j4$mp=LTtid%}D|_cP6@H^c+R5}fgo zq@UB!2+^5>vdON&!ExRp^7GrE47L)KD(~=f2&4v}g*=pva!Pz&r;DDyO{8)I=+SB? zUoKf(O^z>OPK@Ki=|8A3spb7@r5N@+7JlY(_)F5ZW}_>%^}<8I-Mv~t8;>jJDD49l zqM5-hH(0c}jhrd+1gNHH9<&`c8drFGAlI57^n-!H ziV2dTky^UziIE|#8Ehh}EW=Yq>UMXZxwVi(iW34Vgvl-HpIVd+$H9fu zXft~eL=Z&g{A=NRp=;RR_bk`>TI)2TOK;<2+!R-ym523UhCHkv?_?n7u@&+LM>j6`=gv z4ft^bDV0wa%jm>jNQ{V*eyR7z2>#^D*5njuoqP_{yQnwl!8>78p0KX5^H0Vk$-Hg& zw$TQI3i?xok=-O@>3S`K7v^6NM*MsKtu0QJh{G5jfNqpKc(Re8v%?FC_!xBV*e0Uf7)n+H+^ch??csb|5wj6 z7|~7Ukab7Lc}`5Vvta zRVAttCLg(1hN?<@bDLZi4`K@|T*Jb~hHdS4bY_@EizB8dj6FCcwKO!&L&Tp^D&Pp# z--=bOmn{|N>(6HnR`&L|krWDDof}MOUa8~jn#n{5^4mThv_aJ0VsXY(GmE^|jIwnL z;^~Dv`v0cSk|WzAJQs9}H?Nrk91u7Bayt2t%;G^T^=b8tvcFq9dW=toDY3DG^Uufg zusLzRbaf~ME8W-o{Dv7X`L?xtB!zwwMn`>UyK~u0Yx%4j?^(+f@eU2SMXH|(%UU^< zdxCW#9jwpwK?uKo@*qwsjEnTwPU*O@o*6?*g+8*Q2YPksKi7_M@ke+TH!tsQJ)M{s zbaaeW$v4z|e1IIL=>x_?k5~{TMfx93{~Q+?PO2c`Q;F-P?A-AaN)cbVH`1RZ zKfNZG%l%n8I9S~fQz7zWx)79Jn@bzue?{IqY<*|Qs zR1qkaN=;SOQr72VjtJ`dMlHx3-j$P6xhP1L_dOvE*@2;RHB?&C&S5_+iM5L1!o84FkVkoxt))9OTS>9n4h+QKm$7kfxnwr+@A(cyy z=kvQ(mm`98_yfNuECF<3)PA`eyL=kN^!G(ECXwuY2(`w~Af)*0su+7S8hx={4k{)P zXkX9&8Sh<`OhiP){bosp^Y)$+K$N-oUk}vQ)}HTHfJ4fX^k7Ry2tpMK(c#$=Eo9DA z6R!(?v96IUa5%A%XW)&Q+05*G*q9+P{b%~&MiiAGJ-^X+0iP+UH^v5>1vm3>`%=?h zTZ`Q6r~)feRJ0)R(F6qu$X-0+IbISwG<8h){NZ550F6AT3dY&Ri1}+Du z3ZgzAQh}pWJsu3m$t(7rRfhH1<0VT?G6oq*{}?H31>&(mGRE~!64c`2G5ZkTn#yHuEK37a_!hBO}|&1_s)vXqlN0 zF^n>=;!QJL1#DSe0`KB}$bJ~5GS$I_S@&K_iFoUlH7InCho^PS+KmmP=SbZ2?xwnf|U~}yy(fkn(1mwM+ z!8U&PnHw_^T5VC)Bff9Lh(4m_+F%y;qaqHSGYeW4`i8Il@q%L~tfvs1&4h!CdlA{N z?*42wvd1oR*M)aETk%{MLxCIiLX}|FV@J6oGU5a6$cL9NUm|IgK8mqqDAGkW3Te~CRz3HsIK4Qb2nHK0Ju@RisqU7)WxcJlCgoFfg5y#l_ zGfKaw5MoQ{!Nz*~<7({E>8p85jdLu0j{EudH&}*8RIkr_vN~R{*@77`+bibs1G0~= z*D_;tTamhHb@RmbFotBc^+#LXq)`5=&3&;SY$G!>bD^t-{~(*}k5{j}9tl)~ z&WR-n@IPIYUIS(R+$pAg7Zz;B+w!Oi1Hw>)@6Oi!ZO7~c;$e6cCa$iD^M?MbPYvzu zVsj};Ts%Cz3-K`4L6vkL3VqC$P{idL#a41_(L5#4Br{SG)bpqjo? zT5RlN#-Kte*xk87z5a-}OXW?MvTnGWI6K|l**AaCnVUH`>~gUV-gh`!=WR1k!F-~* z@HH>Ef*Px~Z}!&3uzVyDIwvEKg`6((1fJ0=nJe=j9PRx-)z)cJf;-OT-nsFWxO7NfpcRT@ z!*nT#EUBDo)$Z}LruzT)={cfif1~LA-DQYqR#=1R@nZ^;G_M))nW4p(XX+-ixPA~>P{D+SrCc~e zLL!D~RL3CKPU|yC#oLY(QHcXao~ZHT^y@7o>YgtYIWJe~Bm4)azTa;#S*pPSuiQj# ztU5O9{Z&R*fjt#qehkIdvWBJm!#8{QzDs9wf)X5jxAAy+sp)=FfB6I+4*scvd@f@+ z^md}jFEz{WnI`*%oStR^C7^%M7M^@-2$Uk6w~~ZL;mmOe^CW6c7Dv)|1W&Sq{VzG6wu?v zpi*n)TSRuQe_&tyfP5a#`HraTdpMGZ!GoiL_6e!6;YH**nu$=$vsf@E75K|ZvXtcFp2v$L{Ki%@ZF_6uHP_}H?Vc#)L!t;PnEzZ z$xOC8cL#VYNzhAANx8T{_uS^J?82mX$DjjIfp!1b8O`>8P8jb-i`0~T{{?k0AGLCK!)8>Csu-82+uswc0rGVwR22A1-796*dN*k^B1sC-@6d#qh02S~8kCP536w2*$ z-Gk>GKAR2|mh^qcJ&v*YsQE9i=Fe@>m6o*+(rW_LE*k35p=w|9cW4|)&uLnhpQ6l> dk++^-M1^Mk=xaPSL;`+3ODlgW|M)HF{{V9$mLdQE literal 0 HcmV?d00001 diff --git a/33/images/DC-HC-Server.png b/33/images/DC-HC-Server.png new file mode 100644 index 0000000000000000000000000000000000000000..a75162699c0d5d6e145da7f0cd538057d1825204 GIT binary patch literal 45053 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%0AC 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 literal 0 HcmV?d00001 diff --git a/33/images/Public_key_encryption-mod.svg.png b/33/images/Public_key_encryption-mod.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..163d14035c4fcecda37732e75e628dde9d50e749 GIT binary patch literal 43524 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%0Agf131o^|xP!a4|s4fcz91!_#jiFQ`fu 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 A8UO$Q literal 0 HcmV?d00001 diff --git a/33/images/Public_key_making.png b/33/images/Public_key_making.png new file mode 100644 index 0000000000000000000000000000000000000000..8590fc359e5c0cb7b1b84cb4394d150306063bfc GIT binary patch literal 39497 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

$qvzT(cVwTO^L3N=1mF{itDMW1^B^@2g5L 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 oD^PBmx2j1& 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 QV8BOKQc0p-%p~-G0Gsa3NdN!< literal 0 HcmV?d00001 diff --git a/33/images/add-app-user-non-interactive.png b/33/images/add-app-user-non-interactive.png new file mode 100644 index 0000000000000000000000000000000000000000..5ea8c7a57d831a3f7f1e98c4096b616cf2fb7060 GIT binary patch literal 70649 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%0DajQo^%%@cSbZ2ZpV{ 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

U+L+OOrUB4gvkZvdykPNvXobBM&1x_3 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�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

*vVV16rwiI(WMz{4Dp# zZ_Pr(nNK^lLZQ|YDM?Tyd%$G;F{4rS+?cG`bwi=Da`5btGkhHyt89GgHt}c@qV}x% zeCs4p<-=ViEQM=lt*y^k?Jf|Lk%7;VY-wrv>$lb~o|z=S38u;w6u|=-Kv6{fPx+N< zPca@Tksw%hLH^pn)n!$Kxr_s7wHiNJ&b)(Eqa!J;-Gve$VZP~gt^ zRrNBDhi>wK83N$*({Uj@Vfn`7?ex!?9@#qU6$aG{t?;q2WX-O(BV3NB`krKRt!5lO z0I&wgYvqLFpjcPNA*X4*-mFM5*%W~=08a+Q8mj*?CHdmQ8ir5lPgjM_%1-+f3|ed$ zKAy26svvg1UZR%sIbo+OpY=L(3gR=|1Z_y!h0xmAY!4UnsM0{E6R479(>J3e?XEf~*GK zXpo@>3J5J$x^E|qeyf#eVlHzX$k>nv+nCXr%GlcfCK|$W#r8!Q6=%QwQV`Dk=6T{UDX5%18&lbl6KyFBLT~nHca~saFLy#jiPRsM!-P(JGO}Oa z*#50{PSg;=0~Y|W6bY|Bv@WL$1THQxAkh0u%s>{e!5t?o&WDhnA?U{s-{;zA>mLXF z$Lp=kZkJ2{AkVixna!U}Ub15TE7j;4&f1yC&3wCAZL-2^-g!nbru)J_RMTx3q6HkC z^My0w7W?bXIQMQ8dsoCL#-;dlj<_ zPkU^#X>^R#?ruD)!w#s``2mQN$c2)=2&LH%R9T-V2HXDzAC3Blc%iOmQ>3SU z+lXrYi5xC|Pe@bU&L$T))t_)>5_H|3w z?2Z;bYOjn0-0@)Jux2srCLAmt*(Rf=5%#mh+t|E5d~W=Xn5M?jiJs#!M$M4~QTbMe z=--U(Y~<=9Y$PNq*y}Rx;omMpA{Xxli(+y2*|Fxd{RAww`->FIN0y%uFU z;@CpqdU`&d|6YxhxHYf(^9LPZ@&f+xV}q`G)8ta+KiQY6-q``;j$C0SBoTW7aotqY zWwHRXsK9!rcHr3kv^#wL@%kD1SHByMQ%Xq8<9W1Y=jFijC$S_>+j)DnuP`9`g}=N& ztj8+}`~A>+$#3)Ir+@4S6b)pmV^UjO{3kVxEU2_)uT-Z<{Rn-~FvFbdO98O32N#Qr zYqJeUbj$6JdK3zvG~ZDS&DW3I>(k0D@yYnuna(#;?}L!!knWe4cR&(?!N*6|UiF-6 zuDuH|btH-5Jp`!AXKGk~U=f4^KX}yE>m&lEpP2v(2qmA<^31f!+`wxs(57X?tYNH+ za5|DAHIcxG11_&I*VlY^Bz}Xe%ceiz3zAOg-+l~^l8QQ)wMvkGs=+h0=RF_RU+)hp zAX(W#@$o1BcU`iCW{jR|oqN|2m)>@rQgvT{Gc|Ip!?Lw+fqGoDGi83h;q>jf=4Qg( z>=zAi8K)7#e^${2=SUWu=q9A1N_I&V^~om4Cw}z2mbn59bicX{Y{!p?< z1BDOIB}EFVAq+e#W>!=t14eSkJu1CW*xZTAUY=0Dcrxv{;KC$>xRLIK9E@KfI%%Y` zb?B1K*HSCJ%XFMD&BbO)HAwDG7HMQE;%P5#aahu%a%w*R&f^MyaB*;`2BM!@&eE4@8%>lIFhM~*^(d@;ePl!7K`s2;(vdl z7!x=dA@^sW#JlaNvv|;P-tEk~>_DxH@UJl$k`AErEMZ9Q3)I4b_s=I6zh>kW^Mw)} z+~#WuGP^czs2M2~WtJ7yxI=-y;u4OHNI^gQZxkujUl3>4n`XEEMtlwYl)^9t@8W8h zWXdGrOdv?41uRy8goQa*9Ntn&Qc?L~uzif2n)$M`1UOO7#nxPEy^O8UVSBF{AgYv2rH1iHQBO+j z;E5!a^R;f2MX8F+;@KpP`sCDrBsXQo`AjNVv;XQV9S)Kk;wQO)-h*I-e(RJMA9Jz> zgK4bXdmR=iP~+9YKpIjHHCnuQjy4bUy_>ZQ@Cb1M1Nt9{|33sMBu$Qe7n>9+M6N!V zv4=5m+5e-k2UjpIz(t;@wk|tvh0_F1Xn??>0pRbE-cGq`K%gAI>o4$?|A(0JzJ`Ke ziQQ}2Vg0|_ZADrfO${V#Je7`c1F=Ztmy5k@>&ewmajvzn*~0EnAn`$#z8*M;g<_v$ z095=%;rU>cDEOfMmu))K`3z4~5ZJ<<(5QMtVrn}^NwZ(d2Em%WcT}oGc?Q&P|Hr@{ zDR_W1-iGJF{Fw6#cDsFYlZ=5(%6}=4mMiwpKwTzaSVXe>&hr`QsfKr;1Gm1F0q~m% zjucvPaI!wFP`Z*I4(y^IejtG|_Pq=*3 zHmzuRjW&<;yoY{J@oVD{(SSig5-<^QlRq3j8gFNtWHror2o?#;MF;2LRf)<}I12Vh zX>yAUKF0pO)rj1>4I|!{i~n$ypfDR=B@Q>P0lK`{eo$TTP|n%Cr*=qa=q=>LG7OrIC+==m3DU+enKp_P_|dz{WRJW-Hq^;cV+hEX z$A%21(S*cv1-r(1epS&5>(&l!U-_}&i*O4eF&QilbP7 zpJ5&9J+Wghv2!h9JkvJsRl10a2E2hb-v8($+jI{2onkd~m-4Z9R(9eB`D1VoaYonE z(o^*O@Y7rB^e+Up7RWt_BnLkZV#<$|8}^p$SJUgh`4RM!MfY9fMzPaZ7DACqf&+Ea z_YSKEwnypOtMWzzy9RBhtRTa^rDz_%)92&WCYHF-vXT<$nkhf5Kt+5+5YSUO+c~ym zAYacA{Wt6WXhK?obk`t8q_49I;VQJIWjf=}4Yu0GbEZX6DwIP{9rb0Q*K{zK~j zs!)K8^k8pb=5;B}6xaNu6!xX>kyD_&I&n;^!j;8ns>>n$%FjZS#f_poN9VVH%RRsP zG@|Dl{g6UOrCGmS>Kn~SBKnCztkSE{vb926XLib0eGNA#ks!b5rv6Te-c+b?cf;2A zo8rniyK039)~>J$r7mG%4GnJ9_AEdy#VuK5G+WQhxGzMyj(b!mN0K^~oJ@p%QD${Q z{c`EgwTAzMguqT(Aco#FIj<#}<2h;ikHIiAYGkj%V2t07S9bJu3DJe{Q16$_u>yxm63A0xy|deNAJElPmfxq6SxwS;s@9w^)NB^k?5H zQ;WKYA2rQDWCP2y`ddAe;FZ+G0fXO+`24b*L$kKtE)F`(J{j@-{c)#-`Dk52;lrqN z4V&`YozgDDsI^c*n5;py4>B$*1VXb7gQcS)#ZpR{uX|?&*#qbi!M1`}zfyImEw^K{ zw+T&X+Hj7oFJk-8WL&1+dl9=BQV*2ey0XheM`uwoq#Ma29d^u~D)0@H&wx247HAhl$p6v?{53pKci*j_-NgywPVENcGJ<$NZyfC- z!99j3{18mQ8o(D`}GK+-s`Ys{tEjaTvAAfpfu?Dk+-99HT5bueJ-e zHVe(*aY3st@=6rPsI^7h%A88A68w7x$pvX*aV%<)q$;23FA zh>neY)>p&`E0(`}r)>dBP7JV{eZTvUWN=mINAi4KYWDbA(&t%}Pll2N!o&tbRm(l0hE%*rRRipqpGf8x71(&S zpx>wke;o5lGHDZyW00^-MWK#yf|($zXIy1IK(OzzM9bqVEa!3EE|D1TLfc4%MEq`f z-%AyaH)K1*IxYRMPESv-%J+n^@b%j^rKjaSGSo!ANkoUIdsrfkd`GDkjYB~z&#`_~ zIf<8$oj=hCp9yxpZ=`zk{%WPAZO50cw^$2jrq$J%OG7`Ysih3@kRH<_k#;iz>_5A8 zEq?TZnOO9A`uZ;h*#(F%T*80wLMOX4RTw-4e#6<|rhdG(8@<+M;IkV}8wp7h^nDdl z3nKKX2&K&Mi(GahwiTl*C0w8uw_DzcbR&?Q`ap(Qya18%KG1NLLg1B58d8Qnh@G8NM1r%`PD> z61Gc2cjY415EhDpmMj`o;&c(~c7#%6#x z7Nh7VC!vPL>AB>-*}38%)KW_FvrJa`9>_F-m=7hZ4B3m+e{5pP-eWeSPb|^@;9nCN zc#U7_gsRYb)GB!~tX>PI=DirE#B z)cl51-wgRxIu0r6yk>#$Cl^92s(YQ;rXgxVi<)M?@yT1`k+Oao=TTddVnm>#%UzhK z276%^agG#(&L{hC@sh_7(S$&Ovm7qu(Y*vF?nPGdSfO)?2F_295F9x3RY}47H3qTt zI_Wo5-oFo`^9p1*r8?vb`vPj`(aeID>C6FB#ogGK7cuCym-NC$vq?MuFK!%>VQ^YqKyM)`wRH6HD)Tz0vL*%$b1M+KPE0d*sl~^JZy4mZ8%3ra7cC8Lgc)B@Z?V>GQ_; zrMcm?snagno>gW@ zgH|4pDU+*Q6&YP%7cK-~GI9V-*9$tbi&}#EOvnH$#tg-VkVKdEJ;@D4*!lQKZoQV# z(>V)M**C@%Eo;iA-hzac1|l7d7^mQ5FSZeix+egfZO5o>14P#40YXBz+9=*lL!LC{ z!O3=ip|3r*Y76yGt>WagM3G9uLK)fe)DP!I_}A}VRQyD`#J6ce*&?Gvyn!r{1s>ZD z;>A2PoAR`SVpB1aq7=xrg~LAvvE^9#mXC1%1wM`n?RPa$?YqW zAGQ}>wzrLohWzt8nd(Oxw@tGj$luE8%MP)h5<$PE!FXx z-C(*|NQTM|5oMP}wx+EeykeuNF$!C-M*g-W4N`jki56ZeLcVQIOILVNJS+Zm$Up&c z{galCJ#%K9?r^dj;qA-Wr)`rM<&PV4v=qewfCl@Rj3gax$j`6bMAW80mA`sM9Vl9M z=Z!@ImtbQ7Rlz2A%P$e_08KO*dAZlXH3hx#9_CkVscK`lv}O>7WVjuX8k-(-*y}Gc zAmXPcE%iaD=;GGwfheqsx-tbrFx>M0L8-zc)xOnmnhj-Pcq>Fi zhVI|x{aNi1%_Xr{lv+!Jf+FU{&@5DOl&B?=HlIgr8$2 zsj(EY0ZWP6T7MS6tD9N6#L2QVoR+l1p4yvR3**f=0O`64U6Vw#Kl&aT2{338D+7b_ z<*HbzIHj`S;1cYR4f9~Wl^TADOVpCo7;91mgz=#vG%A&e#sl}sJC;g*GHtp-^@3 zQ?A932J%>G-0WjEjPnU2b}4)7kzG6xu)WGMF+X{vP7_iuHf7T3@PmAji{0%}l$@)P z5@qk13O*ykO?hayf&rbQJd;`(bg}>CZA1)EGQcJEUn;3MLsK#2BpBLKz^xxQ8^@W9 zlr&%RAye*FV2e@FB}AU}Z&ik>W1v}A^6fRe=P+ef0OX;BqE@prHzvz&cb8S(N|F^~ zJ~w*rwlQcu$m~i&VS`%!Fy({pCId`;BA~_^kH=9{Q`6-4&TDFF5Ra>i<=WD@dI$#4 zZn1aa^9b0^wjYAsuqDzoH4)1fD3=_*|ZX0aEZ343d_- z$Wt3fky)4su~N+P$$Q~w=bx1g4U8VQjxu!Xnoue%<>;-#-7S^^ehCnZ#Z~O7#am2j zE0~q<%WMOr3lIPGn9#vNkDwS{ibmO7PIB0c4i(-kOR6U~TTKud{L?k`e|Gvs{}(Mtp>UO&1U`-Bdqn z9fS`*`a+?(aHt3*hgpuCIGycewp0B|LlrYqt?tB!a-SuUzGYmZG)v}AmGIVaTTYGI zzr$|!ap4FXm3J*i#j*-a7&oC{uvt@6gT+f1qr7XmVz0amWNTQieS&V5t&rX7!cT7pQ5ukg@Mq=PwqI8!R@5 z+6s`&N6p`tS)84PI(Z&zAR_jUOPK=xvN>y?%Ht9mQEA_qaZtw4t}zf2l#P7hI3kUj zdGALhLKC6I6?XVY^y-{_b3a`$86`4%Nnx2c|@i@x6mZNu1^#!2-Xu_Wn z1puuG<8_`!5auR6pEG?-46lbUiCp`%zuUf_lU@Xnb9nMNpDO*6i zc@9|y_{8R7#4W>UWhTd5LcpPVuHAwpdEb*hbk>YMlSk+{cv0Qm9bdIFd6u;X1(8<2 z{-@}K<{mG-EfD@(9CMGwqurhPaRNK}s5ndJj*+(+P`=&n*l+8$6t3v#-rwt_= z$m4+mK6SrZLpSG-h1ajR#X;|!wt6O<4d#aiNP+ow&S@W$>{pgP;GX;kk;2+&P{>r^w(j594l2>SHugFX>1VvkC3iG3+$YuCy{CRmg& zcGVjSQ4MymBW(s(PyBLAsmv6pps*$VQQSovb=9;wB~v<<-qB=#RGa;9lVwH`nVKN1 zbl|8wb*UKwzovV5@}^j^puxPL&|WS|J!{4=J_J8{o3VP*4I+Tm%3TohvQO07vX+F> zmRM|#98j$e2oO)0mq~oQp-vbPP?~d0G;HN|^h$z!0zf7}kIx_zb;tc-iw^W!(h3pZxq6i^JjC(Kjdv}@S zr+VymB%pvbszFc5Ejp+p${&d{&5OGg%l3R@jWmY3eVb11^A1uSD{@x13pn83wf4ix z*@#=VA|g)W$0)`?8ms^@jwFCdZI|asQ4%>N^{^@hm4;Sry8xhGWhCXwHsbgnM5LvI zQ@xxW~?E0vvfE-UU=dApFjuEdKNPg zwnL!v2d{JX zQQ8485m3_APs8y>TCeEMDK^>Z*eJe6p@LJx)UA{Y&CeM32Z&JWaAyuDy9HcCb*a*c z8>rEIjEt|%f*Z>*n~u>6?&amhgx@d7+$f*=#|G@$!-^Tc4Ykh}z60v7%{7ex-XJN+ zQ`Bpa-;bSoc$z!+(xrMvLV)TFc8NuW5mD2FYc{hJ1CbH9>=#U<6wB08l9;c(olRQb za%LMReYLU1rKTJ8km&fHFHX>KpzAG*!N{jJEN&Eof6S_>+G42gZ_gN(h^g2w8mb0J zDEsRS@$9s}!DmUq>RQcU-}SY~15NTwGqS5JxokWZsZL3A6}Hrmkw{kgRG5~p83W#C zss`-8O(cLTeB_eY2XhY6kf|PM!s;kDewe66Kw%6Zh)|ERj7poye!Zf`!ai^4M|G*v zUL=Z&k}O|WA5n(S=*0gX*^fNiTcB9;1dT{9wc_#oK&ps{Jf$S5oD5#*{WnkA|8Jj& z-1liyO7OL-w@W!^Iet58b2__&#{^?(4V0n&5Q*FY`Nhw@pl?>*B)^DwtFr?LPeG;+ zVhyfF#4dZDDY=Vz=JpC(*-2*)d%lPRD=DZt#y%siP!dq zzvW~1R{+T~uWchqrXiENPHSC!0TqYs)wHdG0HCbE=2l>NwOpkouYt`O*lB+NIw`~U zOWh&h9OSX%6TxMYw#q3<1Xoy7R%0nCt+l^LBN-l+lyC_4A8t6J?E_HpaKK|f@O~Kz z7;2VeB3qo76a<+;Xv&hBy+-*RsTb-9Vrv;}f)N_vL5AqSMA}Z9zYmBLk+z!kmH7|! z#EJRJe7kf!9{ap(Q`jxd9zIYs7%xM)ZYenKaFml-W=-R(3AT(75cpS+?G1nXDbNCp ze(XACq&$cwFIBiz`AoA-YEVk;3bW3^6xqfu0H4`cKwsbA9%PDCpm{F91VXjn!ZH6ed$8RoL#;S_5(|dzs9rUHaYW@4S_qy2E*dsJ*wfQr6|!O0pG$ z3kMW}ZW;GKI>~+eq=BW5+fJF+KDrCEBlFI*;%D*=(c$&bzp`|uD9={sF#bu3zfs87 zHH6xNL<#J}n7Kj5x*dbTpgpz0*d-HbH@cSu+Cn9cCFAmT?_H;lnBgx;bEi}j2%yqn zUMDdZJvNuluiP?~y%ZaKsJ6v}NwcJtM7o7rX>h$UhdfgdHO3G&m;T*%Ka{3Grru^2 z%{O*|?g{!?O+m!HA5HDV0<)<;%1W>mMH{vN;4_a;W{olAm1kc-3-AB%l1q{O(|r zfXur9-YXE}`;@oS=9f&Bn)qwk1>2t79p#_lQ$2}Ifj%~`HA~b2XhMmqVRN7dGWM_@ z=*h3FCi@l%4?9vn(*D8L`eL;1vIEB&7WkSC(Q{)+9*$GGE;HN0lzZE!=(^@p*CoE~ z@ileg!IeRDTYjUwG&|3=#0XkFxoylEyl|FD|L4)8{XL%jtBI&tLxbKr=pB zR^tW+9|uXJ01UP$oz9g8!;wRyqJT!@NUzRm$xR~FAyvy?U&STQqZ5W8j?%RK{QT0Y z%Zv%EBwjVE9|5N;dS3R}xck13#aJr@%1vA!>+h0~Ng2JAnQW>M5z5h!%!7=>R&9M! zIk#id9=O92^BY{voXD8oqy?WgF}?$D#h&A**KgwT+X9)ZTI2Bgl>iMKg=4^9SGdeB zls4RxiQE3vNQR+$HCilhZ`I-WY@*B49mouL9D%+mW%ZwYKXFnkcpM+~968_*B9jQ+ zX27lg8f~Y;yA9D_NU~o`Qclt}@C+OvM<6qLHptFOQ-sqiRfgWLq4a*QKkhkW*7a+0 zk-oAC@_6k%n!o(~Ygy6!)x;Nv?Wu98!G<3Lky{rFi$rukXff&%ISPB=(5bE25HN(G zDx|#eXTlr#dH_|U@*REy{o?EZ~*B(Zl~z>lr`gTwG_Z* ziSV!~y+k7Y3kPM!AUi>hJnPkMoFignmR~iBi01J5`T1I0-G~;XxppFZ=4K>s-YcA# zt;ixz&p$TET;h$)$6gPIcI^^{0|pz~8puqY%xhKgpcCyKf_f9zZO(OMLTeC&nJNsI zyn(w?AAw9Z{uy0sYujF8U5vaqr|0w<3PFk+a!c0rCmZMIK(^kj;;pAbYpfl13FKY} z5h~9KXHVOad-eS zYQ3zz_qY?O4>JC2(AwlAEFQo^04QUCiQ&=K15uw_o2Xp{{F4|=U4CW{IBw^Wj6_4s z4mUJpI#xvTDP$2{+<4xiff@|sC@mZV95mBgRrWRjgzOs1!ojtQdU|^LLEPz#kfP4B zn4J25l1(P?wfSABg3PCTpK7((NxAbplm@DAB+wj&%hL^hf6wwOcyP^4Om9c=t!sCj$%M*+rtCOy^i3gGMmUH z!|smo8Aw{W{C=&QgX;+`4eYhai^AT`RoJs;HaQm6_HlM@HYVF)_SFu_4H4NLYHTtBL;lPgv+t)IkAU|ZUtilmq z+6WsBB4-|#Oo=`(r7TpYa18i+NMvXXwcL<#HR6L2;JN4Ld%ZSiKs(?+&9g+M*4ys3 znu(MvxW6wOtF~uXrkv&L*ROIqoroeI80%KjX6&kC_x>8Qrg?yguQ)|S@H`)%p!tXx zA?icRFIjPB*uT+jN6_DLu-xghv)B(wWM!tP@2q*7^v!(Gjt|gA@occW1B!t5WG)<1Tv;t6 zuJVqTilGU3>uryH8dH~-nD++XtMX1o{RJS<555vx;(C_>P_FHxA26w?<)@ltQF9^F z>?;4ZKXWp{xQJNUkw%zAE#T1l@AS~6r})n$VB{&010Ub7`U^A9P=1ob>#OUCrZcF< zmzLQcuhjeG>Nr$~6UrF1tDWj3F_dh=9to;=0+ZlPPPR9Y{J#8|{Ml7pX`kCfz?lVr zHAT^iOT|#^O3B+H&ZPMBGI*b>FS|74L$}TDuOLnH2F7wRdy3Nb5Q3zIY%Fbjrv!Je z={+ldSuLbBtJqCdU64|??Hs~AnUg)5odbMjj$lmF=mM7QhmCOx3+esDsBAHe$f#;u|)wgu7 zO)0n@WDAl2YvAEIFrC;iBH4{2StOb5NSsQ5nYS@6&+UEVzsn^y1UwUaVQ?kTZs3euA*XX~dS>UdgDXDGI0hqq6 zch4Tbh!eG8WDCOqXlXL!3$t#pJeQ1bFrlrabM;W~50X&pMC#6VuS`D!0A)t{;<)_jeCSPq;^!Y>g`= zUyUetJ6P!L!Jo6elHODQO(?}eR)Wl9^^9hFGN*ntJHRZ!DEHTf2q?QE$R^#=8mL?W zoKmWw&eomQgNRAT(~3m;Vp}P$1)UPMK$L8%wI~+Ht)x z@U)63lfHp6O+RJ}E-?&sFhUL;?yYf4)7f4M4#IO4#HdO?7Hqh3G7A6e`QJOZ*=qzA zZduE65#=n?Int2MVGwn5iog1^N3^bs8L!{+$Kx@mBdZv4IHiF->v+1i4U{tg_|DgE zGmKln)~vv$NV_?^xZL!3)&(}*&Sl@nMta&IJQK)pF|>7;5CFx9-!=(=ILxifac?^( zVGca4f6S=e_yHrA@j9eL)5u&;k>o# z4X~51*Yh$2qX-gp*j=kK!agk3rc};@>2}LTjBIa#Z%iXUW4-HFz*#0SP2~H#abcrw z+Gi16F!no`yQrMmp3LDMO(W<-*Fqy&+99}Hn!in%+5~{4zNV>-7=-K3NIY?dhct^@ z2igFB+?SK;NlnztBS01N_}!=}5&g-_GT2+#rrEq|wR21A1*<=ZCC1AWGgOiBVh@I& zN*#aBRD||KP$5QXfK1B}kq<8)N;rvf7&jqn5LRdcQ*TaFLwrMq5M+w*sn0SC(~S2U zy@&E`^U8*u+(bef?4aKmuJ%J6PdHW+ z#5Dxm;@T8^T?w5*3s#JRL-eCP^06I2IgD)W+TR!D;)S4@YUvKx>wZr&&dgxL=SVJ= zImEZ!3);=8+-xQ;S;yO4<>D>~^a3&?a7wd1nZrGrfBpIYi&%ZogC6vt2R-OP4|>pp ykbV*o`S|hUz4>_1gC6vt2R-OP4|>o$qkjN$)fIq#i8r7C0000-6c5+3ewUI0@5WN12fXy-5o=B3^T*o zyx;p>=R5z;To=r<_w2o&T5+$n?j540B8&gzpOX^$H2$;vDr`Hn8NMDCpS$;3pY<=7jrC22S;M!P{G^!t&ccos((I&k$wO1BmMB?$$#!4dTjF(eRCO`kumuDZD0}SKxHMb_vM}n zvQxPqdB(1i#=-bTm_O;}5Sk8|_at0dS?R6}A48PXDm}dG66pB_bqu3A@UcfceDJ^t zk()?NLK4`vvRq1tk^Y>SfqSO7mqU^K--`p_lEBqQMn?MxoCgnv8%%u~JrATl2YZx; zL`A(QPWta<5QZY351OihIQZM64GiDTcV$SZsf|o2aQ{1IE^!;151PtQqXp3iIFBBM zOep=&SOVY_0u9-?M8s4|v|l;;Odxsx8RET`rJpGVBU-o*oJ7-Gho3)w01=Z+6G-I* zVcug#a{AFo#e4Ve6|Hjv(}7q}5d=?>DhIb=fA%`r?^zJUmm&v-zs%hc@FR@ed*RLE z%@ITS%0a^^0fCvNrkgx88L`k+b zo-f^hgXyUdPFFdu%$1_8r;TRp$-)0*WTawl&O{I#Xfcpd;dAMLl_Fq^BL$q=*w~oe z$z!RO-HKto@aKvbX1j7hRgpo7<+OI~f8W@l&rj0|1P-MW1!)!C^;#;q^oro}INa%$~; zZ9eb1mF`>jg@>)MFfLKYX^vCqxTUL#!ed_`{G~{?=zB(B-f}U2O08xAk!l&uRcyc@ zcb$c)+Pk{$TY>hf+z=Ws1?{XF=!6)k)1N*FfIshHD?CFigu(p0p=D#$Vh1!ann{wU z?!-4|D-HQ9$7kR3@tpmxGudc-&v;l=GS+`=Wti_?>_2$)D7L|xj~gbMjEzR}SfhmR zc9e|Es8zPgk`L8rJ5%LJ^Qf}w8WU{RtD4FDhIKgq-3vg`AnN$a=RcfIpAiv#ZCm*~ zlKtW9$#>a>e3;b;Jr%(tY;0`mwc^^`FS`b`M5tW3rKFx>Zb{Xg=}#CjM@bMPi|dkv zCtV-!DO~^YzvZ|03rk8E#l`1|rV`;o5{1a*Heln@xauw?kw0JDo&&NNcsmHjlBz2+ zEGQ`W?ceN;WhWglrvv9hrf0hbgACJ8vHuW9^KW*+U)25^s}f z<%y-sn*toS1{oww8R%MC+;*nF-JhAkns@0k3_6N__AIDwE-)ZK*bnIz0SR~y%(Hp8 z+{!y!C0(@IX5z`ezf(;*ox-Dx(X2nM)o-{N6vO(0nCL0F zHNM|dSZLtg!}&eDs+`a;N||EKX()#nv@ULnU3Y9Vaj(+*4i0`QWpC>J8vDRkK1$n@V{mHfbYuy($US^o8%+>Z6czCKz#L3Rm;Q4}ZJi-1fod^{N zxFQtniITDL7PY3JY}ni>u0K40{xa_vo==SL*b%U0V`pC*38q<%VOF+UC}JY$X^Aux z)BWr8taz%V1L5X!`Ks=8f8Gm)+AYVTLZdzP+Pg?z61zA&d`eLu0zpo&9`wisj9lVL@2i%J08_i4eu* zu$W*x3X_`(6Tp^V@jZL_QsMJwTEIF1kEN3*rlX^qotp)O9XNbOO#Dtt>gz>BA5r47 z{DU87n-JugwRA=d#i_C z1*)1hC$c{6`dk0&;rMJOiaw-^x&vBWFmmbEp5uBqj>mwW&;d(hd5b~6fB$}bx+w3< ze|!OO+mR5XsA$UQsD_KHYoT^ASxZaHgo6{#J;0sgnri+J2v~M(2P8QpEG!4m#l6{@ zuz-L7n<42t1^iFPC}lQIP9_eH@Wo~y9iLe+1TC-#`g&({?|!~g)HE_0JYMUvWwfuz zX8Z5if@f4)P^|xsI{?o79|!uM!|})ef3+d{(tLhvGQb)SdGb66013=IBGdq2f;s4J zRZtQ~bHh|`)?fD>ueZy8<;}t)cZuIX85rx-KBD&Ow@u5xJr|dS+@jOsJP{|P23`a1 zadB~j;PhVH(Yh_CwtS-AX%=C~?VzXE}}*+vjZ!hb_ThE&~aN6unf^gj;-Q z{0&SI5X{6>t)HTVznn^8Mbo*K4!j@)<30sCU=iXj@AbFfI)mMzgaE!A1-LurVz=Dc zIj8fW`x`bEzr*;?Ls+_IGgC4BW+i}yu1JRrE*P$_Q8&4XUbm$}#ie#3e%`0Zxx-&D zp4hkdk+uhbSpNBw%d;6BY}eajj6qSOS1f0+uCdx!F(^g;s4pRexnJ^sgA3H~hDC_LTX3s$<2ngmaY!RwbXB zQ(k2F1V!%8Wgcdyk-U5N?lCSd_Oe-v{MXY_$^TC$648D~w4UfS|H*O#hg~q>vxBQF zs{Gq<6hal{wkP9Ry29z`SLaK!aKkV`+P0G}jG(3EeC`{<9yamY6Lzdw(pwqH+Uy4jeSKY^212Nn~03eg6-*-#5vR-`6ev^c2P(qg< zq2&9qKJGQdu`0Hjo?h?Kh|uXpKLx+zLYOf<~Q4gyqM)`y{uvuiz z%&qZ0@=(NMj~xFc|MJSC!>M(#GvrD*xrYS%$Fl6E>;R_It$R*D|B@+a8jUeNRyNLD z(;E-eE<#=}!$x0(F{Hj;xKlzhsMcOD)7=l@tE zS^yKSkMo=9Zo;64*$@-3BD~&a`Y{e6)xU&H|JBQ-+u!PTcu^8(MCoGgXKZVy^4jPB zhIfPczAR(KXpR+>l>AXG&j|P1yECan&OLXC+bK^AVg4J6afTa5=_%+nf{%ew;==c) zTlh#iPcd_j8fu@q^$(jpWgcGC*#VAX0wswVVqwhBx++h(IG12ZB}wYkLYd;WziQrhYrz+lsmkGVhYYG)(JoydCPG7O;siOwX_KVZ!(f) zD7NW~VLNP+jFk>1;9EQ2nH#0QQ}UFpk_#(jmFxiE%B&C?7D~xVYcdg77om(dHSq*$m9lw6?ZxPvktJ)X>x5vh@($Aj- z9qrDlCr9@$W7ASPi)w7IJr2Y(GLD|3Nl4H(yU}gI)?52?wdNf~6YDe*3INc=YV_Py zu(Jy%%PT1fk1w8jbGgeM5*b>_IW>^uI6mk|E|~_H&1$`!T|&%-qieHP5E$|btAdBe z_xM~WoJumB+1Z&tB+PV@B{Rlz{ii)_%0S>daIWk$tK?IS-svghT1u<zO?5BtK)D|GzN@A9LM1U&;ogZDO3*-ICuOuuW=L%%DYyVZGp3M?cn z<&?9*OO}&JVn;bjB$gMbg!>B8?lk717RABIbDDcTrrrs+hr)C;$!P7 z_d&muot)kP0NeIY_}vr={EN_m`v9KDx`V4OF0Q!v__>aUMom{cX8tGy1dylRZ+muv z4zmWO*JNa*&L?KyJf4%1-tVP^EAigNA<*-EET& z-pfz+=8wJ{{CMHDg(keS{h5&K_#a`3Z_H=$WTF~d%6Svx;=VEhvDd$>Hj#ehx@M-= zWT9cIgCX?jFwuxkL?9mUxX;PRKH4@92Dwha(H*Jb1E!}2tBNWay|q3=Mu3&*nT2Og zE&7HkQifo{QxRh%Lmm4g{MDY2*lI`Tdq8NB zdgm;AxM6Dc8#q>z)odWf{J&pjT<+b!A7VS7bPK(tzOxYJymbx}p}XbHK@j*E@3Uvm zfIIujWq%KWZtxu8my*CAc79(UB6>LD*wog8T}E5@1$qwL)HCe>NJUdmkLHX~1~2JX z9Q>DW%#LUe>dzBg^(^i%SK6yl9k3r0AqDTcZ=y7SF7W`+MVjf4%DNbhy+f)PgA#*= zQ8=kG7=*utxJlj$c-mn18iT1`{Gs+y^-44NX#>i#b*W-dJL@%w;@UIe?k-gNao=#$ zFP4zIYav0r$klSS;Gz@H5?5`alV^7*l)Jsm`>ubW{We0)G*gHeupw1%OOgNt+mcE1 ze_`qOtp69H{@?aJ?3euEB1;=YDD!By+ef+*m!~g?%%x%$wl3(3etjlwOO@`4A%wX4 z&S*B+hPtNC&Cp$MKaJTK*Dvk~BH?x!o?RbeWPcl9VQbXG`);41Cy%xg)B1GlBGK@+ z^~;Mt9Xj0$_hXQmH+nY=4GT=u)jTw%8)^vjf3=0?bp&qm4dd;lD zIx(8YE71Qd7~H0ytWb%&7tAZh=eH&ABd?V5sdt^tc=PegkGD@3K8w0Cj4ePIZ9o09 za%;?!86eX>byiLly|1MqRvm6GDiO)(kP3r%!)z{H(K>YB-$uCo%l+(Mc3vLWl3WQv#pGD zszH(d!b;7}KTX6hi4_26Z9P)*V}+$wqRdL~QKJy<&AHTWQ_iHkh`u$sCY#Gi~;N`xj-KHse&l=w4enMILG9ngrcrn|Li zZE!sVZtWKL40}b^)H^g4dkDwgbY2%^R2I6?d!xFAK5jv z?)WN+s;qIx@ZS9)v(;Y`R7rz=KQ0qwv`@|thi^}xTdcNgnCUv6HLSkelbSh`oqTkz z=CAq6-Pye4x}lAHgUyzqTV?PGu!HYn&JJ6z*+^z?=yoGzBD|ft_IL3dFjPVO@lOzC z&F3tTn}G%)-ifpbIp#|~_C#khMP?9TXQ@B|SFKrnQDdYCpTwW}e|l|ch=^ld=PZ>< zqjq8IRkr;vHuKI0a0sQJH%M7Zs@sdzO4)cRQ=8k5+}{7p%xQM8FmK)9maqMoH{PgV zq4THZE63qWe}wJn^Uqrrskzz$U|Onvk?!*;1F$&*3GM6GfZ1%wkQNEXJNWh$Q4t@; zx6h*;VoAX6bD`19G*;tRP-Iqg8hsBii5n;xKysJwJ@s3+`dM^@}pd(LuQ`c z>(uB1(ZrF4K9Kd~o(&c?a?7EzO6c!K*JV%7j1}dU-S&td2L+|&N1sNBW53=%XqJuP zNZfpx1@{cq;*_$X^75b}C}F}C8go_bC_c4%FBLHu(4+Z0hgZBrGSOf(%3*<;j-!OS zcuG9$!Cwy=5|~BOsjY%nsyl~Fc5$UPSH**!UYI%!6w|xI>VjS(HCia5@7eN~-MVfY z3kW$>gWXU27D0DC(&4A}@gtDDJ)`J~ij1rkcOe{C*plr6T!FdNZBMnG*ZuhT+&_8B zHQ%kDfzn`pnN0NAJi!FHRd&~badGRm7!sDaO5ct)MmL}DfBz!?STa^vkLm02G+ir7 zj%EsH#W}(nQZQ(6w!=aK>bOfKffMo*g(^*OnWbQ`pPhfNtIN}u04n$%O~>cTtYdJE zL&*`87ytXW9^Om-A6J`gSkn!=Vw0t*a$a5`WO>@f>Tas!(r#|z9UTpf`Axm$@ImLk z@{Y&E_~$-fS66fVJ<}AqUj4%&JSW5}>iGRF@1!(S?nkjNKBdPW@M>6lrw21F?RON) z{!czjh3AsOzxvye`WL+O#R_9k4=V_vL}L^KYdx75By|W$laW>V4iTps!9L!~7Bv)s zc4^h@=)btzDTn+z`UcGt^25$a`<~$fqaK%vc1LT_GO19n8GbSu+IO!_Eg)5gogHNjE?4!uOd$_ ze=IBtHR~(2MV{?m(pOX%R$r(pssbpB^s5WQWbu|}^`Vnc7M(kgw`42+7_oAOpqKXU zO9Z`t*P7FNrL0QtI+n@>)=mCbO|YU7QU(Gh&&YH9(8RQnh=@oDGqP`HrewMV)7BF+ z^6tSRCISC;aC?dot_>q)r=bHuQpH3#&1cs0(%QQS^BprSpI_6cSk6>FVr3I~!u#Ms z5cx)`P2Az1ko@TiQ|d%R!C%U$OS#TD53;jUEBw)n9tWtwa*1&;#I?rRm+OW_*6u7e zi=gb(#x|3bFnV~P%+FUd7qhGFe>hyP?wN>Uu5{gM<%?MwHNWLYc;>ps$6*E|mo}ZR zj${sCV(}BUov$|>Mean8f%iY6S7A4E|9K+S!#K>;Qkd^PI=|BMP=Wf(vL)tbDVj>G zwoh$yd;5z+ld~j^?{LEJe|Mr3e|5EsJ>B3+w>zo)yQx(IRIrw>-9HUKG3CYE0uLc&InbqO` zwwr^LJ*^)+M`{N+6W)~0&9`TFT%L?{r3*Wo&`cSfRxl|+YwM~!79L36nqVoXFnS-; zY@c{?@6Y8Q8uh8leF>=9Wj-E}eFfNr{$K21p>|JGKf7Vrf}!2wi6F7lwRxb|S%sab zTT|lfiw@nGH+Cmi)KT3@~Hxq=LnO%JRNv zYINEO@j_$72r6F*f9yi4XiGCMXxGeU2QzDM=;1iABSXgB5bSj-qh4;L=zT$6E+HY8 zLfuo1h;F>%weZQ(uj47v2ZcmgxYM&(lIR%mjGa31d%b_pzX}2Q^@ot$V6$@cn|DPv zX!G;#(}*NTeLparZo1~2GWESoAo9HNaH}id1!pd*j{OsWks&%0xgmZmXE4%^GL(Z% zcv>6GuQ*8nO6dq6i^K2Xjv3zP831L?>&p@)I2EL%8OEy3kdO-%jV5Lf12J;l|{Wos@9d6eu87HEd~yh90n}_z}=P} zY0R^r?O0mWE1x=Z{oG39DRJ&22|KWlUG5${7Cfrr_uhU98^EDf)agCCU6BZ2f%h-VETQ;m;K2iH{ z?Khp#CX!0NBkkXNLGIaQHHNgvMbWq~UxoM?`0R5GIR1IPq-*GPV_)nmJKGB$iSoJN z$dQkgv?=x)qV_kN$Xu*qwyG-k)6(i8VYk}jsn+h}X_m+Cs(x)$9JPs<@MC%`^E zIweKx7LcU6%k-W}I3IGW@)^IOqbRD#pY)eGMgCafT&TxpJ)W{EE<%A_zS=<|rTVOJ zeZ!uPg(WsT+**OPCku$6mpGdua^Sb`GJNaCA|(#@;mh5l4e2IK(VQ?mJY{usf~u+#48tCta!EZZnLPQNFQ2$?n2 zzWf}oX5+USUL*pu$n>eR?6{nqLU3ra=GIEUxBS2=b*&s7va20)2E`@_Ca0w-xw!Dk zt7g6nOJJzsXk-aD?uofI-JMir_0E%=`Cl#on@BGWWY27+6^iF0vdLZlgF&`dT`Nwu zvy+0~A?@?R;kRHv8Y#V5GXe`1%}-9i5PB5Qh8VqT0?QcJX+7BLs<;jKxvZO(WtzVqH+k%TkqN&FU@ub(kFBp?wETNJsdCiGAl^is2p0Tq zKL;D0ABUX2nD38f(2v;PMNSo+TWO5t#l%*HNC%I~E2_F|Y%eVRl^t&bc`nr<_{(^V zG}5|0)U5pswUKdh;;gKSztBMp9~%L_xxGc&8nC;m_>@MBuxqEV?=hNj$3A=0)SH9Q z5qc05t*WA%S1%kD#?_bvpdu1-^3HGfK}Q2ZIt*gz!s#|Qs?1_y$+0Yi(Fu}2kmqxh z3A+3pyK0eGvR_>uJRl+>|Ci0=dD2A#ci9=I0Zb!K1owf8loTychrN@bvv6xFkrRf7 zhGa9lGy!F)djpxb$3StuSR z1d1!p%l|IF>iT1%i+anC-dGpLO7wDzmvC|Fhnrm;4PD!B`AT1(p4O>r`L=8LYr{rH z25<=qJ6ZyJeEDPzA3LdOq{;4!Di`PrWeg9?5xi0`AB2>*JtO)D^JBLnPLu;?$ROj} z^4B<%n21O&mN{f^uI`?!6c+G&S_y`brltWvb(n$HM@~nlfd~iFx7L{gR3HZ`P?4{z z!HKfYd7#RYHTPP9>C^L@q9JQ^}4j2G1gNphmK?<*}QbaCO_awybFdZAr#pI(x$88)0#Uf2*26LUgiJpY62^ z=vlORG9f6VBba8WCPT!r{F^yod}+%IG~!8G={rdVzgpDfn`buz5I65A=qdz9djN-R+f4S90q$tm}k57 z;X}iNhd<^xE=_kovNypl$T&OYep6ijX7BMDyg=6Yzha?3e(Lee z{wp@T;ROoLPba@Emo5FnE+--x>rn&U99=*^6HqHmwc4J08p_JF|4O}y^|0q!YW?8} zK=%81)Z*#h=X%boW`e~!pe*smv#-ZYuj-01T8HVWHw-G4OjyB$j?DD*IF`9%F=aNN zzK)WN^Ao&sn<}5y26^Jd@cbxlpi$?6hC zcCvouN~bZqxlk=EU=^tE;@@k>n!C{cSwJdnw5U4k?r=aR?F+`JO{h9ibWH;=W31s6 zZD4GDJApM0V~rF$_~a<}w&B|whm>x~zb)(Zy4vC4$83%4w_NE9=)?6MyN~4*eSj9! zNc;;Xa2$_e=aPJJN|61^(xYTO2^*T}u@-Wnj%Rd7La+DSvWX#D@WY%zpuBpsj z@VG4hBdoo?YOV6uILe27{FtCSc+Pv&ktHpPHcGP$DZaQ34b^z^gz$K`d?_YFa-jUg zXAh!V9R2k}*kP{g)(r*!8~Iak)rEXz<)qWLnrI*nGo8piz!A}Ot1!x9o$uCd3}?A9 zGSbtVbobrR>?C9~HPIAmvv;C9>xx-tW+>-RbM_|BysvvJl_FJOGNzg?hsjgn$~sZw zjoH>mJqaXrBcVKL=9?9+Vux2c)Sfj=gw#)Pl&#e*%Xqkx-=&^MbN!-&Wf_N)_ELWIw3)(+^G4Nd2%72(b}%a(mkiWc3ft0k;yf&XWsYD zACA9h<+4#%=i=dcRU73qgfE)ZGgQ#$oTpM;!;VQx?Qk254rtl`e`q&h9^HJCg=N)51M+&;FjjUtcl&- zGHJpUne+2BAyIG@z9RFvtFG`9HpzENN-P(LI&pq>b}vFhqpUD2sut?y4(u+cB~Qpd zxBuieJoo9=0x>9H+&MSuii>l7E7GUokaYWNm9+VxM)z2(57%|JK9qrvn2xhLhU1)t z?>URIi*K5LK&YqqGIk_!v-VfiNca0qNd(#Nuq3xl=VLn|-LQ3a75ox7eZG31&pP!D z^v%@l+TkgC%6$7~Ty5*glIc6!$BQK!eic)CH^0zeR#ss-EiJx-TX?D7+oxeJArXl8 zlh~fO>KZzD>8;rYinqL`sJuL9WK-Op=H>dMkj8~deU!yf76^vteO24n^!b|A8E-zvfOA3TG`43nV#>+ zvat%kPcO)u_qntffETbP2H|U?nP+-+D`@Pq0ErSel|#J#XwTlb{+OhxXU->->={EKdoDUrmJH94_TuLvQl+;aVW?Yxz9* zCZ=50B@xmgohI(}Yum~kRk(Jx-gCc1|CV2l=sCFx5Et-TEo)U;l&YhiUQ}Uj@}qw} z#(R=upQ=wG{P}g&g=Ytwj?>q zS20%S%2!DT%9(^Xcwe-`Y^!&ax$;Qtf4tk`kSBioZRI)HrkeMTa0KP0*)Z*HpB&~_ zd`&``AqIim`{9GQx~h=iw;9L(8j;LLF%02NG!j)~PhNkmKk2W7`bX3jgDgv58Y$j- z@KRt$AxFj#F=I*v_3#gF>@qRkOa*|g?41Q&Sve1hjNEG6wXns!{T7N+P)%Ppkw!DN z8FRoXdfe(4s!uvRa@9-pU=Pb`f7PRF1^6BPUjcXF;ub1fSv`+okYdklGy|(8N#9&} z0<+p&6wI2F%!2SQJ3Xi;$SpqK5%|^_K@x}ZiQJk3Z!Hf~Q|k8Fx$$XCWVy|i7F$i8 z*|fG%Vi8eL$O2oa{wc{Y*9}OQ3N+#6<{LuArlF1xb93SPsCyF^oDx}QOWzc3iUj75 zck9mfM7~WYaq)-l%M4MgvOQzksOXD)b(^choeL3gNc(+FNmHJ5c~F4XT=*{gY~n zTJIm++=P$K`;!y=w*H(e#=ykOfQi4Niv0R|KG27Sl{K7x>dI!kKtW4Z+otLZ40r#43Ap8K@*gn&YVGlZS>?&Ux1vb>g6gparSguh9s2`6yB} z!LM(s9yHu&Im|)#jnq*>j$22Qsx6{)=4Z7cJd}KL;jB2Lawi))BfvT8<;}VSIA;R$ zPD)1`na%GkUA!wj74t4*RG_Nr&tLJ-%uyK3Y)Y4NRXgNE)eUjslBx`O? zVU5rX33GL11~=}}xb2Dty$#G$cj8T@5fty*NW>p8wE$mM5)@m=(w#;p972E`$3E`XR;d%gq`dCD1J8L*Os2_UjJ2d-eKK z9R;ufDx%MPw0ZZu6%9oCL=o?0Tzf=LoWxtG2REI_22-iWT&b1}oKGxTR z3``rOrI@h9dFjjVT@5BjZkp)uq&|?jLQBnZ_#qq;1SIh+wtv+DbYso@iB{h=S_&7B%>8+h%x7(IMj)xS zz7NTUm+xMLOl7*6TEr9ePRuG$7emEj&lCdWrj2s+uDcsoKBU) zrlFn>PdD|!dcq`(J#VMV2>Cn@@M|%8x9&BE$iqzS*{O44RqswMAhwPl5#j;}vf+0z zoOMirk_9nP4IP0mvCj+JzyvY;kVMuvx*VedUbQlvQvZPBAXwY|OUJb+kiRMVa>(U+ zL#O_o+@C+NcdF0}&kC11V&p$nO?9vH2`ogy9CuV#=KT zAm27omO}VVNI-y{|MU?z7j#cy0OV&%j3x$e21UDaA_rgu4m0#Ee{c`%pYAZs_h`1^ z-Ba)S;oS7Pj9n)(%W(+2T0kQVzCjH04XJoQ4C^S%I$CZdE^$dcqK z*29`ZTP*;JorWG?~~U$ndQ{z#?)gWytAC%v653uBb9T(*jdAr2qjbU zo?+pb>v2i$M1n-OzIpFvu7(S$9?`k}w7lBNLiGGWauvW&7Id6xO|M((obIBYuDBOZN z2HXru=HHy?x3=w8`lI>QUtQCXl4@Unsst(9WCRV|uPa(;m5eOcLiP5D|Hgy(o?##6 z$mN{$n7IHq3fJmmZJDg@~8??Pz2EMOP%50lk3v^WUj&bXzbVa9g z46F^9VU1s%))t-Hqcd3AFf7d`Q+>TM4mcFE{n6eOGYER^t!`$|0uev6VWNbKVrz_& zOhBghP`SevEc(Li)0a`lAmjbwX0x%RQ+}EKGehk{6D=Q-Q3n_?xqHm6-gS;)F$9&u zZtos@-D*cU(~!I+YbqR;n+Kh)^diAh{K&O}$j`|8`}bFOw;aF)V`F2>dfghyf49Z~@MkOfao zJVU=bo+9HtubY~j+doB~LKaA&wPL2hEZ&B?uTJBQg!YE(A$zktxOV zMVn82jl4_sZ)d@1tX4P4$*_bgz_pJC1&R34X@ zctfy$f8U(8&PbC~K;}moX)lvZqKQs$)@vnQ?bhk1|5RGM^~|v;b52W+9UjU{S!`08 zS-^}#jcE?&@g*P;>LA5+>+{~_GI+8RyKW8}JEAkrh2HwDABAk$8xOy?hfy%wFFe1C zq?F13Wcn>G6~mpwLU(>1?AzA4Xl$?{%Fw073uzlq4BB#l3V)N}#E#^)sFZjY=a77dhFxoWqH%^@Uuy5jw%#8-5NKY;h7nu&ydL~AW zm5pCil|3~1Y1()qP@evXp(^jMe%whjz10hux6jgN{*L-O`S`%fxU|sg7=^FJ6O0S^ zVYYVc-bRxVe%f8T_)2T7VF|$rkx`;O6HB(QUl*N>mP?dn{yu}nn52Dmi>1rMxrkHJ zR<^3*fo$5^`mYN9Y>FQ&drqzRasNYtcpCJmtg7GEI*%Qyt-+C*S;1&=Qsa<0T#oal zMYNV9Kl;-X~8ugUIougq+ImUoFjs3Sj<7E3)MbkBRG4mg98XK6g$Q<6Sfe^hBghEcn z@;#K`lCX=ts~wl=fY4UVd_#J!(RB5Sxb0B`8kyxiPh+Vq__I&IcUedHMzz!X>Q9NC z#9;LoWIYbI?u;sX>O%84L7ehsuVLIl`uiUD-#(_gySQb;F-33AE>G)<~p>XzZq-FE<%%A4X6Xlv-cU6=Vp{ zUEz$cDoU22WkRg{i8s|*dW=v_o1bG#Qu4uw29`QD`4u?=v9=3Z1L2k*U(E&e>)05$5==*|Oq;6P_oJcF3lvRY`tEzBNd@9J1r5X#Dlo zuJ^}DsnF^Bb;qppwk7C|=Gv2FL5a~(m$fd^7=DS?Hmo-Z^37eRYILr2)tY`H%;DT4 zeiz-E{Dk=IJ>fJu??=xbGwLpMmvcwmbP(pwJ4D!`9uf|{E7Pz0ad6{hQ4+Oqc34rb zJ<~<{vrvM>05k<^=5ah6;J@@dX?1sg zZx?cKw)0~KRAdB!l6zdjGd|V<`IW)`DO1ja7eWU;Qk2*A097rD9CXXbo>{IwRBVNp z?zcPF9M7Ta_SY-=U8Or;#B`k|;YOK`>o$fM~JW=LlN|SjP8z_17^( zFNu3QBDk1gx=k$-YC5kYHV4Yh4;SNspeiCF%ZuwT4>6+;%}u@Fu0*Y05p#Uy`QX4` z%Z@A$zEm;E)Rw%u%=w^{b(Ox~X(eBLo(_x|{d>K@kltdG(%iD?-y)s)!%pb4UxFg9 z;SJ@`X)?(A;Un3X{tF#C{vLv!+WxYWuDzDBQ3s|y(^p8{#GJf>o|BoEaX7M5KWaI$ zpn~6ze+h3^m}ERx678>igy-!B2?!5Q_K@CA``r!MZ0Om$_s_uvW_@OIabRdn34;b> ztOYrWcfgug{?=W-r;bgNnP2pCHG}2q98A0CQ9;4qEJ#LH5Akni`s(TS_CE4A@6zo0 zZcMQph;s;HJ2YoymboKk{7i7_jg~!T9u)cWZ2f5d{)*rc=bAq8l(34cCP>>Y??DRt zU7BFN!|!T{MWTM|052e*m5o~`A?5ykX^P=nZN1vYZ@r;FkvkmTzt#tixwk#zO7&`X z>4TiytBXC|&Z3DZSESpsm_O}@OTg7NP2YfY;l7Z~D{O+;w-%;p*s75dJ>khU_++>B z6%Um%ouBdY;#0c)cFf!g3E5Zr%8-Q0nd|9J>RfDQH{5U?&IyM4LN7VY&tK>Iz9wNw z_`fuTe3s}21gGb#np=b=)r~umU#8~J+FI~P@f0IaDR8}V!eQ5uC_!Nw6=5NM;Oq}! z&$P7C=uOx7rM&?@z-ZC+Y zu*x#@;p95hW`aD>mqnSw9LSi-ZC@17FNHG-+I!E@LyH)A{0*`^1pL#)h6=~xCN}O$ z+*HEJSDRA|_n{tKW(&xWxWpIwqm`N_NK(T6z=g)1LL0cWgXVpikK@?mc9gu_Gr{CHqmpfFd(8OUh*Z!x{F^L z-AP!vbzpsB)+TIX9{p>TeK?i6`4>TND@$M(yc{dD}+YbU=ohgqucY89kXgL+m9`7 zt+^oPc-22?RDc>QD*~V(0I5+8jTk~!_T#1g1|S?Ya_e)vZd>0cizh6v?Ys zs?N?_Jw4?BuiugLTJ{5CFGf|^w?M|kQK_cD5$gIX&uL0 zYVO%UAnW=0)?>v5hGLO45ahpEN%f1hu6$q7c}0M{>g$2J>xl;Erhs}4(cZNb zvaI<@BaT5wjb{K)R;NdCg7G@#7}^>(|f7bDz87)SsrNBp_#EAaEuTllK9Omw@dnwM51r zzZ>Xd+z^wYjNB5VQ(^P`FsX!U&ie@`UZ|PLoi^-H`j7F)xrqdfLWi;{Y168U(V5km zpC4>5_|OBD0E>fp%1`y%4ztxfm~4eZqoP|mGOotH)uqxo2L5K>$3VuTD?gKon2Pu< zfDWuFJ$x=x-lLJF$wH9lciE6sL7}V!LflIn9sJAEfB5^}g@w__`$>{3ULTFh(QulLerB z4I-%xE=PD!|D31-!zgkLsjhBu5?cP=VbfIFdfW@dBtVRS>(|MWUUR_`RYALoa(@+J z%(FGk3$$PXvD-rl{8#T70OIG#Pa1%~@piQO@f59g>jmPJV`SvGKNZ4oy0s+N>|MG& zwq>p8-5IfSV0sewW?KW|umq|0L*PnNL9cLe|3mTE@KD~JAC_3boh(aj4+i)OPJ_%rc*%v$pW~-5!FTey zh*Ad%`=Q8ly^*@1D&+RwG*55`P#IFqv;^KJ1WIudoq&O2kpK1T=%)sp=@PMX={Q$Z zuyH?sb29&u@#VPVz`PfOZuK_TY^}P#fNa9NZ0e*?h1GGh@0s(R2zAv=^}oZ}S3@q@ zm#E)>4YH5TCBq=#vsAQx-OGKI+bhYk1|&lo@bbI)Ho#{~tFdKi-0Y#l~?dU#- z{kes=OR%AnF;$vV%p?0GF;D)1)VXpqx2Y2$4A>VD+e<4M7@D2cZMsfziH0o;@ew zdlceUPi!Y6yAaj>7^bY7q}SbD%7B7Y05lZeo26&tGD#@53!GIP31KnGG#ShCUvGXYP& zHup#We#lnHJyz3~6PhpY<++Pw)%W+E;-pE0+-Zv$qWMn#+;?mL$X@0fn6}u{zBW~# zY+&0eQqhTxbr1XqanPszt$LVGistcr5Jt8rKUbRp;o)k@yWO4h=pBEv?=*BfoOf;o zFqNWotHhj9?-S@jn$AFKC;og%b-lP8hvdbStn1+-TK=Wr_CL?3j^-=bVpe0bpI|_0 za`U7w7#IZTYVQ>GAo%@o-4L9AV}mOSS`wT8ebqmrVN(rHIrx4L-O6JpA{xjmfHv~h zMR>Z|2X`P9T#P?DSt=8oAQ|7(#7Q;S1C;4|etp`V421y2TmqU!tK-Az73#@SNDAQh zMErdTdwRH^(Ui}p%M(}IxHBLS^6Q)bLxzbMQ_pH?>Usq_|BB49>?!v5NP^U;Y`Ecxe8nMRIrlAO0?3f!CwA%VdfY^?os01*M; zZp@{C@}AIQcXY_sZ)YMWq5ioboYNJ^;)NF&`KT{0pK($b~U z-5nz!Al+Tk&Cm@)cc*lBch1Z`zW=-L-Mbcx#Tw@PekXph_x^tNKBf^1V5eiSra1y2 zw*YgZp&Xg*KEI_KXqyz&1~6r%(5jrW-jpySLR0FQpVdKIsrdUf1 z!2irePzx3lb#&DBk1FgO+Loin5~Tth-aoSGUxY55Pd3&7FjK1C20(wCj`3t=BQE+X z(*Y{0KmrbETeVLxQP9TZWNiPyytK^FD9dDmRK)TS4Bwp+9Uz| zs`g4QfGz@*Lz(7e2nr|Y;!WO)z{c~ z$L`E!_n@mx(OGUX0|XYUP80ZKRu8^|jHWYWdj&B*s~6!-e{5V5HOS@2i^6 z|9BgZkH1h)%FHyVCxsHvRuAOmq#dlwN|ifpI1Mgjfejb&%CsZtc&wQO8dC+F`2B0H zXcp~O9-;0&%H=b`W7Y@+8Gurny zQ0p@J`!E4g{xg4yY#yr&yLhcC0asU`#){x1U`+fVcA=rkjSzKtR%^jSbK0+dtQ}oj zIU65uoT6iFoLooNd6m1UDkI?Kmb0V(HLajqt>nGX%xJdQT?*YQ zk7cIQfX2lVoR0eLlMAPylz%3hP8idx=5r(ax)SK&H3b!wE^G{+8Zg~}3%8%q;>`ax zJCt8H4gGD%>`1{EiYL#eiuAQSE}$x%v;2`>kdFhCje;# zBxB{cONldFhI*tIM1VAwdgM;>919SJYd>kyeTbyg6S58d0kaC}C#K`=GzT-5Jp-}x zrTSb6-deIS65gv7H~>3_vgwhpy$pQ{>ow9ed;1YkoGZc(N1J50q6KDjz0j?zs#Tm|t z_=BF|T*NEUe^PNm;(fbR+9cI*L|6uHI>Nowu$_h*Xt@ve5!#16>X7grnX!YGby1_z z)2$p-UlP5Zke;%A6QeWNv_l_x6Pl7B;{+#8O-@eU+TDG`pT+Zi2<;7jgN_Rs^S?!e z%)^ZA zFno)@{RVF;`UTpoKg<4PUwWh#zhD6nC;-M;Rs%n-(#pe>L-On5S!d6PeE2bvHjQH(vp%ot#$vYG^qtcRVB+a|VwXi(q(~S_ws7 z#o8-nrQ5ebnyzVwF1QOIn?~jzZ18oGC16#L;jWt2bHooK;Bgx7f@4 z$$ee|B>zsJV1ziTLfY^Tn8!A2?Vmq@s?-|q`y#($j%Nb@tr1YsgiQ94L`i+v|Fd6w zLx*UBAW>g+rmG>j|G=+bfh6SaGM{8*LOjZtD;F7MXkk08dR9bOH8Jf7#bqYmnxN57>Qc{N99G`9tK^_k$oiRE8 zZs!wPOBY`7=jYO7(j_|43oX(@VB=ut0ZqsytaMGRUO!0jPAeL; zeN$}>4Y~Yn8S|;mvZrQ%_G4U)SezXIB@T>%z@rP!k^i9DLP7b)$MP?J^2e5Qh%k6Z z-O0&S-`?b^5d&Ddkf*#67I$N7WDfq>{;3xJ0;>v{;bXj%>;h(PZtEu{rFVe)GmP(F za6VxA5o_H~>}be9sUq{QBpJWM7QGH|&`%{jct&r))}Ykx=>dnmJ;nlFBAxv*Bh%o_ zLIH3sq3kF5_Xebi|8ALRM~Cz$bMuI1AK&#F8)rO!RE6y+cAsZNva*gc@}9oaHH7~d z8|RYLcft(8il9^9u-zMtL;GTuF)|QG8gH4}{l1N`(cT;a#pNVL%HAHJ5wiLfv~;2| zvCy-;n}zPTR5zD4**{dK&qECw=R>Tg1N=HkM<9iF=)h+HO4Yh!@YPHF66EdxI@AUE zk^u2A02BFOrW9jhmQis|0d$MYBc^QvWa2H`%Yl`V=G_k;v7G6+jMedU7N zuPUbKDr78;0Rs5Mr0wF4I_gbkXK5*$w)TIBDzr?WmA-FsMJb%T`LRDh(wvo*>5N|w z*%>cA#l=fGp+m0-=N7k(z0WMY8E353(b2Q3PkffKH+!3XP4pDK*ydd|LQR$DI?l~+ zbh8)$=;#GDFT!JJ(4>`=?4kgGZ)5MY>0T`mV0IPW%HAWr5VNZH`Wp>U)S(23u@(0| zDYZNV!rPSY)UzbXGgan%CsD zcFH(gYUj3iu?L@z#l*vSIQ(or)s}Y|T@}!4!HfOYJI4Mtb|6=>f0ZY* z!+$p_`a|l!4mz`e4n~0v8jxl!Scon>nL|R3H7}-D(WzR~X4HD7XEFft%{N!P5q?1& z=O5HY{eE5G;9!&*9SP%ntiR*onu!TTuwEYG*7OcFgf}(8_}O10XpWS|2eY-*qhX(* zgJKmwl7QHE2&}${vd=a1NgO^OwdPM99-Qd>2K+J&emh;o=&I|(y#ldP#3XmDWaV66 z6U@r(oJtQ9VEVMhw449l*wVzLKFrH$)6&!X49U0!Do9b4sy`x~7zUI`%O?5B$34B- z$XwT4XG;HeVOU|3>efxm>2sJuupWoVQm3Qya z*RI*CHP+G9ttgGDx`;yq~ zL3SV`V+^)^ZQpDW&_h&br16~Quiz5R<6N`V4Ge#>?>5B5GKu|*cL#@Xg=0GO@tnmMX~MNAv3VKof4*7qmI&5b)@ozlmrKZAaGS5O zEl4Y*47PbA)VgrUw5bN>LMQVRw{nX}1#85yp{|{%E+(yA`>H}8l85geg9fEm8*vD^ z*I(8Yr2H-Oqau(HnMu!56Q>#&i18wnkckL~dXml0pDODD!}I~hR}@l0DShaV`Et(w zyi+Tfw>2wzE6#jc$MUtcdQ5CSfV$TwjSzgwE%n0nR?UxXykt$`Zj9dAGFQ=#mB|ow zxOSdBea0@_7TwSgY-H3DFyf-j3TyX0m6plq&687`yrn)DXw;Ku@^1B5krM3?JYY*x zR*bOc-utSCKUKZkdbD_Jz-BN@Y>ZS?%$8Mt!cs>4Mn*Q_LIX=6qM9gz%lQ%4OUz+| z`+!|d72Fu{3t0x9x;1#ba>?kAHuA%C7O2$ZGF4^F{su3@aD8LZ30WOzw`9)yXcd8- z$ZjxRQ~zQP*|#T@P*ruafv9eMT#H-CmAK;qANP=oRG=fe@JQ*vb?Mt+Q4&c2*JM+b?xPvif^P+GXnz8ALw3J)A6NwS2>QY)cw4 zi894y5|hLc@VXw3S#r!t+oQ#z#VJ~=3%Cg{lz**vttjuy$z^Wm#_`&3q^%) z4QU9Ae}0+*IQ5{xK`LHb_u!l3ppwJ|AYe`Bk2<;)A=DOom&zLp^k1ocOpPbOSTj{L zD$vh2DXrx4XC%cs^Wo}iu=8O?E*P3f1RfLg^Ve3L+Jh)5E_&{R*%XoqW+?qQG>kjxZ$z?!IyHAUnKPvI+i`Q8e zH!LpxV`AF?gySNC{TTy;uAEDR4_R2f6Vdm{Zk3sjS}x4SmeJ5h>Ok!KpLZf-&;5u^ zPjNG!ad0^Ec65{#-q}+$y3d`sQHXK?dQ48K?r{s-7>OH@h;sH7qa?efAe8NF>2w|xwu#%I^&+0uZCo@-LP7>OAVg!hsYACe9_?5 zm#YKDnbqH0M``ZeJ;FT|S*M1zv#RO|eFr>|{8CQmFaf(WORG9L@!JQyBG}5G{JOBC zwEF2g{cGHb0G;0GoS_EeJ19pgjNieDsPX;=PpGPDR|dALZjGq4mAnGZZ#`q7j|6@# z?;dcpRNvsX-_p_7E)LO;ls=|T;?Vh`iHw=ez^IkYpkiPEDQD&G^nHQZxOsz;G~z?b z-=L&tidEtLXo*E6oG8>MGq}Cp#r(H&)0qcImp8sDRNOwbB?u*0K6Y;4x=Pdl z^bE>i3`H)dJ>gLef=c(xP^TliYNNDQl&r_tF){g^4&C&cWr>W813v~PFNbU&p&#W$-~@UlwMV}Vt7>uo`Rf){`^yZub6lpSqavp*{2|?HlO3gcZMtH zgC}ByJ{&BCWH-AHg<=uk33dg+$V54c(0U+I+mGY#9g9j?e#8!gjP;5*v2Cm8w*=*u zl-m@Eh#b!@EjyDwU=~8Z%1iFBEY$4>RmFV(A;g{q;<$&dt<8S@dSqxis|&l8_-Vap zKv#=kUgEyeL+K6(o!EaoVtKY*60fyN-^ApHr z=guE$k4BGj)Tl@ku->&a`1wNrIKF%rV9w&+Bn2DqdY>ScbT|?1`7X~fv)8!rk~3zN zU~7~TDV&%OHS4`xoHA%_r59!M4tro%cHNr9!}3F`wqV$JWfyvr6Zz0VEpAg7_~X!R z960EPdhbn9!RfB#i=d>rn)V2?+y{vE<uNLt=gavy##Ywj?b!rC18&-i$_gmF^jVahy+qj zmQPIfC(qfOsKZy*3fYOqb9ppnN~`hc3RNFQePqd~s5XcMHdNs}(1PMB%fozcd?(uG zweRXCs7+=UJB-&0JIvi}-j7!V@=}t8$RVh0Cms-z5gAYS3_gnh$NTa)3ECs#-$-4A z?Luaea(q>~#LDzdFYRZ+;P<*xtY45rBXRw{IW-n}a_62lhkCZge`(+)Sg?HVdVhPu z6MYq?(Ha3R8@m0qGV#V6y5zZrQci6z3j;G2Za0_ZeEOQ$%&(WW&KBc(mXKHuDxPa& z;oA>ip%`aQMn_WCJK1uwM-^#nySsb%(Q3855rEm0%$Ufn-+}4myh=XiDCuD=jh9dC zmy6hZ6dnM^xOpeHZ2Ih0{*XZ&qQ9@C*?H0Yl{1~7=g&VwIyz~8oQub_!>QWFVy)&c zV(NBOlBo71JlV1j=(n>qjcZ>PW?kgxDd%W1W#mYK2O`KIrZ6@lWgvOg`McO58i&!)5j!Wc}3x-l+5PpJXW29KgAKlt8*Rsy_QT0R}h>N;?Ctz@rY?= zaAHuaY4J{6cR8#eJewp-Fx-UON77Knm19sYQK|j>GX>=0B|26+75g264BAEJb8UMG z$!I?e8iwF7qTI_I|Lv zqL(Vk%W2lB_uNapK=Sbk7f`PVluym$NnIiC`zrgj>i8r*d7pgB0ORI(k)AOH+=6&+ z7*azVy76_P!?;jqngXA+IpT2D7%_{rR93P^$kMr5D(`AS(%$Q*Tml-zbnI;{+z(d3Z#rD4 zx-7e#J3@C8G5d{Hb^PN3^#Gl27uaue?3WB2IL}tK&kqCN>G0@cDPj0D_21rX86v%{ zUs{uGjEJA9lHX2s=xw{n%(uj_aMo=~Kgh{j&B_>co_o@@IMl#BR@1=_ilCmPqtqHm zdvarprAs*A9RaSBaKjmH4y8q}ikG^y0w<<{f&XycpR3GpULlxm%=n^$DDFCFDd2PW zmrw;nyx4;a8Zzn{#jC(jG0YinFNQN$vcKz(=D$(T{r21t;UzwvSo^%K72XO_Fd{~ zWPUj+YJp|gGpo09qZ@zyQd_QUmO?r8bJS2*k#g-lNrZm*Y_M5cFEtak(+euHN{c^E zC&?KUb5+!O10R>mzePu~y+(dKSy;s%ISe{{6liR7Lu9HT?hqQUqoZDd(noX(l$9C= zIds>j5KQp7eOHtjl{`<(c+*yBB&5a$w$X!`;ub+Pj7ueswy`N!d?d2Y< zGy-p@NcorY3>JGX<`hN@N_YyYB~P1CNeU*-n*X8L+jqffCa-u$NcFMaCVhBK)b^|= z(f=GPyzWGH{)!H>W4I#BJ{hE~Bpi*T&t%($jii)8!u$I<0eI7}Oj{JG7{(cHURBj^7+Ra*?r8nCj_?w5+6hbioJ!+#=f-9Z z(~-usDfcU6iXYkZle8DOKu|p4;ei;4qx@~%6_b^%PU5bN^9H=SAzs*h`M<##K@@Tz zn9=b9(VNdY=CHPgq$iA`eu%t|eQw~}NFb?4ffIf-<;%9_L`DJ%Ox}sa2f0L!R}uQ{Bcamlm_P9FGQRJQGV>RV?WIS-rb+Cv zsG2?ETReM6f4EOP>s^-K56S)lp^SXB{WPQRA3I|Q;3V|2ec?Kiq8-}Tb{a4}q|sS9 ziN-YEJYv&#Ma4JKM-{0nbnFPj$w^Zc!0`^KKC7o^yg`$L=C|7i8Wle`^ zL)7u6KZ!S0wi|Ia>8%fPxUK1+`vqGI>HlfjKzo9bOjSwPs>C2VvuR^E8nc!uJG(X+ zSw~!w6@zZ-?KZk47gpV>6(*3IRd!ETf!LSo?~`i=IDF)9#!dF(1>xX!^F|AL4b-0B zzEZK${!;bnYU+6k&tdO)$Ek{jYs4+j;MP`fUXv*qxAog8&o}P(h?e~08=)hm`$w*> zKKgehwQy7R+xo!F9GEUeNj@xrM2;$Ilrs*;({+h5H<+ECZ{@r+(Re{eoRl@i!bO4i zRgQGT_mkY3Xp}jWw70?o#|+?>1*0v>Dq-g2-kQQEu53BuA}TGtq*(E}Cixddlk`qf z&Gq+BSQnxhf{Dp_AEE+ykHxEZ^!Oc&0wM~Dnwpi;<+~>)aARVGu_-b?;gIVN?~IH& zYBf&%ebc?x!4-TYO#D+U2x>Z%u$w2O_!`}kNZta0pcbYgs2)fR328MtNs|&?7Zew0 z0VAMqUXzCoY{^OV;2sUDbZ!$4zL*nqC6`}~+r_}K0cuMVm1>Qk^%wp(3m_D{u<)|+ zNgu$Fz~bTz_e0x+rBk~l#~(d#_4bd2unJ^0>y8#+7!h-7`&hAT-@g);IWR4NIFP(< zB*1$4J+xX@3*6yo6#e3tJTdwh1?CvWG|c?Mi(PrO^lwbYusiKjzzcB}Z7`d+MMaSD zQgcEdLB}K>OFCu!HYqx}T)8dltHVbmz@PeO`d`+W7L`0suoAZPU>^sbjdW&BPscq| zGBA))n_-N={|jV9*FZTd5LRt^+{0%t*+OZf)L+YZ!Iod0kk`KsrByn~?01e*a$T2- zAbrf3tkOMs>LRYoYb{JLU`+%UwZ#k;tC9i`9L~f?a#~gxzU)x0P?Ow{gR~qte5I9q zvwHv=dqYAx7Ux%>OZHhe@eD-bGJ}S`<@S&fCzcWR4>*%|Hw~@gd3ho2Ctkb+AVZ|~N>SXTZFZciQRt8<;c7D?>WJdkcoTO6Yjv32|Nt!eQ|4RA}s-1`@8-a%g>q0k7kR# zYN?DIsov5uKFR$G^*}r#;V2FI!Dw8li54SbpA<$1(jVL@Q{7uW{O|-zjZQ_7H@kpy z13eEYPRy>w5i=Kxm^nA8z_u8-fPTXeK?iLw6O+w9F`24M99meeFOyiwLbsX>L0 z`Gfh7-~-;2?eWgBvCO6>?R*i9o;3GxBZGZU5o_66i!^l1*lklcQj==-ZG6vx;iRrg zzgm@-9bX(S9K~-vo`ImRBFOc6nywX94Q%-=zGSL*rPRg-pK=BNY)?2EPLoqOd1ScI zVyB?JFInPY@6gP~Xpdu5E7iL-jd@eBwu#s8>yJ6#vMo`X$X>jkuUKL{k|NXHr$|Tn z2LGrYFbgbG27TewPQS{pP zr?uw(D{~it50)-JXUU5aGGm0}^(S!GP6<1sbC|X2PZ-(siY1XdyF9qQwU>yCcYo)7 z1m;1|6`+L*)y)QHO1>;sc$^q*@Ekt|M-b8C{n7ejVUUp$b@om|o!`bXAVql6YW)))nBu(re6C;(>}pQd*^6 zi%Ad$7TrEDJhmGII_iw5ncK&^H4UazHX7bzXJpYG12DAnbt%2S(Kp2Qm9ZTPB9fus zYkwaIM#PtpZ%!eu)|VPT+cfsTqe;0Qm|sRhc0vC+;CP$l^Xha2Q`Ugd_p^4s`4(f; z?5^~M6MY%$hP92|xKGXthIerw(&c>U@^w1g4g9Y6L-+QzIE9-B#{{ z?f37{_XXO;3PqF5kJBjO4pQf-RO;5T*@G-1zl5?U6@bLWg_`CLMDy0Ryf6@ec4@K%Y2B zRQrM1>w48EE`FPf@>-sUMdU;a*qJ&*)NU(nV4F_CPcI_Q;-Eq_-HNm{xzx-Wt7C&R zw^KFdxn9i?u2pR4PtnyDO?gynpjpQsh}~@h93ZXIUl+%}2vILlYvh zolD;8B{kn%PD6z!z_m|PeU3JupIuT36*gT)Z#D`lPTLc$7DdvxX!duwZ0~m2U}zM9 zC9-)NH@QYg=yam3CaSxql-M>T)j$0@ue}~J#o^~;(k@4C;UedXKM=f%`G!HMT5TKO zMG#c@2GDORkI>Sg*MFoUF{~DZ{UL3{pBL+3GfK@~Uv_dLn`08-g7)^Y6J1KOMVVzb z%A1;P8=?fP+CPckLmG?_Rp$w z*%9fB>2$lv2sXx&;dDnv)}gEx;mp#~`rjeM1t&KlVJ-4)L0pklRl>jk%aPkUF3wg} z)sft!v&O(a{tdCEl#p1w+gW`5I~!ZMMp;!=a#PY8-F)(SDD5Zg`uWnoR=if(*b{Ux zE8f%;g-4wm81mqttE!q>=V&Q(qFBxEBSKpM5fuT!{(7S!1lRre6vr2~unx55Q8oK5xp@;MytqZ}bkTMP>zCK_Yo6 zh`93SI1N2mrwYu$JT891O6k!8sj&qvN?Oh#VZ-w^RugiBwgXk?afzo{<>h`)dKAEm zDR!BrP^nor)dra^fE|xG@}t*p3|DLF_a|CjEDx5v^){KJR;To4ZJ6VzZoN0P~UWq##r#H2b z>G$)eiEe|Ng2qZfs3``P)e5BuGBS68-l8Ze|5e#2w5~2pGF%()&E#`~%ufo0rWH=^ zU2)+vmK6CLeH4X7tn{GOMwr9J$_@~mQJd-6+G>-(H2FAPF`8~mPk&1`IC#m(I6}vF zx{SJeiUXVw4gIaP?2rTSSZVoA$poEAk9oY8v+1HT&Y1ucDNRVDeY8}-so`9`z(Mz% z4{$1Ytvq62Xaq_cx74O%WI!4CJ_wPwMreP3<-fk{WeB$Mn+HZ*cc6UzgBe}H*{uKC z0G5Zt&hmVi@VfT-nA+p>G=_!#{f*;iq@cTe+#L(O{Z{1TJT?&e6D zfW1`?yS%7&_jD7ldq7o4v%xOxeQWkdA+mI$WJgA}f$UtG#Npvar$d)S)dezhh>B8$ zFPCXVmEDBq45(@ds9HFd-M}BZv0=r@X$l~eWGb+&&zzh)O1fzhGUjZ_Lc6bl$*S8X zJ(h7>ZG0$~CX(JUU)=|6J*eq|f{-!!F*pCt&hWI4o^iBtr?YcnIz-`%skJc^trR~t z^LGWDnbHBHs>*tiS=^;=RZL$;RW_E++I*n~udPk=Exz?8)IbOfE}!!WKE%LWtMQ>> zbD{FQ^$DEu=(zKupOHFb&nmS_JTTBsQM9vb5WIMagOdY%kRoBOB_b-iexUt3o|z)w z^;GJeuo=!ss_XXCJr%E&mjdsIoNHNcx5!{rhojkwaLDCus3vq>%iTi9??%K{YRFPk z6U!g9P1McJ_6a6tZ1B27t;zE0(fAgRj#W^%ep4Yq0Z4o3*-8E!V0ch5 zdy;F-U%o=-8cCIypg$q9A-?d1Y4g8kVpgoOyba2|@tk5~ka&fR$G5@}SDNNd*?Ep< z864?J{Jlh`){9|Vr;M<$SY#xcT5ezjJf`n6DqQ72I)n()Zj0`b9H=fop?`vXc2ezu z`(#be@>-dTj-BAzosG{OpmLxb@(PQNk>gIXZ}a?HMeYYa97aJ59K)6m#C#TA z6gCFsp{Hi&NOMotOLwTFX&>E|_nNhl(IocV^y%2m?Xfp+;nU`umpA2g|8Ld+GDF&u zEcwdW*oRii@jtxN3J^;^EXH24)@>OZiuu14UOoQZ-NGi6fT=m(V6Su1>>67xtX#A1 z<}q-Nr*lm4LwOQcTs(mt9Q8M;44a@|?24_oxdeTE z372!oAT?zA>vzuNiJ@;jtUa8mBML)PDcm+g6sJ>Q%i7gMig z`+a?wIkC@&D5>Cg*94N54kNv8v|f79PJTL98a;e-l$m>W_D+D$D356||m zfa{%Z3`SupmV}fP2cD;=`%SCmhd0^iA|lV7PJM6z$f4f@S?RrmFX>5v(r4$)rQ;_Pz+Zfq_&`UkA{Ag~n9|+~HbI7c&TMyP0h$i7Vt-g$wOSE8MT95>M zSRmDuygnqq{P}eo_D_|jP#sqBcU%vSH%G8A9!q-r{R^TL-sA3H&8~lQ`n9HKV85YY zRUopo85dsPtR^ub+YIOfFY!Gr_;amBZxe$haD)#A<;|Y{cija@0 z1s7PQ=W4vD(}Y~Z5?BrSeLCSEtmZib9d{$#;179LpC)Cw>#_WxLdXv>(t&c#huNhm60 z#IT5bXU&07g6Cj4`E^T-h?E6~py~4cl48N06z9nEO~psOUi-0CykCJ%SuH;jzb};J zomwdCseX3T3=^zCx15(Fw5ipnWZ(!(S>Sx8T`$W$+$VjHdb&8KhPe1;*#UArM%x2< z;MgcWISvkPqfI-*(hDY!uPe3LU#+eBr4Y*ySuf_ZKjWQOa@etYp2|D=N!$bKDcIi! zD6|PI$)DVNaBcSM8XI0-4ksh=TBZ3u)Aah60f+QYur)wv8@@9L2*mx)>S_Pf&<#DS zSox}!D470>DukEbkw7{y^!M32##Z$8^-AEH=f{4DAK>*VTB$G3%;Z(QmjMc6{LULX z$;tkash?>73e20TX3*vmpHzC6IwJDd>N+GG>oNbmK!Sr(q2zGMb|T{E#MkS_%f9&< znF$aQP-_PXaNpK9SAS*~&1X>&ZFyd|MEV(87L^E5bICPFjGdrf1$7Pj1P81B2A;2* zCJP3}nEl!xZ;y@s31b>MVJSB^7U0yn`#@dM)I(cJ(EtP^))zsIj%5`Au{8uR3g_mS zzSZgsg>=a`uf|D1P&$B7=%)r~JVT7!;^L&HCdV2e$_Xt0TQPYNg5RG!1YL<`zJ0@d zdLrK3r8uAiZ$hN2P4xCAw|OTgO%65-$rOwL?{a{%m?`-pw}CUZEP{>}*W6-N+3$mn6r()S}W=HEwNB;h3WJ#&1& zf1kN+JbuZ_?RF1p98n)ju%41RMg$(XZie&4re7x5z%*S(b(RXXOn1HSJ8XvdI!{_N z$NBD!JGFZO=UQ5GNb_HiuKXk7BI5b~(X^Cnf}5H$(>hNYtQn7OTathN+_`(;20$X@ zj&E~dXJ-s$z0=Mg=TrBOnn;D^jN6?7m*T(r78l3lNCm2X0S?N)z#q{18`(~_q;n}P2t}%DqL50ujJh0dCML*4i}Sv2;e&|6;SIz1oXZc zWVE;D8hqeE`26_@I>vs#yx0oV6vRyC$^lbddq~T{s zQ-2){XzDY6o?5Metgs=xmW|9yDvRan1s_5m&In5bl&vihnoD+oYa(Ffe&T{JHHrgQ zqu0C?Fuzp6IDQe*dUY(6zV^pXyI$eFfP2c9l&jN~^TYjVcVyq^Bj=aaVNfuGpQO+B zws&XLd&kE0K;OH2-YmW5uP1Gmd2`#VLf=283q{gUDkVUDRNxVoFq7dz!`?8#=E$m2 zOlgG-NpW$C&Mre4*_1(F*s28$rGs}EI0%=OR={2Gb=k&mGkhtB$+rMplP#_239o`j z1Lgzl5vt}mGL$*C*5TNYrN`vc7H+;+2Xc*gTI)!uRR^d(E=zw}htEX6GN>1goU} z@h&k*XWW4Q50r|L05%gUAb$c&n#}n>e1YL~A-Lq8UEd+n>g;PA$o-`l?+j*k2AV(G zC{TAa!MiM7vSV80(2GZ1{&*U?apNN2J6pyc8+FFrW#d5tM$mm#Pv7Z}-nRP7A)#7v z8MShS9`@DOC;=ts074KYYCF|nFEpA7dVl)z)<&EeozCOhBQCxKVfHQ~ohz~- zso)*&m3Qf^$Kc?FX6w%D0=NBSNOa8An-{9PROoc^2p|AKMfZTA^4MB#3u2Fsz2#+; z0UJ;MW(QXOnDj^Br7hQLU9BUlY6!rgkXzl-AaXw>eD?NjIjxXs#@yBM{3FJ*7pkUs zq)Q1&J?0)VOb&Vk`y(|fb+Lq{F3+>Mx@24_-)(SFls>}gaWbYdVvfPCwQ;w83 z(-4G(fW1ivdu#yq>}P5aR4zx-nt^>)PWyocvai0iX;$VHw+)GK>M2sVU2MfA*X}&7 zM-YbgMEauP|2C*gO1*;m7<)NJ#2Sva^%P&x(gLP@ z))m-FJ%>Q!B^a-7eurchE|EIGzoyfhAaSaR>M zu-w^(;l1MCKBfI=$U8Y)DXk6gFhu8bQ>}R`8xQgcZojy<}OOL~dFjnPieJ-ns3SdR`QpB)c8N{$JF#Kh8cxYA%nzVw+u zP!LtDz!C0OW{WP5=~4RU`{v^MINO^sWF$YouX44QzP->**@=IUhj>ISL<&YW_ZG?n z4-D%0aFmaG|1@-GnYceQ*nN1%+Aw>(8v)iRC*fyGelSfPk#si3pNmw+rq@mV>=gTS zzwbPpVr&2@?pJa(cX~~>EPKz%Y%)B)YfG#i<;SRAzTn~D$;qy5W!RIC+GxAldtCw=K3D24iC=?XqGKd5B)k$+k$ zd0|#Thwo~)EfC5P7mRLuuu)O6x^or_tDJZ3W_Fz@&eMzUg$vc}k$sGQ(nH+k4cv`v z)VHtd1cE;Ufxge51>a10#&~r4z3kiH3WWRg{QF`{i4`dFso8>m5V>{IJmz$B_JOFG zR@qg4E4l%<(-U4?Y~5vY7m8O92f% zTW(Gczan90Gj-VVehOMpUWlNcI0lzMkeo+2Z|i_4`{b6d>pLng zQM<_YU0RziYMMPl*%emtskWh z<_d}73-5nGMF)&{51T?QCY&aMe1dM3Y(NiWb7&w;Fr>OlU8x~3y51)MqR0VQW8X|? z(*on~K~E9-p*LJxnJ>yShZB<6lZL-l??0t2D|~eyUKTmrVoWG`3R4Xs-~5dO{}NI?Kw4H(yt45rI;U+jL>(=C+KtHX z8^T~5h2NOYY^%^r!;ae{B4(*vf=?XLsDl0vEjb0Ry$=!+M|n}d>{Y6hYA&65xge%I z$FT6)Kc9$HXE^EyEJPVb0ju7ixA;NA+hkIchdVh{9-vVJ$03E_V4`DnT2=D5ltMRM zpK#V5bWp(H)pDWoYWv@zglrD`*_RVv=3XfLP{{G$-&h+^{}aBQv_JNuz>;OgR4ZC_ zsmW}#Pf(C4#iKyoG%AB6mkC|cBh0^dGapQ(Fwi_5)Jb3HSVTlLy}ZuO&u3u&{$v4u{vi-1)hN~TVe?iA zZ0aA9KkO$&Fiz!rbmB*|{>G_p&Q?yG9MrH|J=b;Zwxmte-R3fsOh4%+NM+DFqSCwj z(PL5jqgKDyEF`H0M6`_ zH$=x&NZ5)sy?ki?gyUzvg%L9m!P`S_!F*(IqwZ;m}O2eY%UP2wa|KciKm3|sOQyu z8j4NKeOfD74}Zs;#RbVE;=2aXG%{FfrDo~kHh%{?On&qsqj1nDs9}JE3bJ}|UWAsT zXWIm-lj!K%X5w9@})M1|7%ucU7D|ICcZo%rUPH zdLIvt8NHbnOsdhaPZ>^`62tw zT}jIsXS86lslPa|^1L9;4>T1-I<5>ePIqxp8!PPoW!gXJp|LDnwjHQ*Z}wL~J5j_> z-PtaWM20DcId5XZZ{P3tA^M~5v4hS(i7nq6B=X3T{CGOn-uI?`duUQn2C#dkr}_34 zwq4i^+S*6c9rJ29ZCMCFfFh$nC?M?eC))JCSpZdx#P{eXZ}2knOd}u9ZgIEwCe*C{ z-mxSel!zi%_eA;@*^bv9lIgbTN=feM3RyEHm& zFm(P%%Ke^vl55BAD9I@xVZi9UfcZ-Ra#-6X?3~Cc0ivenKuA*AAjVwPQnT5H(|dys z@6}(wbfMiCW{O`WXPq**$T02z!=&OCQKQ|(y}45fKYty^11HoH4aK4P23u#*r^&o|+N^Uv<4x)L z=Bg$4JB!g+(%$hVBTZ*hia}bfCU3U4ny_6B3pDBj=Ezu1Qu(n6~O=i9OwdMiN^cWO3Pa*UCei6=-4jLfyk{i zG)`l098T~o0>6}sbrS-ttLxapWckA15&FpZen|Ksk&7-nL^rWCj4&K2PSEUTX+R$o}b)IaX^9 z{Tt#*02<+}a#-0oi>B3&hipOG3nN`mUDyExXWbBEZLe}0AQ&isbOvN$C^+L_S01)p z8_Bm{3+#MK#5@)wxR3D7;Y>O*?E6ix#76SvY|{J7m+B?lhDMdh6YSdvvsF03D~SkF zt&J-V*J{^@XLF_-~h2n2APo&@H{m!5S*6jUN1f=O~I9;}ZnN}hi zH|7mKkw732V|=w#$Wx$bT48dGH$AKVY%)F)_6VbR{d#m86URLu&?VP=N;-mUYV`|H z!{P-Xu6E4vMfnF20D?rQ<~IDpcBAahsHKrc9deRLo^~sN#{>7H>yO#APiXklqVv2_ zT?7sE@6XRt04Z6kS{eWuicsZaam~?ynfc6dmq%qv%7t7W+7{yl z@)q=;v7}Q`Rn6*67byz_qL{B&O*x-GXYKD#lXJQ8e3ta34U6~+bvgSa8}5K@Zf?uD zF&n7{lYBLtOQV>larNTvF~DwXPjLsa5>Qe zdLtX``AD{^q*Re`fBAR@e zp8OH^vw)iutY!Zjw81OYUOq^-3n{mGJ5ErR3BADl}=YZ@zlhP~6G|ObK}CF1gT74TIa9QkKl;MYhFSB~LnzAm+Ju zm#4sNDqZAA{&mNA1UjQ#tW%^H*q5mF;cM8Z&@Q|(KUt25^h^L&tco8q-av(RemyG0 zS{z%|<#FjMe=v%{?XH*cdoeV`GGjyme3xxW70!f!mz>$=e}@To6vFG5o@{~o`Q3A? zI6G5ghQI_$U1_EBkOzOAYnI;Q3IH(4wNR9SQeD`yV?AA{#a9uxlg;RKThrx-KCQ|F z5kPX!RXpOdNGiA;Q-!q@L7Q*R6aI^>vyQ4N>e~H55JXbx1{LY<7Lbze?(PQ3Lr9l^ zl%#Y?BVAI`-3`*+&AH3>yYC(Mj&a8j{~*p8`|P#nT5~?X`AjG|0p;EGqY${LNNU~{ zv}HceH(pmy17SjB-uOpuK4u_xYu2qfs+A_*VqMn|CQ_f9--aUtLm{rA@2-@Tb5FjJ zq?eSvfF`LPQNG#PpdKIBr((3LA`~>cP{+nC`v;kv11be@3%p>D*x4yQPpm-CdaWStz&=CqKMY7OrUuQd&8Asr3 zh6xsNjz=|h99F?DfeABPLA}`sve8u`7%9e%7o9;pJd;6NZ~bCdW;jEj2jKk^4HFg#&nRKz<2vCH9J?fZNuAZX)dVRQ z&(q~?Woe>PYba|h&AojBf#5O>ZEIDHdbM;9>k{f3;Q&x)W z+?_}A3(7qIHGHx#rEEq@-}ShjA*{tkFsAnpHEoz9tBSV2NpSyO;Ta zhtQpN*VC4LXV&l?PlLU(R-&|}CL^dajTUX}SZjxJg=a*Z*ePO34t!2nAEzHqpE(%` z9N$U4zCYr86AI*!G&fr$$JNm~xi~7mW83fuw!&iC_dwbI&b9v|xa5IuD6dAPQ%Lp> zONgg2m26mh<*PU!PA%)tNWgaQlY5W@rvU ztBvyMh9Ia9_Km>&PENQBxWN|OPB5# z`x8(ikdglbo>0jjt~Ld+!ajO^wy=-@D}~#`32B9K(tG8jMA$C5)pL!j$ChvE2YJ8p z(+&>YUCxRCT=CxNNw8HIbcqHAq4ciaz`cB7GaSW*Zo1O?+#*5V?;im}Gn8G!o|LY6 zzBBJyN|D*D7;%8rLnt=CIjkI8Xy*(w-Ud z1+3g&ThySy_zBSDQjQ;Yx1D+(?)FkZeh-Jx@v#@33yjplLa^L>L+L>nV1PI#uAso3 zXWFEa{pr)WD|_)8^_oZHZ$d7+fiI_bvaho(l=sVW)ib0&UF@b)Wh{M2FaBjbca4Eb zbdS%4mM(F=rI^O2-*tC6qM$%7%fN2An0S9Q1?B!Ymak}(*Y;279l4w7VqiJ4#3L^? zwMRt%oL*6Z56}VZmy^^0MELg2>P9=Rq({M`LW`+*O>LhNA(w{6`1{2zJU}Lj8cVD{ zxmuD)Y->S1ZVpfucGqD_xImqtUL8KMqhpr9Y9W&#Br3mg9`V$|qM zPt-i~G#0F^V>~ruiEOp~M|p$yoJYL6RM_M9D)7P5Nz>ld3;tC;<|YL zoHwal?EjJK&+qfvm0`{}N3u^xH`@$4Q_!VgDzM_d-|BOPNo;aVmT?zTaOd&zdQx!tY-B~~8&HKRKhN0)TeEpxeD(wV zaI> zIM8gOSrh!RP+$I#GPkcz+eMc9MGolp&0B=B_q@p}mGL!yF4gt|os$$hqEY3D9o{FI zZ$Q^Up}u&+Pq%gcJhm!4$|JHx$U9nf7lx=wnDD009q(b{D>U1pX)V{*!GSK^G+h!q ztG-K)?$6zTkN8~#obHTfrOOww`_V?#H~#(%$u|X$+;^FR>B2y7S~G0naWq1Kyjo*v z{M_gO_vW{;>smqr)vfO>SyAC^!8u;!IQ*+ucNf87>?D_Go4g=!h`GAb1VC)(FP?vO zuR&H(O*a8cy#kzY{>g=2*Qcl?tVz(!MbzxzRe?8=EbPsBm)bd*91KiN+~;{s+w*z)YyA-O63D{`a&0U zH80#{QU%J51G3f7SUqaFTkx@^+vJDPvk;D4yD>;C@_P3Uf zN5qW~0>a|ff>@_+mxJuh)Y(YtohCgT<8DbAjVrBwL~00h@ChDew&qe3s5XG`@<(>( z)6d&4f;GInW`vHs^>1t>JH2+dgF37T0&OWbPkO)v@Yg$pJkh>1zThNLi+^Hz&jbcyaU1W=wkojR_pNd+>JN6nZ z454okPS_*2=Tx&*my`|OG%$a7^RrA?SI!I42ueTFC90Fn066qK$u&d6F+hqvle`mC zRjnl40BZ#}-WC-xib3XquAVz>^SbKZ&(CE)W{*KhTU!`l5sW%FQWF1G;j34b!1W9n zGc+_*`CQ4M5@ED@8<uK4z8@%x_3DRLv9&SAx zwCtfW(Lb)Q#r*g7jI`>a3$hFZp1t|0MROO6T?aq_Kz8M1|8^Xz%MpBI#Cpr!C&ZzG zO#`b;J6GKX;fOn$4%9Y92t!7*HBpv=sR6YLRC!>15l>=iU-;_o(kDzV-3|AqfY5ZOc|i^TbGA~3Oob|>L{w5xeozHBhB%P&zgeZV|Yg;x4CdE{`MIXy0?VU zIySJXpm_2A^|uR7#i4G;03BCk1+`xxxw$kZrjJqYW#{A5*j3TvWd__=YJ&kf4^A^d zppwxpq#|Gh5jMF#g0fkR+PEF1No&qAYW+G8Gg?={WhBhm&hI6e8UEdMD(Fs`v83JA zOZByQ@3j?ETApjkySTW5o#I9)tPZ4e+u4IKV9{Wed>)R2ky`{$6Y?sd3SLjT@Zox= zQWf;gN0gSjgG0y0(O!a+06S<1QXTmv{B^g2!nw4M)%Ae7Pvvh32H_n-ivId zD;E0O?i`QsU+*Q*vMt^+ZqWdpKR3AOc!e_LdSu{#HWH;fsFGGg2i>8Sk#gks9q-62sc3SRnqmqn90Xizg$TYq18hpYOA%qJ#XqYQ%Ul1! z?Xxq1ca*eekK%DAw`E5vGc_S|M$W zY_As=2OdnlFQ=8X&vSezGq3tTWdT41JoXh(7?)d4B>8E1e*U)zK#1hKzLW}!^EGBo zb?Kq0?zS;+RBC*2e+30iK?I`-zw&u&&pttesq&!WKV@b*`_+)$ZZbJItExEeV$g-ww>Zo6Jh8Yf*P=g! zNZgII<9dKhB@+(RLi+x^I-je$GzBau8}lU^s77M~gNj{n*k9mORn2B)H3RJsM3Iky z*cpj}(l3*6y3-ahFvVgGxgMj$qvjR#T9d$uPUC0Xbo1LoSwyt&eX~OJzpYw6YR#wC zSf_>$nW-YVAf>xu@pV}~y`zx*@*SLF`46Z;*hppHo)5zc||;XZ2nb%_<9)>Zx_mRi(Pz^(?Sf!X;6Z^U}i264eSUcVZ8;EQ(7wG6)upoC`p3QYNhuQu>?s3h=Pq$cO{cCuciZq9rf2x~C;G$rYfz^PYfWpe zlajil%MteuoAQhW&JdPM#pQ&pz8mk1vNOqRSN6f7;thCn(82rnQ?XU3bwXRo)wK%j z|Kn4E;iY@zAE<9!t^1~NCR6h88j+*c)MUFkFIe9e1_8blGHFpy`WV&kCznK2V+*qPvlCE*WYR4C{t}bT=I%V{Xs-3Xhuzy3 zC8*Pvo{kL^eUE%Lm*snorS0M03iX`OGe|j?e2bk%iyDXtxT%iU|Ob~7CPXRhfuyOSq=GRu36u1}vSQRZMWu3Tgz^Y6>JnxXP z8T<%(5(@ggC5ZVezK-Px_S#%+tagZjva_w>RgMT=U2XqlZe>_Hs zChW0o&VAw_>wW~ZfF!PZR01v4whyRiA%ju_62jIX8lv#HJ|enzprbLK^PFewMNLYL zb&{3-49$y+Ft31P+$Z7hI0`tzkEg-fzncHF`YV#5Yn{06Xi@7-%@KgmP%D z3I!;4zR$g3F?vq>sl_`}90Rp!ZGf*i-P^)8$MdW}IzINx7RuqP_ar2Yi7$9SqSL}CbRO#F(4&}Xd!QgXQ8+AJ$C%i-<^Su7r z%drO1XmuOCLxQZk=z^bhr$#8|dITOoTW+>z>)zGv9NOrjD`S6CPl9pi$6aC1UzWc8k6GU{EvhYl zA6|bh-mP`_qNN&>?m(2l>`TBMWz!SHobugm*_wpj&XWpXN^Hd3VJYArCiCpP+2f7O z`XQ#cbMO@4Pc&yM#M)jdV@z06$1|J5JE<*Q7Khkd8o753o4r5cE-AK#9k*ViGqdlq z`4twj8Y8 zo(5rIJSB#5sF?1}Zx(3Wb-+k1Ih$Q-&fN=lCAWq2?oiWtbpn~VhWP0DNs!MD)ApRU z%Wj_2a9SdW-_8@)w;IN*@6F-jGB$gf zL~M!sX4hi-SYaY|7+QAG?e-OTJ<6oGndh$9zllo4)D>K>x&q&7*6%(;mP>0=Ot-GB zm@lGDeusL#E)8$ooqAtOfwsOm^lf~wtZJRq8U2ZdC^*IApaF$^`_C|5$#MryQd_iE zEs@b>u{(>`@P?K~Y+_1v8l_8UrP)i!YZLuU_eNd#EH}%YnKE(y?c6ycHnTE=(**Qo58rj z%FKU}7Q{J^#TY^||Uv;~8=v zR{TU~!xzZ)Lpp`8Kn7kJx~9J$Njf+) zFqstB8H!EA{Ti)fu$?)Z;yXCcK0tB3P>9-RB9h@2p>1R&o-01)Q@yK^dAql?4=0o9 zA*5EGvg0B&eePa*4lUdP*5IJ9h^j;_apIfkU)3_m*a9{IQJ)) zE8lY*(Z_?-+R^xP4O(?JZ71|tc>ZQqslCn7jh%wXiE+}U5m~MRL6x8(Ze_l$Q1pCc zM_VG2X6$SlzYxlvdbQ~H?;Q=Xt0QIWU!V9_c;mN!PL8w{oUC}?Tp_UdvljxaV3&%? z!0t!P1oH_s`e^h0%Y4-C`q67OH*Ek9K|xiC8~+D%No<(`n$W=5p*tH(x{G$LmU%<2{4ueKn^+uXR!C-7Px6 zg|#9qE9d|XN-BT#7Nyo-o!#-Ba?#>)amwp3>_)c+G?E20 zGUxoq1ikCiN?uoyPcORq5ACD{heby!!`^6)o7J3^jcS~7i2!>tW@^TxAh<_p*i5ev z+chU?(F2F&BKrQceBa?IHKjfu|DsFo-myhrTjrt?XS`hCZn4TM;q>`6Mez@cUwCc| z#dY|VpjDVEmUwy2-SBwKV}sEslZ51KFDF*Gywx2{F~uWu$p0!Req#QCBXcv+G&2G$ z_SwR{(jYCP@DN>lY3IONA(0KEiBca z{9f5eclZ4(ImCFVC_fz{AhK={*-@Xw8G!#1Sm$n3YFVDN7qn|UW83DB1ZVpw-dZ9s z_NI)xWQ8f0mGAV6u!ZI#3b=XAr)i5<+8T9swDTD*KM>jBp6|UxNnN{{ejM8zOjXn< zpfMZrc&B!!IC+(eGMaNg!t6RfaxyiOnQa+A!R+#<8qE9*$;aQI?LX2zesQFBA3Pr0 zuP-d@W5SvcBCupn=z8qQm&nM+Y4?iTyE?`9Q-N42mNGx5vJ(L>(pPrjJS7%(x$IOA zZj$arGhu8O*0KWmQ+(Ng-y~~PN#Fa-pAEy|G`Gj!!Yh!mHX|l3IjcXj?k9|R);%T0 z`-`PAWX`P^{#HCb%`Lky6W(I+2Akb>o>bqvOz&zHLhAkDaL5I&gi#mz<>~QALReTA zEOTy|%u~$qT^|EfYU;v}jzIA&-KGz_WjeR-%?7<+>|W?WP{qV_nGM>@N2}`jUWaMT zHeRl1R5-9tmm-^CXw`5}IKc2hS+QqtDqgD75n^a`H2TEHeSZKG0Ru@Y9XI%8(p>0h zX#>oM!y_8k7oEvO!StQ4GSfYY3}in{mJ2bddni?l3evnOqWQ|u5`9j#4eX2QEtPhd z3F$0fg?)S`j#8Nl?+Cp;4rDJFAMZ|P*`V--c{zu=Q<4v+*nD_F8~bu*9qOlZLkdw! z54jIH{w)M^MIIK|RsWqRjMr4itpozCeh-_ps4lh#Y8@g*z3xU z%~_R__w)bMUk-ON5&4NGtCiP0~EB#WX@`%BVdpcBp^LJ0Dcele-^)Fw(94j`} zZ@wz0sJ|*MqNb+)XqwkT=5f4id-D*%rKt7`L0$ir@xRL??|dj(`;5Au6UqJ{(N-_A zfwE0}hRwdC@$z_E6*r17J+dcCzWaM^@nODF?O5A!`RLK4bnNg!=Q`z`>f7hfU4iv? z4tK+09RyOMCf~K_(H3{x27-xq<(_N}&l9ot&Dc3L<6hVXVXatSbMIf24~m!4=B7Su zP4>;MIH25xAWK;1{wuTa0q#SSGLz^GqmbB!cmbG8Go(@f8CA_!P|)pZ@SOl)UjzqR54&uIR_D{b?5odXZ1O4qhF`|Hq{t}N?m-f(FCnmxnfo|bkm z3}oopCd)Y*wVp<$XAv(m>0k{z(V2;wNS=kd)n@5q<=34SW7#Niee<(dQ%>}ncS2Ri ztcf3E?A(7S7wjuGO*?8-+p(Gr`GPU#O|>^>gT&E{xxPXVJ29(iK&Kt%zE0~Mtunn< z5b}xiIF~S-Dy~39J0MR=6m7J>VQl8QWxP0K;~yQN>oMFKgo(T_(aR)s8$p*zIb*xn zaU=o{y>Z8H7C>6NL;O^Pby4}Rxh&lGx*>iEnQdVNY^36*o22d!nNi&r1TlYR9ADFi zwfcmt4GynJ9P&n;cH?24KHXohe#q03Y7&afF^}O>(5U0VrN@sFi^z<(o6ID4q`33x z;XA~x4?x;vnkZkw*Dv)%QqD(UQiUV#7SnYc=84HRt<-Ei-diO`7)4ADp_HqugM`qrv!FJY$%DXp zMy6v$?;u3zsR(N;kw2PL;ON~EwD&uQ^2towWjEQ=>?`Lj!RQQuqi5-+IBj=+B0lME z^BkYghf+_rx0{UaqgCr~vbXaVHdh{z)XFm=+nPsFMjnr_2fsh!dtQg%N2bl5p!z)@ zs22^6Y@f8m@H=<0`$`aOT*G7i7SoOksZ*B(@)AzDL=g1p!vRpj~u`&qI3kO_3y%yhK&1z^^TN^JVm5ZsfVf&#j(e2(X$+&-#@1)<_ z+}Qk<5S8RX8<^4PvAqf$CW)H9^yf%72u<0|-U7eu z9$)m<33Bl&vch9hJyKgO-l*8jRmoH@RGHEcat*_bw(WH7Iwi;+rTBi#m-Mz+%-6s# zXWR(LWH=G=*0hPBfL+kXVsZz&nQa&8v-vp2Xs(nO7=JEvUVV0cn*8vTzO!V_od~`A zw~`@`cY<%07V4UaN9dq$9+NsRkm4?AU}epJ`}JdvghbEH(pgSh$kvvw?ZiW_)Ws5mVtC!^ z37tRrhE-xQ3h%2uvU9aO%y8`FJTVR&a}C$)Tp~f}gvdhrj#vDbTY@*@ z<@H}KsGs<{rTx#7Dp+;Iay44V_!(}WQ>N1zMi|-FI*W#a8!ZANTf&j&ZrYY_R#xgd z4|rmJsFyb-l$wPpxW&V_AmjFL8@L|S$f<7}h6(lDAghDNdt$U;gqhB~Al;V)>{9sU zt!||A#O2Euf+Z`R7UT6KJ@WOq8&o=hX0m+QP#Dr>MS9t9ZTpokl^bOr&$kM|0aJ?$qt#4tOf}NO?|v9Tfqu*`8)?^yK0!FAt;$`FIM-ME${0dj z{iiVa+MJBi^7kKp^R+e9@25In95{M?ec}`9h+xXZ%7tE)i!2Q|+`8*^|9euP(EW%N z*bjk!5707LpC+tfCbU5&w3Np|ayZyupftHkG}zb(cF&8R<(9T#EA_SO)8h0b$UL8c zQO4gH+Wbhu;>{Qh+dMT7zV;gwjpW!I=Xq?asNj*a^AgOLYsst-J<>68xsoo3^T<)q zYQ%&vLp$QRVa>3PG@ckZ1Hciof>r4;?YBj32e3p=eV|lYK zrfQxmu2p5_{4~5S-X3dxa1wmFEsqdzTsWODZ>Em&*yDEhB%FP|H3EIT(5i>n^ID_k zucbFE_;#EKiFsGxG8a5{ZJn1h!{Mt8Lf`q0SzH9p)zX$=Ga!*C0rTG?67*%-!DghF znvlkGFRXL9Bz3bM!Bt^>ouow!?lh+LwA?dDsTLcut$btqcMf>J-@o%MmWqYIAzpP@ zqen`}s@&AjQ2Ah?O|%-!kl@>!woO#$!N%q6M7BjVywcGPt+RIL$sfTF9->Irt-8>x zX_SOZ_;;w7FkhrIS4pDxLEO$@dr5gdscQ=k6Xq+JTpFx zD>!YbcPcsN{YLOYgiU?_j+mTD`W{PCEO%(D+i02?J?;$3a{qEE zmCJn=-5qc{WbFJ)hnkEa#p9pVx&QI30W;;hO=I=)3}MMCC8E3Sj752+kH*+SK$mk-m>dy>#Vi zNJ7{gXk#Yb*_u1Ck>JU}#>UPrEaV&J-tfX_H9^gn3FBh3e%613eNs{6LSZ$7oRPLz zZO*1dqbfd>njTht_xKDrREQtWM@fpWD^JGF_`^3+lmsQjV2cN`Sz|G)#2X zHec%2dV!G?fUq`Hk)rK$f%?8W%&%uZxIJG&R-J!INoY& z;m@Qe>)TcBbH&ST4At3*Tp!gL{Q0Wb=&QrlJu0livqMGG-!J%8HoL}#fRNon%8e8e zR?NH+Z<3a;|i*kvG(b5%8qu$gYrC{988XPS=ly%I%uo<92!qUqc#XD)FOzv~xu;7x-bZ}ANE8V^ z91$f9MQ9gAQN%#RrZl_=x(LNi6X!Y($tX?oS1J;55j?-YSy;J~w!_xHqfZnld5(?e z-reZR27xd{G#Sp6$yVvm(sJh17t#ScGt#@m;PCLFwfF?!@hR^yrcRnXzr^LPWJU!`jECkw}D^+J`e(MR)CG@(* zvmd3WBz)5bdo>0$`dvaUf2bcUU1!oxoh!Fv;oyhwo(n$yCA--xNf18$iZZoH+xD5~ z&u1w~ZF0QJY$VF~(2vRZXa!YHOu)-2!gfKhBgRha^|PTp3q!NFc;+a9pKAwTXpJWU zLTlih(ovIgZ8THHG*&p)SHCvTli1ecRrf8gsZ}Iv+gSmCBb4S}yTyED%65bJ?s^ z(yD!iNapQjDfe2Rj#T1l*fr7hk7j$A+sxuq$7SQ{vR{V_Xw(1u&!~W5&)qZnE-K%G zqWH|cbyH2R6+Mc`wLS4C8MjFIL%P)2%v5aK9=zH6!!l|yM@9EiZ6N^}eI}TU8QIijREpb0Lkc5fu`X z^3pB7{q8?I7d>L0LH^yj*)>|!9T>IVtpvo*?QlNSooXeZy!GkbcfK6o>J<7a&FFN# z8Kb+45IANKMb;zP?Alj_-~Lu*`}EQ9&s0^Gp3Gyj*R|QM>M-J2ZQ>BpR6*>z3-97rGN<#Q|hmq|hBM`7k^z5!n zhjedoG7XC&MArPF#oNwtzap3)G7YdysS-yi$-`pXij_qO2q3}3>1`oXCCi=5E&6=} zbKOCuMsxZr>VHf$AUg}&f;BdCSl!)AV+Gd^-e!#4@2!O^;BB8*B>$kJ1d+v ziJUC&?)IrRCY6~)mKui?o30!SbqiQthvi1z2NUIk!bn7(S2}Oh=7A+Kt>jd9nQkhu z8E~tyTfzW2%;chd^V%c%)9J!B1Y!(V4gO0oJ4Ik2K>u_#Ffo=cYXg{@L^}<^d;m&0s4%=(w*gO(>2|| z;rU2!j>L6lj@Wq__;r${rlq`wa;-;BPZt_ z=7Me6Y=NgPN20Dtv0RTu3wPnt`PLL`6cqA6U5~(O%F1uPHX2@<8t4A>3=foDjKQ2i zh!qa|N02Ew?ux-&a%Bpz@o6y-*s5prxtaZbQRo>EG=k%*UsvY4x@Mmo!&d&M7&>ie21<13Y_yr1eEuHHk8PIB`LVFxDfP?b;C_YOmFGPI)1#=OZgUX>nBV{?O3eqTO8(L`yS1 zp|GZWvZ2-em#M`&j-=ls++DShCFz}sthQQG^hCAbI`00gvlq!+7V7obj_MdbyG#~* ze3j%s2;;fA%7Xr~~Yftx+ z$X)lH%F8+8Gwym%--kwHnR*9P+CG*q3w3^_$Wbh~a-6N*|96mCNIrXF&YiGqmlTR0 z`Z{&pj(uRO_{5z|OpW^Xo-1gsnV9Pp9D9LG3;a^!Vze_Nf3$8BXST^xx#K#rC_QvQ z@aF9>*&W}-5f3UPLLfqe73TOaZTT0Gt!C`LgbSorx*gsp^Ivin0NnohY=t4NoX{a6 zq~mF@PuXtfp;VKPU>of*{TBuU?_;Lcu6&B8*Kh@-!gHvpP`Bw-FsdgZ8c~KH2;qi( z~A( z)t~Yz3dL+7C<%c#76#S7jb@4wiuj_gts!ZaUENyqs|_d;k~~rd+cPjW`}ef%K&8oU z^{ZV(5uy6&P-DA3EKogaRS?Qo1j+FR)neAju;SyohJbE^(=*1Fzhb#ct`$bzpXoJD zObUDZp7Emm6~tn*T059uY>+n?&58v%#wu^MQZsw| z6OER0e>X}*FP_enQ3GCV@yjpOxfJpyJ>Nn|FEyKS%&e9^m?R-0VXN}^K|1!)hqfUc)}-@4z( zb~#&Muk{oj;ko*7{^Wk#aQtT}wdlPqggm~_XrxTniHBn^NFY;l z^u%jG!0Y62(_Hylsb&BCdKKQwxS3FW347buDrd1Y(}M3%J7(IjbSrp6mt%%0(OpPf zbblDtcq5cDA~2y&Ud=bax_r<+U?_J+4~kY$D})BA@V-4ene+$^^}4D@VKa}#av+s) z?%Cxs*yw3^&-mrZ5-A#q)zWx+W7YA)w4&7FV8)giA%-ktcf5v-7b#tuih7%K*R!!^8(+t`D4;8iK!VceewOC!vhUf{ytXRj zU!3#Q>e_Lh+_ozDEfXDrfu~B!o%Pf6IY#Cmd89Jr&6-&#-hNkQI+xXkn&u*B?|WRh zze`wziL&pgYxqAxK8d-h)nB&d|3RY@5Y*RlTW>WNat<*6kbapJ%3kW6&SW>Fqz;oQ z&8$IL(DylP{*&8X%hTj;|GP`-FX`{(LmAm;@XRQZzibfCvD5TSaI;+l=8cm+l42wn zOsp78U59-4rq*xNy-~sp3$5&W<>6Kpj2%S+8}hbN8U+_rGSeIZY5?w&w1qLX`^&un zK{?Uv(jigcs?^Fo@bL6M_S*|zCS?*KkT8Abkk>q}9HM(WtpT5^X<^s@OV`;lp{T@RtlGpIq>Qc~@-ZPvL?NMX=lZ<#I~SC}n{%f@{L72ojgZCeB#{-yMYK5KFmm^d`tYD_lkP&Nt(Q^C79zPQ<_e#H5!LbUufKhxcXv< zN$B|`Yf9u|Tj9##k3b1tw!D-)U(|;f-{K$8E1BE@2v(KiDjq+>&q2R5w%>oK_G3HQ z8ZMITgU1n5%vvw9aQV-3u`xC*?v*>wR@aXPFbyVJVw~FEJ%9H#K3F(9RP(K+{h)}% zS--8ap5Nr=+zM@RM4GZf=aC|wZ;Zzsw>58yFM3-Ye|`Jp?n{PJ!QrvPlwG>)lZ)Hd z8^1_9+_HYXxIi>$#W%Xg5Yk2W+1r=BwURj4e=mrxqmJsIybYgE`Lz)i{~+uSiGE1k z`qUIQvDHuWB{i}yf!gt{oPz}$#NVInRgaE%Oc7JgNpyPv|KC74qj8!>Zj)y+@(L@& zxf4J8T`fj>zAGCyNXuuvuJt7Xli{{Bha@LDJ`h**wUD7d{cgYB*Fx!M}!`KY=pot8TYhZLz@M+?vG6)4)t=n1QVH2nu&{_Z|-*$$}_Fx z750#o6=+85_~LZTU3Ro9pDb-W9|V~lSug21TlT`bcm3RW@5+azX;q2fkp%tYGzjKV)^L4h-Oe_As<7#w<@5LN1kK7u4C|q=CaFoTt*ppr@rcIM){ko%e=4y! zBCqlZpqLQJxTa@;c@4%*ut^29TbiAy-TsQ2&RHl(Ucm{Uo+7pHi|N6-3=%f~Y-yILlooSvs`7%A zw1i>U7&;9m%bTnyiel04&3sb=(rb77%iX`q)z&X(%DbK(`5bpCq1~E~WId&tu#r%) zpqV`y^B^(Z-c=x9O)eBjsLfg3yK(pWKO*tZQ0)f%Jo}Kxu%lBIh53`R@Br<A9(j#iVs)Bf~`Th6;Vk4?s~ z`m?GpOm-=VaLTIGDH^+~0iom*1I*i+Q8Gsf4};zU7WSp_AUOyRcSZqCH7Gh`ZZM0< zw3^^uJPi%0Eq&I$G=T0mYFl@jQB*6n0(d2>O}Ik5@5FS!;XzLhu*d*BZ5=#Jh8%If zYyL+6t7SJP14_EL!|Zk~0+|RuA=8UzG8>&TyxV(hMM_&2>MifCExt!h1TiTW@#23z zvL7v)zyWK=Xqo@Ki%j(XDrv3s2_r{1aC-J;lfU_TnFP#Nr~Al)-sDb|FVjFI;JFz6 z`}Y=5%TW{QZ*~8`_kw+oC8d$+^XmxQk{N;dIv6@)+9mVej1Va(RdwV_35kh`ouJMK z0wSrT+=nO-@re**kzMNgKij*)>cpC9N&{Qj(xA(1$w2N_ zm4j%A?At;70s=gN6ClETT@yB>!f2ByS#X0Qm#*`AhCmc>C0RgT8LN@J=nByvb;_A?Ana0IB4AYvX~$7zI{)Y_*@B7?IC6>2`$Aw(kEZy1sJ7 zqhiQm)U^X=_fCZpH39EmM*L>O-Uz!g6*zu+FNA`15JoUvy4J3bez)nhVQ;5B!hl+a z7QH+4pp&OSE;{`s-$7jQAAs-mz7ByTbbUG>Ut!RK*%#*ZIG|G*9k>t&2ukT zPx{J2=|%cCVa-=1#jA-c$wyc>kmAi+@oUJa`53;35(8Prp@3#IalM8b6Y>`fT$5Oe zr=5MmFq5GJb2O6FZ+#|#eF$%a(tQ@WgmYpWd&PpsE8qIdF#3PnnB*EjqsKYs%$(j2 zae5{b-iVbW_+ZA%rL-R~xq@tbAxaq{UDutOG} zvttysA#6cp>_N;5gm^a7b(*(#GUJ-&0$;Wm;=kY%|v-`WD3T{)XcC%>IRZVkk6gv4DbUCIq9bp9m^k@ zGsx{rpWd}8@uq~u z?qTX*`5W;9$_+83_a8Q246VKsii{ETgo8dwAmuJ zBvj#fY4Whi)N-cP2WV#VnW4qzBTXzmJ#Rm+l?zlBxqvYN1je5! zclQ*tgdf#zPIB-ns=Y}d2B5H2s=buQ4MacLt*%!<|yD<%i4J*1&V;H+f zOAW-06XxQ&*w}F@lHZ$EM)HyKUMHt);oh1*OhgEWtOzbk(y{%H_cr5U-DRi6AZ~wZ zxmWO5g|MdVB#B$?2&MjuXMSMEe9fyxh6ihU^2V;$eC#1F(I>RTis@+|eI>^ecsD5Z z!vRa4cEX&hS`)oYAR-01l}*!xtph7L#pXS82sA~8Fh%D5v_2=@)5iz?2b4CCME;FZ zd8AK@)SFq+1^Ci`%qg&BezyLjB=K)e{}M=@vQzqq$Mx&~Wc(&$_Jyo3{zJ!rF4n{N-6TL@5a1#P?aS?v*k3>l@{)Y`Qe_X;2(5l!sxJ}Y++aqtpo z*D)eNKvM!6K$!GzjHa3--zl+weVgqEq<7Twt(f2WYnKeP+u0;>A7^WNU~F2x7zCM@xCh zT=v+Yqv_3~>wyE$r>!VJ_`LzD>hETcw_`;cIB{(PIHne#b%@w4ooN46+AfLAHfo{X z+FRPqDaD(7@)QCF0Bek_E1$7(= z-2m3=^Cy>1l+uyA=LDSDRC8>2;j5#zUROsxNT{T~o7+PREP*+{EUwal*T_%Ha_aIA zCs|w&X)jkKIUCXHo|t&o5FXy$854o3$Dts#%4s}K`s_q3B|)Sj?nmGqvm1}%Cr8Nh zf;;Wqzf48TGV;Op`2|We+nHJ7Xhc6ugrySN%{)AKwuUn!z&9+fXvmYFD{K-*r*hMH zB0`8S_i&7z=a5!^)Qwl=y`zoBWoTSab0!saR8*fVTaujbOpelTGvr*1Vr4GXmtRti zr=i^o_uqaZ6cbxgD2RRq-Lc*X_K4dC2sJkLq-#>>AB0Kqbx+q+TEX~pskUSXeq{3Y2FP<>)aJi3{V{;xtp|MHLfO3lh_m{~22~(hPCH#k|M2=>)+-!rh zKz=in3D7V`OmLVv)*tD@X9_*PB{IbSww%b%E7WiMgZ!5@LQ?KXDb^q=}l0AuD38h^=Lj<1x{9DC4!sEQBdDsHthZ!AKYO0?MAOFZH60MXWB z6G0VBJUn~Y>rfL$S-%Mq1 z6vI#P*`fVef@SVYrM0KJ2jlV|_P8XrvVP|d;%t)*^w|%&YcOiBK8tbp$jouG)!f5g3oE5bDkHSrpS5J73_z;YI#7`GNT>@zhxf`$H77 z*TmSsZ`!YcJ{)2U;VEDA~D_0lPBMW@?9Iyxbdm@(GM4E zegMeRbd z=|TCl?2d|x&C-46&b4UTv?DfeUJ7+*mZD28{wx0d?-wy;%3UZg--yPIPr*%L`O(g| zckedTDQtp$dv*RrNiy=kDin^2ip^+Q+zo5jP6Gh6Y}v!&Z`$;S000FAb#cZSH(3P#?Yc!3$$p~BF_Z< zBwq$H3(20j06zWfb@c5s9Q*h01Y-&G>2;45rl6n@yLXpj@4oG5)v^!z_PLj2$ffqV zqp<*4t~VqeI;INhV%M%s*t>T-TD9tne*K0A@zN1Xf-XY_rUbbj1pwBqn}(h}Z^Qfr zPa%_0*A{Kxz6z~c^}^2bby&FgSzP?>=dpI(G>hxCYo?+{_ggV<{unL%ij{AmZ{OkA ze;}B0?$i5TtX%nq%>Sarzs0vM`~wy*eio}%zlS5dyAS*K2mJNzGaM^cOb9y@!wuI@ z!NNt);L9%;fUy+n)M+Hkjt&6JcWpxF&NpKD^4G$HJR0(F871}Yb07Ba-v!RI=-X!) zKKb+?POc5Cl!Jl}W9HZdEZ1NAE*30&7NunYcyG|)c${(i^(ZgjV1$!!Gd3N}WP?tA zp&KU@qf@I~0Xj`#NWrND4SfTbL*<)?dkwi%bBP8;}ue3TDhfya9mh zz16P#_&h{_Oij;gE)F-54%1% z^!_=94jqm1^7WWL;}M*4@`aioUvpNOW>~cNIb3wnpV7bHg8-O(*=X4Zf5O>k{|YNt zzJYb?rr~%0dop;KFD9mAIIwW>Z*j>*f5BP(9|FKI^2vGtfH`v>$KXLDapiZ%0sub$ z;%&^C`-JS>AOHI$WHS5Fv*%qHJorgeRFt7)-U!*|CQiB;J$v4bA%jO@XZd=}n)OSx zZF|0|fRGj~{w*%L=y}QilVchfxfLZrO)TJV@JL*F#khdK&)>$Jk|(6kxg}4aZ=d^c z$;B@qlc~g}O^Yyg+;w3cDL_AC#v>Rs@Nryl{%^rpBFw)%4`rTo1c1+0jKy~@dl|`O zZG8IKSj?M0M*4o>z6$B@f%|p?fGk@x=75uEaA0=T*>ir49^G%pg%!0&E=S1RWZmx=IqMezwlq6aad_)aiQCP2D4cPn-qNAg#^XVoM@Dedk_VVrB0ARbH7LDhHVMku{4E7~O7BWgrZ> zo0-P4(Nh5c$z-YqZ2kw)(NoQ8#;fwc0eK%UVCY6C@F6DCokf27!+BWr%3o7fNIP3z z(5`CqVn_dn$EPbN%#d9Uxs|KJtu0w(FRQbl3_dkI#SA;WY+Qb5v|bin36ek#2`$UO z%Dtusf|{9MG6w*#a`j4_Klpq!Y?vR&6jWYbj>*#|qy5S40RYRFFL%FnKKiMs1WfRv ztYZVr&@z9B>0!qhXdDbpc=JZ|>~SXs4;q1{O*>)x_Al_a7YD%PpDHXfx7kTNAh1o$37id zkZEZP`I}Bx66UzNq+0~D;vptWc`(~I)4PK5!HG!8M=SdV{aVZ#Ikl(>8<_dw?&b0j zEQ50bC(yjiC>xLDu*9Mv{~h30m~}uZZJlMx#Gz1MIWx=P(V;%jncG?h4>5!(v(xEx zl|d!|G;G+=T5=~Bw%f?vH;bYvMN`>X#%h6+ej*h^FPWxI-L3q5LkW(>i+_v7i~lE* zbK|g^mpO%@n9eJ0P(B53DtiYU)z0V{AjGOG!)z_Bcz}-ImgIr*6q!#7T&O*b$1|HH zZbS$rrmBLlTtr)BqC@++rcY?P$t>$!L;#ZAbzvS zHG{e(RNBNRc>pNuyka3n1O!s*`^?O}C2F69Ga4@iTf11;kb+3*{$L&^rY-H8BPuV* zjLw_%Z`gYW0HA$^d+X5}C{%@`1=LQvzJi*SkDyMBPN>pgRcuQkH(c>O zVq{$}fUfEc3B`>1K*MOVpf3|0dGWvt+JQx>C&m=?8YyGmOTx zf|INpCM=T`!0r$Eh)gRkT#5Qgx?vyc6 zs7sDKo4091r{w-J<)YzjG@fsquI%jZ=5dj7ldt5dV>OE>D?7DpWsTjHHn>0?IE1jZU)N zG}*$OUSg58pU}BxJTk;7Z}Lb(!v{1IzWtRpiZFqsxqMHr%u)dk&&W&Lqp6P` zT#DMR@IC)k7MPB2k`Nq{92;F$~{F5@<|P8{TK0hy{(gx5)qBV z6+biC_oi>-Gk-&1qS5&F-6^CN&ittcEcxcpW?-%A7Q_uVjYq;itq<+T0Gu)NNSV>E z(xI1TaV@VJ-e3_`o{P-UvJ*Tz1A5H1KgBA~fkBzWNLn7LA8n44?$>3uESGp)AyOUG z!B{8X0X1EOcj9J2FA0tZpk&(ibdVXxJd5N-vV#%beHDYJLOh=$g$`JwKgJ zBP$-L$R(>>qMqc-R#kSUttc3mYD-roDy(^Mk&=14kO!XTNkm>SBInHfa6n#uNpzvQ zy3O7?7Y#PKHxDZN*2r61Jv7;OlOrFdwJwqkd#-(2`oX0Vi5Y;s=o3Nf)~`d|x^>aK znSK%b)@@s{XU`s-c*2R1;Zp#Nw}9;weS7ybXiv@{YPzRmQ^ zaK2zhqWU!$IXZom+2?GLsG(>PEM%25o9?mQF#_h9#egavjt*s9p+WG4QITeg;8f*|4%b} zAf1=$)-A;L?O%g)juy>>Ym2sQ-GUuEwxe<5#yP`>OXqP?bc~D=3F%fHgGFs#f&oB6 zdp=52I}Wg?eT1H^y=3{6ZcH*&o!+(#Rc4GL)Py_<>FV!HIoVqp$hV6ryDMnqyPCq~ zQ=1_(oE*MwM*`OLPG^fj+EL7oL48?eVBJd0tx)zCLZQKk+4k)eTEbAJPQZ-)KxSQp zel)u{&^#Wzi?#yUC z7C5L2N3HZ7Py6KFPRYHWuDzwUSTPfD#mB5-5U7AkIpQ^fRTa`IL+UM07}UI33vdqX z*s)#O?bxv$jT$vZ^B6A(Ij=X$MZpEBA>fEmd~ubdpSbn}WF$;9qi5vT3}k@4NHUeK zkxq_gB>SV@?o@~7p|GJ&@feFkW+x|ho==r_M15)fOYdw7gpqk}(wh}fCf_DM9w8I_ z5Me_LjBDLI@&tV}U)nd&@UVR8Sp-PgM$Puq)iK)))uATEj6%$03b5IzQDbSBi`1#}*d!LVp!P92 z7-bP(Hn~t72j^K0=S8Xpu9~QSLdK4cG)tB0jeq5_{cr zJO2pM@|-7$eW5M@P5CBwRPwkA-sG$5U|Yxr5OmfYoMz;DJ%vVYdyG-*Do*R9 zr~sG>Z9=RK$reV}`Sl1Xw{`^yQ`}VyOThbv)Q(;!z_BxKhxQ1NC#0l>0+|*H*UBgc zdD@>pI7c>H12n%0bo9+;3gXD5Ghri4z<_cv+bRj>adFEn^n z@NvcMAQ?Z0ehr-0ql%UG_grM&MnV5)x~-9l!zvn3#s->J)STc5y*#wratQy*?2wyP zA*Q#mxG}b9-U7)`CN^!-G{9|Js6S}&Tv||(%gIDFt1&5Vg)X8r9z=UQHAtKU_<}A|am4gI!xj;^2hpZZ~ z)DJUxZYFTrJIYSuMhBMSYAdZBNf0E22DA}poNXzlABNyPZ+&@MX_qRMlBS%ZJAg~+ zR7tckM+@X?K}ZAW;>S~7T>mdRQ5vDw-SlG**f!(k>miB`Gd@=k_I0&d-n*|E<1e~p%0ko zCF-FxkoUyNtCtv=JrpBFdD`Cqrw+bN(gsZ8LuVl}DpT~>`E;f2DX*}dN2lorW|s%rK%2A{NYquVPR>9Bx~qcq@#B>GrZDB@9nnyr$hl{oNpSfh$5NN zz5#9R$=R)QKHta~5@5*6{^FECRU#8Ync`5G;|@RbN?53Wrm98V-lAWtr|uTcProTS zMsvX(&45XLWaq_S0!nmJP|TE=4KsD9yNR(!GbU&PVD1&**{s&kwV24T%MCN_sTxi? zo&rrKdi52sIXjUcqdXf_YbMR0Ll7zw)QL5-<{dm)Ak(zq&XD@juCDyujV-2{HHLt> z8kvo$Rbkrs*9R)9yiMTXDx(;7CT}@04kLNA&2~U;h9=iS=;KyeB%$b$Hs(e0?yk)2 zJZNQW+i7GpTKRZDWc`}$$n)(|T3XU}UD-z4(&;7>v`1rp5gJFmRFwigvb+Xp*3hA& z$^!=iL*%N5J@^Hn4+=ef)#_o11R_a|`?R#8h)BHPmY8fh+H(xzrrA+EHokxo*Yhyb z000|uNkl+RgC`?SjSHq5%{W}e#04MWStok{o`)=?AX>}g zp(8T9@h2sK6^zDhEAQYt*Yk>IVTvV5`NSY6RYTq|Rm80S&F<)beMgnDSy`NeTxKfb zRn5$$1npK~m!oCl)6p*7OWkOPiUAOv-Q4n$h-k@KTm)Y{KbJ48i6}xQ1#dCfNhHqo*zLY_JD7H<=)lNuXhO^Qg|x0cHbD zr*6taerRJ_rusW~MdTcedScXmazHrKS%xLc%MmXET9Y46eWRNL(MyKS&X*Dmxy{rq zJ>m*M?-R{dY?dD1HELBUcalX_hD?ohd!QYL^$TDd?*IR7LXPx#Bk%$s}?Q~h#A{fZz_ zWf!GYm8B7_;-7v+0FrzpgSbkENQ4N%<>EGs$Ag}uM5i^LaU>}6t;$+;Mjo~efJGO( zk!Y1cxro4H6)pa_V=3CGKMLv`08bZEj#N0)21a&M5Ve}0g0(5A7NTc^m`}?;Vr0XHfcuX%Wrn=(*cC}Mu(U6wcLPqhTvv6<7-iOUH?fM5C(Ww~ z7zkc5E7j5oDk4{EjT$yW$$}E}@6$hTuvuPSj=A&aqEW*}nth(v8|69NiA^HYWZ#=a znabVLq~w(la}Cuyt4fIGMjhe}Pk1pN-kGTT4VEVrFqKRDoW^RW6`vH)^2Ok*1=_wM z;e`k6#RZ%BLl=jCtxAnkbrN5&ussB>`d%4-Ip+dsHfOX=>CEc##V6@prQy~Nj2N8D z)TG_oGMjsOvjmTfCeDbK$$C&2*j0W`32iGE$qLt2C*hMt}lK~O}U>Y#V0XEFLdwp(74N;jH+GaCAGHFFqJtf7-9?g&w zr$~yKk_F(*$cUWa^piW}TQ!kW_9{ITIRV6&4m=GZqC)H*sXTHwBB z9(1+6uK3Seft^)Q>D5(=U0M2uAbax<9J`xXaB1TMiQ7 z&8!=yec6mS>d18v#+kkxJgMkJ`3a$@t~UwH3C04UDBUHK&O38CL5yMs!2S)lrSM?I zfEFna|2dV2t9?dY3{B0-%5c-kqq}7I8anpqXg&Z00NHF7*|6W3D_5>IXU~jT!%*p_ z?%5@N8Icd!tadlGf4FWE@oCCb&Vw@=^0M@Jy2a#OOUFXLp)k`1rd*l?ThYr`&cfA_ zbra#q3dT$)D=n$BEcxl$Xl8`B;18`#GaXeiOqw{vOs-q+J2+$J$Ir(4lB>V_4!^7z96Jn}@AxtWc zoV`yUE4fE!1~4I-TgaKfDr*Fc(fcE(?i~%B=jhueizHmGKoSHI-rT|Ldr%PXATYXf|#_fs8Yx+{x?7pHr9_mr=(&@AY9<`q3StpmX zmJXohT2W9Q>FR-K>FFR{X2VsDoQ@o{kBJV>oq=Kq`3SQ1fs1s_2?*tCTy-b^Gd>*} zB<|K6%b!E1n)hrwQ}nr+dIPqrPZm3sfRK$o@b5a|Uj38;AV)Yh|IGQx><=*Cx6ke% zh@0rfQIpb&oB7f`Ge9oaOLt`%R1&9t!cmk|uxi6G7ioo>Up|K|_!S985_6cuhaaHm zZG~&w0HlwI2Bom7>m)r*v1+Z7S%w_`J^nBoUit4w6yC=1e(?VUDP z4(t7Mtwn15I>=>dDwR?=n&>7WA+dt{`PdWejoDha?MVU zOaeIht?qvl`?nZv8)Oz)KJgfrM;E9MzbK3HN{vvUiftiWZIm`LXP6C;X}Z}5s^XDZ zw26dxt)&Ke9@}*EfXr+r8xH2ZT{a|cI0|6ngq&6=lXTdnWKaByZHOk(Mux65oWV36 z557kUY~crpa$!0mF@GuM;?M+az63})$qnn8wl;3`@urr)y&=$O?Q54fF&y$)&6G%1 zrbro;2A6hI-|jm{)krE1`CsiZx)l?}q%7X=;V|i|RjdmwWW(eMZ10510Fc5u1{SMu(PV=uskEg;BRP z=;?D}MOu!NM}vFlecVhu+R6r}j_8SB4Gjgtc@v5`%>TDz0p)J27T4k<=p-t_#g-Q1cQ)U(DOj~*CkfI zLr(KMZrd^PX>2W$x|0m5gBy0Zs*g}tn5$kgJYg>iqv}N$q(>jJQxN9R_YKE|?FvSy zr7UjoVkwJIlb9VrI7+BiCFo3)1s4sOE?G0(iv|ptwprqQkwHpDG<^2UTS+qLO{ZF&vQxu0$VV z!IB$ufju|LCl zz-ZdU?7tq#;7@Vp@MD(W!H^GxIb<W=(gRvYYBk%bx=$edb2huS6!7-H+nZEafGn66=A#?PvMzfdnAtY3jiyaV-hq;5alFM zfgE%;C(5r`BL)tT9oiX{lmWT(t9243m7w1hQT~(ZHP{6d3X2$p&OyQ4kdh3VV;0 zY3ACey5T4kE=1@vu5Txht6~zEaww^1v_Est7gs09=?rJ^mzBUW5Cx`RUxO0yKv%T1 zjfC-P&wVmj`E8Uvo<4n*!F?-)IFKiKGUPugVGCf|L}x+uTuH19dICF?KSa06XB@c-#8q%tE=gHR zMG^v9Mka@K^aAsX0AOD_rh^Z#bL!nFD*OIvotc2^VDd~&0#Q)N2!IzYhTNjU>?sTf z<03h|?5cq_l&-L$&p}7UX0%3qQ z-!5FDdW^*$Gk$#h6L4vOO$~3EVVuH2Pt$<1T55W2xjUtojQY_w#YX_i+=@{b0~#Yt z2v8FQGA);8nTaChVm~Gi>yZm(&Ey~brl48dW@9XuyME=#^1woYOATcD@@*F!RnuZ` zr<4e0TshmDh*m?H0Dxqw$~V8&&|x78KNuq0%@HA+AL~v+F)=|WOURa%zz?Lb5LUD` zOWh{+J3BZKGES`pioRp=Otq^4)I9!tWa%-3FN8eN>jXn2>VAlVNNE>K8YYlN0(K3S zZSIx6aHm5tgW}Bd15^kA;ZVx}4ny5UjrmnN~tIfz}v)KC8 zW*^Wr=^((25!~8C!B}w8-K%ZwjC;$0bAV@q855DLc88drMig$#C&wndl?^3IPf|tb znEjN1fHFyxDVLrMabiAh4S!y8PpH};oRO^w+Q`sAOiVMF*LL_hJQ$eDbtXeN9Z@%-2y}Kgj!W)U=1C5QoT2NI;E!=l2#5&v=tKW9Txd(TQ``69s(6SKNr|MvEQ9vt zf~8^>PKs#uaeYjSOU63I7&YE7mlC`?1dDEhBMzct>PXRz8>A{;0A+FCFsEUjx0!9)Eu!Q~Q zs-7$}O2j=w7(~bbB!a5SWI!9EE0DYglQ?ToDPnXY&qHtt`y_YTV|>N|6jw(xN&0b| z^7SjzkQvIDi}9#*=Xy+@X2&k`jolOno zkw}*+UNbiyqClL0iXacJ!^*@gU37)dNjp$RQ7S%OLI#LTweg$Mt74A3x|YoWpiRrR z+DxXPlwyeBV=`O_SXZ0(^B4Rgvn;qqDUr;nA8kGDKq!t-ER{euT^W8F6-kx@0fq!K z!m=QYbxF7fASs0ymYVgORgK#P){T8NT6#VlZk`5~E!*9ow02EcmwmBH2eWLl_Ob~e zqg&XBn?c)07sv(m?4%m;Qa2@JOemuDcRy-EWaHy`C@*jOB(?4ZWiB8rgaoNia^hP( z(HfJ#T%^s2m~1)*4uT&$nt(|2RKlHDkhqv(??buti8Yg`!f~H;&4+}f3$8Vyucy?| z(MCrdx-^J_&7dV7IIuqijDXfrI3Qm!3%k0xJnG6V1(@n5#)$`Kgd~)6hScNN9Do`W zJrpJJ^lRKfKj_H20)f`utZWGPLOHv>f4$d}%)!%`qyX+{AO7@1au6sIm+IdrCBc(X=|764avHfsvK zaUoc^0^Y7kY;(yg7R5l-e&8Oms{u;Y;C=EgQbAco#-J*Sg{vWY|0i14ITm)62IpBI z8y-?J+E}V)f95ekN8fBFCDrP(S&mG2f2K}ZIiD1q!)0OL4rbmsXJE(z(DkO?&DAPU z>|Ss74=qB+s1d|y9;&nYwTdGrG_ct5fKJ1XSv)()o2Z`~x4epmh8i!1EO)+RXZdl( z?9lyQu1(_b?H%>n9R!(sGIQ?H)b~i}S*FBIfRhK~ve;dt6Vu)cI%#8eZ4lnA*zv`fh5d`6B zPi5gD=I7f5nxPI5RMSMYo}?PBScmHw&`REt8(PR@jc<4A z09X<%5xhIivl&gMrIM~?bBEHXp&H6b4C!>GoWzi1j)=tRYc8N;sF^sxSXSvLOO8sP z1^|=E`@gx;UtXmg6<*^&bYo_DmVHx-Dx-HA8#JYCwB(q*f7CKY;9w0#OZ6Urg{T!U zDVaPvOt)rQqWX-XS*Ch?%9_h_5!#Z!V%I&G&V}p`f%r1_WJd1MRJvS362g=pbV}0p zdf6LRCCCeB{DJ}`rQ({dk5ra^#g!HNS%Q`!d84o|7%{37wZembk+lMwK?lyYR8I1l z(7~K+1f+N=-+sVk0_i|l1;E+SS)Cn@7yQGolPl{o!q=8V94ZopPUI&w3Z z#k);XBuIIjXRi{o)Dfj&?@w03Q09fKBhzh9V$k5+;Uwb_br{qq2kiZ(TAZeVw0kk& z^5!Nkk(!DTnF;t*CRBa6Yep$N?Swl4nSk2zVsE&&qoWEdkP2M0=Nw2TlgI+#*$g-s z5((znLtXNA3qBJMQX5S|F0efl|P(*d)<}2b^4D8QJu77Vzv%&eUK5pR+kR))r~k%$8rEp?lsU9nJoXfMD++2 zj1atmt|HK6m>jGGMur60a^pO77C0C(iMY%BGcqt#U_QZ;$YuhbYOXb^q3WSP8f3E> zWV0D!M~H#$G$CD3eVKCJr+xA!{YbU^6?^1`?hqZ3B@(2M@QyW(A7)1#8fw_BxVGnoK{Bp9^aigX6h?2k;@2O~V8 zHW)a9y)W5p#t7)qt}di#x(k-6*)}S>a0V&3OPfo`$BmXvSL0n}N)IA&5CCTYCV48& zgqCydQ6q(Q=X;I@;*ypUnhBi>s_m z!`YUMfs>_wg|JE>qT|`|*?ze$UShy4E=~OgPp<|GeS3#NC zF;H1-l~o>;Yfon69!;@q1dwT4p|3Sy#I(lfED+J2H0&)lJcr8zJPSFxbSEDhoD!=cYoQ76ug5hmm;n$`m8^0>?zZFBmP5;co-RGJRX$*@x2 zszlTXiH{x@qj`7bQ3^Q=e7XI~+Kd=jxy2g|;A=m${QiG?*S6a*2t!Ti{{MUWJ=3(0 zSc>-mHolQ$)1+3D&r2J^Enw^uFvN$c9K{zp*hgJyy24?+WX?vduz{P)>EbEPlDr!g zrXN|1$21Xzx7N?$ty_h-MHA1%8R9Oy;{LNVCF}hg*^vNT^OIVQX=+f)5 z`FGKJee7+uihUV2M_Vg;y)=Eoszo^G4c9dsL_n?r`ihGZ5!GH7eVWY3iFAj{Z<5cl zQK!&mOV-M+C2%D2L{vu7+D8&xHH9P9Y*?BI=Qza&&XNwVIiV^~w$0D<-I-73p^v7X zxoKn})Bqu(NGJ7&Uv%pkg#TmXZg+_;oPGZUj`>|kW29mkZL;zL0B!$*?e?YymNnfx z6a^`vfg}Y=))WB&qBGT`!dNxiu*2k)-@)6&mJeCUD`~3LQs2&RewZziM;cAv$)o8TCHFB-LnB`h%wM2XYwiT=lx_q6& zIg@wLq9H7!Rr0(PZkDAA(61nus~WgjA05j+7s&#u>#28Ucz;oCV|EwXU@8c+gPNM-XlgPBSVV2wt%Oc4o_7g3zVNCw0-s6#N zeUWdDt1=^pgg5REC{VnuTG*T`IP=Lo^wIqMc>hI_i9{liNF)-8#2PmMfcyRa?0O^; hi9{liNF@Flz5%q;4=G!~gq{EZ002ovPDHLkV1kZ2gbV-x literal 0 HcmV?d00001 diff --git a/33/images/add-user.png b/33/images/add-user.png new file mode 100644 index 0000000000000000000000000000000000000000..42eb8c8cebff4f618052e5543fa586bd186943b2 GIT binary patch literal 175837 zcma(2byQrz@&yVH7Th(1I|PTpgS%T2+!Ng0-3bta1_*8m?(Xiv9WuDP>vwYR@4j!n z|6VUAlNhz2qq8d4RGaad>tb23*K2= z?gJ7qe2_jz0Dr%Akh$G{owJ3#%PCxkFbG5el9Lqs z;E{2pZytarwdD7^$QQN;|IYo6=-Z!y%cKPXSQm?syT^pmht zQ592&g&-ss%SzMMFe~V3@r=66-{!UaE)f_V?`9P{2wdF%RbK9OSoXUiGfGLvZBHsv zI{Of;W3T|vlFlt{CGSZ?7m}0xzoAMJMWseEBp8OC{@S@CQXd=;U;)0WefLpSm>)Ui z_Bbr|csW-sPg+)4S$Ov19mD^PMC^LI)u_H`!aVoWwE_Y&V`IvtqlLg(>p5u4q6lS2 zHd1rBbz`nS=F>Hsglf4SzpA`(n%OU@-~YR>!$TlekOf4?3K}X-nc@F(FRP-0D0;U2 zRr^mm4<9+{QazMLL+t+sbOKWxi7H<9S2!_B=%0KwUx+~mwpY)C>tv;|1b5W0|NBq} zf}C0zh}4G)15zb0Z-4=10m*O@lcpIqc{3m@;lW1KT_ zJAw|h=Y=EyQk9>5P(=9e2(3Z-!k;^o4HsaU7G?2{Aw#nDd~R8*$_f8wXX|hD5IH3t z%1^6!KH-Ng4Q8EIB5m*L^ZNnvWZ8OL&l}0lPgYBi(I1c0H=oV3+#arivocXoQL#}% zvk$%Wj1}*_z-HqQ&{}2*deki6bK0Hpthl42w!4EG6`$wC4;3gV=C}~0X#U(^mSB*F zS$puxbEgahn6fh2i{tb<`9Lcou` zi87oo?>mdXH60BhJi9rpNP2j9*=G8bs}YVNt5DLry2GXwaYAT_razAzDM{0`O3hJ_ zqlpk&gB;f3`v`9{ zeP-2<(&4r?cAvAWwO%HWcw-0$n9Pml^Keh7)ntY5qA$Zo(jPOA3C;T=wttoo4_!X( z7}%N+mhtlwwrjgLyE>R8owR@yk_1Ru82CHmOifLx^0T0;ynkU>dp)Bby*u#+btX&* zhrgug1@V;WLWj&Vg9|M^EM}e^xBbW4eHWgVPaCcGREff%97k`X38_0M$ccIFrGXty zpXFCdEFpmuq=&4T_xFQ+@=8n=& z&aDaulF~57B_VTf>N)P8GHcEE7k`4uf=ptFlsn_|WX_K?RE%B&;XHPqF|klW+4rJG z&X-U9jh1hY?;KxXC8MIU!(H{9XDJMCRT=O|<~o_q0QXXxuM0oD43Gm}>0sYl>f&?R z!&>vYZR>RPyWE*T1mWRJsebqn^78y(vRSCa_u6`?+H%8RtXaY8cCxh1!I$NCPAh!3 zXNuN%rT+fuF9TZZlamkR9@polF9j69sL|2?&ve7`7L2&}clJ-!51Kw4U*6G!#r7i* z^f5Q<)9w4AJx!@s<1I*`;(fy~po$KDBrCLA0bhiOCmty}WP35mTw z?W9PQS~Yg0bLG0>4tyk{_;|{&3tpqbZQfn%Xo*ak? zw!BFOh*HAfXb)!WMv{I8k4p<;D6KNTq2L`j#FaGV<}iAmzAg0m@m4qQYx%zHH01n| zTo(jtsi_8mc4vNv)*a4m_8*3KLX=9is&Hb6c`io3R{mN*P3H+TCMx#sLI4G5JMU~1 zcC1A#I`6<%MtpK|!pZc1V9fBgBMlL!Bnrb$jn&d9Z1Zy2rP=zEBS8^@$0VbshOH?0 zRdd}3_tpCfTiH#j^4EMgIZ0@52)v<)pB9h}1>E*Ppmu9Ujp3Bt`H*ioyVEn4>jCOf z17v;?ankDYaMN4#ae|~LZaJp`Od!xdL(=V9VJ0oE8n3O=%&Hy?zQqSV1^Kwxtdqsd z_G;Qq`ajm&I(B*PLT7o`df7Tk!^#i;>t;cd7z^0BoWrAbzDu<>FIR(<=-@ZK4c4+^ zV$i!P=Xq9;Xh9S{9Iq`6EiJS_)1W8ws4Wm0(qk-1g$)FaEPC#;P-Z30u@b|{z8WtQ zW$}k9D$w6SZ0q4H?lVF?2jNez&2Rp#tKCaS`uqAVAO=AJ;QFfHYHeVU(d)}IP-wiJ zneV%ijZ+IF`(waV1wNjBE7I@x9eRX*%Of#CItt*LJs;pi)IINUTxh8~j6LRNBCR%um0DK)=OBpj=7*d~14F zqrE%1OtL>(@Z%l?4Rq_$1*~92Vx~?aQN-o2#QX7!ky0#4()UO*V`#V zI@!OPY|lYr-2cYzY~#0(Ft1%yWS^N!IZ~%3s(&ce!u~1f{>I4l>WA&gN)y++Po+ec z+H=Zhznrht$gde&RGPLvgXWg_rXfNhqY$O{f@WwpC#%sNFWX)xKnAUa9Qu9wM36!&D42d&OtT+x-NMI@)+2iCJPth+NnthYDhgRSSC_AHTNQX} zc4Hy`=zZD~cedwG)*Hf+Cx+BjlQ&@E{)yn>W75rj{p^87$6>_pL33iW)UrWIXu7|@ zA6T~+*C~*fRZ{9JVQUY#oDjrR5q=>O_PVuw|J?hk+F>9x!N632*XDf%0s+Ye8&o;8 zR=4o_T{t^2w`5hr@3HOH@$X+T<{>@6fQ;^}I9}4eXI5nlAS=9tlN%5I?E(cjZGY!K zH=ZsNd96-+^u1WzJ-c$wS-@tYF%ow=!}sw|v9SaVE!{?N9KGr4 z!!?<^wY$T)F)4pqI8T|*#?M=k&ajyDMrM%;gBT!tUapU&b4xg><9J=~#ja4xoI$r# z*v;48Kk@m))SoT{7RC@ebN;)SZ(c#{gANoV_S=Dbtr|C$TYOEd@OY?mwfxNt$L zc#%f398N%95vjN7!mQcNuB^mzU**T!{prn06_0eKilkd_+m}{%sG1{=kl}7eYO~V# zw$7?B&%Gk^$pbU~GjUiT;1&R#DEeHx>Um#({8y##5-W67_#bbKfrSGF%*=dX9@iV5 z##Ir1JIP?z=!eAfdLuYjwjPl2{5YATFQ}4cHCq~a&Zc}d2nX_Zc4B{CK2^O9x^(Od z82Ofx5}sn{52ssig8(Yk?SQE_13s89ao6*Tk!*TP&LBDOj7jWNZ(A%Ea-TF_XHkUw4d-`OD4pLSG|-wl zD9d(`&IOF;=jWHLoKJ5NDYP`XIa<`Jv%*(bSO1oo8Jn1h2OutEXm{w{c8Z~DnGW|} z^T}gtq2-)(Yn;eS>doQ&gfr{Updj)6AgrL?UP<9x+!*Qj)KnypPfA(&p{%0fRt?%{ zg=LzLhANH8@l)Xp*w)ll(*+UBT`M#+^xx}tHlL$IM?RZc0to+GVG?@Jw{d#BFD4Uo zG&G{~uBnAXazE}AO-!f^buEeB0K82h5u;)B=srI`A7>~&F|oHO0l3KT`FWRJ-74m( z%C$1UHQU>f!LYp*FEcAsaeB+R+V!i+T7QCyBCFE$9haY_(}=_`?q?Bzw>2Ior#r6x zwRSjK;K<}k)PLEJ;qD(M6xF%3#(r z9mO0DAVO7UW8g$Wp0TE`gEa4B?{6){%MJDo5j(UgdfmkD|Iydb8q^;n$;OKpNqb8L zxXo@SrGv>q-P!?pGI1tjY1}|=VyWS)w^__xL(2y!v_pNKM2p+r)Gu5Y{oB&IkE*J7 zmqAM2Dcg~#2P8`W;lu3&>Odhr61~6JR{Nz+E15URxmwg?DE2F&FzCOddokE*_P6oj zT$!w#9Ak}|61Qvl|3lAnowkPuCnjWo$}pV578eo{qE4S7V03(<@%evTA9@6EKXR`=55K2J0 z(4sR2sQ&+RnKRJsH-hT_#+|eH|LZlXG?f31FR)VoDE5EHF#JE#|3A$G8E^8#|2}~M zmm&9mxuI~pI*jJug(}lb?}<3l zxNtIGlFna~`f{R-eOLA!J(W;uhgsM8yw^^##_iY~kL_z-<;eHp7^K}L_KNRn&P47! zs_hp|vhGm{lC@W;awfe)q22tQ|+3GeWOE06KvIskZyvYf!12#8clLjj)|p zEWc>eK@Hu;t6MZ5cpO8e6?P1y!xmLT3lWp<;xRw%$mMZNRBV&eM1W?)9 zPv~*Qs__vUj(~7pXtZ>;j0yviUv0}C)l)6I1XbF^ufAI% z7PGm1zX-PTDFDD985s!*=xGXv`J1>kv2Vco-$f5nrOJI9axCcf_w=gvklvRc4?70!4<2Ebr2;G6>Q+@pWYZBs=U0ptTd z-G3E|RVEe4s6=b?b{p6`#|3s!Kz=?AsPhQ{b+XA+2H48ppJ7Z6ZHH$nINV=UQu+Lt z<2I88!*UH)QP2Ls-NJz`E-yLunh!Y~pR^#whOZ&hfASrvTd#(#iQEQ`EoQ3`kSNJS z`nIpr?K^_`Fa3H0;Sf~;@Vw$VV5`^hjEK?wQ4^#0mdl(HC&uIakl5Kx#z^;Ug%1IEY9;N$odiqZ*P-$ws8ZP-$q^VM>RfqC;b1YMqw%_Qzr&?>d z`df=MOFnT1j%c;1yc(+`#-oIsrdZ^`&iTc0p+D?J% zLZb-=u2%rFqU#RlH%0QuI<0XHC4rseu|KOBr|{R~OFEC~n-1RnpYBx@rr2aej%;)t zudLD{&x!U#t86Dxw{+Tv=(}T27{D@WTA@RT>-3s^_(1@LV%DqG0z+M>lh?f5P63d> zV+=5AP(W#^&>-93z|{7LF;N)lJj#rsip;auwLC34W*j*5&GjKP@b&%IL;D92MXz1` z32^JiMYH_&@ZF=KeJ{Z4#4pVVH#$^=Vk{sionWQ%jN~v)gVcZq1Mg6g%Wgm`TfQOn zc!GwXz2x&cyteh^94eFV-{{))_nw=cLj~>g9P`46xS*lxa`vqZtYc#PO9?+?lE>1a zKj>eg+uOXMJwsU(Y;2gAua7WSE%}(4q+DT#(vo6gFhH>M6k}7Lz3AHKS|-pDy-rE` zi6qC4z@9V@2-^XU$0H!f{c^c;cNKhlb`f&E(Bw?muguU!%krPh_azQjC-3b9n0p$+ zVcU=P)%WIYhDHei$mr~2FuR%0{&$!L8=ILw0L%V)gKj_~LIBWDcu@X)vD$CPf#9vJ z&n_nm*di>Wq7CKx=Z9%^5z^Ea>-A+7uNzm%$;n~SOSS#oU!@u^qDHD5CaKW&<}ssF zSbLUS4<~ayxt?krC;{MpEO_DZURI7V&VQX3$9>I@nBX&WcPYQ~*&?CgMvmHTo=k(C zs%a?OE4w9fbLt)j=&M9B9pUNFBlkf&lh}`$t1toe%$J8oO_l1K#f( z^xiZGF8f#U9IVvdSwl>X*I%B20@C@j=agmAnO5qX%_Am>C=Iv|VfUwI;rT$YfsohV z{au;7;$kEqZ%6|E!^Q~reeTa|Q1H6$Zs0Osl62-cX}Ki}!R`LX#(@xwpjAkL0=tIw z+9kiRaHIO=*}<}--QzVc?)-o_;ZL4!L*wTcOQ^Wd)4uuOQbNqiiXJF}f2p3A9?^>- z1kg}6zO!&}z$8w6r`>~B)!9yG$ucq`rJaUE`|@zpO36FRx%%Wr46r7KWda@{4h@y! zb2y{;{jtnz1^S<2nDIVw7_20sDldj47CQ3*)G2e?J|xgm^h1m zxE^+S->UlyHGMYYEJKkH66H z$=_d4A*F`o0Cr}Zg+u_@vAa---F1oAaj5mn;ivcaqs|^r@!^w&9~A)Nf7Nt!k?IJz zfeI&PBaTH^wZd+7N~ITh<3ox)@5UrYNjg35`2l0Hjc$XjjJP-~Fhe~$&i@qkL}B^o z&YPJ;JWywa_1r(Y`ThHM2gj80yY=Y_qwU{WRe-~m>+NL#BwGMJ1-OUfodfGDiBKA1 z=Tg;jj=uL-GG4Nd(ieOHM^}E{pXzj&I@(`Ec>9*m?T82nD|w}U2fnX%`prgDEvJEL zbUJltYi*=)YdE;LlT8{jUw@ua0jLZfRIJTKDi;}fcQ-xZAa`m|Kqm-#f3f}w-JUlX z0IEcl*|C7n^O(zfK`-WVVjm?vPI5svGz$0}RU|?8<9^-Kc1@d%q<5brTj~j+RrHzN zL0{26pRPtz%fu#HH7mo@m-q}sYYDi`k0nHIT;b6y1MF1>P$TMXR-+u*+CxezNRX5S zt=GB!9Sb@1=gi1Jrl+R(a^_ntTCXAhFro1M?M7z4fY20i{{uWSJAPw0<G#*Y)`Lm}j0X(JtN^Ku(-uQ7ujh-nfm8v%O*$aJP#9pqc)jvO}*)|-Hb>jUGLpwPRW<I3zqt&3Oazpzd_mEYOShdQmV z4a~atG@1}Nt<4kWVOZuaFbEFum~s#p@qf=pJgtY5xRn%dUX%F`ZH$}sNvpna_Vra)EcFe{t0B>>BT}?5U}qRUU%nbe)zrn-dbNx z-dH+l?efTvo@ZNm26-m_r`9@r?~AQ(O>I;JgEyAR0 zfCWW4y(DAX?^^|l&Jq|U+!@Fnb?$*{0s$pw4uQPXnYi}WBHFRu^ze%#%U#$`#RM=3hy8?sjsQXZUR0!IRj zbFc~juL^|Zga;|{VZi}MugEk)I_eS^E8`J4?(3*fHaaT2^`nXB*~-=BaRMDx3$EeM zK32_fAu(r@bowRit_;xEq6qZ3ROJ-&9qEXHli{1xBy3ovX&-LvVD)p!$f04qI}PS_ zdU#7NEaXs|7#u8BRb9s3B(*BBoN#d@g!XH?YzlZM)o$c>9LQ+XR@ucZ4lO?tiBgE% z93^G0x;e$4cF0@KsloG@@lPBL0g&bVAbfGRG2!e0Ii=f5cu!9WblrxSKlyVT$Pc;^h%?(L0R&0O1Nr0pz8#c zKa^j-WJJv_{@y!z7{8dNPHTCBcR>o0E6m7fJWN;d#s0a;acu%dwh;u;XKmWDMtS=S zM2ClnXHPCjPLry)&JCS;Jac%f*dTV>nqfUhpQj@zZjVB*Le=+qMUB(KX2-peT#;4# zcO(!=pg)Xm(bp%0zWz|v{_}fV!3I@krHy>kuoO0#JB=Xvvln##PL-@SQG4{xIz($r z?E8X@!pt%pk?Xpe-(%D6$OybLe8smpa%tvM^8Hp*@0AdUG0k*&KxuYMhc9$JmS*igp7=wk-EmkjL4=~O2C}j@%)8Q5cV?mR^W_jy~XN}t>`6YWBoo50gor0rK|kx z5Ja)GFUvWSCQFdAh8xoXx$-RhY8I8vu7omucBs`SAxUCBN7ny)s*99qgUVzSqiF%( z85=1EHULKAL{ac2Dg%*1@408Uj#rBAdM9t-S>Y?(* zp9<0v{RQG;ab6G>;BoDwz7g>(<7h|s;Ph&|fASOwEyPysIewRjt0gH)6JJVyeRR1E zqx$q1XezAXZt#5&89XTpK{ut#4-7EcI)e*PDla~c3p&eHu@S7U!?db z>fT2%a-Uj-&j+Q^8Ep6+|81Nr^?LBh+pD)?rOS2{Vc%C&ObM5!)cfS|_LDLCWlhv) z?VO?|Sdp zc>PXc>?o`-6jq%8^@|ex2>1(&za#Wfhim?_h-(Bd1_yry)Dtnh7DQ1G)6Ge8D3T) zQplomNJk)9s#b6EWJ-%bER0ebNI~Mmpr4$-FbtmI;R-rwetqYmJ}bS=pCMdge4Nwf zlo}DlFiU_0wikZ`n_~4KHpw_uSqxEa9ZiT`|DJ7X;c``GD7N&7FeyDaR(TUWfP5pB zaaY_D=(_dyGab0jAAUP_<`OXBRcx)S{5s+-qRCZYi-u05$}s910%15#j>?h z#45t^7h*Fjtws&IMzoSg>xgN|K_4ewNeP9joxY2qDhEU?PHziGcqwjv1PO zuJ)QMBuIK0)ZG5_&;oLB@UeOv2fsDa_0O-n@zU@NGy5hw&}2w~e)af*I$J=eJvV-y zt-9g|)>j-AC*)2uFGUSpzS3!);kdgQ`ROeV!mJ)vejIBE)_`L7Y_IwR2jla`hw zbujJ6BbpYO7@?_q2DXSU$FSojUxr((hnsi&L+}A8zwrMwNtlnO368{BRENcQ6%wt= zoxei)ek4+DaRq(SDeQtMsZMVlM^|hd_kRat|KN=@i5BtbDcxk7pXhvfPCwh8>7c;j zkAg{Q4~#vQF@fe5*{XbnSHJm&RZ(&)29odVPyQ(D-uDGx2J${OyY%56n^V3GzxR94 zP&X2)^;hkE_lD8&B~@#1ugiD(udMseYGVS7rfHrjTy<>AdYnq5X1qduo-tEwgljEF5bzkh90g0cUzGPxY5 zY7%Fi>UNI}Z>AvedE+pI?Guy6*JNz1K+F-;=WQizvZ4L5qt zH;%l)9H!-ln6Q(Ok((d=$lH}4UY`{|8gX2d>>5n%+eeRpgg5?pz(*+X3>kT0#Yn5= zh!4rpNra-{zt=b!pW$!Vx`Wtb3qjeB+?%`Zu$Vb}CmG}OnU!=P%M7{Hy9?y9 z4?)=;nHQhSEJ)>Y=exMPJ-2S()eLV$3uJZCZWaZ|Q7 z`J}_F&r}^aeGqXue!@~$AMYC1k3L_$b*EsPNTYkch4Z}Inugh%eD*I^FW|U2U5~Ku zAdWgZGJGEsofXSwBR~`yDg(S2fgbkGv|&X}mS(GQ(38mjgZ&M#j2I z>v^2f3|IP#iyK%Sq?rM<#(8k2yPdns;RDg{4|XANh`i88@-RRz7A&A=OOdAxrYJu4MGt;TW?prBMiOgk=~@- z5U{*pk}j`@JBah!tlZ)IWxSG0<{`);(QafKcRvhA&c6TEX0C&c3-Gl_e2A*~QuX_|d+IIhyv{7s=E=~vyCb1pi6FXVrTCQ~S@pFZoR zVWdjbK`#&4&k)8;g@WI{IzP6lZ4H(FsjZVCEN9ZK`h4c$>z1`Nh_4k&4wHc zg;GsLvIrwC*EpC7J7&k!afc`qM;s)S7;&$*t)tT*0-DBs^TOcSY)DEv-oG(;w zBd%r7miuxvyL#d!G4TRYWID%XcuN(pdEJbWH?gZX%Ab$>Wzupa*OW;60BJan0@yJegz0LE>b~w(&~$=18G6VSGRtA z7Z*9oS?WBXCR_4>+)$+h``_c^J6`btjN8kL$=ac7U~T=Lns0ntAH}>CA9v_x+Oo5_ zYE&4(+|6&+{rrj7JS&7SNMGQdA3ORF8)a#F8F6Cx_U-3ySVs-d7}oBy;i_*+duiJ; zcW+xk|?{rl#pU!&e75$8CEBW5o`fleS_n`IuvQ-2qZHII_F1T21U2x`3eJqu8TjxXB6wyxsVGs%hIMS#)`r}z{ zo3I8Xf-2l*`a$`r_Kd^l%$WXY$RILPD04g5&aMM5z!=PKW196{9krv}ldws~4FrlM z9qG64@QqOsX_=YKD@6ACLY)*luDvKHD_iM$l65mzcG7t;YmcOHnYVTOxUkO4@M~m-1nz6+D{n0jxt)m%ZeY6pQkcX6t zX~-A7$^&=5!9x%0(rFu?+~}}=(c`u!`uri^Y*6b0ZOH)g^)T;P%02f4;hBB&arqp& zwFVq6O3jzYX&53ycBD+lu(3x`Lf`}VBl|*^gM#t8qT6?zS$PX z+J9)TAMv$MB~Piuzbk*7GpOD+%y>;D?(gyKlBxTg)73ur5}8uGdtEhq8M;=G8a{e_ z9&KjFnx(T8rwZ#hlJr|%=HR5VscZCfnXG|Ex1%o((rr3}Iv|fAz)r@WyaU}5^EOAQG=5b-;Jt+HCrJeuLdUI@L zIW-A}F1gT=UU&}@(D(XirHtpcZ;l?Y!h}`i#K-{V1%CySeSDocg4?M<)aYnc`Co=Y z-%H-DBmJ13aChVL?^VS=)(E6RLnH7Aa*O}y?50-j$=R$u3EiCNhcjw~XBSr@NlAq= zynBarGSRzsjZf1P$QHfVO==W- zW&+ecqN8D*Sbgo0_$C_?@C-T9G{jgnil;1Wqea_&BgIez=+yI$PpBbVSL{FlI#1(e z;eozCL!~wtZEX>1UU%N)&#^LPI>%+ZN^nnm)B!5a8tK{9jD3ASOe=k5!U|qTCxKnb zuQ(lInP#E->ZH)Vs!(NptNxjlcx0PP33uS4IzG({oE@^Cj_KzG9#|8q8t0c zkVcddP36w^=aMRKcRJ3L*m#$<{PQ}k41TcpO=;)J>JKfd74tl2z0Hk8UU*okqo*?> z*&x$_Y5)O|eklKdiHy8m1(Z|aEGK--2C2(*cK@!tg*HLlaEzDO(CAFDV6PMfNdgc7 zi{~4Eo1f8ei2ehb({>@2DQePB3t=#BvCPg58x=9NQP)@)DLt`2-`<%Fe^g&%))sgp z=w?Q78=>D`!i`w-VTO#u#Q%qEpSn~_QBi1!>o4)~=f%N^eaxmRAuegIHg+YmipW*$ zgj2!mKbGkk)R(2`#c5`~xGeBWsAAJDj}6;&$|+n@{H~)07&2wF{B-m`<~T`v*zeU@ z-_59T?ZN%19VV|5*4;<7>=g(M8!LHqx#*SR3RxG9M%Jx`uv058`v-=~tRepoGdM>W;x)_4dd^xRAbaO1( zYOq6N25uNrj2+PNh<-nC0|T0x*4;dO`-%t~r0}SG^+)00dpfKvV^*w?x2E%M>Cs09 zL)KNQz!}L&%oR|IWo8O@h8gUMoKNJ)BA5x6~MhwP1c%pTAC+& zlQtneLo2%S_bx|6FQG-W))Vg%*))T3tL)8Ig67KXq~cCg@~o2j`7&DIF8zE!%k^XU zNGMEa-7Yb*exdfdHo8)CQa5X}t?FjS+M$VwU}c>Ub96rvq{C#L6G3-Y=)6qai8Nov zs9XcRKQfH&k|<2+`q|r;1y0o68LK$p4n3h`FHvi414fQJ&UeSRZ~M}C>Cy`=Gcy~B z952mYfo`L$PWB60|Bod+GAYV&xjJ<_vM#%9NW&>5fo&%DLpqj^l{fCmY=&@)iz1h5 zK}SL*N1vDa;pb+!dm0JfMGt>_(qWzBT{gNozHI=`Wz#2X9;g2SZH!&JfmU)EV z5X`&$xqftscK7{W#subAQbDf#_xN^ABpIBFjD5TSG?`UfdPB;!1>z!R5>}c9ZP+x@Y~VZAy@HSmZWvg$&-p2rG&9PP z)EAOcbv5P;v_&>JeO4#!!OQR1}9x+o$Lt@ z%Hqv_!{<#sO4!xOwANQ)E!;Uu9!AOQPCxZ-wugnc!a>dw7d5c+{OtJ9^#1W%h91KG z{bPZTuoncC@fWw_-PxzlU&=&-n^P8B>|xp;;by#q8PV?%5Ge@KTTK^bE7ow9-9`}+ zz8U1^_bCe$nx<1Vsik%cf6#T8l@YOFr;?E>yPvW`G*rM8#0h7<@!(-uRMPOxOkHib2TpfE134%y*ogns@ zKyESK4+n7{KlDv`Us(`LS=V;gAB!wC+raUb7NBo1U_mV-rBT1B3zK?!0=wF3{=lMW ztqX|t8D&xmuEwQ3xowMlkQ?ej!9-Z18xiG@}ukr;^w!xZx2o=7+?FN|?^MGG_<1^yQqx zNQbbbz+j+E^4BfFfRb6fVOCq7F?VO%7oxf#qUdmi#zu#8O%|&c1X$o8OG&XjwNy1Y zVqV{v8{6$Z?e0~uLQ1czq~QyF zKc!nr7GQ#`%gV6(3S$iOOk1#v)yinCK3GTI*q(M3DrvwxqD#(W-V*>kIVwMY7%6;& znj?n_iIP1}jcBr1sLwEjTE;C;t*0wM4l4$a63ikF!4ZSt1R6^oo5uZB%tN}#HGRaE zRk4o-b1!8}w0HyGe<8$Tf(?n<996<aSnB*>anQ4p)Q9O^H~V+(v}JNdY)5M)0+6pkapF5(2+mKOyD! z0yEK8nfW!((_2;50SN%|ISMHQo_BbiJ7b2>T%LbzmR$Ko4N{M8)FDNTJT`Z*qyj79 z;Mrvgp=YXEd-n=W&@e$4-vr0~?M|umV|`Ej_wTXJR&K!A@5SZ3!6o{^Y#Z9p(8u^x zRT#O*B%3x}*R9>z(_Hgga|gShcCw1a0RnX`MrYYgE9+X@4NYpPRvlD z8gt*$F-1`58!V-7ljcJpc-Vnq8>}I`OLW?US-yGU*%MP8GCQu9`She}D3D^3FJ#P$V1>e!J`DeUN(? zB>QuB|M}|aexJ)uti|mXp!ghvW2>>`yCOl&u8*GKwzS*2@y&OQGGwrSmrw1amh0Vt z9^G9>K6k;L34c65&)x-Vn>fPLdo5N+Hu`kZxa>bsfP!`h@?o>JnhsoDTJ9We7TEE1 z8%Dc&BX{Al@5~-V^3g^{GXerNTVq&%zSs(hl;ePczV=N3D_6vEcQ7FedTQVHW;WzV z<~1Sa@kNP3(y42OTWt}FX>GLubgZz1VsbM~sl!halWoh>d`_PcISE7pFDDM+>M_)( zA$vJk$t?cJDTX}A`U0=I-$aNMxluVYB`Y!~jL*0YK_DLc%s>D?LzND5`zEqYA0Hj= zzu0%P=M65kp&9xrVj=-_L-^-vLkC<1f zuM_5!0#ClTf6UN$KZ?-9lgRN_nDtWj(d#JsV-9xEw^iiHg*0*k;iHSK=}+flq#*&S zMshnf7PA+huJ$c|COga~WdYrzxLZ6iKcd)pAVueI^q zQI5sxfij@`<^SwZ*=TisbfB)HafSd=9GWKj174U~M4v*Y%ufMAXR11yOHY@>8=CT_ z2j|BZ=Q&@qR{rN)kgM0MVsex7=>Tm?YryNHE*%ERN(cff`M~||b+wExQu1fva5vji zsn_<3ZV2_@QVq$v;;Ufl$|uV_TrnoyRE{Jk?kELk{HVo*P6A;&klK$i3&Bq`N* zHOZz+SFZ{0ctb6V)CU zdOLWGYjb&wn-dOZ_XB;hJ@&rwC?q99zVGM^@nY3;^my+vlEn=&LqC8oNKVmn>q6Y8 zSTx&hzzy#hUDK;oR>9ump%<=Z$?vsvL^xiYCz!9kpm}+y_Z{G=wV#I(^1j-!1A<11 z0S_qL%O=98psmd~kwX910TJ2(wOhdo9UnWF-!zCLimc5t!c>O$Lu|=cokjX5y}Ec? zMZIC4&Ty?4bZ~}Ho`;!)C7ZV1rFQ(~0HFKZNeh^idCx2+P>d+*e)&130-zG;MrRj% z--S&gbM%aNmC!4n$p;91B1zj)zH(7z;@{gaN~$MHkYOD_R2h1N+@8r=>0+nhioxFEDZvJj-PK$ZAd-Z(j`>=**ZYaMM4trx(LKhQmw8ZNl zeD)!`)a3o#{r4G1M|YpD@x=ry@(^Af9lI&jpL^4WSlUH?1X}E2codXM7lb|m4($2# zD-#+hR)gl1p3CM<-0$p$z)7!zZ9ZBuy+B`a5GK$MUym@Cfi6 zR3_r&Tyc(|-|c8?K0Ms0z~fLs^o~el#7&tUAF~B0hr}sRs4(i}#LtDZU!O&Uw!=I(El{?X89+j}I7jen&5QSR_&N}O? zm1*FH-7NsKR`(nD9=F2kx&%L8pi$Mie?cb&iBqBv4Gj&Ne@=iE7d#Qi%5grqU-sLO zi<`-Jl0L1?$aGj>i5%en99#)T-NkYxOmIa+lw+{!>#*q?(W>{!We?g%k}Otw=jl-@ zjtgyYh(o3GQD7lciSQ4Cev_8wUF2Xj=<7VE|Bg%fqYwY``&XI>YKbGpX$a+svb)pb z5H9^P2`oz(%p)P?2Zm2h!c8%Ro$5?9iG23o9g7b8Qc9e2N$Tb``huh*YI3zdP}QwD zNr;1m?^`>z=ffMZ7No@?_1!|r731TQIT!ay)*HnEF%*wGKUJ0CG-NYkqgo3GII7<_ zg~3>iHwCnJEe0VZagXVfuWX>4O1Py{s@W?~pJaUNBIX!p{bBfSo|p3En>kmSq5dZZ zZ+2prs6IYBtqU1+3E2=)9S;`ggmfa;ga`jMNeKKhMibT9J?kc3p`1DV-`&M;`D2AIU@-)lOK`x zhJjn36Wjc_z&Z={uI^fC@zf|+^LJ$&Z*|C&>*~R5Wg|Bq>;i)9hNdIxuAM8AC9J#QIRd&dJyGv1WCrah_8#NdhDXKijoQhwZ;l7ea-qBuNn z?gf915Z}?O8CESnXt&%SaH@raPOMobs6?=~uv>|8)2dY4%`+}&v z-2Zczf8=8kY-768YYi8^vaqspu;yI$|BtF`43ew~wmr6O+qP}nwr%a$wr%Z>jUDZ1 z$F{L!fXxA%E~C9%p! z_=nxenen1{|0Z1;5*z`IDh2~2P%)Q8=>65MPQr&K8M2dM2*Y~ef9x1>Zm%wtF~L=- zR6)5*($F$}e;%m3A92TFb1{9FAkM!W(%OKYwHa9l7cPxx^~(q)TA_fTUxi`mrr-BF zM#~d|iZOEXdmE}jxb$f6`6M+I+K<3Io*c*(lU^ERNx*fnue|x$O?R2aW`a3ds_!#_ zu;IPulIWrcY3XRIr&{r9E4Z8YBax;s-yN=v9UbU6E-0*|6p zF7g)1IQjTGFOU*YVX{Hdj=M)FN+;;>7bD~m6fl@S9(3qk#jG~^hNf=4QWnBvH^9Qh z_1v-JRgjx&SD17lY_*TvP4&AWAKfLpbN-}X;+SZWR94ZE>--a^r?_C~B-F1J=2t>V6gmcv`k=rg zA$pddx@=Dg^4;HOl)*r2XsRCp6}V<%oaT&S){RK4YwoEs4x)Q6vFpEcdkI;uxh?P} zV5q_a{KIW}b5QB+!r3F;^U=r%;hDY{H7xUzoeLN^d)d+}xf_7se6@ z_LW{Q!ksg&I&S(^A2BVOcwywVt}Dw|UlMoy=RF8=q*vF>#1ZA-V=iK0-@IrdKNla7 z<4AL@*9lZyx{TyAQ$1@Ja9tf7Rh79>tbY)bki_l2od$#cy%i1Ym9=Xb<@~D{1}@Dx zRzvMi^+WyWle2;QC!OYmmwi1Za)g<2eKWEb-XV5xkwRFBgGa%0n?=erjJEASceA`v z$sh_?3TPWXJ5Y9^?tO;#^^4YX;=R2}R-9zLttM{8RU<5D-bAL#{k$m8x3B71OLD#8(EZ3SLv=jq+hS^k0MhU%I$ zplD8}e4@ri=wP~7cHCcM7yK2KtiQE+H$wSzmtGrw0y?UUN+K;U8`sG>i^Q6J11S$3 z(s04dfiQ0^e!U58+&E!Q9wPKFLH+~hLF_a;Mu%=aG|7E4zBPNAjNrC$^Xto8g+rlr z8yQ1PtYq!z$3&_^LfD1^?im&W`<_?$iFvHNjWq5=Whlr=W9q{n@By{!j|@Wabkp0& zEUwY)GiB;Sda8MLGinN1ugS16wR##Z$4ulzWUk@%0eNiEWNT#>7z=PthBrPZkVVXILyaUHxAg@u8^L&oio zt!Uo{JxiwPO%o;0KrOQGVmNrr0>O(ZiK+nYdU4`tq2dR6o11ay>Qdu19#Ff0U#+nkKcO-?oBV&f7Xm*4RM?4*3(i zD(->m1BSnNYqaVOd+J<7p@K_FqMDi|$RX>TdBXqbywUo%@-WKQRa-63b=ZQSh(gof z1`_XQZYhzOf{+DngR#l&&n+I!UUPJCH>%5YoI0Y?=*wlQe@(-u6#hx@@){);-Akrv zV!GsL7n~7f8SIrw@Yhzn?~ct&Pd~ zzyhezPPYW{5pBjp5^Yh@2Zi6As?m=ogy~JbxSuZf@R1L#h_Jk$+noA`kyGI33#pK* zXNX_Pk7f68wqiFSW^F{gzQjV|lFSX61S5-+p(v%N_E&G|#4C&*YL1>a@jwm43LfoT zlO?^_m+-N{JUfj2HtaGPQzFp&_YuJ!yYF48s5TDM%NOvcwHCt*=X#YO_#mwC7wCTL z{8zDejxN*Y^HoAy8DysL@?TQVIE}RpO1pD?>!uzx2SrF9TndtV90(KhIKY#8TMyk- zrg@BG;HwBoRs}~*^e*QJ&A6fDfny1G0I?#;6Q;YS0S(h?-3i6KrIK&eGcEDn;Hc8& zJPXzH&mTb=E(r`bQ0eOCN+hT&4;4~DqFLy>8`u#2j(`722?o3n7qO%mGmRYQ{t!2% z;ICjIBRSn>b8!4z7R6;ZsVv81q2Wsp^T4}50OM<&NxPG|JY_+h;PY`b5xC>STx_In zxua8XLmQt}9>B>jYm?v2kJ-IDyo$Sv5H32Zu<4hOxu<~()SxCVcWk1-Fm{a{(Ig#j zxI=kS1%ZGN8d1A2!!Yj_@ycc&t6245RJ=o5_Q0N}E@VmNMo&L#;x$?{BO@7gij~L@ zAr@UdwzWG56Ut*-q(fL+8TNJalzkOdiyg+duCCJkY-=Y+NC*y50qiHvfg zKdDU3%$^t+8$EsXTal#c0XOJkuN;2#L4C88yDZDjRu_ziShG|&qG@J+@iBNis>sk( zjY#&@8mf`c{tDnCX|OuDa5tW#C*$ZT)9b|p!)`Krb!X#zt@K79C2>TdU1jY_Jkw6m zy(GQyV^Ia%=_gFoEU%H>O2gvSU74b1DgwlZJ_OlF6yO&8yq|C5GcVQfdbcH*wb;UZ zR8TVFY<5fSc<==W`#Jn&Ly+BoShr~kr#YU@;*6q%@USOo_}B6_b2mAv>d+AC$gT8c z3%w~kVrMjzXyp&xAF&s+RI()~)=wAb=CYVYcJm@XUt8F!3?vYSckN=2ESOwrB~p+0 zERHipBgcG&X~IRS10K>ZY_=KS*cU+{BG*VNzjSB$YCO&+)3IMaI~j9W6MF>snP(2& z53$#$DvY!4M zxg#rXZg!B0%P5enk8je!=OJB}4rxOA11&Hkazts3@Gn^Kv$6n3R6L+bg_kr`~$vcu7xi9!O*yb4qfn*e!2jqxM{ZikmR*Sq3>YDlUF8A zvSf}OQ~@pFicGO@Qe16D%f_L0*D}A#H1y_qGjsFz&C@*l6~bU(!J+xBoM=(x@SIq2 zmig+ZzK*b$DGE%i{Tu^V2sboj!LMV*0x0TXj?fX-_0Qa4j0A0Ju@Cq$>|b+G{-2oL zn3rH2H1O}l>a+p}M3j%68GZqpz7I*3z0dkdtjdDg0>oznMj^YgCLNWRqr-Cn)?s;w zmfGy0&fNC>u65=&k4{)5vJ3$&WLy9df6Y!1nU(82aFS)5=%LfjIfx8Y(eRzkrcsh^ zX-9$R7!+_4O`J5ZLzps3$+|oDj#6|hg*5hzQy5YCPIIHE(uJZI7;1I~@C9a)hS#!> zBbXLKZ49z~BoYKw-;rgEIulbzdxKvVOZA>n)9Aro=ER@C4a7vat!b^O>m3IYgLaAU zVH#7;9j+R#9cs3;u)v|@FHM=}ak$;xVqwNP_LFbrk{zX=a|EewnpI(;*$o{z@!nK5 z1l(?J)?nS243Y4b{N*HjDPtYaJLm-=!9hJm4^s572hMnmzDm4}D23~TZ$C{o}OMOw@2|L1w^9&qg zLoekIAensLhsn2TELC;dec)GBA-Dx1+rd-%_+NYc#vVmU=SW{|17 zC+ScDU7Y~T%i%u|w%@gJQ|HJ8BO<%IB?31+>5_#8S>=x}g2ZP5PyP3mVj<2Y2{5_7 zu9ExxRJ>dvf901(HBiXbwa$!Vk{CNk0x>|Qwc>4;1(=-R$^t)R7KY z>fw);!7vVf2R?WZc(OnE(JkURb3+#YgUpFcNnshSv)O0Go zpKd!COOfnbi9}Ueu`j#(+_G}FF4^-EeZ_A@`?3`R45JG;<_3-hl4r_o8(Y&H=Z*W0 zNEgTDY3etGqT6g`C)<7ph+0m!V>l_yI>%omstmKcyr~i|9Jo(k3#WhXq!71U>v+_5 z-!zCZl)I)%)luM;g%haM+1`(qc?f=13sXWDoC>QGGQfC2MBVsTC~J0Fd!xa)=M|UKk()%HdoR3yH@2b$3!y022pCgqlJb5n1 z_>j)RFF-9vJ*TpB*`|Q{XAL^tGxrwNRLhbSU!XN)5{wqUl za`pR>)am4ca)2Gdfwk-zW{z?gwg;T};Vd0NoYojNN-pRu|6H}N4F2>=F@1dSAWT&2 z6rRS0=~!VSPCLjFSUgFl1lrSDT|{eTE99PHbsXP$CCYWmMDk3M0V z!d>L*LLGu-YQU6hmU$+&PI;m?U4FaD6a{`59VTB?7GzZ(K>>(LO&S~VUKgb<{8@38 zbsKoy-r3Wl`~+CTEqdFd-<}lyj3k&ote<0hMALM>*bLN5-B^6%u2|Qaa}DG2$d;!SYvq38zWh z!zMGQ`pgu0n>ZmhmWsZIrMuUbx`AXtj?U>D*t8uu!BbyN+86#&(=FbMM+(H#$-`o5 zlB2fda<9tdI+&AMzERjK-vi2n2i1q@hX9m(Hq~#;GcEL-X!2$olSu6Xn~)r+xAM?+ zX%GuhGRlXaHC^Hq1Ez=E>Qi#re&o>PqGwr4I)rw`svzs7=2uh}l2tugkGc=kVwC8* zD&2Uy`cy0?pu)Z9Uxc1%`&y5YOTP6NtLsU|({zJWDR}Wh3+yNp-g%@jd1ZrWgnRiN zHd#&fo}kgR#Y_Hg1Af9|XKweQ{3YsYzh->v$0JrIjduxlDJi~}oKlTA^HGxO;t!Wm zQ;uvcjKuDqDlb>s9FUTb9kPX3Mot*Rr$+9>jU+&i3l+t@Rw!Gc8PIATh<;oY@wE}` zli15v#T~b7fj_!4`cn24brcOaGuXU%T0v0_K0`pPo?~a8mY?AD$=^5V`iwaN{^;Xs zXzWyFtmrn1dobv!M6`j~@Qf&Jf3Z3Yy>j9IoKhHy8O={(QRd!A0K=V}TBD$x|H;tM zj+LG+yCYJcVy!W9aeg+dEeTW|Ty2Y2kI6SkGYm)Tr0 z2{|+jH{rg~k|a%OP_P@m;#ki5hnjlzH$f_LKZ@-RYLMq4H=_MigoPflq9V-$W-4_5al)OZ=d8RfH&?yw=1Lu9LrZeo1kLYA+L0tWHCLp5GaO+HYKmQyP#;-+ zmg^H-`i9`L5jT{_q^hY%SR}PNNys;}+TWrcz`Cd0HnIH6q7GWtKMX4}a?>Eed66Ld z(5r_v#(BvV9c8>g%x78B8kYMr?Fvaka-UoNIg>87+CLjCKaZSevolVCGS${f1@#{#r|tEQN}WN{Bcq z$->0nt8uHP{6-l-TK-LnGXmQTUv)xH3MPF(|FA@XDT_Ct_*TqEI$M(CD`@^3109x?(8&WC2p+NXq{;N;l6>cUO3Nq@J1Y!K} zI>Agt7{77E5bKIM(kx1@p3AVf02A&+bd*uwf)aTZJX9Xhk7L4kuKdS7opA(R2};|o zI-r!T{tc2ON>aYh^wdP>bIB0eL^8O0CCsa*^16L+^S(#60Kf?xD) zIxnlQDD*xL&!xU+!E}O{$yx$E>6WSj#6|?01m0Hq0eS z1&c!rr5;=-e7WIk{ZFWaHwB@Bm!*EZy~u{hXHrAdk?WPCMQV2#Fc5Y3h@l!ydfMkU z;?oL8j|=gGUP=86_}~KhsyZGQj=a|V^v$seUeZgOP{6PLD-KJY8=EaRJp%$oS^=Y% zPHhDrkr;;a_lm&jmwO~AzQoPNFs>nZo`i3@QZ{XYV?$JE$U+k~>)pj(MMEx5rnTzF z?z<5&Q)9Tfu)dEE!)@5Vpk$WXo}vZ08vpA-zu0oSx4n%m9SQg_20r9a8l-gA{>ikg zC^U`5X`+w2uE>BBMWUs3RQCIO%FTQb3pWmjb%buu8JKaEOe9)JE5mv5G4UvrBucSP z@xG4!OJ`>TCCL%98?_AhVPhYBXPlAUe+rx?%!~d@_Xab6s&hFvTFA%C($?}??cv(Y z*s1|sH0c!xes{DE(Pa?X9Af|y!B)p&k!hZ~(L5YgA8%KkU!UF<=zFfQT_mtYaw{+| z*It?X+kQ_6U3NQ?8=S*-3?D$3qe{+U5g08QZ_Y?ElAX9!S%g2dUz@4GLoDn-vAXzCQt}zGM-iY$T=;T;fq$- z_Tqi@^CDX{SX|CY39f_z7fm2Ig^0|AC%esGjP!IV4&m)G7p=53`_y=ev|32+u#E^g z|6^Nfnfn=2?Sq>?$B70*^5%uLRuq+`NZQbaQaEEKm3c14TK3t=H>feF(qlW{I6?fA>m`&> zxEiBKz%=%wHZbw~b*I1zpOHkrB)Z6^lsCRwvZf!@_~b(TS1-xn21X&lMCAt5Mm4%H zO}pIG%w)yl?ie;~EnXKzU6w#f=KbUFp6R9H&1n+UT=$B@cr@40%$8fT@%*rK1+6(QVaGf6F_S+u*xNUDC(m?~ z>$IG9_w{!t%AI8O#WizGmP;J|t3QAR?V25H^WozFy-~U%AxAF*$Jd)#J!heclb*%rer^y$K!Qy+C1AjNu-fdy{(jQ zNCZHRUmkvGo-Lu9Ep*thG~L@TBpbb_!aHBS!i~edbvs;f3JZgRW44+RS66Ro!;d~R zzRa?kD;;}ms#^d`GgiD#KYZnTIi)<8m%j(JzT~9XNU{c|VvO@cG1`e+fq~ad-R^gK z9;B6bQljTw1$eTS?aLBz{V(e!L_Z5?B=ke?j|7* z#Ely3U}mPg)sJ+5AS32vBlZGxRi9@uvt`(V@jz60+805}_qq#Oc_^s$^Amw%BNh!O z%#6#Ur>%XY6}R-KScH!$?`c%M5oJv#H3QQP|%5XVu0IYppD>T*UwIbX0&hz|Htq6?$WXm0{!>r+$f8wpyj6b|sjBw;G)Myxl*?U*q{n8u9a{7yfmNwDkQbNh(p^6G?2cyUf&vITp1BP_9Mo3$7ICWE*={+n0XhV;?RJe{ zbecg=xW|8Tf0(zR*6ThFHx;MiB#{8spgw^5Oe(13of(=Ux z1p1M2R~*Sbuk*l^r3c<_((VSNfqexS>J0CJPmv#G-U7;? z_c(S_tj1o%V?Gz4-Enim?PH4+f#?IBY4`^E^|oBDb4v|48cv-$?3FE*YKw@XkdC{FyT z5E(LNGD@R%X9vb94O&F{vTNs6+H@^fx;$^8%TR7Fnaoh>UG!K<^qE#^it;8^8c5?s z49Up1j4yQ)F>GdFKCi-tHFsbMeejHU;ZdF@+@f5YCy70P7a{Nj><0YfL2SQ5!XR7S zhnSHoWJIKmHj)+J3w}{ht-znNGrGV~HpHBDl#-HC504WX1YQib+&l;qz&(5?%-7nB z7~S}U%dOIapn&To78a4;an}&?@kTITrGkZy<&>fKrB(lmfQYZ3(9$BN-Fqy-Znv(t zkpF6ZjpSVCjRv&K-PT`?B^tFMeIsWy7%-Sj{5mC?oRgMBCO}ry{y*!WFYU!CJ4nE( z&tU!P!{~hAS`_SC-8QFe8FXO$EG3Q-l62*+`!AgkPV!KSI zuI?i+MiVmlA4PgAwf{MBbOOV$l3}|h*GH$h`U{Rt%8J_AQ%bdI6pK|kHn!W!t@4=3 zVe8c*0$i@^IBj~Q_otwkppSdpY_9;noe+uG!hylCaB7}Tv?192%Z=-;1`(0Ldv5igu#qvE zz@KS--TN60NIBLYMtA1>KD7^zIG~6ppPlY{;lJl-(FtIY`Y9c3$7T}e+ODJl14~-p zFldw?gaDvXQ(vyWs%V-3j{}v-O2Vgq-{?RcPp)51u&{+=Utm+pnx4oI;c7s|#~oZ} zJo&9I!}!plYR9j}tO(#N>NT4d>|F=X1EcM^FkmQns*B8hk^%G?MNkt@5q z#Tcq3`B#1-XnnVQ^tvD1oKCM=k7#EkVaV7hLUVs~Lune^)X8}HRC%@c&4RVdO>4~w`(=&yHq5h4ZiHn>6cSIQmDOW%MY3QB7T8}`e?Pvz z3hZ^gMbHF3PO-yhiMAJB-0^MVMmH&&u5q?|nvz)PNLSF8snYmRq+ZIF(;vy+dC8EY z!dR-YGMthny*2#+K)O8RXF_3^!nW?qgpG8A0LuLHN=+Q%*<=T*(Y%}3QY#k?4_Rubr7$T~!V)u|nL0P&*+W?B# zd;JvpCcWI~#|8ko31)L;GF`ar-Fxz-~)_H9R0(00%7=UW+W7>Hi61t4|myZ`oMW6LVq@55uCWIs^pSN>O3P6Nr znd{MU!sl+<{6|t$9CWjn4?G2>u!S6J=z-eElxEM4?K1@29irP>>iClEIhh=Z*{AaN z{T8ub*naa1)@wCFuKZVcfb%80@L{Rt?mZ&I+Sl0!L*-b^-rLdRAoFQ0Y!qRzY#lk~ zS&%8+GA0z8p(|ZG27X5oGJBU?505%0cYM4I36%KX9XVusl#%eyRaO{^s1VH1R3#7J zG327_g^1O)saJ{&Gap+3F~DMSk%u{N`xTFnWTw0{{^z+};rZe$jF#rd#~3 z$bI4gY%voQIi33*0})Fotg|M_fOfpauNn*Cm` zhbk)Bmv&wy`RTYtbUO{xFGlJD%jY#c|G*cp*Zz07y>4N=aRn9wWAHUIp(=GK8n{`3 zVJ1+pg$xi%D9|t#o#Nn}m$oA&obkW&yuXV+EY@mtGW%FPxq06TTg+-Xra@?Dj)QJr zJNcV^{LKOMtc6Z5Y{!4P@qp3ke1{9x$IT4KU4V}ditew=%ERyQoNxJm5DNL*#C8RL zQ6LsV%nV#IQ2)3+I7u0PPUoQ1N@Q4ooI!e(1pVViRGlCtjmWe4~lH;uXDfi%4 z)0ab!lO0)Znpb77lhIg>v1`l@V4Za{_2@b-* z6=yb|3-f;d#0%hmeIXy1$tN;hO^P&LOD6_EB6T70c?OPuHsz(ZN`+0^_ICFyt)X<6 zvwoP3;<32Cpx5cVv*IrP3l<5xh5{TOAA1%acfsTAf*xm6OO0fjpqiSZuaW*_|M?3HOkhb{^FIZ(r9C{-2)qd392lkzdy1Jr?bd;lfDGiH zSIhK{8*%Hh3{l6h?{lk^73G%sN2MxFRahsJfj(?`gDQ`)F&h~>U+#4JcE)V%CgRFbXl|?5RQcXl7E;@`u3naqO0bxlF zrPtOIdjz3oA#b<*#q}pDdWx|i;qBGozkqeQ&Ie{b?nIhR_m?j&@T!5kBL6}MFkZRt z)b6$9l^?#DwM~TwfKyRzL70LokbJ)%8$Jv>JLgzn z*&TX!UMp`LZd2oSJ!AuRFBGew12bNz*a<@pb-_{qQdoVc8MlAT3i`q9xo!Ydae-Ij zz!a1V@(e8g#AdU?Q3b9(unk4ywYwANz;2em3zda}VYdf`WAR))VE^Sl#OU?DYU5OV zsopPyzR7;ae_}jc8dL>5pS4&q2X5YX-1>5SSRK75o(KigF$N(Bz3uVh3-w{dVhSZB z5VUSsg8_hUchn;DDzT@1hi2zO_ zQq$zOU%M4SP}@)I+y53rt>f}n z$1>taD6f11%Fj^ERUaJP1&Hja#}VAaJNASq5N86P)${82_%hLxAweE%vR9PSiUh7H znsUYYrxOV4EIZ0Ckhh)^&b^H5_pW^k^51NL+=MIOIo=VaOa|I)&$x5nJmzUnUQ>e{ zJ4O<4$1>1{4^#Eyi)gcvKZV03cV_N28w4tnH85JFLq?R#SL23cKgC!k)(9X5cFm&; zR9>))5wE!cac6*oxgEiP=k6sZ525cTP--|O6&336607K2gcyT71?Zj|LEhMo2jC6q z7z5f7VANz-Bb?EvLm1c&uQgS;b|{QBa;P-ach6JC^_+So{(anz#5v@y$AGvzn$5D2 z2-9OedVBV#&x!{%YHqr_s=;cEiA6Q08_CX>zAKypvn)N&Uk=VFLVVYb=Wqyz@Up)L z$fCy%P=78#l+)|Y1XVFu@_uEft%r>4HwS+#_eF4pePV1Vkry%d#Lwj`KyVG!)R5b6 z?7wwy50+ooI5rlv7fC%|+|Iyjq2}6X*Iq=Z^Pv=YFwWvy;J&ez^QZ0vlMvl*>RZn7 zRPhEL4NzFAMx`kG)mL#opxboar;t!ikv0&sF_z zt7`sv>qR7bi0EAp`m?9T_4T@1nDbY3$V}v#F&fz00CrWR&$mD#U`&wOtrDeNPulS) zZPnD4!P1MMjUZ&B0}%270Vf`T-xL{7$Y)LJ!<}sW^a7ERxxbmxZujO1KnzAXrokTk*yB=I2lsz zYs9HMP5gS{+yruh&fE5j6r?629r4v+LTV?#y}H+kwo6zBUQItB9blKaT&uwvY}eFg zB+?Qg8n0dQ2E|`xBpmZ^u9D_gEtkfEO@ec)LLt>5j1bEwZPY!KPyji98}#G`6kwuH zE@5LWU_&q3&aWXvbXU);+`wZV1M3x$I!McEb*yJrKC-6MAZzj8&CMB2nG+>h{T|jh*Sl7E@l*;KTbs7j1 z{BSHP_D;Y2kW5w@I&;qOFwDWji@P8~Q4{^Pls%xArqhlq z@y!e@SmMTZ2Eq_~4OycF1X0RzpZG9nK4-D*@f~PrhWSc?a&z+OW?=)Wc8=*Y7pi6* z*Um*@VRXujBk$gJ31iQOR4mZR-a0NB(`#R;zF(rS$-&_-QrqexsQ*c|q@X@iLFc`K zQn5}wa=qEem@vzHhT0Njw+rhVwdg~iD6t$fBB!r@GBp!~^cU8F#Q>bWf~H=;eKB88 z2qsa$7eJVmff${ic@Nuk(t3pu=87D*n=pn(-$X0=$yGf=l*?0%oKobw=#UJ6`o|%K z(vpiLM03)QUz-L{qQ+S$^{$guoAM`<^OC#P2Qv_+gzbaBR-OxDw}oZj*Vdt zXu9V@EV57_OERcEVl9j`S(5|u#R*d+- z0^UEg8)-}q>yc!KZ#c=F_G%onb9vu~m|y=W#FV7RHmSjfK9W?w+dw8|CxnZ$PGr#j zfv!4D5^yL4b+rir;U#II3W-LTyIG_ZvaKzPVG34&wcm&UwlGtbU-^sq+p-#L%!G|t z$`BD>kjzRB<`)~rouV0Zum~8{o?g2p=MO?~&6yu$PM8bG&unD4&YzVk({d9Ft^vh3 z`^e!*_Pti7kMgz_O6V&_Y+#>nU*dK4lNUlEwr)*#Cwj`c)xA%t)p4sa+N_Wkm_Q1n!kUMt6#MgyYku-zT!& z&_&a7p*J!Ebz)#D_(xC|)aIc4jOP?T7{WTxcxgql9Q2q8&`{V)7%sf4yS8!;xTPuA zuI){8kUOatN}rKgF=d0(9EOYk%#`n$#Ly=4LLwHLL>qXwIo!HAlT0Pt=rr+7kzCIh zgwvBuKa3iFCR5Hqu`pZj8f1OW8`ykS=O;h&oOb7=R3gd0$7c?GB7d84q69e5@VjiY z*2vr~@gjHG4g%Xj>n#&UxU<~z!PaSWAYdi>!2m-wgDArlo*G1p#%#6LFDd%MO1Pbt zIv`_riJYd>d=Hop8!=^JMiT}I^K^K6u+s3qWebvk{R}j`3g7w^SMPHxOoK|0DsATG zTTep%v_O~utkz^+3ERIU^Ho*n?zqx(rMX0Yi;!j7iL2x~ zjJx1dR+oNcRjJd4FH|ZWxNBetK~4qfRHN6W9d&kej}|h(O_;-KXlO{2quS50$V0RI zV&8@f4h8pwDnV*~O*V*53oo-cxQ>?6F1YUY;L9_5%9Aa3em0Owl5ZmG z`7uKaakKkL;g5N^PKJT7mi#*9?SlVnNUPE{f(zBj?|Rt-R5AT}tnX7UV5b6&-meoT z`@*VB3Y|^DP;dccvWPCPDsVpOoi}OQzq71@tUGT~d|Tw<%P+A|#d|GvgH!yS+u0ds zauTUTZH#UP70D{Lr8?DvOWT5pK(Lh)^>9H^CvePGs<@aAaCvFV!Z>+5@1m7dm2z6- zjz&Sh6fe8=$}W%Eel&XE0$e0eRxr>8knD=+DE{o&@g-KsqUyAsiBen#Jj8ZWQ$5V? zmzZ4TB~+|(L?F@tinS_bEf~(`8mt8Z5~QSJ;tvvxP>x|mi=5%K6|8tEN?$Y=Hh&Gd z=PMtg2NMe-T%ITaG9n~GU_InpGWViL78bc>um_Yde>|m}zdvhfZ)& zUUEZ$PQ|J=<HtU)Izu+Em#Wh9oKroMviAgtx6;VP|+CJFRE(&z_Xg?c_gKeK%OT zT1Ep(puUoq*k}0YxyOk!K_^dV*S0feno;9ZLSP+&tdY|K`ojNV0UBGe(bHrlK}Jo3 z6-5K~FO#ZntvKtdhd_5MBXld6X+mUyPbOZOurn}Y&{|8-r5(>qcDy3jlwU4h=DCn& zV4ZOAt592@1@vt`CwV5^LWjBYAs@6RX##^EJa#6l5bz*F0JYeBv<>?Yi*<||AZj8> z%3QO?r5Op0CEhG3!Nk<2uk_1B%RYt_mU?BHs_S{aD%UI9R@8&|r#1%%bdtPIQ38TV zOj0xefhNrjjNHCj50p2bP6w4-x<5noIH3w!b&^KP9FjY{Og)(&P9#?bnwrJmJ9bC3 zfc_{LZdD`rl0`;m3SA|2AN5us+WunE1~dY`AkOzu_uytPUAyT91Xx{I=o1PwrR(zQ zW+4VYlEKD!jLPD&e}nUVenZ5h*Nrq3=nqpc>WM}fCdv%#cFze0CVxr|d+(Lqy(t8B zoP`t%86g4xZSL({A2dn$Ab4PzXgE6M3OG6mu!ag9%%J6d;mZL`o`b&vZ`e1=B*!z| zdUsAaEWoNMI^$^|nQFBxJ(D+~mf|--E2Te3@~%&VP)`6#`Y=h=P$rO~Q!83%A?JsJ5ZIpZ^Sh zgr};cQ$tY?roAT~5dAZZjFl9O23B3pvUcapb z?;aM<%e?SJp+G>jdMEvsR7INE%w{)>_Z<1*ahvd7jE(lMHw>eEP| ztNlTOnswfw)#~Axh9ZNdr)&3$BL@mVIWN1H{n#BVj6lv0EOh=D!2n7U)QQpSEux~L z-Av~^a{9gt&wT?a=I_*ZVD_Vsl&YNv7Ov9dF=qt;n70;)BYFqoHvR)cZ2Sj?csY?S zrv+(33j!Ji)Nq6%uv!2V?%f_78cl3n81#ON{0|B8?vM5VkRUZA{+PduLQ<1*SMcdH z<;TvK8bd<&_a-dv_%x8z=+mJ(tHqLA`ygbi9Z(0WwP`?RJ{dI9c|F9yRqO-a1HM6PVhi*cL+{!4{pKT-QC^Y-Q6v? zyPo;}d;e2)s*tM9uG!Sg`%d?)e!3U#jDR+eogq9>tee3Sh?A}c3lZ`$s{BDI@j~x|0+%W>iQO(LR0BPyjA8AB zB1yMe`CBVE1!@zP;}h5^7b>FD>CcZ(geYU zqWT7zub-h?l{!@e0Cuo*-W4%eGRxoW`bL{toTV80AMaDFVCu4ht87UvG7EXqT|>{6 zI6(Fr^k0d}@t6;+rG2$>Gp6dqN|f1uIT4^4>?v>X-8M}r>IBk z85ZDi7z0egq92TWX17`sXGwu9z`(j|My>nzh5=Mi<yar$9#|djo27PqK-zRPzr*6e_K))EbPbCXb8KiBHA?CeRPA)y#q^q&rQd%gQEjk? z_w;M$J2vYH7N`K5ZJWXI%of(f^G>P#`GGuG{M6tscnBp*93_lJYJ6JwQUCZxZ=2C3 zqC1Av(r#s74kZlullaxzlIHfok|qeGd-%xMwFq7l9OBw9%7-i5&t{+@1wh7t@vkf2 zWF@}yH!(g+=o(ji=AB8o(%^yJ=9d%Bn$K>Lw{xPstHG=nql3~CY}Xyp!f7jPY}*~V znVLT1C)-8j>m<%0V#2bhnY=7V)2(#($4*3e%nt-_PfNZ@8&2GXiopmx7h${WLm|Di zrZ)(p$rmv3$Tx1_tV?+CeR^rL9a4k3uMFa5YK;ZQT`$*MFW)b-U8-!DC*vpeA1@wj zevP~zZGC!KZGCV6+Ylevvfw^o(qM1{o{hw;ctG*`b7#9pESdWj?(H_KuiE(>9@wFO zZ#<_mU2HqsSTP%kLL{eq=E`U+l^GCky2RMj;!-+oz$@VhG+rn|vC36SK?5{(vw-YtN z1GmiX^XRoiXn;x0QWJni()`w4(XQF0Sv^90&3>u z$(-J3AJl<$`884WKIUE#nc!ponguFGCVHa0wjS z`7%o`kCA4N|91<1dVujnSXTK9lv7B2NqY;P#Cm~}C%!XF&ef_Uy|mLMuLgF1$- zf;Gi%ni5q%wHOA6lRhsJ-QN;y^~OAXq!>hz^DzgNB)yMQ7!(;@A+f*bqqI3oQgv zQOeofui!|%x%F$iLJ2CWi>jiA9mbzW`ksWOPojqlEx$NQWDqEdH00653;Hio#lVOX zbdBLbnAwH}@toK`f%MMk@p9XxQhfZ`&<#Lh)SKHZBOOFccK@yGirU@N+rB$CEdMxD zspqy~3O4skrf}D_g;yJ5kFpmB;U^Zz0X5}ob~89+<)mngMWw{LSh zUa$$TAvBm?QUZB0EC^WjZd}#gI5)Ri5TKWb7KkuR{z!;d!GY^Nts2+kxufMBY4s9} zCQGPt?PqW#LiNbnS$|;u9~7JAqLwO!4o2l^HcvcD$FwL~<2f-UCsvGPz$KjnUZB}g ztq6M4PI@Ju-xtKyT!p;J;Gxr;;$jp4%)+5C;JtCbZzq7q5)6WXhPTcA1)WIei3`va z=VhE@iTwULZGt@^u^Fq!{0+i@Qr@@e83qCYRjh!H*TioC99@61aH~Z{%@pczqD{8* za`j%dT=$(Wl29jNc6LL(?Sa#5>B3%*3s4ikKqE5pR^FH8& zhAkQO1uX&FtHFFvul{IgcqAlG_}#?oa$0U|u_qb}FC5PQ0W>v8pFA4@O?QTm|blt7mn4D&H^=^|(lgK`IkM z+)CSiTii+=m|^W0)16HKF9JHsg-25j8bAI}WgVM)pfZl2at7c?@g;yE$3-ycd&&St zh#X(HVly{J=mJJ5|LIduOf%LiJEXsr8b{1$`*1i)?>#L6{f3B0NvZS~9pQWklhAl$ z(i9nzlwYrOz!pIpA&V`+NMj1{vDo#5S@!>as;)!x{vd-QB3?gd$X26|64>q3aoYu@!G&vXHm(D(YM z62&WMq(Xm5M_D@4C*3^=9*sxq)XWnI(N z!n_`*iQKqdv-X0NYf_TBR=i-+)VVW!APfNX==;6(vHVXkMP`)A`CNnMmN{lQ3@G-7 zh|a2EhKPbI@-f~d8guSmH#e?GM*Pt7o1O)E@Oh)TKYkDbIV`ShnxlmIu@{}r1NOtE z9*l_Zm;1HdMw{p7$JtHK4_Us2oY+_bv&A#;GvsB2Uu#lZ{9}5mUSeWdBadQYmYyF3 zl*esRqV{!%vO2m`bm#N5kFn&BITBHq`d8bOKuw(!fFHU?6Fvj|p|Ko3*0%AsTqSPN zM~Y=TaQm7@o3;aOI;o zz1kr?C0;e1*>Nh?+iLiOwJ5)sBo%*z=C(bsq;$p3(=-$m>E#lp^&g?|JTeT)!-=&c znBUM73!oPmlX_XqNMwg-SZq6A|eN%#Z)Orfcc#U+kGH!jeN5RcP zf1zvJJzri895!8z^g`R-?CZ`~ZGpLX*(ALE^jIlBhT^g_ESh%!sYCdsqWXM^?e8$h zUT(4>(e-G-857-fODpuX(Y=QTIJ+u<7lNRo=k*bf;Mt2@gKw^}Lq$WLx}p^Ug6XHh z9+vmO8x(SO`5Ezl4^)?%joO`6RE#2Jsu0yKTL8jAul3;6M+VR;ULI_ZLtLuuQoLV> zV%nyfkIBH;5^SgnsOUGMfG~nJ6v`=523xurn9C%(QU1uL3^x~Uucg5P4JMKw0%ybi z4N{U~Oh45Q%1S|$)J+>2@UyZaf`eOOaU_ckyV$Vq9Y*cy-}>l`F6ep#nT$6RNJRY> z;wcT$z-q|iQ>Z1FNWGtS&M=*$8y!R5X}|qquw-4xy3}}{ZE@QZ+{^UM7XMR5kf6E# zoCbLC>OP*6>8djx>mmGjFuFf61*?8LUw?K-Abbme^!xf1y2fmV3}`=)n$nT{Fo6@q zvskU?3=LgQX#ze)*!VzUi__pbOTcq{uZ!_#mOzj=;>j4Icm;rxUhu<%$=6#i5CND4 ziF8-Jqu}P}HWJ{@FoV_T-MjzpLxtztJH|+mkZ?Y9#w{pv9l|Kegqx6f(FasX!Dg)8 z?_0kDEU*9LW}E11r9z%HaQc)gnx_=b6E?mu5YO56Jc!ApfMCGJ}*+M+q*l1iolq@ z@80Yl+LWTfDyxv&w$k{{6`^x^zOa2WL6Vk!*x4WHGu!k44eH(@fOMt4GTS^}EE(`_ z*)a?(MAE*f!s~q90=H62Fi)284#87~!rl%SzXh5EAV-v`S2H;gj3fl<-8(|)@I-4tsox92Mz#b zL^S>uC!yR#`IjY#yQKHZz}Y^^)Mg;AFFOB+0+IcjLiyU&7Y0JXuLQih;p^>%N7Dv$ z)-A^n*e3BA82w$W-xNf1nfseRepy>H*x%a60E4^Q*R|u5undGgd875J!0dPJ_WSpO z|MjCpNuWlE)+;+m0m1*WGm6=wpK&_di#OQ>0TDMnYNs!=f7A0;2*&oDopn0r{a|?F zcaUp2*zUFXxDXw(<=&v6(OdJs>5sQClqmN8=X3GB#54h+-^!{Dc*`|=-+}1v+0eIK zfBYMP=mTc85hoJBzYKte1)Vgm+_$M&Q$th)5xLs2#&Spw)WNlR$-nh4@q0&(?^ zYTDPx^_DKw_V%gYa4VwJ%X1pz8;r;Fm|d^pfXtCAcjg87h0V}$H&MPfh0&P}Xb5>y zCMqXukJdnrMFa#tG2lSee;&un_qN&|NiVvHfHVDfv*WUNvt#_IbNV|z|A_*i&42^Y zQTH@STtlAdQpG34V3a4)`4o}AYx+V}n$53k=%@zk4yA&Wg9EYV>>>IEhOQ}2;3`Sf zJP?F&2(59D+MO?a#$VbrUw8s^JJiX)CcuV^K00fOjmewWu^I05(fiCnP{Q;tewMWf zZa$_Eq*c42Y1&dNm(oYIS4u5&7*mNh8?IdsseYh&XD9Xv+oR=fT+Bh3lE$w?e$5)SVgvlT-^zkW+SCe7}~lvtEqY3cdBlqCKv+rJxB$lMJ8MZh4JIO#LXKF}n;5;oR1> zwS$l}`2Ej-$dW!;oEC~m{FJSe5Rnh}{ACO*k1y8)TV-M>cbyC&1i~dpU(I$6r{2p~ z1berIA9r`Jl@#19hydRe@C+W^NmP#4KOfI|Gud8vzyl#k7GKCpbWU+LN&$X?jAr^Jjxl(m-k&xN%;W(e^HaNE4Osj^I~E8aZ~tO* zK4_$GS=Yx~eDOR*%+num?03NZpT0O6mB{;3y+OD3x6<#Hi*L9P&>skWLHzI{;pLo= z73$Yy;^D4HOFB&`fan3(TXl)2abS%+o-TC-0P>c>-4WIf7iJ`ZR#+gsPTn2B4uOHN z1>SJ>4;ltT(9-}(tZdUvgj(roWg1ZAfNq9UrU|Zxvy{LoL2q))uG7ViU}68v?g6Y% zFi^G4)(~LwK(6ps7LwB1L-iuJk>BMH}ndwWYhjA@$T z<#OLt>cq$3GJA)2Z0;;q&=LdTMPz0!h)Skww zchq$(KI~A+Qjx;?V=~q*FKSw;BMB$z$xosm^P^T~{TOLH-cPYHhkiI#3T329bRL}2 z&YYN}ay^nq`7i=siJxz*t}W12DPSUHY5WzkpNI=BhS+6v93OS5m>-G_*3=B?svhi0 z|Eq5e6?93vmFv6w0vFX+t`J7|u(~B~^##gy=?M~Hk7EW6%nck=x6_KIqYS~Pm?4do z^1O*mkIe=mQ1kua3Se1@xmfP0Lqi7@&8-)UBkZV8otl&gFAbqAwmH97ISE;E zI(9mhgsajn>$6A?y&F3Afo1b%932Xk(h1*OTZ`s0S}Rnd6&Eleug9kh)?;A<-lzgEMDZrR)x5*sOdBAKw&qvF9uR2)~ zApnUM+i0-e&t(%QA*Ra#!z#0+vX7CrO7!4(F2`%0h5(Waj3fAP-z3lUw5m!IUUrT% zImowty_w?~K6i}q6A!pZ{{g|#P=f!88%J_5z9y)Q24}ug(Lg(aifCzexK>VGGhr9X z)S?*Mz)}15gC;gM=J73+Q_$p-7P3>}p*h1z7@t>8=PJ?(dMVk5grsS^tjC z6yM+Y`VCRz6BAiG*p3>)63Tez-F+#=oWkpiO5Ds#9q7=6t$)&$VINL*u-{7jE1oQ- zi2?WM4LJ$1qSCXkK!-DskZhvD-nO+`gZi1{M^wrS9z8pmaiT$j9HO|P;d^Z0Vi~5sF`scipRy2C%l~B>zGIDq1eW;Wi zFUW9MkO-tzA2UfmUi(jyKqK5;NWs6i{VGJoZEdaOD>xd=*`h6qasfGa`9_^omf zgK3UZ)T-XVv%&y7I8~;0HHOAH)`BbvlE-|uYf_ZqUeC6r~gy3U&ri0dMmq?!n9 zjd&c4yjZ<~3}x)5_o_v2P)wUx2u2TQ--sdbjB|a#$=X!0_zO+;(g6Bsa)oiaD@^J4 zQT4MCtK2tZDPp)y=Ud@&$FPqv9qJq*q16R_|6wxFn*H7(Gy*s}B+!d9QaMcdnV)M7 zM)^Otp~s6i-?lobL$2(s%MyxB`1Ig^f4hSR^ZOZr4Bg>Tg^HZ1CqiOLBt5RwhROaJ z^8~WnOp@`fEaD_>m2` zY8>CCBbJ+luz^Ooe<`01&bVu0eB~*!JJx)b$&Dq7ALc~bVt9|kT|tbo25_ozsa7yV zVH94-7by?+53^gHW|3LmYYqG=Zpbb|Noeep~r{i5m=B4EQ*%nk(R%fE|1@+9gZYde>nwT`g zDwss@rgc8NH5ZTIhOD{>MurnLG%7q?rH_Pe*?9#x*RQz?N6om^kV64&Ze0cO-_Rn4 zNB_7Sp*p%BZ?Rs({3jmkP81XiV#nhI!OpR%VAl@9=mhKFmN`fa;AWpO{I*p6!Ilr+NNRsWwS+Uq- z4dmDI*<7Qt#=2R_Q)!2m@QRYgcxy##B;D_g%_@AQ96b6;vQf|B1H&pusXQ{NFOcEn z;j{KxhNp&~BXO+G0;Su*`B5UW6(! zaABhBf^nz)`d{>uia{tii3j-CKm#8b-gF9xV&w@&_AD6fJu?i0jesVEdJobwPRXdW zUnxW1CZ`!^RsQ+7co|?^7wlNcLxN&`2`f~2B)V`pf)V=sSw zbGiD`*XtZZL7pr0tn9Njw%`(_=RDSF{$gyD4P<(|=?Kez;N#zma(&$O1MPLU~*glv}xY$8G+oq^Ue zRFQTsqfnm^1%n9Vx+Sz7Vi{{R@W)YCOA712GkgPkef}EDdc608X-@69Lr3FtUJw!iw^7 zs@vb8jCR@2U-S;0m{a}+;&Evg;r0|7U+#~QkF5V{yn;jrbgZEz1p-RQKu26;?w=;D z7|FtD$%1I(jBrAz2k_4%vlMfUPP0N%`N57M7SRG9Uln zYDkc4cEE?}Yj8~2jCDMrX2xCcjBnm5!O#KN8gKI{rI;0E{$96U+|k&gRXgEY|%4>Hif(2}&idXC#1un<lg`ne zPY?pz($;s}i+0T{#t!!oU7D=y61fA(Gg~60))b;*^H(Q5zHUD=g+D|}mgME6(^qEp zRb~oKo~5y*WqjO@!Zw|nTgX$zvCXDsZH@>pJ6G24|0M@uFQUCF*B`wBXmZdX7Gf(^ zyyoaCq!TS|S=-CF@mk~Kbio*B%S{cG#oBnSz}KW`9z}i+FQ?--#Q%m2@VK-p2AyyL zeZSxhbWLi}ZT0hKHyF4D#k)duI^-}VX>ino3JFzI*uxm^xgTeF_Bf*0CQi5O{uhBP z^*wlH<~Ko>qqoZg8cil-p_1V^8wEnR@ABYq;A76jNvPmT6-DzMF5dT2Y}ao=N{tEJ zYljO3V~|!GFV@>_u6&qWr+gB6jGLDWTb3$qF^F6X?oPNE#tCQY2bfGUN5UR6GpM znWnag{sazth%>ZbH`U4@37x#%6B9Ic8W%_sFD6ozQ60>D0ZR|4_@e0j+UguI8Ml--76fx9-LB^IDU_>hL$E4;$PqNo;G}+k z()G=8WJP{aD2g0KF0ueXH~oneJ{*Q~8D;PP4q`wARJi^GZ8J>x?PM7eYVG@)amd)cA1$4OqVZZ&l2=!@`U<{RculkGz zrLVsaIYIy8?UmVT*gsg@zQ%YBfll*=EQ%=k#^>|Bmt3y5CJyLdHHRS(+71ma?R!2s zrDvC-n1XdY_dtAk?1GQLa{`1!1B}Y_$lq(GwtA2{JhK03BMMcUZa{-`$TR%KcVlB_ zDxX(im_}dMr}g6pCnF~Wh|krg#xd< z3YZ7rBFE?VXtEg$&^Z!ugBw8oiWig40|wB4eo@xBzOc-s6kGdL_LnQ(9(rCy&=Lus zszMl~GUM|%f&~W7RXZ&4WfoBcA^!m&i*?`sg;;=I5#?Huplbk68Bh7c3G{E^wX{qq z097N^DkKhR!o?-d{|{jyztV{UguJ8azkt$&D-l&WSZk~V^e*9p;_fj1A2>uG5MK{s z(o;4~bFCb?cpZ~{bUVBPf)IK4?v6>-n=YDGk9p76^g=$~FOd%fb+l71@C@V+2ZSSyq#0&|H&{;jrc=DA zQJe!oh*dkEb&m&js$bPUwpt%Mmp0CLsc^-F6oiF@!0f`9Q{gyU;HjTG&xvAA9Xu+$}bn&Mu zZ8Lqx?Dj&j>16(+Lg`<+`}@6~icaUj?&E>?N-drO4ZBLhM^9sv^s!p0pxB?s&IqH( zmf}(tL3OlQM*D4;;vY>XW(Yl0g&Rs`as#8`;5xE;Gw zV@+60e8P++Ay@}Om_}n)k;nPCnUI!@Z#2n&gkh%~Ze&_E542Lk)5 zRTQRf_cL+XVN3nG{QjpR00R7uCIP<4;`2*YJu?#CG9HZZcLA_TyD>wZ0nmgm z_(90LU`3fMa-2W6UNwq5zJ@dBYg2_cjk4NmA=U2)X^p(Jy_DnKGuhwsb!(`F zD6LBEr(l;Uq!))bBxt*`?eE@X+h6l&SWwfaNAgcSM2dRLOpa46Y@T0ygr09z*GGHa z5j&-CJq_SD^VAO4Z?S3Dm!EdHC#QP78m1pG`1lIHRGAH^RGFY!Qen#-c0#NXb$Y>{ z`ky~T?@vDiyx;Gsn;$!kuHSCA`tFYPW-d)-vcil8)1xE^-_btKx2A+-YXCCOL8;JR zHrB@CPIiAyHcQKfA&DR1lT@Tm61W^Yg@lv=5>Z_Q>a3Yw4$T~6@b z7~d`5^XEe{GuGja+@9JJTZiFn!dzGqF^@eoQc99q>k z5VC+PlJl9me+sKjN&I=~@mbv`tX3mkZy$126hOaFs8)3nP^Rnu%;eb#U^Kits;hCm z=Hq)gGL@&g8%Qzr_$%owN}J-kt7kY<=N+{rXzMG`0uN%~`dnJBwj;Ut+|YPR(vuqu z8?zahAMsZEY7--qm-<4)`+!!ie$CJK@kEZzZc*r^EBl-nww3f*qEuDI^X~tfC}Flr z**o+)ih;q|zZDJAK-R_fd#Y}nPo-7u7Yq64 z3WF(gM+1|eipk2+sEbL<4dngRdXrLGC1Ji$ZEbqNHj57#*I8U6n3-3Pg~zHEY7@|# zM_wt%8cvxyZ*nb_I%ygc%Q}3qE*6!c4%Vw}yhpvB$~M4-4v$Wu4L2x4j4*&%^`^8H_IpbxeTP6i->yV7`NJsO z;H_D1C&PtE3?)eY@gffpSkc+o5*gYEh^(}HEAAP01`b@d17N*PDs++e~KQDS`&o|;BB3|yu$?25vzd(oY zgg~hQ2G~n8v$YVGi|hV<;<8Eqn&1_@shmc8qk}hPXVOxm{nIt(?C=3=u5xWBtdmo< zoKCN=s-2ElgApCmCz!Nq8@|W_>Y;-{$km1i8Q2_-xhfr%j#A{ZnHBIqJE2Wfsr z;W;fWgusdn>G2=RQ9tvKNXs0${J5RtsT`qvN6gf?Lk7ScYUfKgtgx(4!bk#d5^c@e z{a06;_qpYce*}D2f5%uZrR?^%(rUiDjEZ3Fte95yUToyP>3QB0F&p-esN!2LO#=Qk zj0XQEldeZ;AAgZCCTtQRWVr4oUA^5d8Ev#~?R5Lp~BM-fahZx!Dc% z;ldL+itl0R#m(Ud|I4Ewxc`?(v6|)ox?+6<`5eu^rrT94Y017Gq&F6g<$#hN$=b3Ge~q?$)ws`THWNDU36B`1U| z;pQhePI+1D#=RR-;@HtgDJy6#_+C*HD3U5|HQG(Vys(lH3VY5LXrxFNuqgH%Uwa9Zbl~HWtRI8R^qd1)R^1ts7Ax3!KlfP(O}uq zUX?*QR)*#ZJj~7_Uub6I;0&6Jh*b3^d3e5S7Gr6hE@kU&DWuF2aolm8t-K6*y zvWENg*AZJRe-46&R+2Wz3xIF-vKBhm5ve*J1XciVoUa8JWp)x?R$ytx{kNQ_^sH@^ zUg+dFt;TV$pMr0GXdPwpU+OPc@737N8J2kxy7eQBr#P?%A!P&`+GS7T73j3-E-dl7 zbozCAN;I6l_sDm75%p|#*!=4xV)^y0Q0~)N;{!S9W$c68b9eR z%Q00bjx15wuF|+E02B8gZn1DrNN~;DQ#7jTsCTb?u_AR3oaet>RckvKJa2UKWO}HE ze+r1sLItLLw?=N?nPU`?9BvOu|D5XwNZQ2;wP?bD*BO<5G#nTp4AMsOV=>1HijV%3 z!ce)lqb1rE&>x5ANSOXXPMlx;Tn2Xd$4n~ejl^ns$sBRx$IUO|y`dNfpFl7cnx`B4 z{oy!(Z>`e@iASV|2Mr>#ApRbXh6U~`{1xaaNl=f^#R_u@YMcn4|Ekn9rjP}#zBF3v zAc44cuS#6K`|5(@fbjyd!bWo(ypgDJH3o6mPvQ~zm$JH=n$EeE)>Nr!E~zd*eU*j^ z;ey%EwtRa0qXr(%Ez@-wy{33Cv#ww8x(0g1Zh;UF<^P4ie@w8czkfi+b?{q$$?_o9 zPp$9qvGbB~4QvW#lL27gm2REG@da@3n)sk?_4k9R%`7%A*s$fsj4dQ-mejddS8-7w z#d26FdQ3=4ziVkhaQy>_aftu!p!%TPVkC6R4{`zbhYH}%=?Lonc*ncm?(+ujZKJ1m zDtiz8I`4`;?SH0tfC&sFMowOvZlB>Uo6mCXSG}Aw^LJoh5U~Bj7;2|%2zVU70Ve?* zgw0`vmYUYobjl9`#?HXAv-{7iwiX!*P_c7Z_jmj5)mScRUcS~%wn78UTqWJ7AD3Tu zeU?Q@f$`tCuDI#h+CEqnuO|j*hPZtYu$r?A#Ntf|#dgl-puVg7J z4G13B)w#)%!SPosqSIU^nkK78nlahr^(_l>z!Pjh7e#il#Ij0MTN~!1e|y73P@i_m$ImJP9{lZy%?3-GcqnY|q5hKR?iS zmnAadNlP5moDi@b?w-|aZk)%vT*wZ$C_hxo+X;*!1?2u_3H&A$ClVmYL(Ym!VLjZb zXdlKA-WM5DekawjHdwwg_5M^q`1EY~pww z83PH-_xAcj0gtmh!Mj7Q^x44$5 zcrFHKuOJPRWYq53kxI9Fp$8CY$p8aXh!>)eIg_pM`%8GEtRDt(LD`+jglW+MGLr0FoQvL`Z?m1wkg2ZOPsHQ+aq2ap%)ty8Q*Yxa` z*X_iX;b3?glf^t82HZQd#k@@VpNlRC6eFc9free4E3G|U`|Ca~lkw-`GQ1!|I}i~0 zNc1%5lKF@O^|Myu{g2)q$wCL8E=aVWM!dx^7Pcpxkaq^YHpR^k%$g01 zK0nP)Tp@$XRNrCd3O(UjO+Qe=p;U^xOeQjt1>VKe z9U{3Ji~&|_=OF2Fw0}!Mv+;~#Jkyhwq4NpnZ0!+Awek&BJW4>R%lrADjmdmgJKgIg zLvjwA*SUO;k-6b8UiN=C67}bTqQsiSe@QqI2;X^`?(X~#7l*a>v~_1$ zfg+txN@Ml;Fr5^c|Ef!26w7XpKRHXRl${REJ^Gv|@fY6(MGQExUpJ~I+50IjXee%- z2KvGGHQ|;05rf2iKU8S`c-cJ+_X{7+KIRJx`$4N{NY|e1x>FCJXJyBe=}Uz&p+rvO z=xC$y%VvUM*cUDhiuQkele#BCq2S|NI_Yc|oe@~l`ObHm5}g{`-crI$lW zrZjWLCRHk03M;91U~b`@8u6r6&pO#N8&9{~=A|%j(e>%&b9Jd%TMl8w_PrIw^D-_GOQIT3$Qe znqB9nE-~nz0eW)9e6e4?(Q@@MV#7fh94~3?mo0HgSRW`KnLPJ%&ruahNjT~^Iv%}?L7DxZZ?biJSQ#9YC2pg3OzpH%L_7C!m? ze%GLctZ^!jiI0lfLHDnu;z382@137^H&nwnM=TY$BiT-uf2KK`z4Fn|ijy9`q6=(gXr)Df@HI2aORg{%d=bh;M5q^_EL!kITgWIMGA;@G&RdAV{BoJglb}IYCNtJ;s zm_A6a%G_?R78koV04_op<bv4dw5^RCe^%FeMV@Qt3{2N$jid|+T=3_W=L&5v8Itz ziNGD+cVqDyy95fY#%Br=wF$w?N3(#nXo+XLY0ABju5FqmM?Oe&ysJ5_5kTiA7S?dm z&zGr9EgsgR<)XD@OcJ);8JdGih7?sK*WECX{N5m-Xcx<=I`=38K6(=VvTDf2LmQGF zngkU$0_~<&5`2E_pKIy5S&S4L;rjXExv$|QG&l7_V7ferC(+(Cc21LZ+!5O4Kw7Tq zI-_S+hRpz5nzR%=ci4G(j`-g>CNJ>tEid>-|P?yWr@=rxnKu;W|3AzP!w@vp^{vo7>siDnN!0CHMiA$8VcP zuNX=5;>R)%t4(Whn*zUcJIspb*7wWUnqr5~=U*&ulgXhbH%=*cjIfnflg*60N!WT{ z)Jd9!T0){1c@*zLG>4F1mt(?C?6)s=bX61Vw@A1zcXVjiyJ80&4vz7)TK{4hZMXB| zI>VWbCWpQwd#ZNj;wk0o);B>K2nQ(m*Eihk2Dm70WBjrRD%s4P>yU&u`q`(-r!Zi8;KA7icIc>= zh?fr+U81S!)l_#X!JO$iR~gV2?M`vvk-hou(fqiME`mfkeqmxhs<6AePb*9hJTU^p zpene0^Ut`)_+PUXK`MIKj|E&UMk-1`&Q3zrV8RINYlr+AY>%7M)W)6v%K{*$e{`SCdsGa`_Cz$|ORDfhOMAv2 zs(7R!SB;?=u<0YDGb0bHc9q15OyXB%M>b?1on7bgxiw8{paAE%vb)!`a&F4Z*nAuM zm-}Vdn75yU;0tTH*K=0P?Cr#cI9*jhF!%H~8%vr;DHv)_Q9%+}G%~wzu8@PK@OXyv zTI;xM>^U9AREAiC-U~5fNo4_}QO!jimsZqY#Ckzf<703YWK$(of5yuK_6*fyf2(pk z9Kp$H9aKA9lIT$$5(c%gK(BDbW;m#;8h*#(*@sx5Pew0{C!=C#&&#R7Xz>ZT8!;jA;dp(d%3h%MAJ1Gwy*(<7_`7Kqb-N zG~L>A%x-q`cl=in)A7X+=VoGtNx3bWwtY>pjN;NIjm!65Efj88`vD#jJ$&m3yPJ8a za5uNP9sCj96}K4My~Fvbj5tbgLRz`=pD@n~srFYsmODxd6Ljc0su7W_b~K61!DvL( zMPiMwoEn?!b+%v=_Djx?e=uWG@L3Ph&CHg=>9usLb!iDmHrUx**%0043dw<2{r+3l zyq5wNxz4yM!`LF87o|F_;-N!STKgHSmiCdw@@Elg9CJVuAqnd$M;TF~QKzt%~_uI?q* z!YrwO^Z!<&tjbRU(``ZglV}9t<-<9b+su@tn00((x%+GJ9#uoZZt*cwz}E6I^nhnw zQik<6&kXz5Kq@1RsTUcS6}{Y zPE0LVZUCLKo2*2B*GgkF!Mbvw?ZT`E(x-(Ma=MJgc=D=zN$JgCwpD8r+jf}wc92amAWk8kSSEXz)C1X%%gt)Me#|tUp z-4D-0BjSgt>ArIw3vZd>RTK9&+hq*`Wl_;jufImO&|}rxBV{w|?Q`JY0Xf$fm>!OE zhQ@@``LU`4@@czlm^!Wu8YH}>9_Kr-JX(9Swc2RKm!oe-qNnFIEyc^XdSL9csbbk+8>^S4gP?($FN|qjKJO3TAqTCLZ zPu(wt%p=*-Q-l>hi=@KuqKwclTtU_rTdOj~ulBGz{3<2kT9NC%$2EAt{|XFF^3ly( zD}I|RsY@L*-lE^i{4x%$xz@kCNz&rDsEAh=TrmhQHdNA9u;6UJAsEC&kzTJ>5VV<) zk9o6dns+|GhN5%wFCaQuHr*ocB_Ksj+dz!^XMYJF;fPv;N7A1G*d!o5DLl^@Nv8>6 zIZ((JH>y50r=>tF%zEj@Dk@GA-zk@?uz9l)_2Np}R40QmsUHNt8UNmz0}KLxM@fr6 zqf~zQ@$*M*9RT|!|YX1Ty-ppg`z7$*9S%hh(xa>t*Hc-_?o`!~C!?HbAtOxcMw zyV1MTtB~7^KJWJ(#ju@>w#|N^NS!W&Z)JnIMa21GNcS|S&DM0*eHT~N(?ZmShb(y0 zBD4N~*gEIfNZYXOPi?nbYin-3wQbwBy|r!I_SSB z;<|Z~v4N0 zMzm$Ioty4iqRpA>*Y_HG5Qsz;^k?&wTnV>I7U<|tlHUPdimqse_#%*y^oDE%@=@}n zhg9hYt)YC(^i;7Jys9U!tmL+TCo{tnz*H-hn9}_Gi2+bTuvgYtrUHdr%O*qQ*dfRG zry69dL*~X+Dc`NS*80JXpj`H0CVdRVB%OPZ%G3rwpxBjoCl>#hPCovqIPG)b0{uXy zvAgj(iT}la=sq}>yC13NJ`1Bz!gg56bxjacwi(#9b5RfRt;XkJ@#v-f)i(GQC)tx& zx&tF-ldo!Lp!KPvl7IoSd^_{|pFJnG`_tts=P?0J<3akCNXm7J3}+sngf zbsqkPvwhOOuMl#0yqVfPicJB75qWASPyPSB$JRFEnkiaJ>Mc^3<q6|xHYj=2OEA^ITcpNT!{9D z8=1Q?vc}plY89C)&aB|XSa2I4cTO44RG3X%yWB5WS8IG(Nesc*Uy>!VFMs!LOevK&@75rB4ML2UAq9m z^W`Sdeyu7KNa!V9hKV`TD+TRbv!GQI6AJ$& zW8|PXIvD6YSk_ExxLZVExj2ef$=p81bZGOdE)ApzkXN;u=5fqqDkrnars;-yOWVOS z!F#{)h}xGgQf*@cJgErDP!J5SDMa)`^S|pXJRFR5Pwp!YrzAQPGA?DVsUI^ZQ0PSL zw`K~E>rdi?>YV9RQ^L~eVwG|_Ii`&4@#3U2LuKBe?-+Nt0P=C1(uM}ESO(JMGhslF zP`Kk-X-;%ttzLxHO-svj%!1TXF2qNucfcQ)T1dnMh#~UMw$NkuCT|G91xgUoA@c7T z{uLbo)KgR6CCnVtn*1X*esnqKe?fQot*dWW}1uG?NcgPJGU=ppJa=eRLA zk2tKf&ZhkEIa2zLXsZ3f&2hh@Sy`^b7J`f(#P~J~{*t}rwLZB8PKk5^Ob4_`T+ArR zUj*_5&+gimXT?z%Q7eABR|a-||HvPz5PrAyLp_6O869srTlJ8lMpwRrw;%M90^emBJ?4w*&8T{lzVE6yrHRx? z*1`3Y?q@MTnU`6M+*QWjcwmX+a7_@Lt6VC_iAk2%SRiRSTE|BSmAM zFCRKIRBg^thgpckhw)c7y>z>LOgO`^zaGP8S# zVhaNC;#rNn#PIz})FRJAP%2(Cyck_bp?vibTPVw=!RIXIA`4I#!FW|o@&vWNOz53K zbM?P?T&T2Ud3ZEb1bBaV6a#ofUe}qrg4vIOC8uAv_nBu>Y>unKg6^35rXT`|V$N(d z#;>9Ni-!74#p|_|abZFwok)V!Fvi5tI9UOyzbuSeg@jSW30t}o^48$&rrM@UxQ_!7 zYu@z3-al~sDvp8iG6-+h;%T``zoB<=^x=aIQKA@=B+2B*-5`nd{kKdWVT4bjuU}06 z_>d?yn|-P3z08dXK0d{j!>ny!1vUmZfatY(j+^(Cdzr4)Ls@}~;!qn`Oh{H$b_f6f zE0LlYmSl6~Rl5B2@l_vTx{DklY(e4oHt%kbovncjS0OmjBgD zd6l7&O6f-Uz{_c$*Ho$jnBmgKP?6%bC`rHz_gVH%zT~qgl~NLRwLc3`9uuDC5W`Ca zaE^j*s>8#|w8A)6I%E0gq@&(TSFF1w2NM-9yar9FP zBDb5RN5%&7Lvt4}2%?9C^&>;P;)?9aZ9oC1Y*dY~#ryAmj16T!hxur{hDT}>E3GBi z74>Al#x~yd+p<+K;vzCh34?xTij;iQXss?iH{wlXP2F{03eOGk)9UXyz(Ne`YTm<5 za6V?PG`ovLOM&7JcUZgV86H!47GQUHu0^)(aEiN^jT5*q zMP9H85Gb{)`|&TEkI=(zH+pvgw^kLy3X*UcR z_91Btnkt2K>VwQJ75wAAM3%rKNc8a_wc1w-;8G)}Il7Qy+Lw_T>|2gb8+Ft1{l)?a zA)-}}R`N;ea7treMC70fs3iq+%)BRtGp3zFZFRss_OF-R0fi$n;wa% zNMRdQj2fOP7fe*;0yD8_)63>SAk-vxocH`-pv<2!aJa`X(>WW*=E}j-O|LW9csG*h z#K(U}=n5Dcd&$NoKx@;L67=k;Q( zl9hIP7lnj(V-z7*iMMd!Z9{sI-vh*D7^Q*x!2s*4+9uUOgApn+6@Q0>7gro=(Xyhv zBYzGuqH86E(G5-)KopyJQxf`~$Fnh#wl2xpv5o%x0jd+mLU}rO|O=$y`sF+eHvz_D?z5oZ~hW8yQ_Z!Ea~z!=g&2Eky|K1 zi7VK!?M6kG+ za6?#@5fI_|+-O-p9%o0=@IzKVV;DmW^PJ()pxCKT@mdPxvjhEkf3% z3o)ENW!sd!gox=Ho2$_NbmndIT>4fDlN?KPF`&F{O&*(&+7zCuq8JIxY2@N!WpnSS zvLkoAHjmK$w6lOO+IX5S^N(;%HA1beX?0J*3{|1GVc{lb-OjoxR%ul>m+kng!|p6Q ziI$;2G+O=39DHs@eILeXTt6bVgD_nz14{kFWDInpm3pqJH@?K*-pWR93G&Qd6iKJC zzZEd&ntxCM<$Niqc5dF>+-m=dxCwDTUX8cV|@2SN=CTs+-g z($;`%C=W3VIJ>Gw9~qlqiI5!0UbnVtRt`M|BxcY~osq+r^+?Nch;PyEmQ7}TxPag@ z1rstr{s0%>!*a+1m3Cesl4wMU=foa8^J+I58@M0@^TZ;;>!b;%bCJDfdLRZG62`No z7JI#(yGofk(TBsi-8#)E;f0(BQcbT5t{}4T3%5o|vYj?u8rycwt?rvpSczOONi!vq zokga~sntAqwQ2Xeo%2v(a)XHgy-JLBMHaBNn*j=Q)7-x)z#ZuFsjMuejul?#^^TOb%n(1 zK>*T$r>j@Sq232v->Nk`|0sC@wR}NwT)0%MJgawSZ~!n`r32!y8GEQ`U-{2s9&B%N z3U;nSjxtZMtqq*|xMH7pKC+4MqBH@{w0UL1a(cBfg}@^MoijBnOV2#W<)VCg$ccPSx6^NhKV;4hcwmEqm=5!QM%8QI07ie#8EU;B@H9fmA2?dUmBT%E z>eh5FQ^nCv*axr_bKXRV(mfQ*SJOx^sB{@nHHW;8kEU! zD}NJ>$-GZ$Bp2hfAiMAK{^4eic(xy{XZlPpy8J;%=L03-TC{G?(v^foz5?2?bkR2 z=2EAJqJkM-+E28{SFR#C$|Zjl&tGVz{)Fk6I^Y!^`Q``Jktj!76+0%1h?Vbi;Vde) zbuW64&=*!xl?zX^T|3-Oz#`hEXLFs?m8%bXlfyjr{ z!1HH0UK*|U@+X$9$Fwo`oM?+9Qx#c};>#A>iK;118*po>%1%5X!4>IGfHDvWX(qmB zVO{)K#_E-%YJ??gvLkV|-rGE;X&CjRch^s&!EjS>m)s1JsYc6eu zrhD3wC;X!Y{7tyz$VAXY1O}hGExP{^&`@-(th1szQ+X@eR0!Ri4;z0>XOW0k{4VZ- zv6s|ccxt?IF)5lhKt9tThD}d_jSv$aRyap=JkNGasL25?N&UTNVyalC_o8GTXSxoh zZlGi-`l!M%cq%&iN>TaE%dFp)wu|cr+JQ{60IlYOwD>Vjryj-k^RjtnIA(Qz&dhD? z>9Q2OSdHfin4uAM}JB4AKw~~ zS8ymrX6u49O+BQ+Y4KGI8&IX6uZQNRc{AH-%2Dvq{tRjDV?Ltwz(co+KH!D4`^Te> zsvNpf2lP=k4uJD znjG--t2Y^$8qX>4oos*f^h+a^inW^l1ZRbt~ z;?jx~Dvb#hwT+Df{{Zc>FUcJYh*VV{VxTQG92Qf+e=rYq2t3N=1psxe1~UIqx{;GO zZp4B3rdduA=Aors>H4$b%FkC*F6yonKJ`8b3a2k=+L|KH!ES)+A0*B#DMSE2CrZ<9 zaQ&Gn@|C@`8PtX2B<}CFV?k)dXcequ!*!|=N+LCZDn}!=AJ%8uq+QSpZT6&GlE1)a z_IwuC=2<`vR0G!v#QRVn^8p#2=%kBMkT^Q7h;@zk{J7+SzW1cKsPchm4zzOaBk!Dl zrn9z%7O;~v7@Vm+)*K*g8@3;1>sECo69(8!PeiGOQP#AFcL~n8>sE2!$~t;ay~bd{ z!O7}Nt2SMf+~m`5S><{Kgiy*vezNqAK~rt;Rvek$RvM!ALr(vcndAdO`y$wlU?n9K zw%@(O5Ak=|usmdp28BcW9m?eO(_yB}*;V+fQ30k}&9wg{6i;8^T^7bDor~Fj?Y>MK z+1@ZO6V9i>^-UWmq+CcsheuhC6dO@Tx5);swMMCB(Z%I=7&U}=A~>+wX# zn3_6XYFvr7pUICjBo=WD{9vctYpI(1{D}2s_wn}BnZTHAJH48VQr^1LOIM8Y;nL0s z={FpU=PBXC^8@`d$MqXIDX;Qp-z>hS1|1f*7J+1x#%>6cxtH`!8tq zYrv7ta076%CT2X8c7PCwUkmu@*l7J^dHjkj{uDQ4Z%!r5ArKR*;O} z_Z=}4?`hfYaG0oQji3M2eAhc!L;{pM&q&3%Os6<{qdNo>O$arwyr{ugWK`4ON(}V0r{EDT(*o5K6qCsz!?Now0sJ=WPBSGIg9%h?l4y`jj9=44 zS3OOTiBo6EuZcCjR13)m^aEbkUi=UL#DMkcjF3DtG?rx~1m27f{$=|k9pU|!a!Hk^ zv}|2Ppm7K^5A8aPiIz11iEZW?yMp#q+h3b4nh`Zf+HYr?tM`B>k$EWQzXfKUhJFt3 z`_6i99x}%!Y6TV`jQCwVLK*N_J3tzT#r#B~gd2Tw?nzcfI1UKABBcaCiEI7vXYCL5gMQKf_|Ond~ZU~w-A9T(D=+S~H(2vEq+knjou?{orI2FzyNbRL?ld)@Je_bI)H^C><>nCSedDVMe(XBiqII+imEr zG_ZCT8y{LAa10E>!Ju=B5_Y#YNw~LN*29Sve@@T)XBXc4m^8;dW0X&=q^@JrZbJr`066k|_C9GusBi@R~S7nSXmOCwx{KO(i*o1)@bd zk(AZ8G7S}~PoNmyBI5u|rV?Nst>I#@fT?nCAH$LYGFn1qK|$SvSDxuFTLKNRe18BD zXPY=6Z}v_kUE;)yf-6ZfSGE4^KoA$xr$5b{fE{|0D8?!6mQ}IPn~Ka82wQkezi|#06>|ZsE}0!Kfbwf+!P!man6bniQO5sBGr%&2Vz2ys zl^iXq<>X{K-$bH1bbnEaSlugGPrKEQZ>cDMpqzTYS@O(!_?S)iKDV6p%EKsT8g@Uk zh@UvhK6@(z9RaT*=Kfy8EG6xVK9AfGRCs7N@@Nz=-6#yvdsP<6e;@gc!H!ggGJ(s( zm^HePo7KbP8JGbvL_HmichpEc+1?Aa)IV@o=~b1!8a5wlxmZ|NmT)i2w>12ey z@MD-#IG&N*_{*beEk)dHl?6j~cauaf_)P#nrauq0iOheM8GQ1WMFxSg`GVV=bK;HR zusmnprJe!Vd$NXNw@&9rvzb8v1H1wydM~kRSh1o6q7Q8O_%FIR3)@zV!ehm$w7p^L z^vvTuovg6JD=$;VWK|2Ut)|4x7{zOp_eNb7gy_y-#|le)cBQvcq7& ziG1G|cx+*Oq5cVg4UVwf>Ppxny_J0Gh{Q5F(Nc?CYDPtDY);mBSwk`peQ3$OvQ&FQ zU6QMjj3slK_@<^PzUwrHALNl;`!fho@sDS!rAcm*BaLgDo*1apZFb5PggmrL(BiuV3 z)J&3cFHyQf%9cRMLoKrU!z?fZN^T70uwFIMLrPi2)4c%}+51YtQ$+pY!(daF&hxNa*Dv7q?@UIalw_V+hNj&{|0ND ziH+_h`0OFXSvrLiW^Z#?h*qq}lagJMq~C5Tmg0?u?svC?2cLNiRdh#bAJ zJ$|E<^(pNe7z}zKKi+6oiQuvVKzkXcYtxp+T6z6kKWra$kDVk4;Oz2O0%vdDJMyF$* zx>8_sGaG*m(%3&b^6%8@5X~&{E_qyf&t95W5UhlxK*oaQg4-mpWfztQQV>vbs$)-9 z@|+=usEmvZSuJQMdi213QV|*AM)w6(SJm#*T6o=jGv+&7$O(=7n~kWMp$d>X?R3kd z{AP@cN1bUo7krBEPD4xX2to8n2w{aVpieS_H!Gn-=%7>)udq2a%X|P!UQ3DJMn)hC z%^`qYBK{6t0voWCDCoTKOJ6OHE8%rWiSUMdg=Jr{+z2(p7A!O9MBWlehlkSIrH9hz zB%-6};@*{by(@rZgDh$@5N12bnm(wHDc6%U!0sLM5c?-F7#W0RNS{z%*`RMo!4|$A zr-|BjA)B>3Z6MqSXHs578cAK0lm%-oRuq4y%9js{pY8h?4KnJSo!@7y&rlDCQ|-lI zK_!3plM?(_7p(>+lcK@u2WRn8i0g&%+Yog`u$*1_oEW;sgHQe z5e@1rf&xB0M4mHOYvFg|Yr7M`Lk<-V*q9SpSX#&{Q^rM{{Z>~Td+UNp12MdVj|8#I zI+n;#g~_?7mespjxF^!jo}1!026BXCMPeg2qT&tzF!B*5vw~40S=LXxnc7hx{A>fk zziVmdEPyT%q@<7@x*0}^ji5Uf7C&pet@uSuQdfrvPOLIC@=?7-HGV<_P3w;wjtZ3Z zK~hZ?T}M5{+hU#l_05_RXqo#woEX%`V&6#vNJFGhk>9~GVs)`VwKDMkxv8)I%$I=@ z)+5ulXcT{$s{TVpyT^t*(P`JBBgs|n$%wG~&l+vbJjYaUyES?Zx1}6J({xQx()YlR zX{e7KB8P>3|3$|o$Ev3R&F#~x41yP9gau#AH+pG_&Hm?$#t> zXS`Atvqvg|{B}##=YBx!ZQNnCqdFNLsx9EYI13G!Q=91eT^Vf+6@NQcI(Ei6U&rl9 zD=G6+2CeHSa54|ABG@3n$iBYq*wueAGDnIci{&06=#K@i;L~Ls$Z6*-5jUz7le@{2 zMd^?U$@9I10>G;2uF$Q~x7I(U$BROu&$aK~FTBZ`x9tz0sO@Wa@x8FeTeRQjE%c!L z0SA<}Aw>jl)q8t}wP!R$_ATiio89^%L0ICsIARdn0gg%vA(d_qX?z= z#hKeN^lHHvNOkTnaNfLmiD*=6 z>`Oy0ZNy+NL)V!_20pFYyxs@m!BT9kUaSb?pe=|lx<|?VLmlC4t4pABMGC@OSZG7=$-Jd1<5#$YuZOhj99z!MGzd$2ldYPtpG%CIKZ|&Y3gF!Ub8*4 zzAK0KF5I;*Wl>Nvyd9##vr;cs0HrW7>fB6{(||*OA}!{-wmTy^}?m}Y`PxvQBK~z4Wdc72|dRIV!5mm*u=-6jPA#3 z+|O(Dh_&v9_;UN7bAkya&@8_sHz#+nah8fwqN5<-K|+&~n2RK$mX?~CJUHAV0AZK% zqq92qV#c7iEEtvaKZlwq-I6Ur8BNZ>+*akR#ZNe=rX;q)r!7L7b%V8S9ZYcoY^MbH zlk7~A*DekeRe4eaA@XOOh(pAR8%b$jcpREoexI&HnflAK)s&;HcS>ZK)BL_&Q!u&F zRu#I65I-(RgxoZ&=bIB|xtPKkrx6J8V|+MYhw^?~a1pc&Jwe7VxXSZmM2ABGn!mH0 z8V6z4BpK87Vd5m)w(8GZgw@Wb{4gQ&^)x{^D>+HXFh)Fj!&gj?QW&v~G%(=l8UepM z98qm7jdW`83Z4Gs95e^9K&Ra*j1$ZD8A-p@740b6TO1jdI0Qd|RUa{(i;Hk|P0bZ9 zw`Vm0VZ#L?-`A{$LlJa>JDF~W^$Eoc=4_tdJTU7GPG#2u0NqS( z9bZ>(9)BJmr;m|B=Wf#&KXJ0$`;Qfrn4zz`pV@PC-FenDar0HF^m@8M;C^UFpUxix zt;FoQUbk#OK!y`Qdc6%-0M|hRIY>1_k7W6IgG*5_7WdgJ#U7y=O zq0|%J?Tz$r$!7faq2FqDp%V>Yk3jX^agCi%Goxadq5`Xyz~Qw*n&mmx!szva4m4{5 zeU34URz5M&xVhwdM@soKP=q}1s(4&q^8mk=Eg!6D+P5E)#XkUosO921->p%`39d1n z*C6V1lZ7#yxMn%GI`H_Oc&?Y8xN@{?Dlw1mwzySb>7fjY<*_zBnG$L>UrHVtGC|30-a(t z7{|T-Mz^!EU#Pw>|5jCsuO(qm{}Kzy4vbRxg8d804kDs7oX+{r9`>w%e`H2|C$_KE z{;(s14#_Kp$w&Qc93)GUJbS>t{Sq<(FPcGfQ?6=U83jj^TLhB|_*sh}&Ja?1 zm%Q}~>LsHsF<4c!NxJ4h@9B?g^s8dM)|G&c#^W)=p;c@inuMoa=dzu!B7-bbdm;@b zSMl79+P8{L(bpaJW}-IUUhz^H(^yf0B6Zki&Lp&sd3S1Aqdcv$a9oMrO|x>S5+7JX zgBo_%RxyMlN8d$QP)rZ*k!=GdcnE21kD6KDN7XO2P`nWQ*0s!#6I~4i_hhYws!mF! zU-&V+XZz|m2P!~2yFW+iW)R0;yI$tVZkyzdf$&tLUFPlnEuM3SrB%LxI}Eo-6&!dsQM<-6VrKLv&#U_}tncgI_nV(4NA0G&Sv;&Q#+;+&I+hlVosu&=~ z=Hv9V&D?g&--5yy;yA|%>Fed>7yx+Q_zer+tDn zpN2%cM336CZA%8@J`Szd(KV2G;R$qIF57>3xEb_;_D#c3c%c-EBLhacWyUiL|R!-*(Qo`DMGnbM`EdtTwLWGpaCSP1k&&^1Z2 z#$-dk`l(GeHDv-m=d2_aNjb}}*>VQ0?~7Vma3$2?uOZxv`-0Fdkad(DwVHKo+$l~%rKLA&r$8q- zcg>&tk>hn{E%#HVt@H>^Gz(OWPU?(QATOHaBf;RfKD$hFdvw*N_^!#O`9fFMuD?U{ zy6ID7VeptMpAw!7WxolmQ=xSo{S>(DW!bYDQ0 zdcIknF1#_3xb3kUHzRac!QbTkrQ_M@%sMz1H^)-122@ACD^%PJSLFYF-wyi{NTqBA z*l491ZFfJ{S-;9LxK2mfeX@ui0IC8cYFLIh2X)?z(Ag^c>W zSm?0c@_Ie+a=acMDjy1(e~%D>DUW#n@pyvadKRcUK?HHyfOh1SdLvdK{3=>aH$Ap6 zwmVP9fmYL*%=Ov_AE?d0Ijj5*Lm`n}x{ks9)~HhVp!g3Cwp2Y{@3^S*hED;6E!8$} zwIuH~(7PcjT$2t3{d?zaVg<;JYtlUsiVOpr9q!KAP{ z#s>(eo}TgNx3*^um z%kn91IqCNnbx_9bSyI0$8_JP=DtpX63#+G0njI^F10W1vpYQ*Ooh^zkCE)(YvgtH5 z{|{!9yzEiZPDq@c&i>|x#N~=hisF4Odm)mzTot2 zE6qVi++-sBwIiAeyjSaH=w~gpi_&(LdWEm1(g)uSQiPL7gsYaW0@z>-)+-WeJm;eD zguF07AP6_H6VsG*D>q=c_jX}k&0ue!r|)95MSmo2zs~oYoYrF(61Y!Gzp{`%p8tkj zZ?2ww)@tbv0`hNE9;?UYSg*a7Gg~^LA@zIxe0ENGD}CM{aiisY?s_g?+~3JdFW1#h z&w=)Em0>--9?;S(M>H%rAPRvt48sYCTA|46_JQCObq(~rYO`WA=+`s&518P7Q~#f5 z>2SO!kWMS7dW5jpW?lD!i0`mmE*E8`>0HIT$LUyeVbR2;|K5BgE*!X+tz!X^ClQ1G zcjXok-fuAjK!VF-*OjlMzWlYycJb%mSALqeMSMqxM}r~;_?cQcd`+arr>jdRGKV=% z-xyLQ9aR!z$A2e(%$oO}-W|oZ6}8A7C4R`@_$+>8Is6rNH;6Kej=W2fl7OYg4(!4< zKsA=NYLT9ojnwzbZobcPano(z@SC{RgB=&(QEs`c}NzT4}@} z5tAMol9~1gVYfa|?k5xy`bWXe4ovc2Y*^f>EpT8AF#LQ`?o=B%e4TJ z$fN%bW=iI+4DTE0YtHUT;V&Tb=Gy=MjC`1s14srzF}FZzZzU0% zs@wX_X4^lO%m)q-R=^*M`J@F#94UZJTHbH#-du+Ft$zb)KKj7D4)_eg0P5{6Emn6U zd!@{>U67Wl-|=q)tj9;99*_+4arQmNZG+8ojm$-O-EeMvdnA^LM!Pbe)p`-J z80-^c)R)+yT8zk_3Q(mCrHI~nN~h9mD&<)#k*!KO5%=;*4@+u82mMb783@Bl0DqFE zBNn@jH61g5=e`lATc1+Jnv`0$!sl=+kk+t_qpo@f8rd{^?EX4&YFJ z$x)sf-Zt0sU!b6y-KXCK`X3IBHks#R)Aml|>h?dBLOCHI z0uhn#gT?DjsVDUVPP`}*Y>ifYUdxWpPsz*+qfk`3uPmOzXz0PpWUZjD=Wfi-{^*pi z_hhy-ANWnPq0>Xbxo^|(zR}TIi~@JHIn2;E%Rs0~HPn;ALK!v?z0v^)LiIu&rc5rv z;PO+{!d+Win^{|n05);=h|-PbOUxK8_P#;Xi}1;vrW|&Ik#@=od4UxUaTx5U0xcrA zk-v`|6slfZ_v4dL8teTzyY&JK9-AeOEYG87C-9m|l9x%rxL@tNjCDE}8xp zwyVV8I53*#ddHgcylk>n3Da`OPs4uv(vP{-5|xfP8ybiO2Q)qG=z3{a$-!IroT_I@ zf*`c`j1ry@qJ+uEjq(JbP8Ivkp-UtXNle&fWb_E*JeDP9vA-tHVyW|^5g)+vFHmv+ z=p{3kd^u>W^`IX6dARpbu6&nVG&I`7c}R1pjb~mu7MT<|9`0>}9QC9%wrBuaA&qKK zj89>hV?&c)T^*#Tm6>IwHM>OpC23PlnY@Oa3jC8i`V}LxI_?MqO1|L%0iXYf8P>zV zj|Eg;&$O%h22;)rlVC=QphvLYwS)=g`w7;E{bwr;Llyxx&x3#$fd65^EJp}n{e&k0 z7g(mRV@6y*K6;s3NSOvN@2~oEDHM7Y(d0)_c|c{#@b0=t3-LzmL@d7_vNu zVu2XI-Ica`)+%+EQU?nCgk^a7X0@7jG+;|0Dw6m9JC3wky?zf7kI@rR&;p3zwdw&i zf;WqQQR{NX)Yg34duFgYLdf|3bB(q>Eyu%ysYI?9Jb&y(_>RlA`%1PwI4hP7$M4+W zv3xb_Fwr5a{rwOF0`MaeZ~SgtwE99J$c=`Tk5E@A8Gnm@-Vz+D-N)Ok3(Od7Df*9O+uD=pXfzzUcoiomscJNs$zXLee0#uknBw>b1+28*$^nru*6-7WgORoW{v(%` z=6Es#s~Drj3N1#@hgAT$x_0*+;zYVPGyTWIr|P%TLARdlHggC%9-YpG+!eA59pey# z@eR?%T35#f$1Q$AV2Wk?oCKZK+?)Gb5j#6#&nTj$Dzv%tHPakBgk*BWj~3nsW2rWb zhU`+Ba~~7-gTw(1cOo&#()1a>c?yl9gNXVQToQ;9el6cVe)za331w5LB=s%zJ!W!0 zdKZ1WRKnjg19SJ|qiz`yB-|Q#`_qZaOp~RTnCq~jkugCiGGP)vCRZGo!!DXlblUn3 z39&UlUB5q{?<;HDmJHKsB7$E3l$bV5V=?EVI{d95RRfn%6B8YfD$YR6T6`48X|D1o zf<_S`mOk|N$~#f-phgZ3P#-kr za$hP<-<3Ghf?Vn8Ar9>rqf1WF-&*UAFnlc02@{0JXKLNl1FARpE^W-I?bzj6!Ugq z|0v-~NB$hv*S{;m#|Rse#FgWv;!_DWoDEJf>24UU0xB-~CqC4rtNFCDC3PXOJ;iaF%=Qs?3nSW6@E{9%3k_owJ!ikXA54%s+ zL?mU4Yy1nB%-JRa;X}^uw^mp$_B&hpLcWS*yHJE^j2M}i8zxZlvEtSxfT6b=<(&VE9DjrEh8D=5L3DbdAQbE4kvm-cKQ8y zsYKzjz_r?A8roO#o{jZbP_`3&1w?#rf~aCVf8}xojlunNHs(oIjpud$u)N zuG7=G;&3YQD)r&J&rZK)n6DH?eAy+cI;!- zxE)Dr+%f=qJw<B^64)Tq_J{G5mV>9VmOH5E^SIkA$HdVX%iUguUxLM(2sbjORep zsR`W7<|0!9$41DhOC9VwYRmqGfK(j{P$HBjXP|(U@UnyD|?~8U||fjNNo1=2c-& zBi2;$Pzy+SYd#(G^1|5SL0e>$-rq}bfB(A?MaHqS-8)6y-*gA?GkCo;VL3mbf86Wo z?R6>MP`A2R!yb7|npx2zIXbrwP4f3MEUdx11l8lFzBx>OO?1)r4`y(TqKutQ#^>bO z>Lgr&+spW7IK6ZWb*M6JFD6C!2GD17Ve3utzWdgB+-m~?Eqa;pe_c7TsGxnsRy8-#bd ziBju-HiPw;Wa-?Ssm$i6h}awpG9w#w|`K@p-@`$g08KL^vyV6+LvSMu4XPvV+C{~C(Rk=1OTZ-cik zfS7fsNlDGclijy$c|scv%MQO^e1WE8sdZ}OWl2tT?51i8UMAReuK;Wu7$Y7yE?p5_ta3*gb{F5^Oo zP~XbcDQQ=QFe0D@Ug_K!k_g_mt1(RKa&^(bLW_bs`=!D!VESwN|5B9Kj|-Cj|ekTN*`S z=G0VHvlfGZYi4v}2qcpA6lCi(E4M)K4~esWnv}^Ft`isT#EyN@t9QQ+dApy) z6T}zUw(l~(=1eZ-RakQIYVx6tr+(u+VlP`fs840`OX9AVD=DA1IUP$XtJ#Ttf0-HH zA8|}(IC9}uapE!vJAtxoL6jZdsXiokh15pk;9bnCAPbcONbjER= z8E7cMFiBXrM?;}2)8r$E^iwFTjC>Gw7ndYi${9T%1dt7yj)zIR;>#8SVYvNg2=gA&S3Yetx&A-CRd;{ zC61uZK>x)8Z;~}sVFITJ>gSNy5B5JaU1M;hZP%RGwr$(CZF^(ewry=}Z=7swTN`i8 zjq%O%RlQZ2A4zJersh5uPIsSfBu^`%4^&|AD!62U3)rl{d!pBMc!Mpx^^8hkbma`$ zxlR^d5kQ6<9vOqi=U zf@l!1SqG?`t7SWJ8f6W&NH^N(6!m7OAP*b0<>FefYTMkRl~x*uAcoO?M*Y@A*v2NE z{!FPQ^p)ws^->xZ{JWQ3rAYZCVVN?t{u7HpW!zq7cm-lQlmr-K3h1Bo^3c-A48%-P z6Oqk9qyxI-Tew1^Rq2T(MrK&bFnb}wsLeHOKaz^A-2*}>-jY!Tev$K=JbfLdt zSj8Tu$;-fZb4X=wnM`28#cd7UlN4ZrZm`fRvnw)ZR`y#2Zp;>Hga%i%>Mf}YU$A)& zB=ej;FsNlbMJ}r~M-?_?a z?=*lvZ?>NMomh;c>nxtYTqlwBmS-}0eK$Cd!0Ky9L7PA5afCbw78ak4W@EI|Ms8#_ zwt{A%5t+kBGMYfy{=m+LPLcO6SGuCxpTKR(x?1}xKv(Dh*7UN%cefwO)OcI!FqnkaAMGZ?Wv4BK_JCD+ zyX3Hw`2D%}0Q59wTIhW@zT9{qIhpPy?DlMVFLvxKQ#}z|GZg&T5+g;R!dgCDn%f2X z!3zz0)_cclP~EXuJ~Cjt9Hi%cXRw2IcOQLWd~lK(|ICgU&tc7`pdDgTJUO^11*7e^*qcFL!b^ zq&2y>A}A9$JNBKDkee*mn$ZJV>j1YzDDsCY#}T47(eCP%6l1sxY4*Hm9oK*$s_#?zpQ;2b4%3Mm zz+rq~gb1_i(=!kqC2MLhMFXnBkmxmQ$f5x@)TT}%+qs6U_PX5paDAWrpcB3BX%$p5Zt8tOL!k_U5(wUnZ;Kx8 zuDht*o>+d&hiCBx(iXg&da0|Y9mXxqcLzC(Q79dTc7cVebeZr8-b140u! zkzG#|Mufh22r<%+xl<#NLI7r?@?tl;Vt1D>9aroqZ1eZ zBlDK%?X9ElpX5D)5UGH*C2ApuIoQ5J@s4^a8C^$wlShh(SRbM@$`_;aA}iV6wBBR35yo-D8#6{@&mSe^&t0N>X;)=vgd#XvJ_h(U-dAN^OgyoCPY6-pK;8gkmUdl z1o!tdKRNig`9=mnY7eT4-9C=5h3}j$Jb^U*23Bd^0#)SKh%q;;H^t8;rCin0*5g3N zr11ybuwwAl(LSYkD-&>|5AV%}U(Jh$RIAYyiVbSABK$}JtPn!UA(_&@I@Kn`iPp2K>)em!EeI1E2iFxTz}+R3yP7gWC2Z!Tu5U4-?% zLk?uXl;#I6R>8NB_G1iaE>oXd8U6N3gHV{GQKzg;Y;*-~=A6<94l(3FdtGc6OruVrc3$?H@SE@`t8P|Cu_DaYi1)NJ4l;*caz1Gs-O4d;d;-j#_}?&eU3J0 z7SFp4&dnxQK;%?^`>?d_zZ|G0;2!wucZ|`{gv5`;G}o!iXxrd@*zxPYRxWwU5;+1S zLFnrui|-WDZlf6=0CXO9!w+~7-(Xha1(LgYul{yh?Vy0c6bjG%l-R<-5D3rlw~bco zK6V8aLqQ~B;92mQBu&nIH0)@y8-jN?aot7?uH9w>Ih%VAp26@P4&VPY6WR3MvIYWh z?D+>>|MDjLQ}s-`n9^@6L&&$wUKhfpQ+HP|MZ4t*30TIwqu)u6CMUJFP4@4y|M@0+ z?jOV!jE026LJPis9N&AdR6{xc)38;>Z+hgi%Zha{$aa2W(8B}(c-{W0nd6VB$XT<7 z5{n~4h6}V)k04Mpbhw#rUD%Fh;eBji{9g5zPK1ad#|j%?S;c)uBmx`@^Kqo4M1%Y7 z+4j}Ykl8LEP=G4C$B0PUnvm=ygJ$56*>mWzyBV+3zmvObgg|#w5z%4E5##HKp)H9rv0f zM?1~Nbjjiw^WP8gwCLl~m{gYdm5-3`B~eKK6m@~|&qOl)fCJC25V+ZIJWl(ZSOmP&64%qOUkCTE$&V2Kt~tL22WRoY%lP4^bXCTHc*>aR^ zWXKmAf8l|~;PP_QEl4KMx_rQClSn^|*Z-P-Ql#0Dm*c-Bhj)U+S+-!6euE)L z6-4dZL*(5eE?cr*US4kJ#Ebj2gD1)_Sn?oNycxjbej64)M`A&${)6o>BSnJGk~pdE zWkWdGhE?T;+CzRc)SX%4$HH*Cm}#hH3A+R5(~`Y(7b3a@T1O!U74Q1bS>|mcGGR;V z)>iQ|9sfiHZGGZ37)u5QE9VS%a~iP>G;=x?9;{SAB<5OrT;1Lb1PQeDMmkPeJL;c= zKw5!3uk8j`{p2V?y8^Y>d!ms2@>P8W%rODyw9kW*1v>CVPV|5X zTO3>Rzi(swX9i~>8a(izt%0IsKx7SVDhi~TF{g7L2>hNle4Ckf9w-l9%0^pGDNrJK zc$}2!FLK1pB!8eB2m@nHp^D5b}kT= zAng($mQ!OubI0B&${~V|-AFve1)U08aGK#zFI7zIbbmpLo=Uy;P>uz8#z^@7eENOg zTmM2PJRc}?CUw5!3dAxBd#E40Th$22@(Ls<_9@IQ!6L{()y7W2dCc&_G{I8*Fd2Eq zsL7O9(r5qX+#5kV zZ`M0e-T(PIe>9yQ?zjhz;Z*FznkDce81NE=lqT{b81+6vxKYcLipjvJR0_n! zyg<+0sFBm#8JpAaK3cM(=SUC;n$t!Z)9{k+7M?7z*-%YQ};Rb?(;2!jf#7ZXjX7w`Sqaqu4FJ9r35C=_8sFu4PxR_EP_`#Dbt zSPWYr$o%)+Vo6q|p+Eg3N&~lkS#tt40T75+T!>rkOtIIc$P1_zYpGs@hCXMsK#d&Q zEcao6x~9WuiG-)=pJXet)T+$=N2{%?5iFgTiPUS0eXPA`plnsj<(KKmC$JSB(qjAw z9Jj0iO0*h)(xfWCKV;euqeK8vr&S%KQnd;(;N8cw>Anp|Keoz+wyl2^{O+pb8xMSd zyeAs z0Qx#tg|feF>9ryEa?2Bba`KIUc}cQUAJLbN7Nx7+ZpF8sN8kHdSXqD#a*(P9YjM4Q>yWku8KH#I zyxhh-v`Zfhw2KI%N4tZ$%B)KGr)(maj0>*Wb}w1C9gLiI`mc=ujHJ|T&Smo&s-n-N@Jng0U#Qf z1#_1B;=^K(M*rxi6n~)#)I*Dn>gD}oaW&(WaM#daPgIapdHqcXsXBq)<$009RSxD2 zVZoU>wA+huo&lkl-21Gl=YSJ48yI`LSu0+(I!oOmk||F)V#^N)+IiL=PrMfKno(34 ze0);oXJ$Y@LNdVJA985|zskiYFOOUQ_Rl|Yi&BxDQHeoZV`W95J7uw)(n7(Y)Ha5| zrl%VTu1R*v+*Q|4wuW+#zBgVcec41WP02CGizgV7cx94|_&9wu@eGSvzf#n9YL6a) z^!Qy%z+Sj{u-$29%N>7!By);|?7As5hXZrVg&;`ZA#uXC&ym-NR*SHPsZ(Q$WWjn_ zV{Z2xLv9|m)nSLXPbyWo>H}JWwk(4x7N;L~aSnR@a)_*8^ZhS&n47nn^b|_=4-nvq zEVO^+`2}9{*%{reXn~uf(PZ=dv<^~d^qD=bmH)|PbPH~1@FoWU=5y_Y{KGTU?4THA zptm4=sg2y>lC#K1nIWvImfijHi{yp-)gICEn!g&ct}tntFLkJh9~P@SUkOSJvMh!< zO~7haD^{_M23<9#*O%^fdINU==m$=V*ijiYJ$KUyan!3ly0iz<&NMMnitE{?%*f#{ z7WG%hZhxawT`lW+21Iy-umw`h>>^XUzuu9N%QoQZd{6|L^~#S#nf_^+XMA zplf?f?CzynE!ljMjlh8XR9+!_qbT_9;demmmxaE|LW^`6pUL4Uk9OC=TJyYooV6Sa zq^E}d@7yz`c7<@Z*E+EzIk>ktmC9YXbdA<}bsnCnT>^tt>SSs3C%2#)Qb20LocXLBD#G3Pz6Z*<>RCJAVq3Vzu6(rzzhgm?LL%{ zlw>FiMk|b(Ja~tBOes#j=qzpCI7%JAkD}ZAWf6e;Z{W~A@3lOGvVMUbPZb&bmcw40 z#Y|fTphl)eac&dv$yb)Pao`dcA3nMKx|62~l1A`Xg##VR?ogFXnmqOP-{+6v<;Q5q zkA*j@+l2_L>Bc_m_ZU@dHVu{v)h%9Vzdm#mtQh=;*6il4JKDb1pLYhhli6kYQcZJ` z>EVK+m~?0NuQNnSws6!UZSL;lw?ihJIH@TSmmKTtfl_j}eXB5YZl#UL^*IDUy3;GX^=CZ69P_VErRXzlyW-Tg0NGJ^eZ1<{pyd z(LI%GDX6pMhZQmPBG99n1}!;L_YXuS$Z=#RX)vJl`Xq)40Q`wN_mnd(D(*u`xF%O9 zTP83muzHE;rX0XaSQ>v~_66yaS6ziTwBMX3tvIe|8ZFpa7sBM&v`&_fzl~&@Ff!y}cmOUTYg*DeY-(jay;yZ#iU!7MD54oh zhbFp@Xgu%(vk*LdmqwUMNy2}o>K5=)lSatk;}$Ke)2rYqw2;;Q8eejD8RZj}X$VQPTYeb&L&t%#J-x zf_*N*E7MA0L+UvHp*k7&e>efZ^Ta2G5e~$seEJF=cu1umBEOjgm>-y-+Hw@s zK-d3@K_!S{{zB>qGDE$pw-X#9FNjp9wSVM;b!f~VYe-1VxfJgL8Xw}W>9O7mBv#Z+ zL6^y+_)(w+{1oCWSAc5?H^oCNwre2QJ6_UdApszylgdP*buCV4Ya$1LLIjZ75Di4M zT*v)tn>*hS&5t0geMzCwyyxOKpGxitNl`W4WWdOB4y1yCzOcOj06e!11ri)t_%&N}f;A8{6$t+hjm>X7Pn@g=ftE7oH` zb^?DVnTPk{?n?j)lJJ1zS~0+{PPmFiBUVnh^Hhr-CQ5u+SW>=WISc0mO^vkpm!tC$ z{DKX)QpFt8RxU_RO%0cz??GYfp>YXW)2upDdT{(L>gIifEL#!_&9Q9Q z&Ds|oY7+J=ZJQ)FMGVjQ7taI{=O*|;|FA`Vko87$C%$T3s}XCqJbPhu>8OXN6t~VC zBs9oT7Ht=ghC`T_bY`0PX40Y*y5%ecD~Qwk5;(~kwU4SHZD;M?B0>Oj`c(y0vPn_X z(L14N02&hbEqY{Z)ap>;TJc=9LU%umfO#>^GmN-n;{Iv>KzfVcKg34tb2Tua{<#-3Tm@ zq&F&WbD0p54U%KS#vd$bqCia2G;`O?d!hffklB3Hpk>3Z=M}0{0Hc1I+i9wvj4Y{Q zYJ^IONh|%wr4uP-Zkp&;V|FCov#FPD%w4++a%G>OjZ_;4HErp=bhjUdmR(ub$3$n8 zcW%PXyI*^~!}*VZ#b*kPK+>lHRsP21&m_^*75-u*cAlg3e`Q|#=@XWE2tV3k7GvnU z#+a&Iq65r|RVT=!irth+_!Gx5u(8g3kW2WGkFUK6`wgP}=aFWp8C&gi$$qeShu zA380tWkHajT}<4jYRE(gZg5-+lXxe2BG|Ht=A_m5ev_{+#w6jAl}6i_Y+;$6{&XQl zs>wZL&fKB78QT?J6^2k^Qv+p=H_l8;6K@L#q*S5%JmH6^jeWxVzvaQt$(cM?+?cMM z?-?&q2Ef7HvDggHaPPm+B>|i0QH2&@f5DeDq1kfy5%wp-*3)F+K#%3|=S|7aBjldG zClg@sG!clb^XIbC?d1cO$#zy@iQcowdiSZ=bZ#J;;KpbB(P0)aM`WEvNW22b6<++u z6`tyG7qfLm(?Nh$592!C@Pa7~n7UA4t{cH_`yibe$p|9=kPJJN(6@pWxO7 z41}EfZQn0t0wLa=K%AnO+ZFUW-Yqte3j8h~py_JJRo&yPc& z_es?!6=(csfCih#6gTmkW7^0GNE&*A5&zon+VMKsfMapEoSW}`CkFC)C?_-hAl+^E zjsm<+Ee+hTAp_h$%f!0DAi$?Vb|E-}DN7kM-{R(!(nNQ_RpOYcGk|EM9j1YPfFVqD zhWJ*|c-oqeqnIC;>J@r=JmUmWypep4nCw>AL@Ah}?#k%~&bZN!X{dSybXcU`ewO@L z{vw;piiE<4VG6Lhho2UhRnjp$>`Uunny;cLcVi;-2%rHO0L!fy>i|gV1c1txf?Dg{ zJ;${Q*9Yq1!rujPgC6QM(ULm20eR8|aW*q7DzHyl3gAH{O%CS>MdH1p!XQfs@J53e zu-o(QW8%V)^PC%kIQ=9zCYl>N{KiiF{+hbe?mHla7xJ#A&)ug2GFAA_l$JBEf?uyf zR>bL-Q7ol_(Ed7jfCK_RoDBMRoB|(9SRmZ8y8egH?yq`J*O8Ui$4x0vm8+Y_>CLOH z{PYPoW*7$)qee;*;RVOU#B)Dy3pF1*&YnUM@rP%#^@lo}1%|nQKYIe-ix`LFN(C_f zE3-GUA6Xde4Oe~;SSScprH&(+_-3*TikiySq+`@T>AZyUjPpq*9svO&neYoE@{t>p zsn-wUWcFP!fxxW^c0vG=&<*8ewii?B!xf*FZp!(3qhE@4uzm(zx0mVfvFBgyl_VYl zz86+{gC|%1&r5Ia$N476Kwx1ZKVa!c2J*9DVqhF|U&MWbw|3!p+`D@n19{-}L$W5< zQ{23OO?bK|>=jM8RIRYpin58_8g#aDkpylA;X7Vd7G&LjVh#5yuF%d zZ=w&i8Mvf*oLpz7`wtS^QEfiq_4IAVK^`&P7$&3@%fwMMBlz zKXVara()~`2{=xE6Grd{Z-rp zxR4+G5Nij=@2;vKe-L7bGh+kX+RSEBlUjz&BE8Tiz)>g2Qzp<;Xs(#DId@WM7z6#E zPHTkro~H$CX(x<_o(0I!WIR6INrTl{qtz$nLq92Ajby*dRZom~XBr-#&@Pn?Sjz_b z7bNLF7J~vdw$XJulI$acwv5T|#oT8Y-LAKZcDe||dwti;rZURbKkjN=Bt3rL?G4xR zto9?LZX0r3BuE|Ywl(%hySVloO~s_%SL*saut zpX9(i}=SjWnHTz(I6@Be`LwB1z81o-pouznyUoC_ElzXAwKZ`g?hawp&! z^q7$FI{s7a002Oo2Kw_Yp5#&+fWY`xhY1`v{I~z{JrR{NVLserMZyu zlS`Uld!(Nybd2m!JLUaU0u@uJN_{bkEn8N03YI~Q@+ppJ93pts_+ok;Ps|kb{L71& zhbATFhfuZ0qmK(3#JsLnZ%0B^tEAh&FRv(S+Yn;-edpA$CX(9Tbj8^t1~y?11!L~}j2jb;76>GMB1!YFX;qm^U_jd<8R0i9Z^TQ`0rQ

c$Y<(Quh?4;!!~nz`|D5aJE{wu>_iNz%5hq!t^p*k?%d;fxevqYw zIJsfRs6FOjmv{h9U&pe2^{-{Zb$Jj(0ZDB7#dYf6+!R=ebnKIg^E_7HFhH#fIcBd5oZ!118LuZVs+Rw| zJDFqOoTZ#kUcrqmAfl-JL@h1DP0D_!;D;p=D=#xFj$W*t=C7Sd{h>JitV7V;DA*P+ z#LZoL;(+2h`@1SNL;71Dsusb^;OcbstU@+cA2JeDdE`iFR8(qc(J&JCA6HRv6_suy zs=u8697cHTYQ}hcTJkjA%=b+42tU{-IJFTiDG&-%5~}uLRm9TVt|Bk8M~B(7LG%16 z|D*Sovv`!--94-@uIEK>>dWpuME~tYIGXrQ!RvXAw5L?+dJ2Ng^^{4?R0t;u&Di-u zfzNRp3#?+aGdHWBO9mqRMx2*idvA1#xqd{5LVl!+XS2ZgY;}E~v)E)m+){ZuqKIv;Q4!z-RZZ z;g|fkaD)M1e2(N{0(?y_d0w)y^xBAsGYWqE#fjrSrhGi-K=1WM7`ip#!v3I0Ay77G zLu+$?pRZY?!4|sCybP6Vzd(pk;*P&)ECSRQnU|oitndNZ8@0!44$xGpox1zk87P#w z*jY*mdVKqgOs0WblfBTJwj%qf_DCySDV1afvG^&`94VXPEP4#s_5u$()|7U?dD`gJ| z1My=_AiOMQ9NI#Hl3Fjve+0eU{O9E8}-3nPmY+eHO+bhFt{` zyIT0*bRPTtdPT9Z>RJiZlHvQsW_e0+T=0P!x$A*(HHWcqEdI#mX2Z(*FK|50zA%Y~ z4_H8>%|G}&)=SDf|EC)iNS({|S6-mqhioU+#SGWR*(uwcA96k~VT_VTe=G)FIo&`d z5ou#v24*F@F`DBgn^hndS%gvIl45Scc|N_N^rCCD)lC4~n7AE2Py zr5CkFU>Bn8DnEJu6vbFnOp3U8)(2&)xWw|(IR}y{aN|1spiv@)K5w%5=jgOvd`SN7 zdh!JrQY?s(LAwz-{$kMXy42$K8^B>kSfZ7T+bC=Q9xa>snPxh>P4wp|wPB>{@LPShpF?D2j`=W({+I9{N?h=}AZrBVj1osvv$Gx#bA9mfdpT&HZj=ny2 z&ND|wdizG4Zg>fo=y4=}`Tjrte}7+w%_R%oI`GQfleC~}mfz}a#XuOj*zx8WuS`RA zO$(k#C5(qxwux{%Mu5u|EgsUpQU7Io` zJL4+uXo9Nn=h}`_scDprjnhoL5c9S}&6EZAF(V!!^{_;lB1#nuB%Zcp;fBztZ!zxD zWa5vC3j=aX2k)IqW>h&ZiR72Zs;9$s$)YV-4TCj$I%lTZn&MF^%kE~xQ*XjV9eMj- z(H?z?;wS6LM1vX%?(ykS0?eH70F3ue+qGHhg=wcYNDEe-%MC4(y?-ZITkxgvz2VYC zU8P0`HkJEBu{e4+1p>JEVy0H6V+Aw`}ib>S)6*PWU=pWA)lhp>Q%Maj{w#+GC^|OcY>`0S=}qw#YB#a2#wC z#Y(gdE`~oaRY8GTxE>F%>=~_LIIj8}=U48`)_#_o85UQ6>jwPFSxvu3V*J-r;1%X* zI}r6GV)LOY`x@Ps#jgIeF7%tYdz7vQEI?M-Qkf`9x|I+g&DQmYZHz3b(mM93J|jRE z%j%@pw)a=?B+rTsWlRIyyWG-%#MG=`uILppTLGe7-QAahaeV}L4}KcCR$&Ys;M}K_ zebnH+_*_rCz}Bqq-tx`Naz@=pGmVx}?&M~#v*qMjS|o^zK%W_q8*W*9v&e#%`H((ywr3}1)oF5hjqvXBN=@|#rbn>-MWgkQ2% zOUYiIy(T*;0wG3!xvuhz&6S&R4K}%WPTDX(hjP+Zs2#tf;fzuvyT z8^7o>Xlzv&7J1>c$GFr%h$W{NG?%?m+XLB&q_Cn+`rpJ!lnLPDOG+gzo)|T8lemnP zng#8vi=8DkAd1ScxUjbuv&Mo5t&IK0Y$|i&Y=}3DhIle4a7snTBX!Q_c|jzu;Tpq` z#;It|sR+jbakg0lh*)JyG?kLuUW*Y7UW6jF=|>)|l|xEyFi*jV8ok{Yq< zWA{t@iDw)RcykbDw2G#|s%#l3xDqH424aQDK9?Qbizw;APY{QofA4+%@dH)PtToJU zI9Lj}GI1zeH-f^Z9K~5?@+`SpxL@p93nFM7$bGfiu;i&SWXamg+tg?Bz|LL8$OuZS zrIBvk{W$GWIA{x~I>teAW5r(FZ(@b687R+(00?8B7Y9l6wTP7EQrwCR+HvPy`tw8( zk$xrmk@=Xl9WHOf>sdlpQdm;R)}gph7hD#Xc~fWFG9ZM>P@JKI<=_r5RyRn-lo8~# zFZEMxa8({JMIUb^ET#-2Mz?!>n;oY#9+iQx)@s38K668Z!CYgPPgUfq?oIFK+?&uV z@%%Vv>ReV_DG;{smIyX3=5RAP7~RFxKh!7QD*p`!sTwZYJTM5A161?%!+*%-n&wW>{{8mpP)#)jNyr@T(lN@>k> z$qd_KT9PdK4_6oAiHPcz&w!{)D0jQk0xCRwyMoF{6~3tm?67430m2C)Vy0ylK5m|T zWCRQ>y@nW>3EXir`^GKy-J!V2wn1zjlju?ixr!TWLhYEqDtsvzgY=1w!4*RYmz)Z^ z_po7_TP1b=SA0AfIP-Pw{Zk`jb_4>aPU>X+bejl?xS6HUsVo@EYgvpj^U(Jnpxdrg zk$w)+4Fi_6*mz;o!yptpx?H*b5rc>HUW7pjfy^eFnQHLVI^}>@l66Y=uR3L@A|Y~s zhYX*v6A+C%iX^TSJN~Kz3U93%Ew65nBmRMU25S)Y`@}#WBZB1?RIfpMsAoI)mAm~Y zZIx9(TYrn@V zidjl&VazVX$+|3C<#GqOVOiTgW9RLIV3Vywz3SB$Izp@gY0&J_*+dckl}`p~Nyv?w zf*Q%#ONz*~};^PP^ge?dt=X&6{|ms)3|^ZKY5sa6B? zmCYt#^AZWdQgyZEbEW_S=c@{ZwEVj|iW(svQQAUK9p;=@K3hnX9#S8F1jZAu5-SV+ zsH#$)a_V~3!Gcz%LRmLO(%!)TNN)kT!rHaeqnTPa&V#IZEb}SEQIRyLJlpKJ<{~tV z=1fgFD+R#J>Oa)(8WVkSdMJ;Rt-H_k(chr=|Gwnajk2kmE<3f zs7AR5Qj{7IZyb3LpgJtwa(a24)-o|yXYTI*iNLWMUDt5+eeUpK*#93>jn9f`ZVmt% z?qHlS^`Nx10rTnb7azpq2>hvho(W<1ln$4a)=XwLBk%4kJtU4vBJ+UoU_gjruOe$- zW*|QiP%j8!nDdHoxzj=D19rK3g)RSjuy^-NB}tb2Hwf6I2bU(ip;8AS33(C5Vtzw! z*u~SI@;Nk&Uh=G&4AZEo=x)N%X)2DLuLVNE67N^AcrOZYKfz&PXd`ngFCFeE&pk?0;N$kjl=cqQc8)X-_7L+x(6f{J0IwH>f zn707dgwcSfRD(>f^JvpzatKOyunN3VMZe6sA-QHSCQr9=^>5hTG}e(H6!6t$y}f<^-7+FSb0< zfgrsIXYR;fm5vg*wNjvKVkT(Of4wKLaUi2N{7@sCh8Z(TfPf2(@_(OX@xI^D{(QR; z2K@K$$4htof`B(uFGEl?sxMRk{7hvHr8$Pqo_O|a#90_AHEOyK+z@hcqZ#Z9f|*(S z@}nh@3L6F)B3axe1tPmV#~wnC6lGw35u#xw~#|PTy5$(@f3Qc1Cw!#$$qnk=~nMFzUP;k zss%1iW~!$BRGV%$p+i~v(H^0hOMQg}@-u^G8P{&O2YD^V`98`aHHQ=)H0oZXZli8E zD#?iod_uii2T)FY;0@G00@aU|HFfcu4V?aCo-?H03-fSb!RTF2P(fP>=IlLu;i7+* zut%%zill1}vAy)!SJteS2QU0!n@#@$+`s~`rPab+=XG=!!6KjVVvEK46M=e|GzbCL zCym9MoVNZE3?n1TE6J7ROVLxs$YQy*;Pnnquy#9xh#9>MVRd!)e~M}8|HQ_chnl#$ z36FCz%??My0n~zTe<^^&U0jVGSB3x0vys5N0zDaO7CPpr|C0>^NnmWZ>DMd)E82EP zBZMH+k;yae_u9y&A9qUe&AMHeLdsuvrhtK^Iep5V#P{D6SpuiLm+PI7fJT>N_{V-P z{-B89Y2aPNvc4zut>E;MhsqdbdrcbTJD3k_Leu&^| z^M6_Z6lx=;<#MLev(0>>YCn77CK)DVHI^-sRsb`Hhk6j#JFb)fx8UGN9%G zvQvLn*=;1p>7ar9B)4UTovdj{cr)72nV1@Dx!C4g)9+=$RlE1ZB+MkLAQFBMIOHV- zT!KIf4ugJD0Ef-WAB!sA4QNd6gXHsw9Tzjnpxyf7k(S8>pdOiOsUMtAtsgv+>6c6- z94jd?g~Md*Ldcyw{m&#Wi~rToYj_N(h6Uh;AR`GN@qp-c&_e;-F4v)e$>uOkr)Fcb z9KfNvp-$yi?}r-QZZ!y9%~dF%zbA#21D|K_V2@XO)6x(3U)3bp@{?+*oQg~PT4IAx z1NCzyX>-~f@gjDvjZ{j``gjB>uf@YLI&yKs3}D#uTVTN`^Q#vd@|ao8qkfo>?|K)= zBKW{00XHRg5z15v1$&0`^U@&h`dPD!321rc7sgF6V(zwH&4AyIoCL;l$&6}te`q{) zu;}DsCu-&DPBkAm)Z97BArDYJthEo9<^6opZVWB1;)4i2WGK*3v)VB^x{IG8%%uvR zkWFx?VF^S9yQZr*ov@oPpv2@*L`e5ryXFV$(vwcTN9SvM*cB&af zL0L|zE}@cww1;94{6O6|f5U(Z(RL9>(iHD=bF$uqSyPn9xb}w_)<2X<$3*};dNCj3 zUdDT%pBnXWG?4`e_gV(M?Vb@BtLJJ~ofbUo{U{IH3%KhR*GRYbNI%l$Y z-G;A!PILpHA(8r!eV+oNl9~sLyL_RO#1CKWYFzvBYC*dof?7Hs*y?CtanE3j84{8@Fs8H*Xm~ zafxuE`^n{k#=vik0a_x8N06&rd`rswVAb)-Dc7~#65b(5WpnOj8(vYbh$P-x3srF6 zCcHMha3_zlAlVr+Pj>m%Z;l7Z3OTFy3mZj zC65vHhPG}V(~v^wO(LU2XDDPZdG?`oOWrk<)`wJ zfY5ilo*D{u_~!LV4tllK=bqPdh6dh`Y7!My`Ni(~I9W;U_kLNpWiSoi)l2J3x}ICS52&feU62P(?pm@K6yBJGAoO< zq{zB(x{mryeI9nys$|3rN!wvnyI+L;h^>3K4&G2wbW8%iD z!zYZ`W{j2+>?G6)1J`*#hOAf>20F1MRFkE;9sg$3ugbl8a%!i=di^6 zROVi&N@;oV4c2!U@wCa<(~8&i>(ue$$NllM@$$I!%R%S)d&``^!8O}PqY2_H?}G`@ zz|)mD>`&Yh(ZCymEAcg>LGuw~p2w#Dua}Yv5CBoYBP(!r6RGAF;xOvRm1b=Z5^#Jo zKDO^3J*0>bc+CWk(pQY4$9E5%qem3Cv*@^=CzT}P(8>IPyIzh{>W_k!3c_CC)JqVyd<5vr)tl3lNg!q5MbG|b zuN#oXmm4592s3za!Xn94b3ibF+Pgfr2Sqm$RCFdoJ*~M;Q3M;inOe~XTddFQ!;|VJ zAyZt4E}qqF_78u^*$5hkU)IeN7Z#b~HC!%FjC%*=G_UsZgFZi`wFpiEI`H@YRCY9ReZFt18tng%a!41fqh&KMtyv_3*?827nM&Z z@?0H>SPXtAg+vrrS)s9VHZ#bv5FXQ2N0a}atzaC|_uFL3sYJmYPjV5ocq_+bMf_EB zN=hDpg1fn{zh130)xtYW&p!I0vns_h7pF;Yq{+<`U*vwVO7kG;&>R~=s@v#+qQdY{ zUKr)9KBVB9DKyHd-)+$xXr`UW_(@uQe8fp{yepw<9NI7l3xN>aRfHKpYH}%J9d)PH zeHCUBq|Z6V&Y{aw8JB&7YA!iI+O%C8QQ0F5;>Lh7kq=o?^|G3m8c%xABDl5+G!xO$ zso6>0Ri6B>A&m`wPi46Z={pA6fXc#$E~8qqYyE|jk_9p0 z`IR?inY<)_v;MJe^IQ_m8}#!l4@upoe;aDL3)x%=w&;~)w5U8|Io4c|DT>~(^QNTw z{QUozddKKWx-MGy#I|jxW2a+vr(<-Ij&0lN*yvat+qP}nR>$_O=l$*-;~OJ?Qs<1? zr*_p|d)1tC&E-;YC?dCF)pwCz1X6;7*5`0Pkn&-sqgx3Q2}aI#&Q$V~oUVpu{gKn^-6l#=^k7 zVl^zQyYl0t^{ugfLLzqF_T;(2e|2e9irkJT)RHxd2-(X-G{23@F)Sf2oW}NLLKv>6 zQ8UE&kCSU+6*MDKY)Jqag$>T|xRePQS}}pmeBDIGNU;wQ=FD2O*Aho@e@b`pRa~(( zzvj#%ELK>}HzNuzPZubvNnLN~yk1QY>5GX~3BwFCOGYg4bXFDdSm1JdWPz=bCrJds zx$J@JHXw$!0BQMVZZ;puX0_SMY?zWITN0LcW~twwsVSe1`5A?E7bYAsqj6cW#)6o` z+)7}%QCSrezFS%Y|JS98XI(cbM32X)jfQ+adDyVg#`E+>3RbFBN>tprqMx~NquDiw z%*s40YZ>!xI{6%A>L60~dK2pkHD#551urcb-W(wT)R$s#$%IFEa#Q3ta1YRpoD-ah zI23BMbvOi#%Ii=DL=R9mcC(WahI{*MtO0})1!dqKP{OY|@K2ms%AMQ2zy0@1;V2&V z=KNmm6RSxwV`u{TWMvb z2rjn$fNsrveyG{LDxnK!=iD(n64=xu$F#YBX7SamUlxe6we1ItXrKC=mJ2bt8~ux( zq<+i^GU(fc?|$Bq`y#f`X?44JhCQZ~%1Q;(Xj2+WifPvuDr_ew{Z{Tw75KwVrSrBi zjhnu+ILlGZKZHe-x3HgI^DS8oIn#m{XAh?QR%SS|Ig&?Xn>*v8yA9;=`f{LAUt#Se%YfQr!Nx{b%rgV*=OQ9G<3ROVH52L@f?NmUv zJED1_*kH|+%)UD(VMfWZ@MdZxcG_w_2vV5yU+n~+xJrz}mQRQ%S} zRUf~_euz~gw5sab^^6p=;mVC}UT0^mp3w}(7IMJOL)~6_Jft1uK)oh|{U=1G>a&th zcoc+uQvGqUmZkI_d_yxjHOR*;q*an3xlBUh0Q+sL^|NPm$tQrc*mdx*H{Ts&h8R(S z_!4h=mc>_9imff7Ebpi*q3SxjE+y=T%sSu4{1GJnc~z-s%*6)&h$g=`F2qh>6p4KU9O5vR5~P0g3R~ijk(;uDo>`GnEMDC~lO(tj`$S{R zW6nS;>yinvj8>IoxtRny;|HFVjm^SObvdVL+-sXcH0T+IEUanQF$pn_lkPbt;oKe+ z0gc@&0;vIT5r2PI*XH5^XKAbODzJ{%!sOr9(Xx4#$rOOS@C3kjOI_d9C3i0t4)p#B zEtLI@WD1+dd?1mw=n5t$ajAr+;g}x!Kvx|2&=E_LE@8-(LPNmo?JqK$@9Psv0P}L5I zHYQppUOm|gr!6R+;#xm;p(p;lZ7LOT=}FUmARklFqy7Su9* zAdz9YRjI48gQZDh$gt&bv{%o50c5x}vw5t++2PaUTE*3oB#E@Q`4*k$f4l%$Y&r!4 zyiZCsAD(iH!2Xs($K^c523lHhD=N)mopF!%_69YP$5%v~{w!k@^@_xIXP4vIMEeVB z+H6OW7w`s?Bl<*ex)g*3JTn4YZYzgqvf7b^H-;fVb2h5@i+GQ&yCZJ60xv%idH=7e z%FBP2CbEE~N&Xherec6bU6H|l=$XQ=RSbrolmFGfnIR6D{W5;8hSt%1#1nkF;Wu}^3Yb0NI+*KX>p%r8L{4uXepAx!!~ZkEx(Q7`A#RE@nW*%cw$6%jjHOx zH>&vaAIC6Y#*QLR?g%zfolkOKXFIKYP?aPOJ`Q8*HIi@*lT5Rz@3}$~8kwJk(4Y!1 zjFcYR`X&^($ZvL^Y)nFyk#}_sJgTiNB*i2|%B|Pfh7Yp+0C2(*SMN{JJFn0nwy?aw znNOhdI=prL`g7OwDb+7dRt-dix9KI ze@p$1O4jLw2HbK~@@I+cPfLU%im&Cr?l>^2+wp&V#EjtTts~~+W6sDMph0yHu#=VF zqT0+wT%EQ4*R26?rqKTS(uB6GR)cnwaVu3qF7(+>qo5;55+fjp?fY`M2MCHcc#NN% z**Xy>ebEmNZm*UN4X;9kh$9NdJ|Kz^yNDqHDaWMbXW!tp)>Rpud1xOpLBu_Q2^lPS zB;GBB)42=BU-v_$uebjSj%U1CB%|7qTC{$CfOX?UcOXV!zoW{3+#(XX9IFSe1FZq$ z=BD>z4X@X4lXnkN)c}_vo!;5JH$Sz_nL?T=X5V73EdAitmkFa|OcH8`4U2 z^>aNE3!Dv$K{#0`=njFnQ>V$9Yui)c-S*jgTKbrJ!DFWMm7Iq+5WBqjZ=?#e2Q?o< zk!feXX|XsrBGjgnkYW4U*9_UIUWrrmU6Pyq&MB)sSWx`M)EMVq4?iJd(oy9Tn;sbD z+Az*md_s1%;_a)25@DW;5<@;FipSiHEdp_N(R|*^V5T0IClrZ4Z@r&(nRh7Sz7=;F zfrp8shl!8To0GpBnK%91E+lZ>Jxmwu0j!E(5`zDO{XpHZ7*+kdY8U;D=M2@hmmZAT zF5Ey{kgxr&CM%F2_zc=!Tg|Zlbe|`)ZT90cNA`hJyXrL#e1Os~{5^54+F-!x?jJAZ zY_{8csp7Sy%Pe61F|$izIJS7O+~z8f#Mpu`MCb_iZ)Feg0ny(peE#p~U!P!WIMlkz z;qsuAM5e#|3B>+@MNGVuTmi6HZy&(46Y-s6R)y}i)^+T}t$;(Se48Gj;WrHQ;wYMnc8JZC~YpExbv4A)?4(;Ma( zq|6V9MQV8iy}B})vMJGcp&520V9|Hkf?W7$Y17AYN`IBt5`mm$1L!_+CCEQZUA{P* zHU>|_S{6w<$6n{)atF*q@T64J1|D_mpyUn5VP-NCIQEg@G+d`y`?vAKomUq0DUHbfT&ZBs0GL8wdm-YofF%Tz_V4lwg&KT#GWVZE?V*LC+Vin(w5g2Q{>pq2!5AsZ zH&lft#`NW#$dG@=U75I#A24%kajcR8L}$l~=Vn^>6-x(?@2Z+tr?XjLAoMU~o(qIz z{oNARyml`^;oqa-G1sGILJ+hPKT7i8121MnHbzfk^B`22_(Uf&RC` zHw8$@VA)9_iz_$(69wnK?MZ;3ULFMS78cr!L_%}3Ikq*>+4+(l{{uod&M2)m+i^)D zJ6 z@x0fc;IinE1H#YatxpxN``TpE?vfR2&P__iv(%fU5HTrupum_JJB!V$BhBi`LokiKUTY#D0Jcn2Dmoq6o3eZ%(4W9R z(n$N%!ZsJr@Ai|a?ChqKU+A_krns}>JtyZ~H_fNo=cbDl8RasTL&nQBL_?SY^FmOd z)?D8p;4!s)H`>hRi?O7CJQ`R^rfn~}&Mw)y5sQVqVfBT45(O?_Ev}J){H)hLkwLgV zeXksEUo^KK(9*!?IHT5QgjczfSAxScN9Dkhn6g6i`-|)+s#9tCT`|+SI{X{0tBTA= z$EC%TW*u>f@6o;zbBBjF>hJ7&nwyxK6z15@Qm*s7VOVsT&2*58FVr6%RrNS8b%uzA zB>AEGTLw=^e#ALfubh*D*lITix97VI)|a0_e!$0M?EDk;(@QorCSUkHxuB6eh9xy=c65Bl=9lnE49E+%!m zDVsag{TwA(lKt=%H$IxotG($>G|7WDvPlQGpyC{I3Qw)hj^#8Gpv&;Rtf0_eAJ%?Z zXkCP!fuu*gPG_f{t}4!dO8?=v*roZVW^8T7)l%Th)?IF=yUuMoL?Joa0mq8bZIZ)E z{f1C9cUL%4uG(}#6L;D9D%Wzf`C3kN{Auid9I=d9P2smim+I<)HWHKK9;qAL%o_M$ z*t8~M)qgY`bH>aI5e%VYiVW`T{b#t-8G_6~PxX6C5<;?tU2u*w;m0c6{ukJuzspvz zwzE$_`=XDClHFbjXTEtAZmgY+C+B5rSR}a4_Q($rwZPHIOfh3)fh}X57y1ckm`Xx@ZH!x}vW=vBslJQO2NEmn(4JD(aD z0$|;PnP0^!Bp~2saIw1c&hNNa*mtpwty<(3Avrqs!$=ZpI0Z-_KW0DPU+*V`u^GdN zT(c8pr@0{0?4m7@+PvM9uy`bHDA@PJk})Yj7G!m6D%Iw62sT%A7U&g$+0%L6h&V5y zKR7wnV9}OS8H%YEc$nK&PeH%L;j-)DMYp1ev9ZIegKIOde5Wr{zlIys9Lg~U2EHOW ze6UtO>C#9j+BN>udY4aLA{bU#(=)Un$PgX0n4m%s*YFfnht5xVY6|v|DHh~uy66&z z%GoWrq-jNj6iUk4ye=%!RF*M04beCHX@{E*2i7(LZK@ERnjo)50n8L$2c_pk~)WmIq6S=d^zeK-}fKS{BIOWT@BjV#A7#49c6o%w|^@>><$ z+Bg-}Rl6q`KelPM*I%Y+E^Ip%wT=SM?iMBxy<6Y0TfZr9)MjV^0SD68fA9}9L;H^x z5A)61b85vDCe06>EJ~}9y8`l?-1{=lXLwC;whlNgx294Pa35m>YE1F)Uq7JqxH8R2 z$Jy+{;&Qo2>D4*qUCXkS>R@J)rfQ`KXeB*T*ax0I)Yo$kGnp}(F|B!1>+(!b>`q+2 ztJ-kOW${KpBZ;CevdlYFoRZwVlE&cr#%g(KxA>fAne_8c!bzJmU_&84B$;`*7GPpr~$p zE-=&LJ};PhC{#?kwKJy6*8hw=X=ve2dUEr6o@2#Ap{zhw!P+txF}9`A>p~jh_=(;9 z9Ytxu+g|^Q!_Xrrxt=bCb%F}t-PzV*&zfH^GcJWEulG1T&q8|BwdnObn53?TI~a}J zU&)o0+d*m!q2tcin-k?MOoH_AHQOzn%WEwgcoiS|VZ?I6HQ3*C*F&J)t~jqmz~={n z$N7b0bd14HquV%BD#w*{wTg3-!>gKma5}_p19vUw+B=iDYz491vPU2gr>X=@HuB?8 z?ABs^mtvAMyy?NL&UwBf*Ied#W0g^;mIIIN_PX1xY3*MpRChlbs`dZ8sFw;< zvV*Y6ibNv%y%gf|G&3G*eGRD+6ohq&y(}WQkK5yP?S?N-6q&7vPj!_m?BXZ

Zzk z+#Eh~h78_SLbYJi7kwO+{-+DKKI18eqE&xUx^3!uDz%xRgxjRzTjb|#xV5PYgj^2E z#>J{K(4{cB?xo94=Csxmr3V+JH-}Ll5=M?dDbNU;J%XU0ZQqyVPwg=>eZkYC%$Dp} zW0(+jz_K^kEtE+_m_R%$#cFn`QW1mM{aC(Di*+}S$UKWB1$@?$qrt7j3fd3j2*a|$5Wm~JA(>7foUi^HA<|l=-1`v+id4d8PtF<)Zsy?%p}-j zk+VBjZl!Z0tE<_Z;JD4)3x{(@j#!(}+J#-WjcfNsHNoX7(c0ZF>D5Q}le<|vj0jiX zkt>P-gK#q9$)D%S8#dfWb7|}>@A(G$a`jT2%3q09R8>VT4J%%)Q9dtrwgk#sppdh- zi2Ek@6lE^&zaxWAb9NA&BME}q+ZRI5SkPa6Ka%Q{RYx~LEJC8J#>|exwEEns$Kvh5 zR)GcPGvXD0chp(COXL&t9-s1!RBfrKC5`>7)kQe#*3RqwW(4ZdIRN_uuVouD&mv$@ppWm*`Pa1~CDIZzkP;X%g~ zaSeTYe^ge*@;yryQgY?)xO2lS zDY-N}Uxnj@pUR`PQ&Y_u)kbPslReV`f{Szi^<~&NQv8HTKoqK>(zkx*LY%n}O0!;E zy7|dt2uzcXB1Te6WdjGXW^Prn;eV{zYHuv`TER5zmwGHM5qqd2#at!wQV#z?T}-}01P;?4R=&?$Goijb zKCzk71(4VKgz&njD__Q>LUUQ9bFhHNdPt`?4aG2C_!jb8U{tzJ@S6AU7otBe)O=33 zfZds!9V?fW2byZyCtds~%WLM~I5aKPTw%u0_{ypC@3}(UsImHzgF69hYG1}E_jp85 z&|{S)CzzQ%I!{IpE?>%#Ek$2e#?yLe1VI$odzMsQwK^g5aQ~=kOkVD8AiazytdjDU z@R3|o_j#uukV7l*s*dcyikxOI0WND_?9_CHe=b^4=y}tD1W<`txZq1*`sFjdi0e$a z!522sIVadngMNd|&=xRC0(2zCjv<%NMQ8ccrc*u9nV-|Cfl;U`uNHTV!}=&av1GQn zKaMnaT+|FK2W8^Z<%ov#w*7EWu@~W?pzwgod&OpsXYkTSr-4zLxP&K2d=9hUz(owN zJaAt=@cQOOX%s~R&C|2dK5DUIa(fGcg}l=cwmw{N75n*|{wk0cis0Nof|ck>5ZXH}3xNRL z+$K}7pK&&C46dGppXX7b8_c#d9Liio6?&c&VUn)TfbcNLwAig&r) z9iB;x$2eTBk?WxcCWf5Z7S6yBMt|u-9t|rI;A_@^`LX2jaw{1Tkb;E0FkR?7B4;3vQH@GE(u> zL<&D$a5bAIyHDm`-*0T|c;ix@z*ieP@N8V6TrNL=u7KmY+fk_ez=}h(w{N1LEryFG z(hMjsPcHGgY-1*Qe*S@m!Hx>_eS=Elz6=iN(-jRmLtI~2@B^>6?m6K3cXN)G<3O61j z5tEQeo$`X1e|bKux}7PUV6j^JKsslQBsCk$uoBYNAA_snlH`FFCHp)8pM@t#!y|q8U1vs3YlFd z%=UxHU%w?cjOFRKW2xdo0li9F8K-sK>ZeAxYE`}^iNIeVJ=zf5c!ixfYTkR4EKGVn zEep6%o9zsTlLQFq6Tf=`blF=@ zfaa`>Iyb2F^wO~zU!k}+?&y3n_=6qiI$qs?vqG3o9U30Tc9japn@hE?xSp2=UzXB} zNZ(*aHlHZJJ>{YKD9y5~H+{G#Bp#6Qy2Dp?eGqxwo^vKeT^7*qAa+HZ_RO4CsxMYB z^P>GaEUG)m%E=Kcq^RFnNa4371Od%kxu+Y>FqW(1n7gdkHvJbY3wQsmP~h_I%Vr3& zuVE%}TP$7tw37CPGd7lDwd>AOta%p$318~OP*A(T{w(((OiZL<&E6Udy?iF*D(Dh_ z*V!<^{8{ONh=oNHJAGu1h|2>Lk+cq0^VZ6Q3u9Hs)%C`O^Xl`#EgAKMJ*Flntg6bZ z1k(}J*COag4Z?9`AAg2N@pXAE_$5%ChdVGG)eNkPwk!H#PpqpM&LKK zY^&bM&FhYfZol7070_td-2U<89yeDLd2n0-1_H2)7xtRn8Z*FkLiYmBjC)ie<=3%BMzK4$miDHP`*%g1wK6;RT~7^ zCt9~XQ#kK$V~;>IC5R;8ClUJ6j9}A*u%yFY^dMZfNkh*_ zt!G^u`VNDxbXCma60RXe4PDBeSsKQv#U4j>NEu0;Xr~u#CXKO|Auj=u5)Q`VOnQn_ z1N!rAVr2u7ZR^b{=XqoATKHPUFDQ#yfq{+4@^TGY`pw|nT|%RS zamk@(%|KkQc{B3nS_KV;-MnIYllN_hn8t_hy=&kvdv#A_sCj0&mJ?|x+H`06n$c<^ zB@Ec{tlWwEWAai;n3{$ zdrY26NMN?<+dI(YkO~vi1bFcKmTM1WosL^LTRML}15+OoG5z zlQi7GQqAl3Ve(v0*pTt?*cDaUk)VQ7hsQIF9d74(+Y~$uP)4<>h9`YsYFJ08xiuTx zf3LT5@^~Mj9=sO1)FcsL~tdt&dsEZsvS zPy@o2hg64nYrbU9%*ZG|rgXXbMRWY21Ur2oHSls-jT~*)kBOaYtpc)+`W9xu{dV7Dw zyLkJF`)R%LT^keIB)h#Gb*-^0VtDvM3$yg|UFkEEFIsH!!BtTuAqs=W#qc#6g$EnZ zkP~P&b_VC>S|wyoNSGus=?d+OA$|@}@zOGkiT#|Eske5dIP!gsepFD;zv=QG@(i_F z)TXB?+kHOn8)C8V75Vz6z%;m(3I|18zQqFtnr;|#vzmBA2#=^!{FxMC_5BS2J5tKL zWYx#SxPzf$Ym=7Sl{1=n0~Q4222jz2E0NXJxRX)sAMb+Sv$$aD1a;8(xLuMPKin`; zzB-)~eY#=BKu2?M6ZggBKHr*o7f5Z5Ot|LHch{c8%i`P;VcFW;Fu%;akTOFlw7#K1 zf3RQjUv+Z#P^`^u&ule(RZOwP<>`(j?x0-BD%2sDF3}}IM} zi3V1km1EPJpdp3#1}j)UDi^%)?tY5|*+%QzXEws{R5?m;y#n)M}6L z!NEG;{+IXbZZMXtih{3{TU2!XX5nObMs^%$%#XZ=J3}LQD)i;)TIRH1T@|v3ecp4Y z_9f|$>i7GY-rn(>_{1#=DQ*}-F3nZoF-%+rk0NO5ZPrY-!{_>eHtxTjG|O@RJcRWSV{q z4@ZyUPE3;;%=7iN{M6U~qWH^VKdYHC&pz)b?ki20S8BfI*pSet!~ie!apn9IjS6If z(F796>&D#jKAr~^Z-r<{_Z1CD@M0*WmU0#Iem>3N>eLM<#S|Co;Ii!_W!OR+h`+b zp|0sfIf{!D3XKX)AWr(7!keO*iik4 ze!KRX;4(9jQ+!Zd=@7&*>5fN0-~nz`G@(XSAp;*6lNuaGiYOQkP8l?p)Yco;!@qZY z1~q{&$DHiRE^J|EATA-`<`#WIjm=q_b%7TNm*8e z)uVi#uH>(8nYVtuFuP)r@s*-P6DrGNhK8Sx)D(_B>Syr1*L8&*9=|>BskgkKWnjPE z>h+9wX^b8|%s=rax)<#lmsafBDe*Z%f!+z`y5B1Ww8>)Oj??WVpaQsS!D9@%^cP}qIn(@b zNmZ8&X}6cuL|K{OX8tWBNto<}(MvsqyxY=7pJGaDL`A=ma|v|5`r)$~>C1Vgd_H1u zXIN}~P#YN)>QA=Gp2Vl720xtJ7(D^<7YK&P(;S&ahNqnm_9t~@O zKyk)*H+SDR|e*9gUu0ikyoYsxP?n+;q4$E{~Ua;Hs(yUiTtX$>-x2<()gEi)M9@ zl&<{5aT5f>46`x)FG-qgV<&LnLiT_o?>A>(etN%*?63@G=DI|HfTYk8k?@M|*8sAx zodQLD_<77so=>(-W;C>2OSt{DC|+(}Jd0Vk1kzV?Sj;b?2>SoM=C>BEs*B7<716`dqklQFA4;{vm z4|;nMwVLhlt=Eu;KHhcne7lxV3HU)GB2lOdk)|1; z_BW%LEh+ghDQ*jSzmNS|RFc#dW}#l?seOgpUlS+D=eE6n3NW_y8#hS4)+18byhPgY zJRK~#<8t2oSU&H0x^H?0k}|OkTRC40v5@vCp^clo)5mQktCbsS?Y(M`drHKv9Wj}V zYK$Ve_h2LfT~Qzh0Q30O;NJn*TH>-jF*onLpa_Q|)g5s_YsRTOE^ejIen!s!uG)P$ zQ~7kobjt6G`C!NUcqg^|w8&U%>WTrDe6#tJkm5n5@MI%zXw-?+ z`QyJ=LJ$ijConSW|3wGO&iW5@r zp_TsVil1hu0^f=e42yeWZNFH(h4XlD!$iP|QQRZB!|uf&%+7aWW@DQzo-3Gr;aNL2S{ds;CIcZ}Mq+@!;2Vzf+NyHpd8Epa zb~AfEFbP8^YLC^+(k~~oB`IiTXd>AL57lgUEoyDze-@`6tbS#h81r+xFYD@)|GUiZ zjU8b-yJ|9O^2je1Q8^mVOFBLu!3wU{>KizBKwi`Q(JFs+&;7k{_QX{NvUwEx{Nn|sJ8=R;O3cz=ClS3VNQLWSXgZ9^!p9Pw)V z4R6w&%$TE)`UDp!F!QD4b^Jzh(f(OZe1bdZ8MLb>Rq`U|X~^qmj{(;814V&g>=(<= z7|L|&h2Q>>x=_hYlv>2(u|+8Z(S!9Z8~Jy;wTseDv+5N*u$a^7V%O*giT`R` zlaEEO2k;ON+E_pwX)+ls7Fte{vpVnJIO8-@6BXaA2!+q#^Ju;@4ys0e%@$t8N#$P{ z*VRvFTjFQFUtU^tZP=cgNr+TBm9Hu}Dd~u89S=L&SQ6)fG@1C_>xCM$k|2iK{jAbJ zh6TA`&bwRKfd_#wfLLTXyEHu=wB0K1c5*Uzw0S@w-Oe;j(!DF|N&S+1P5TlrN3Id* z`}~a>&X%r`t&TrK&;XvYW3&0@;!|2$c~HON8BIJcy$PJc_61vHl4YMnBcS|W>SA2z zK>T}9W2*QagE@jve0`skkDJ(dY2qH=u+>z4};r@DqJ2DByj zy}k#8IT8U|@G?e1sFt-`0u1R)BYN8ov0xkn;MueWyj4Wsd!l-YNGN??B{qL4hMj8Y zf6+i4`KdGU1xMW4IGda+uk!da>KA1K442|dv=<3&dRZu2V7Z-8;oooi-38dhk4Wdo znvy?}Lm*Ty=p(#}QDR5f{#9va;>3ZUgm>H>tHrkW80u~-(}c|74BuhrHQ_Qr6k~QL zyZagM4AMuoGF6JY!61(h{DyFha;ta?Jw*hAD*MIyx&3(nnd(xsKiDofJ&P7fiUr-2L>%Pmx|tLI1f?2er(TqTMtHM(5ho zLE>A@V%WEE#9nN9A*@ba@K3*n<9<8~h(!7Z%FQWIa_X+Z%aL4hvdp&=SGHFLn}>Q$ zE6=l~AZUmCq`ih5fKGh`!-t@%`E`m^@L{LA=#S~Ala6N&n-uu}v;b~aAN_jg{Cc(U z;?To-JCc})mdxN^ADRS-ZBOn*`Gzs$-3GoJ?$=tf8>^i4{_OjcDm_pWBl*Cs5Cu-WeEr$Zy>3UyT(TVAQWP#ki5ST{@ zX;x3flb9Fu#1x*lupqH$vqeO?YvR4+GWK?~xeL5%yG!Aq>vd1uWa3*;f&OjuTfPY$ zrjv_fAsTZ>%@ar5#QS@)^g1+SqXN2hQ!T;jLIUJzcfc31`(Q48%3d|X-^lD|t6i=) z+*lvMh7yHoqOewtX+&yN5p{C;Dlyi7&2u`ZmuBxB#0`9*zIQFgK&Ad>*juA(|w z&{9-zF8Fu%lO5f66jV8bB1`D797CUbWZ&_RnDXiPw1;uyxo;&kF?a3GQK-F-E zIi^5Zs2d%{}Ka_68=AsC9ryHMpXq_P1yW06x-&? z$XD%!=V7Cfp*bL+=$BPW=aIw=PRnV5oLelUvt*O%g8O^A97uSmS@C$w7CMc?JOF?J z<1%lFqj8L2+u!731E4fGm)RVz*Rm4AY%=6vteo3Zi1jQIR39|OPnKS&PxNGMM9lCO z&SIIq*ASvr{L^WnUcuF4Sm$n7;zTtVxM#n^=e<=NR;NP;*J^bN5wt`^(O znZ|BfmhG^baC^7G@O`E^e*|aErTYvGG~W_LP$rYm+5tYq?lz`!%k$^xJ24=osIec$ z=c+&l<*XTeGDOM zRgC7~HIS+P{HZlEzjM>rKRNvh41a1z45X)T@y>G1sZUX*wICQNSVA{`Jm*~!QoP*= zZc?y5EB0h05l{4%i`*+!q{w2;=8o@}+6HCrB!W8)W=!y(r<>tffM-MsX>_RKMr{4K z-@D`san2zn4Yip0AEE0sCRn}ZZ@1g8V`MTRX|qXx1=W33+*x}0vMTMT8#5vo)MU+$ z_#gEvE-sZJ=nVpTQJLKS^qArz?N5p?J4es(D9!~=(jxt24+TQLI z=L;`}7ixik(9meR7I*-z{qpt};Q{KHLkqVI?ucrR=7sx}&$wkI0LljBe>kznn*I3$Kmd@^ zzrYsIJdm?HVj~|_a!BBzZGugtIrsO74Q`Cj6}4WyqfoH&+%uakmSf0e^7$Pw{1rY4 z+emvOFj%f`nr4+t{IrF^Hh6zI0@7+ww%)~CjYshAddnWm1=^w}{pI$-hvyvNF~l%D zrd9>(v>b5#WC(NpEQGOL%Cn;#>@5B>s?EyCmX}HYO&tst>a+x`A(M+6Y8;8$62s0q z?HdEE@xol$kXwl^BjtTVc3^?WJRPdZ^u&X>RrMP!ho0Q20q()Io5HyXbn5-a*uv#9 zvz<}{#cCUP`UZ4}pteoUC5Tj3D!ZtIw$QaMZ0UF@o z0@LORUJGf@yJi9in07zyHlZP!&n2SU!>!-V$P{L)fZP@j4ULG^_k(9VO9(kGPMgJU zJ3>XYwe4bK(D1w!@9A(&zxlLOWSUC!ye(#^^?qt^?Xt2*wE{*Y3;LV17x?+=h95vv z4{~oIODNb;AmU%4-$Bi7w8a3xEIZ(Jg7fqiv8i5tWm9kKixHKcc$DFqHa*k~9nmEh zq0?3HMQIDbGwvdNh1qG2r+s+B!<+VcgOsaRtN@OWXSJ~f8CYP^pKo?V{{DS{0zQIt zwZ)D?$}5OMYH_#Cw`g~6s*OzG-Ifq7oN(>TiE;(%*br1F&9+Hi1Cqs<^lfyRj788lOId*!cE_)s7yUCo*K!mc}-6Vpi^5fkkejkVJqX0{- zwf%IzPhtQ=--%&mTU8ZQ*Z4cnN+VbTtjV+PyvgED3?=1RRD$0gOkbc<*JGJuyK%FR z>rcGEivM^YPJ`Ku)? z;*L_j^RA1TaKiKkgz)#4RxA&-?&|$w_usfcs~uS{0$IPvD5pVzA94zcivHBHl|Uqb zfrJU#UA}gDV|g?o`!-2l|g;+8dg+zt93>W1E|9cSqT~P>Bg~fhUgn zIR8DQj3n>Osa0vfVKWaen_eFRL@WTn-`)De%XwKKNvkpLmEia*l%Xxc_Mw9%UY!(=(Al~8O|A;J`8D)`;0$X>87I#a#mvJ(nPe@xysrAYY z^v%uU_IRooP+N&?LA9_$*g1494^(=9IM37a!T z);p<%`{2~~DNgozK9JIKR;9-elmv$dY~ih+?w3f+UVumjlRozu+1o3VA>fG%Fnl@M zZD<~fk`fYd_?$LD)UvA-l+9?;KO9+HH_ep4<{+izX|J8txL!7){t*BFlXc(3A`Y+T zb&I0&;^N|hdvmQYv5hI>BGfzGcOBz(5Sag5%x=&JY`IDLFz`xVkM9jZLTrywM*&hd z^E5MKQ58731S@R-AO#fJkRcMK1rM8KD*kjqJX@3((b>djQjmBo=ui*Kq!LK-_h&rq zRn&0O{i(Mr5 zVX!j(KLX5+=KlZi^p4S)Ja4piY$p@j&cv8-V%xScu|2VE8xz~MCU!EhZJqx8-}jug z^66Q5l3LwW-BtJA*Sv>h||#D{lCR`|9Q&VUAoY{o<8C0>S#2&9Z9R5fvWGY?Osae%X~t&_Ym1J z&KEIY3=?Sxo91%6q~@^82!z@qD+q1g2$0RTv#)k+Q&EiphsFY0*>u!-J*8SKRtR7+d4PPze`U`n z2XpYGa&!=IWVX0yup{DJ*9=E~b~+f&%{gvW)vF(>Ir(vm-TKChGB=^FUqOkyk`C>m zE}5NSUWYeuweaXZ2D8S`yExFF{8q@p{t0u=@k94t9wR)P|LZEDtTd=GTmG&#fzu39lD3t@4B+lYsH8Qqb9Hu(& zzUY5Nu!o;u+InP(k{Lon$`oKw&X|bGSL{(3>6oQr?p=D4?e@A}si>vI0!2+Q5Uy;* z+3K@wKo?^m96fdhZe<@sPJ)y9H z*l`Xi@M`(NY@>nO{a#;l7%pF`@jO0$i;A=Qje_Dw5#;;_4c+KeEvu-=W1P+vh$x;Q92`>?ke)bbb9!0H z`h){f{nX{zju8Ui76gj)T-itu*yR62VhNviDr=xwZW?YAzlkhHPpAeSAL{{QBm^Pz z>x=a*2fdrU3dS9>dWoBKK$GwZ6a>Y{pd6xyA=>|f@I|ZuVL_;)agvdciNkE_- zlfm404o4-g)OS$&-(LoaG+;n9@`C@EaU!x2m}5vXNXbbk4pN2z{X``!`$Q^&17kWC z%}hy)zqLg5=&+w>>}$-rdY;c)=4_r2d0=1$F&BAOo3*+jVX{R5#wRx*=WKRtL3WU> zP(!G=*dtA-dli`vWxG`ghCY&^tmSbB1_58;!sj5haYYf=mC0Xi{;+R78IGL;+)lw9 zVIuA#_+nAd7^l0Xr-zA2zRGj;rldw%l%y0MaK3N00pu4E`>5AtU==LOT^DN)+#yJk z1FF@^s2B?{)!N8|E818;^^p@BE`$Nog1{`Gh{D*S1YDO~{Mx&gzwfmmbN=)uX?MXx z?$AxHIgf3}TC&9WW*^j1f%fs%IssY4eUbu(_&+HdCA zML*=ErjA?p@BB6Fcq}{2FA<{n5zf+!aV%0AVMVK8kE0@;<0p_IQ^^YzHIxTIJovVn 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

&7ZjmuNQ>^#U0zZpR`&j>KGLig4 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 literal 0 HcmV?d00001 diff --git a/33/images/addscopedrole.png b/33/images/addscopedrole.png new file mode 100644 index 0000000000000000000000000000000000000000..6c0723871f1b0a1d18c31211447479d9b292a237 GIT binary patch literal 69903 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 literal 0 HcmV?d00001 diff --git a/33/images/callersroles.png b/33/images/callersroles.png new file mode 100644 index 0000000000000000000000000000000000000000..00e896a515a774318460216c0b945b4d762ff8c0 GIT binary patch literal 49338 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 literal 0 HcmV?d00001 diff --git a/33/images/clustering/Clustering.jpg b/33/images/clustering/Clustering.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b5b786bfcb0d5120e7fc4682fea58d420ed2706d GIT binary patch literal 18642 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 Th<`Kf{Ff&v{x{^nC$s+zZz}6u literal 0 HcmV?d00001 diff --git a/33/images/clustering/JBoss_Management.png b/33/images/clustering/JBoss_Management.png new file mode 100644 index 0000000000000000000000000000000000000000..3ae2a725216c9259e330655b386593a9ea16c7e2 GIT binary patch literal 117411 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 literal 0 HcmV?d00001 diff --git a/33/images/clustering/JBoss_Management_2.png b/33/images/clustering/JBoss_Management_2.png new file mode 100644 index 0000000000000000000000000000000000000000..cb33462d0d422d47dfb364efc6a8a6526b91386d GIT binary patch literal 113255 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

!bT&CdAz^C&Py>aM3`t1|E#SHAQTP0U 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%0D`M0Fw}#F)3%;M6iVGyFi8%6Y1L$hV5TIQ1 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%0DbL_c3)G_e^u}+l3r)qq`zM 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 literal 0 HcmV?d00001 diff --git a/33/images/clustering/http---10.211.55.7-8330-cluster-demo-.png b/33/images/clustering/http---10.211.55.7-8330-cluster-demo-.png new file mode 100644 index 0000000000000000000000000000000000000000..09a12eb79a2d169d2409850c9e0dd58539cae72d GIT binary patch literal 44025 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 Bmb(A| literal 0 HcmV?d00001 diff --git a/33/images/clustering/http---10.211.55.7-cluster-demo-get.jsp.png b/33/images/clustering/http---10.211.55.7-cluster-demo-get.jsp.png new file mode 100644 index 0000000000000000000000000000000000000000..cfa5a7ee796bbd0e9aabac10f1f4b4acaba229b3 GIT binary patch literal 48302 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

    mX1)pw!IE0Nc}AI~BA0#c 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 literal 0 HcmV?d00001 diff --git a/33/images/clustering/http---10.211.55.7-cluster-demo-put.jsp.png b/33/images/clustering/http---10.211.55.7-cluster-demo-put.jsp.png new file mode 100644 index 0000000000000000000000000000000000000000..ae3a9e707921b5cb6e113be5dec7a3b5274ca004 GIT binary patch literal 49875 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 O0OMO`H!BPtzy3eRYq<^p literal 0 HcmV?d00001 diff --git a/33/images/clustering/test_scenario.jpg b/33/images/clustering/test_scenario.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c2487e8116ca7802e75a505537fde7faf09e4823 GIT binary patch literal 47188 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 CW%#@R literal 0 HcmV?d00001 diff --git a/33/images/ejb/mdb-management-resource.png b/33/images/ejb/mdb-management-resource.png new file mode 100644 index 0000000000000000000000000000000000000000..8de9c34f236ee92817f305ec994e6154e1f99273 GIT binary patch literal 359813 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

    _NX+P{ltpPY76_7Pgu7PU!172PNV;hpYOD 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

    lzb2k4EX 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 literal 0 HcmV?d00001 diff --git a/33/images/ejb/stateful-management-resource.png b/33/images/ejb/stateful-management-resource.png new file mode 100644 index 0000000000000000000000000000000000000000..b535237262e4316caf9ff4a0befbffa28f70dc32 GIT binary patch literal 367540 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

    FjjvZ2c$uVu{KiRj+vSnw4wgybreR#?h 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 z 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�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 z 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%0AX=!7>F2T+=y1$aH=T!1 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 literal 0 HcmV?d00001 diff --git a/33/images/ejb/stateless-management-resource.png b/33/images/ejb/stateless-management-resource.png new file mode 100644 index 0000000000000000000000000000000000000000..d0b29be828c99a2e15ee7589e14281b2144ed643 GIT binary patch literal 331706 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

    &%Hr{Vv z3WY&x(ewDgpXd2dZPt)mBJ>&MNlPG6f#Ug44`{iKdg0r%zK@ZUxShcFTve9G$k^ON z09Uiah}WU+5iNHv-cRq-{?RkKwf3`BwAMfA`KzB4v~jOTFSUahp8|suryu#Af?QaQ~wb+fDyh zrK|6)!N}$N>v?7J|9D=3oi-sdczIi-APfmwgb{JqUCZuCA-k$PTs<{03i(C$yURgYPI<#F!72rCZ9*IHD>MmSlY>J8kX+q(A{r zH91T>;Qpe?)u^~c`-MpjpX36rZ^7S@F{9*DFWSEC#WG)FHP(-8^?a4FpMQ&B)B8*?Q3kfGWp->;s6KmGzl~pDCNAi%T{#R$%bp4{v zpT8lcN%9{pZf69%Yb#+2f|{59IPsrx36DM8Ny?Io8X%9F9r_fGQ+rl0oTah*HQqAPc-fPfhHQvB@iRkgyVQ7aDKGLHbrq zpMW0#1h5T^GKM9%1ye)Q>%b~4{4FiXG)#KuAVX8FUB@5AM?E88C6fL*MNf240O3TwduvUaJF%`{JkEXy`~ETwhUH; zCC<{y&0>9RxkWIxVhU&?H|DV8Qr#tn4omzFTvHb7VbAr_wmWHaa1;*e#B%ZV()bl3 z=r5NutKa^|wc7qO(i?X@$^CtA*+$(eDqq|bp`LV&SKJfWG>!)|@+iG&rgC%SrKb z!xS~)UaY5Puh02b+`$OTV`w-%O|)QwAc?;Efj{Z9r7F|->xQvTJ1_)dTN6#2)e*vh zZ->798C4nq15EFth`lJ!!ueT(gV@%)^@sksdqsaj!QVXZbN-6UPpB{b0Fots0LcJc zoWs}6>~ORz0Q2L#CTaabh=5|9=z(wx^&EYFqrNi4ZyC9vhz?sI7K#cXLEQ=TvEZU5 z%FTQ3o8(2qwn8g|ZLoD*n9Ua>MWuwBbHck4aWZBGz8PvxX8EF?>h4 zJv~dhpdJ`OZ#)g%?qX3+$AjiwH>BtNSEOAx&SMfL0SKAb?>XB0G@}LbhndHJk~~Yz zpg_%UNbv%>Hiw9)qCTw9%ky#?dCA+V(OGreo?pj{m1RxLAIW{G@$FZ-|qZ)p) zL?ZeU_M-)d$Zjl&NDY979>UkyswOYnJBU4hnRkUyD2%%P^QV6<-qD|ncThm{_g`9y z{dMwxpu2GLl^~0|WDTZ6YJjLAG@gL_aKXxnkZlgzK5#)O9;kpMX4%;L{sg4ZxUyPS zBpXKrkTa?T6~BK{)@})sMdIf3eoGF4lVcU!; z@fgvmFR~bFOqZNOlvouPvkC|FjU^~A*>>o9aGl+fppT#7@>GR8aqCX8i9K4=iIdQ! zQE-3f&bBv&SIY7QTtr*GxiC5mDXFu1rCc^o6!cA-})jKb=)XL>cM%9a}!#Knc(|m9dmt9^#9Q zfEKrHSQV3k01&u#O1`xcS+Z+VBI0`a;g3F@u>~4|Ztt!yOL`_Um9i>#BOd7eZ`Y2q zALE^JM5c0vtLIh$IiK@-)f#588V%6p@O?4+H`lP@9iF5Sa?%{ultNTBIiGiqXg5Kt z1#SE+OLL6w=80d2?(eI&mg47yqTSE+{=(lY7gYSC#)*WQ;76hG)PoC*lHYKec3=72 z)_y|btXOS+pukowp~#MtAmYw~g@Z7chW1H{d4{WmUT^O0;Q$1N@FJm}+IpH26bBnh z(6uC4-q*ZN>EhADw@EkT7B1y^dI+73m_Rg|XHTta^+CVotmQOlg+II8wjgtsEm@<` z(k#NOa0~kP1JkfZP@`qTEYj6%EQZjRx)Ggy#Xj2QHM0UEA4`>qXFMsFyn;4yRh+CW zV7;BKC)AAv3`vUzAt^D@cHN8*bJ_eJst(NR{%MP5{f&iTTY$90(s&+y`&b*K^_CFJ z(H_!BpLY`PL)KF`f3$Z-!)-0#SAO{SWxId$FBaausl)GNKhy88oyPier%7BiWbj7x zMnO8|p7<&Dohxp8&J=Nr`UucVWB`-{S~eUoP|RvC4AtDL5;@|@5(aCe3Jw)WbNt$c zmyOCH3fXy~2gLKi{5rH`v!7R<&ti3+ah*u- z7N{$MB&P|Pdh<(-nMO(s@j-(%;VMyoFl)1Eaaf<}xsEH|d(RIk`gx4AGvNgr6fd)L z?1{Sto_|X7UNc+<8OdU)d&4fvJi7$LO{dAQt@EGB{|+}o1a(S(YXSVdfo{=l|J*^_ zYb(Dm%v$;%{Z?-o1gLNDBY<+HvO@++I9dhHbDrm%iIgA0)6GWOFlH@)q9eVF~S*w-j zB^8s!sX8{d>#q(=v1SQ{LGMfj)SS-OoTS1Z-KGJ;t3^3!NP^rfaN3%H;BtlVHEWJwQ=bw+0hV z%jN^S-$K1v2B6o=KBWfff2XI5HHq;gN$-T#YTsS!^k9!MQMH3ddgDBU{eP9-e`m9| z&i+gx&a$Dxes|*}GJd2Gu?#;`2t^Mrm>SK6Ez$$7V${+gU9Is|2h^{Ci1(=ns-08A z@|-UhWEFnEYCO-(QO4~V+C%sTpuz~qyCgup5R7J;3Nwa=*K@=$FaXnsR?Uv%H0$pM zY?-~ya&{Z!NSes5r z@M{uo-2>eHj)-(}25z27V>FPV^=1W;rm|q%%X!fDv$4}c*mBA4%@BtBugD>F5ESJu z>3why&%n@Z9<-v0*Lj8zP7Cx_j1i$we`?-N^G3)BOC&lN8eVyN(Jae^1X*hpty`Bf zHIJwld2mtl+T!b8UMg;wjtIsAvlI(`(;twvdV&!tw4}xEaQ!~Re;@F^iwJb0dI&2J zQL0}|^5$Q&a0#U-p%#o%)U5-MD7+6db}3!Q0@S^ym(aGrGbPc?sK7=(X88o39uJmK zn5}U1Mba&a%QZ%c;rc+=3VfH=qzL}xvp}8je@E-8P-6dxiqrU2vRZ&S91wh&@I~D7 zYX*(y$_oqHx}(HwJ-B+`xO1WUbvqINhoiknKee;aYW(Q{nc^mJ3I>+Cqhw~9HHQ6@ zie!P`HjoMvaja&!2rI#ggxzm_3vLoHc41b0t&0{t^CK&C?it_fp^ zX#Q&Vs`io|NW)xA%-A+Jt~18?65L+KijRd4ctPi`6U4$!pLtN15i7-vi-}FJs6I^V z{FOq_1m_|E)1_-r_X3S(I7Bh+HhtiqBsV?)1BYCdl%&^igGKPYT%5=kB2QVQwozWZ zpdW11&47`R`&z|~v6S1WQa;q`Ozr0`F=hAVYE1#%OI)I1cY=k2ESQ3s)t|7J3!%VF zEy`3qLMjrB{!!(+7R&HJuhycKR%w@YQyJw{6=;+ZTM5x&W{z@W8hZey(j~%%KcAaW2A85o1H-x*iYP1V1h8MmSWPFbq>CDtD z(zfR7F~Y?#D2KN` zrAEGMjm@9+BWpEigA`8-eGhX4MHnLEe|DMY$3{C=x{`zgo{?#0n?le)LR z|Jeoj?JxiE>iNAu|M)5B6)bdI!NhYw-x;nvQcpi&|_|K%Q@h@r7KP z@V{2(2vqM!O%~4n%20l-#jmd{PX@mdcW#>g@hy1*zwxHr=mDM!xdHPUNfIY{V-@U7 zEGwB^$$t)Vyf_6fCZ+iK?!VsSU)PiF34FeTSH6h-@ni+{Wn)#`X>`nF_Dv^tw)ynE z2Fnqvy^R5_0&@%5hB3;p{d<-swp$Kw?MPmGZFBRjFi~-4 zj*}ekyR)_R@;^|pLh zSNy$mLT*`{i5GE0#8#M0*h(7fmPr7%zo4RiPOG9`F-douOMs)RZ^%_t-7Yec{QY`x z#pXN?i62}#{Zx72MUo_PSuOQV2uZqla(1zLhnh{QVb(y*>*YgF!kKS1>l;kvnE#`A z`SmQ80$}}1tXOZpbUvSHw2D$Mw#eh{I~8K08Z578RsGi6<9gj8Y`eC|z1fM(2F;3Q zC29BFq!6@v#QGatDqLt*pMo7preNaE z3yWAij}HyR3|i0B%FI^L+m|-9edP6G#?0r#FrPySgRO11Zy9Z=NW?LUR@!RvSo zbnlJUKB{q&%ao<>+h2G%iJ5q?u7Tc*zgG-EfzNDbe`eWS)BJZOIh3 zuhB|bYBK6s)^f533|_EqZnLMj$tq0SSA9)#8R}RSUN7s~y(iu<6v1txoPigjh}7}U z=c~Fq-;QPzm= zqdZ6#)P{r)wfDRKc@qb5BT=Yfx?c6W&H-9{4=LXSyL`zjGGceGYL>3d%8PC4X$%8T zCy(?_ydljyb2X|MJ6KS+#kW&3OMZ~8wc~*Y*FJB_TTP2unWNkpbQO<@?&UUwafxl6 z!28I??VQ(Y)`uw4_l&Bz7#rcNV_?!*g!P(b*Dh)1h?Co_$1r?Wx~yrMZzs@&Rvf5m zJ%iueYg?bKKI{eIC62w^!QM-!leEAAJ8H4L=(jkhW<7Jgdy2N7!&1}!$^UZu{^Q9y z+(Vvzal(5!8j1y>urw1T6(2fXc@9dRsYrRUv|B#clnnDv6`SgXLFFr;BA4YT!=fFp z){fDLfFl#?2yv*$Vm|`DF%*gqd#X6vyAW0U^8Ws?drRlJxqOpWybOuxK|*0%qY;7^6!i);&*T;-oui~sr_sNhllxI@W~ zLA}_A0-3@Uxpg?~QFqySe%^Wkw`tMweuuC8!5FDmY%l5K;w@@h370+g$5f*$MN@?> zhA>G=3{?)P+Qpw}igWWDBG$sFEk+-8#tg&<&rUg#qe1RQiye9uw8~h6!7qaE!y9w$ zlUwCncEVt+MzT|F{R#R&no3En??DmGNy?P=)YJKu&jW0P7B zE3J7?Bn(H#ej~)TOYZG9n#^s{x~+NIwmMK0cV!8_;HOQC{8Abo&?G-|by>g;$*;n@ z{A0!bdFA}PF77Ksev*@-c{1SelgkI4n-eBp`@@ja2?8d?k9%6#?VS{tjW43Rvd;@G z=qsB-(8@C%G>tv9#zAOyDtC?FJWos}P!fM*a#O(2N^5;jDECF544Fw|L8><=f3i(K zcJo$kOImL?UUH~+D97LvF_a9O_S>VYlUG=Z`*_&fB>siAaEe}ML zF=*p2d9UQWeR)YVO|3vej$2pm<>|XV?=raS=I%{1J&Q)MS|#3V>3f>iDX`rW;z9fD zvUa{>2tTiL)b8T)da#3I^oWVuz=!)xiB&OU)Bcs`Mj~jjktJ&y?bisy8q2=%Y)^g; zG@S}OJ^Sos6TUOl+Qy}9f96l8#l5}(6VJ#~gqWQ}Pd!p&o@%_-~6avQa)d_Q_xxQM~?YWna*6N={&kfc#-+c2(vYa)ruk%^43hgNCg0R_rCcK@7mNeoxE6gu35)^!*ZFO^GBSWO+!rD z^GxPl`KpFfHS#_l(jNTO&=qt$*1T}=HQReyZo}nnY^kQj?O`weH5`Rv4)e4-vukZK z&o=e_@WX@DJ>JI;8;T`oe>YwA{Vt>zyrjgM^fcy=7sA}A1Ie0?rd@(hJPSLyBVp@? z(mgiW+So~06`b55n3T*rFRAS^gFbAewJ5JQ^C9+LW~uwb)!~E=me)O*G!){UDb!Ep zd_$OY-0p66IDd%8=DV8lW2^EFyar9notNJ_r7WkMd1{Ae#T;yPsFQ4i9tnMdlcTNW z^f_k@Y2HL>b{5&F$3wbalO?Kc*qQ4L`4~&p>{@J&S?r$-yCi0vm1hr+$F6PmvG?)b z6ByM>IUDHpcFU@sy;1WzCQIVUC1Qny4^77_+^)NYjaFW_OqR=!P*)bbJKJ21S!tOL z)N=SVNW1(-%dFVdW{o6Ospq}X%K<)5`*gRjs&=MkVhap%&5UHzE%{pJZLV8f*%`Rp zwQSLfW)o@m{dVhc-oY!~rAi&4(F1JOb0|s7kk$Ox5<4Q?+8tY=Gd8W`w;~Vc&K$&A z6VFZCyq(V2HFPVBw-iw0?s0N*5|rMve>+AD$+5!-k0tp(vfE!d@{B2xKyRZm-44DW zg)8A&#RLb)??r}?czsaKvh-wC%lc_!LT=_7ak zYTI#7XS^WxVdS4AS$B8mpI>hC(_LS$=FRBtyT>&RE9p*2KzY5tmsPl{mDR zGq4guH^XuD2tV_imeqih6&AOhiZ)R?d;+6~!WKUVvcl(wOX~nQ-x(wv)|y zIrE++Bk)*5TxJae_v*8!PL)DbX$!R+d!8@{QZGVQ!RTL&Mzp+{|>LXBhjASx=nVReMuqauC1$#{d!>Ac~)9p^4C0WXC zFFmK5NzTi&;tw^Wa6=62gkAV&u-Q1?cgEbmk>zrnkK-CUq+egt8eO-G^}^hnvV}Q{ z*0!D}z4OO?O=`VYaM4M?bwGE1c6Rsj=I*ryDoBQwKG}?3{zv@yb&+)Uz-w&R$nNhS zxxoC@gGv0o*&h)utHg8hyCRo7{*8~}HZ6@E~^V{2P zL2^TGTV+JuAHC!_-ZzhUY!@^PoKUn`6w&Zx*?Q`&v$U<5XZU2`ksj~*+K$QLf}r3* zJ_m8Pu$@_Dw#Qa&r_I%(-KrE^OO0NZ5#jz^wKRV?&~=E+PVuHhh`F;ud}OS9RK1SS z8&NWY2kN%&Tv^i_>&SHOf!TYHLQDdPyabF-p50H@&<-S^l{|C`>U`nN{65U(+?9Z>~dx#K@z+v6>yzdKh>*Eoew3=Yag#@p9?DACl0>^$Ag|Az2?E>0{xpg8Hb z2)QA4P?!L~X{iwOTY>{7o$0xt=-FFBDD+i-&bd!9sQ{CvJ|y)zgHp|Dy!1H*zUP#p zuAC?-M!zoA=vkCVfMAdB4%ONEgeU8($S8V}M(i)|spA)Ky=v z((0;27>bqb{C2%()PWq&`?wOm6P8`tD73vjU5rH_5Rqr^OUFRxiK9#Gt`G_GnHKT z)?oU>U;MDrWyNeL-la`nNOVl$%#*@c~jz2xFU-RAr2o<~lgVk;Ddxm^L%^?0SljySPu?`0kFrSysAM zJFwPp*j%r>iNd_x)Ld{gXnM?hWoddN`M4}K^)%f>nF#$A-gO=LvS)h2dY zHbVC~h9Ety+$AH}x<Ej}8t zNI|g@J>ok)g2nUknW~gT!Qw9K@97+0E#^7p+_IpJ+lfWpD!UfEmXYvB8__zk?fOLC zO?}RFqx%hN`JA4fJDJL^sy7U+HXEw28D9ICG`YujMdJP4Hkr3MH{K`x4Q}*LD>jL< zTyioupEszZ2C=l~a2EKim~Wo^&*#M!2d@dQZ)!X#p+(1K_%h5pKrLTCm%l$F1-ddf z6`m0g67|M&4}SORk*j$RY#MC_^P*4sdus|;b{g{N-*;wcKIA?eqSjt1vUCB}%cN-K zHqX+3MZqlot2pE?sn&%9X)24SxD0xAxq0Q9$9jut^XoZ{w=oQDP!hjd%QyBM7%WU9 z(q($SSY8!Y=(2ZhIHz_o_r|_F@7$MVhHbZLpTnB9qSwC>N}i|oppdzHqoc7TRXlT7 zrgMLX+)Qr6xyogAE4oa%Z^o!x?+ku%n)Us5BER#)^=FT6Tz&=YrJA^Coc`U2QSNcC z+}0q)YU$V6fc;qLgy}*fce!0GXQ@!NyQ-*yzbiu&CF(`g3(Lq%6*_`dk=e<*D%dqMEtuK%r!6~)o60k zQf(7l$>svK5 zO{bNN0@Z@|_F!N}2EEDIE%_ zGo;5-LI%c~xFH$>x`P*WYiP7>7Tb>4A3s*ieZv*0rvi@A|20CD923|pIj;G@JKXwR z$YssW(yrsQq>_w=v8&FaRK#J{_MfkFu&A?YH8WzS7f3Kq#q|@dBjerfJ&~kAfJSdN#zgmjUA%iwrF*ZFec2(EptRM5<&AiP?(t@|FqczAO~D0q1& z-D~pgg{W4GQ>ODCOVtQ?r0rG6xY%)Ha)TjF=qtS|-ptssJNbvT7CXPaxU6b?Np8v4 zYYJr1zL@n)H0Qc?h+V&sm+PI);r*G#iaxJ~qDLz!O4)Y`n_EA!m$u2JHD)PMXr9TB zEg{>eGoDE54%x=v9Be=xSAYY-nBuZ&A)fsgAcezQ)h=G@yQ%3|O=DcS4wHDvYBha6 zURsWNA7!`aM%Mek4Ibw=FIL8#%7A(O4{ZbdyoJU$aMsopx!i@DFbZn#md3G=oIgc1`{RiYd3Szo{Y8BG3mKpK z+*FC=ecYqbuR3~#DR4Gfg`Vks+pvrA!u#Y$!|YGN2jSqD>i%!v@5SQ zhgl!Q$`3@YxlP9#^h}X`PWzm;u0HERWvrCIdhS$fv#f!3%k{QB*WsM1L%mI>1#Chr z%v`@U9IHY%9PyfTyg->Q&H6T~LHl|Fp@_AO?X*qFux*N4v(DVAvXCelhE85DLOtS) zi6`oCeAFJc=rt}Ax@j$02Ka5ex;#nyFi2Bs+=E)$=}Z+(B6nx%D~{hzOXSWFbPSZC zTu%t2rKv}Y)Vx8aB;nbZ@+{fPTv6<14Shd3SX0c-K)vs>xKw4=lTYiP3+Q7$ppcKO za!%uWAj%P!ubooA=9W&yHk#Q*s5e!msM~Db+3fW+P9#t# zHqAJVC*Az+VJ!KVw|aJmpBxyPqHS;If#R;*rVXCwcRz}EV<`ySZenFa%R+ikpxt$A z>7mo`UPW+_91ncmxqCGuEXD0T^M7n>x9Kb4X7W&+qP}EA=m^E!`icb%D&=XPQxpG` z7e#AHta@%1`MCC3MU}1jy)b@kw$TJDhG1#A>NW9k{`%h4g2i$@D}$bg`D+2kut=M- zHdcm;yWn9;o`I&qMt%NJ`95Q2$v|hC))~{3BqJskx72bs?urP?)-D@RQf8_`BeO+3PQ1dM+Dxzr z4%nW(L~EII=#WyiEep-T!9g2+oSFi@+pMgZRXe+uX3j3Rm~nVIn8^?t_4@@MI!oTR znQBMWwxw@p+Fcl?iw96|PWzGMwM1COvv@ z)EZQLxl_f(+ph2!hprS?O>vri)7qwm@2R#XJCuT5!w+e2dkT^|s+8FW6WK9+k&n71 zL@_4uBjy>ETG&wAWnLBZC5%qzsyHFx|BmLgYD{Le$Zkg7W=?|m7_(x`6>q3_w*qOe z)!I4E1{cqU9Urtb*ORBGjFA!%O*#>`m$4mOwP?f@E*duu`;h+r zrJMlTropvlwj6=WB7Z#jNFZRCW3$Z2A{U=WM&!;#=tnlB$I`QLU6K^P`1$4Axg;q4 z+TM4Sy2(Bn+ei}GGM<^PIB|RZtuWEqrP}@Iaoz!k4nhFColRT^t8FWLD7Jdc-n z;)hCf$mLq2fXl<@>Ir38GGrc#H!tO7Ki_J2&sP^wWc3)>H>)Ik35B_{jv^KT>e!h! zhS}wO?Ipi{MV*%q!ui3HzhscZ8tOq_P1P(ODpEY6tM z%6&>8D{U*nsZVm2N7SpZ)shx}vs8hbx8!@C(}#@E=c`^eCbOGPX8x#4o3j%%omW&F z?g}=MK2Qi-S-rGYm(nDPZr&&ZjSeegZ?<4x`FHt7BVxsi?ynus5MFhgPs8L@-a!kGz{&InT=co|#)Ak>Q5k@Z?t1R^5y8@xl`?+{xqXXCvr? zNar%TQ1>pYujFHrPd@$R8~RN1{cvfcG?|WKotR9OS_sM7ON>I22u4fkvZ~=l>Cjx1 zkbRx^9eg?t&8oVfEZd+jVsY8&o!6K8yM1sA617eAlQqhzFu^!mDBGKHcj;n6A&O1i zapw`N^m4XI+Q`eUdOhj>%_&Mu%OyFh^@ft0W^dT2A41d~;15f3D;hIccgB~`4E9a( zaOJ)HU)t)w0_e}&G4nbhC6DosKC1i)*^6OFN0^gnR_Q@#hVIC{mcv*Qf%N#@45RBX zdp(JdWb6%{FEgHX8a&7ON=}OE^EgZCX7_G_FHgr>s>#6o*$~;0GOf^J<4fX^w&_%s z%sS%a$Zsr8g5phcrP4y>@09hQx$NjQfH@0i+#eMnvMglMk4P8-ck>$^O6|zvowy1{jOgS!lA7myj}59 z$8h(5M$c;bk#=KK?l*~(wW|cs&B*FeaFhP*kVGIIerP*UPkqyY0Xbq?jteB>785>c zrbBcV3MpDu_iGdHt0d}4&xV={HL6ahxoe53#opo)Yi(wb@)E8eUIj%3| zImP2_KLppPuktv}2kmCdK`^FEM1YO|$KHF#WBva9!=;o?No5rYWrtKo_6i}}X^&L) z-kT&ug{-poI?e16ipnZmc2Z=I?Ctk@)41-d@AvwBzW4pl{m1p6$LCWy&-eQ{UdQWr zzMdnLZS!BTYW7=XN(*GT(ck^N;18Ds2mY2N*}waS@G%6r;ZG!sJTv?AXQtZ`oMob^ z_Rar*vzQ2&|IJX{Pw?Ech5X{N_j_e{}5splHtGbI;n9n{QDEf zS`%JGKuCee??2)hO$;qY$Jc56e@hwhd<7%~S_^HJX4LOLLrD$)>ERox-~Z0<|MMHP zy{QJjtI;;=(eF(Vq=9_Z@JsKk{(RLx4{QIYJQH~Iy+yhB;=X_W-Vu1)MuPVU{{4cW zynWcL^w^(0u<#0b7#@CHLjV2~THm0o^WxyLRt9#{??2@kw8ur2-i0P^RuB01+f1BV zMaE%K5JbRl%y04MSN!!8r2{UoqeVQw=++je;g$7!CyD=l81*810z0EE6&+wnKl~pI zLY;ofz(!^^z5gsf>lEZ;IUhzS*8js_{x9yLJ_WxC$<|?e-zkLdpIc~M|NUkuRejH`>X%^T7_cu|MLe9S_WWH8$jf<{ZTh?4D5sGs*nnq`$->*UvI51W-DbV0E9JR znkypydk6g43kMHh1;;}~z#d^#aNN_CWgY~PeX;`Ep`pUyi8x*QEua7_A!z>#`wUqs zLmYd`iE7*}u+Urq38CI?dgZJa;O{vIv|WKqAPVyt;dhn0b$3ce{tz&`z@4Jw;Dd|myoFI|7_ zC!rsrW}|ViCWu-E9>&=;b1|3|-h6h!9{iQkmJU#-kmsL9PCLQaeMiU}dqn>^tlY|# zNW8OGsTF;Ix~&c_Oj+8M&Jin3e%}260F>KhG885p@U3C@i^PoZg2R96Tz;V$)&i2q za7{j*Kcd)m-CB`;60)|WOVwexH4T;tg`jjUigKK48wtuFcTb3u`3x`q4ia_>xoQ`i$j2!Z zEXpTnRX&R4lCWrwpZ^ez*!$*49fcml6E3s^h-*nl?R(G%%r*KpzN89D+tbN>JGrO3 ztPq5e)YW#cAK>ev3UqgSMm3C36gUqf8d9?j_eit}Sk>_X@mbBTNu{YSkir5iREoeH ztPfsp=!}g@=>*6(Ns4=m7w<%1@%g5WZ&mz;GxHHyMEFF)|BU~R%B zne_nor}82G!8Tp8?b_;<1dp{A%TEJ2>ME>0N$y-mr3Oq3Nuw0CO+(^@Y*F`Qy&AB9xr_q8fueQH?tZ z_yHJq=a_-}Dyy4CmqRA(!p`l=*{4coH*}+7dciIU(KvqwwQYTZ3fPdbfT;*ceAkd4 zCN^==4J=ouKWSJ1(>+pjW1(ic&m^}9bQD)7;-3mP4jZ!}4%e`odLc$aZ)4Hz>s!C( zt$42!)eQmOKb^^+}RDBrC@)6xY+#l{PRNgg&rSe z%7dmkc5xt|>jM&NA)~sRhqzCU`G?>iH3-J*ORx5cZ5POytIvDtQ{3*}xpXoG_>jlU z5W7HBDfMQ5=?{)IP*U_Daab1eHBLv*JH|gfbET$c${p&2a^elYhf^ay*eHhqyKXJS zq?(pjb31hbUhQo#I(o9yCQvg)<&VWRVG8=Gt9&<9;u*D=OAebM7T|T~Y;L8dWt&)m zfLXmImMz{n_ z=9fjpDu~r3JY7AgQbq6*x(Nr`hPWcw-SA&sGaK5Tq0P3Zv#q+EdB zw}Q#~45Ief{Cs+D^SRGWM%BD{B6_*k%W(o8RfsiPO5i*~o? zJf2~gHh9*N(5OXF?(Aw`by~RB;b4je|&>Z2| zo1$Mp$cf7Zt(rQrh_lWKbCsk%Qqn`Kg!dMT6U@(QZ+z=|08#^Wa4^xNK)(kSmyyrT z@Y#*nxt1%u9^ekg@zW=vLae-HN$1DcceR6#F-H!18xuAwAl5?w84Z&T zNR*a8uBk!UuBGO^2ay$pgCQmMB_(VY?Qx+vp>6Uduz_5c7M1RYsB92temvO;@?IOn z2ndps2UnK)M#0MN@k8xId(yFwtqCGC;GJnLWqXUyd8xj23dAxFZ*-X*K|wv>;8v+T zKMuBwtx_Z$tqvE_ZStk{B_MC;!@e89zhSt#OK>k+S9O_B{vh=bV(+aecvE_62;x|t zp{S|?Q&DV}wz8_f)qbp)*jm<7>t7XGwyXyEcu!90SO0pZ-EF$77r(#zrSpl{9O?&W z@IF|&-}TpCuX{)lR4>$Jo`;;L$4c3qFA+mxKb7O*<5jpSm)k2jz+Q{;ecI=>8Tq2s-~%lsV_%Y6wv#+{Xu1p!9@- zo@Q%mv$hNE@rTp{awjeWm?`F)BFQsW)QSvU}tijQzMSZP2Uh_8nbr=XbIW#*cigjNA-=* z;o%*fL`*+4UntL^rBk3sahI=|$kVNzPEQK(SI>FvFH8$n#6s?jIFY`q6yfXnrf<@2 zk3^dYUE4VF`$0M^FB%BOuMHy;QNrgDPeYffKzSlPwh!Onh@Y(}%kc45dL;Iy7cs0= zilLG3SY`EogI23A$%}e0u^|(i4*kkow~~$p#I3v5GIV$uK9^y=GPa&85*Zm|S#xa1 ztj1`~v4j&`?kXiq3vRyw*R=1LZM{#vdKqw8lNbzO|8oodc`Kr<{CNOZcKc>i1qr=A zYNj;#>V{viGXEKF$=$U|m-RuU`^>R*^$D~0JPTycr2|5qk&wz4(KzKB)!26#1juMh zqxNJ8$2R-Q6)<&B-#SEwmh@YV%78J~TKfXZGyQON_lA>|49w!BqFIHvMagQXP0?KY^ zpav~+ccC|)y%s--c76dCP07hE-p$fzgF=h#BjqIlTC%G?!Y17MF@cz_acAGm!$wi= zE{Yi7A89{c+^wTisCk;;uPaLcDzs4j(y zoK5p#vvln=P5vV;rO)4W_hhL`drl%-EQpiHL45ShA2UgT{Qg^RnCji-16tA^b(lu~ znkyTd8{n?+=y+MOKoeT`?QSLc&WU(C_T(ou7uEUQx7KcA6EaUhP{l+=tc4%e8F!~? zr6CPA%|r`CElKwNeRYd*WKR6kp};DVLi52sH-k%>rFoD%s%HKSzi-Vwk})W8(ig+n zS>@)k8uJxo&v{_q+h-Rt1&5~r=*%o@1sWuW<~o<$l$u;|D~w_>CdM}@@Dx)_FlHMk zgK`oWNirsOYt!=sD308$%S{k;gY1C9iRv5DLo`HLAaZMSut#^cS-M_Lcjg7Zn{y`%KL6V7)h{>j&qB~e>@a8S z^6MKyNj;NS`W~ISrWK;NBiHksge{?Yopx6XK=BEB;l)BW@L51W=Zhbd*aMhQzK z?Q^ng2*E1qA_>Kq?dPgf8<_mxo3FQAU#vqrsVWhrPI#`%)KQEjAE69&Aq;R zratzGI&H+Fk}@9N?j`9Jr=UcSf9l!Eh26N-)z2+eLj^6L4SGK5QcNwo@p7BYu+J35 zx>zY!&26vuxiA{usg;{(`G_22nYmSwWBr{Qx0ck@j)wUd+&mxfCLqIT!4iMtDDY{v zh&ZrCl)}V2@IRn`tNM^#;pB&Ssz1M^w&dblTVW0DN;`QYAaG3-aUQm8_UTfW`yJDHNloM8{6r_ z;WfHvi1N^)WJM!+PZ)_AU+GF$--X*+=o+8HJ0g|R&y_BlUAlteEqo|}htky)U}vCP zeY1t0gDH(T8TaZqZD*%_p8Q(X0L@I+1OA_bup37kHZ{ z)X+`n8M-p>F|s3O!6hA2h#=p$nf>xLJOaHIEob`@uyHPJ-@T;Tv0FkPon@fN&bLb= zfZJbut3;Y|%cj0nzF)uL^WUAl8J7Gir1_2pjJT$=dCDbZyW zq65QPg6+H2k=&F^fx8&eL`$!*v2IRFc4{SeX8-u70l5|oQ*K0Sa&=)?ET2xr`wLH^zz!@7kazBJzR#D3fiw85CJV|4Wx}zE-JWHZw`%EV%s12H$?_+xL zj2tM135uy~HSthxd9kOc4e5wqUI3({-3_8+E|AgCuRjZx7`HV0;X*qyBr=vLV3RL* z?e0vb#r3JaEMx({c#m}xg)$Ow<44saBW<^)p*}d6XO^Biv#U+?Pb!N_j3w($9_Vly zw>xty|C`CpV{Tp=%+s%!U=b@5lS;AMD#_=HkHxnJ@3>AxYZMv|XZDV_gbs#)L9~o* zq_GQpReHnpO~nK%G*LU-tII_3lQ2m4u>Wc>eK-+9egz+J(7s`t#nNr16~NuDQetg) z=k$4Ve7g$$g{zE#&6uijzKrQyz)dPNADORo%Nf82WSJDce5#2QJ$8HifO7!PHM)6Y z>1v(F3e3ooeNtmUz(XfJqb9lN9A0FgP+6Qhv<;nJ!E+g)EuCs5o>Y@$G9o=Jw^oDCXNB zGUD2uuLP^9(TB#Ea(0vMwPrm$s^mtFk5TL`%lNh4{Ek;(%w(8!VhQeEW1G#S{x>~O z+P%soasayid9=3teIasuW0dwe=kWx0ZGm=>#Za|Xx;Rj1wv|MqW2m>3i)+qt9G5TG z&6t)>gnI5c>@pEG%sFTq0{BB@W!N0s%M%B+ytp&jG=tO^N~}kdS_ETGVt5mEoxr5F z6k?>KYv@qdZ^dwT8LiR6t6U@D5+HnXhS$;Z0^!}J-Srj^TJ9dgNV)MuXcV1_3uf52 z;l_I!t@;_9#ooI3^c%W^Am4rM5RVRX$4N;(mz5=Q2~6rWur6U<`PeKPcXy51RU^0A z4o^10Vls14BCg1;)F=Xr9#uJRQy4%t69r$NiY2FFmfOS8O^W+mtZ3 z!nbYn`WsKO8649rpVcs|Fx%VVUUy1OBMy-#~QoiE~k$L-A zmQDM1vPF=_7s#+`ST@wL+nE@!+x{e<>Y_j%3ZT*}fme(d9}ayj0rmo>LzdjAIJa4a zJc&DXwl^=*Q{arior@=zMRMPqD!g(m)ry23wt>)HzDx9SCejJm=xd6K-lW;G<{0a{ zL^qarRNmlw-^e~4TZ{ySoEDMv-kjp9sd=L-n38w!I8XS4Xwvff$OmUpv&6-skh_!{ zEPkd?o}FTIn>^NF!A7l=rOS2g+}ZLBtPc=N5@PaveqHF2(#v`uqNf)O?^>je5%W>F zfj4Mzy=;i@_v0;`TCKEP=LofPPZ)izr1AX1R)t?1=yKa5shuexy`@EK7yV5 z%hGRy;Hx7J^)c1f@4KV6$(hdHi~**7g}vGJ$9kDI>=XL)M+2iRaOOrQN0jbmXjiHy z7I00l_HXN9;y(gT_sj$&O@pROmcH=p7*NoTK1}~5E<@c`U7`Gw0nPy zBsSl$TWILU;!;oDw0V91Apfm9{b`YmYsr+)c!?ggu~ml;$cGzipg**YrL?e>=~?qN z)Zys(#@t3_B0e!M`#wu~@Z06m=tN;C(@7twuc=X=czug$ugDDD`Xq8TwIM3%i(nqtto>2OLVo)nyUK%dP3$8fI|35SyhBPtWHGrI^~v3r zolCcL-`uOFgxYxgPSZlvWEol{t38nfeBUb>#D5QRevOLNSouVKgOO5#Lp_yO`boDgLP)2aQS&1HIwhT2*?}#4rAMk8h7< zCS+tSN(_}k`@6l3Q4)#*7w`=XTi+MNu*+k;NoShXFN3?Fvn@T~q8(+1H~PR5m+>Q< z7+FkeHP6!6P3dk7ReDXH8>wlI~wNBOp9U&G>dE#(VXN^I&Wi?`R zrNYs1b(1fBNE}tA>H?A_#hnvMU&On*JN-|;&im%m!CII!MvkYe)I$uZI?rTk*?pMT zofC2T=z|EAl?zvKy`(UdYk?kHwaO{clV?`WX}|c=2+njN*JZ5W;vzO>vmgP8=Wa^uqgGKzaFWgDjH)#Kqqs{HkMi?mI1hWy13q6Y;0{{d^46= zJFYq7`k1uv7>_wBzx2m@GJ;y^WPl}9FJeb#rEtf_q+wL0Bd)%)zywgZZR)Isvg5gc z4P$kvZmQ)to>^|dwaQ%X6A&k0=sVxRYM7+^wy)4AL^ao@jq8$Na^4H|wd|E!x#D&5 zIJatfjLtkmjK+ozq0D=iO`>dtqHGghvaTtNQqd=uocn5XG_)ud8gAo~20SeYHyBQVW{IDgxe z)JLz7No%~P7(b2Fzk~6Uk*YWz9VrL;p8V}k>Q-P6mG>Z)ODW~@I@jywi%#l68f#ne zZXK}MmJK1azQMO;Z5b@nX8<}FTYdfwI{YnH_pwZa7nYCGwtNm1LQ^xh8 zgA1%XW<$G4FopYs-<7hu3lZA`q9j_ObcT1)w-v%-N?d5qg)>xpqz3|!86*kjFEcX) ziqLzmwPh%#y|s>#AcB|Yr{FDQsw2(*_8F!iU9FY2Lxw1Vp(puEpt@r-l+p1WCjh3m zt2PoQnKq6%KuzDWRM{}yd+)2L{ML2G14-eGh6MIkiEWwi;!-R$G&)WiOonzY8yPZ~ zOukj@ks4|~5#=KwXDQa@mo>rH)kbJ9=0mR6AVk(LtB5C*nowWUs+QWFbfOI+v^NAy zR?d@N5b^+m%FrqeCm@&Zed7lg<{Zj(BAf&^@X{G9SuK0hanhN z#GOf{A9yF6xWSi7eBy3;_wLSWH33?FY4wr2uXlCSW7uo+m{_T-cG+@CVQyKi0xd6X zk`ZEl0mDsJLjvXQ4(`Eg89vxuKuR`wlnr^A5Mt^6(;MQ0{$fv*Pbt zht>hG9K$GOOn%DJ`o_}(Q=|z-rK~TJoF=n8sf&EA_SzA^T@OB8cq$B!D8&iwD1TG* zpckuVyd6hqVAV3lf-lWj*Y{af?*IUrN>OF$4>%@!+Bn~aXwV9g*=-o!OiMhXU(9Zp zWTTQ6)T~B+LDyGKNGJ*xOgY#Gtv9KpwSxrp=^!%`HUhI}WS3Q8P@0}?1^hdGPLM>3az5d z)AUUs{>lS7+mQR#@a1WetD0@%^nF_06 zZ8cQ%M8qe2BlCy8am$?f&^omh$=F7X{}_TWuci6BppwVcw7M3TUXl24)(qdYb2ZCM zxIjePRp9R}F;j`Gh*i1K>)Sa+sZ?czOu6XH@LjE}+d0iryVVH>0w&mH-Yxijbl@{F z*95kU11Cm()w>L`6XFQni>WvX$PQmqeks<112@5y7D<%!)SSH*%py?unbyx@+qx8D za+|+J+cZlYm&drlaB$(v;Lf$oVG}zU((`OwACg+6!)zwIbLV`+)n7Tj#J6K$%W8Bj z{CbMgP?0z1+~01+{wyc$;vkPV(c{Rpr{J^0Oojz|i^ORjod^y9v5tNe=6aB8x55IYn}|Le?~euf+nOiSC3fKPem`7K>ss&PT{sV^H!?6dtHNt))^MY^hLQ^ zS)+QIZN5Yq0XvxtZ*skLa6=>vVZ4@sbcZUj4I|DqR9(TDXUBU`M~tptg_&opCxs~C zqm6{_&$01OC0L(Uye>X$23-ew-t>BnQaCCw06Yg(a*lOh>P$T8<84)A#}S8Vzl}NI zV-`20G`0c#$7YbZd%uwu43DOEwm0c&$eqbKy!i;N+vJ`bzas~uGF3s%#fiuVSD@!w zI=?ayw&f0E^+tl*sFIf;sAKAKUAT4w)1sE3?d^iwQ8VmUwwc)|~fMde8*o{jl z%8YXa=dZng^5+SVxUP8}g=K^d@6CPt2*q*wD8-p!m?=WGC@H7;v~R6M#o`IgXHecx zobuL3U9%14z6n-^W4X7*vCRl?wmPMMsNxo}-GSF;w}PYy#Tk@aKB(F*hgdM)HvuDo zbYzfp*CRA^rsTEULK$6kzy-sL4%p0WT_?4kYuQJ5M9otS)IBA8Zm@O)?@*rQu&_g` z(9tsRG-K_~m>}zfiI*MeXDTkky9o?#pGZF^fb(A23fdsvM?;~bm575)Dd(xetD7)? z(MPViLm#?Nq7ZBDj*|3}lnL#wArjrNNZUHaQZb>cTAAFTohZnJiqmoAmK?>gn8Gw9Qui|8IgA7nV_CdjFoN~d`ScFo^0`wSe2Q#F?Qd0hd!e-@$Yje3YF5-8&C3XmiN#m)tYf_3gT^NT z)3i&ghHarw4fhw7lK zL4GmIFsa))_EQn9F9tD3c7SoANl2)4|CE#Hu53d5Eo+mZs!B)-xgCqSpV7?e8Y|5& zvoHlMk{w0~2?V9sk~!fp;oh@Ks*9pEub01XkbU z)miWwE!^OnxgU}(HPRj>KH~PwT>WcYu@iK?nVpS8Be}7?MQuE9mtmD$v)_@ zp=sOF%UQu5-3dW_Uu*9STM=otmreC|PmXuAqKy+w&X6jmBRL>d!9lawQ=Oe9OD#Ne zygb+{ol|X`YwY*DBX_nMG;@q6RXa?kS}z!WQ(Ke2vA3FMkkzbsIPp~L(DFu1Je52V zKRWDr4F|Rwn{8kX2J+87EHlaX+`X3{19poC4C#}=)V3C%J#@&*_NlbJzs96Gih^PF3X@a9X1g*ywcxlis!q%6pWA|BwPZl^c;MsjPhy$$BR%tRk#jB}{k zYW|`I+&XX5DW;?sXg1;uuBM95%~(@Pu43Mh4hGKZab3E%Z%duy{!) z=}j?xiMM?tS2{TJ?1l^<9rKn!T$|s1=T@;hr#2QK%-qMx1>IR|TXUam3_a#ak}ghX zXTwF@P1=fC`RxczXrvVl;v%_^v3K4tf@^ekcS#SdE4BVkhn{iG<*~uzH9-<}0p#18 zb!_=Mrq z^7j>|cVCopi_(z}M-gTepu@Qh+)^i7QFw*f=()15{+BetVY7%{MKLYGhfGll%}m$* z{#B0=HUj<9Blp<a|uzJt0;;ED!f`cJR#=-57a?A$G3_Isnsobt@EK!_T%sgR!%R=K?ioT_`LzpO>-5oyLH?Le z>C^5#oiBOaw;Wet%0nYeTdbXcPcA#ASIeBjBik>oh|X*aIt3t>(*^p|ITpS7DHY?1 zk2QhlQ}fPU+k=JeNe7S|38t2$r@<6=tsC(T#@tVyDoT~}UwP)mc+tB{)09kW7sh~L zI3Eqmd~!+oT}#cr=I%o6oJZR*9lv`CgbGfZz>upYUT@?jZ4?sW>6t(27shps^v*Ca zs-(Fddd(h-DL{|Pqp97hhV3R)Q5m3)!Ehi>y}l|33_8>0`IYVoovXeu=9{BcOf1%B zt@XJ1idIN21{(%coHN@QZjY_`Hf)mo75eB*H$LcPeF??R58$3me@hFoR|YAKN)61% z@g}MupWbMJ_EmtVU?+a1m>ANd{snvg-e)KO+wNl2Fg!!fj&_l=OrkCfK3T|cLL8ft zZ6r__7sH}Z<+}dWF^b&z7TN}JVb0Z0ocG35QLAt;G#)dD$afWWdDWX?Hwl&7Je1q$ ztM6tc1~jLDKedz3lh!%@%r$?j%ceJ0F+$qL3~^!W=5Y((q5WER0O z9A`j_D%`x`(adh^gZ;c__0u{-eB$m0ss7YOg?cd$-*Fqoca(VD@vl{_N@}zNn?-6R z(y>DM>o%6B(kjEh@*4zH+w5J%xsj{*|3HEMadQ7O;+-YSu|A4QFHo;-PlsSmuBl7C zXTq?}%I#++xoyX9KfV^(9Le5 z?+d>p_}?%5dw(OZ`G4OqvO@lMN&o8_@c%dgei5|(cMt!Chwp8v|7+1obWGhCF#Oj~ z8rh5Yq69M(QZ%7Mk4ZJ==-SFsD_~>D>*YUehDyHUMb5wqiiTClPa>Wm1RghBcTC16 z0jy8n?m6?b%;h77s4K3-qFe+II7Hj-X#A?#zePm9>hKK0OmdM}o`dW zQemt_&2GLL!%N~L_7j+A^+DC@XP=wa*qOY+(i}O6zioKU#3X_>(17A zp&Z#be(YH5((RXZ=ckUGIH#JW8wJr8@9bs=dgHnwDNPe;LwM^Qd#J~@yes^+$gU~QhL{%GJo^BXQfO2%f8JRylTT+8J( z1?u+KQT%n}l2K$sgD|E3{Zf16`*Q$cIi%XE4?QxM$YC@f1wH{twwu;Zte~JcUs~Ra z16EoFerG2{JInyUTgI=37gGcZ8J)_}AdwRdMJyd8-gte;jDi`sq737OkkVWV(Oacj z_PsPiC4+goULZA?bG-?PBd8r`$aae}p+M920T4sb1nL|762~8Rc89{5HMaPHwlAI4 z{iFs>N-Np*R2iUeflXwO_8}4T?nrL()&gXbSL|+9?=Ft%00`Ngrz`T@m1X##zxDZH z_YeEF-zQNBeq2ZUpFD)^4LoxoEZFNcg<7Hfl+sn-AUPFX^~XNnyL$;DEQW(U4;|&k zHg7KiRyB05eJL7R$)nhS!iAP0c#|qEZ(hw6?iNJGqZ$3e1H=pi7Xx{}5~?=jA~6v& zkXhs&g5(cYgL;7fc*xM6nuupC+Gc>v;?=Nu>F|-XlPwTFak`?1-Dn*W&c7q-5l)BM zfw#^dLm`L}nVCW|mw8$El&E~m#g>Dr`(5U1kG-3v>OZ_$9$9?~lLphzUqLkXUGh1@ zOf3b1>x7vh3B53Q_rzHI;|FLOGdG8F6VCOaG4U>IxuDND`oi!=nHxS}IK zjm70=4;d(S7YdV3-hzxRO(@!~FT}#EI+u136&VjCBp^yBjoaXrM1Mbpk+))|IBG~o zC=~=r)K=&3zJFqM^ql2=j%DVM#XPr&{R>zS6H?>I;}9(Pk8Ay(0=xec<@uk3*Eeo= z5jGN$0?6U2qvfR0CHga@6p5|#LKxGIS86sC>GiY$$PiwY!{T%FT!yhB1Y7EX5n~Iu zyS3TQeI9JkB6^4r_0x1?v-lwWq3X_4ZD2Od(e8j z2y=X5sa#T61wmOU6q7Qej#L_-6b13GQ0wOe49Hg@N~BN=1#s&7hPjkY(Xj**CCfTt zp+1g~#a8#99u^AwcO#*Hcz5_x^)mkBZd1nXj(j~SiuB$>qXLa*1d*ysGr}c$O%&z; z*IL^dciY1;XafLY6Dka*0{|SBLaYq&NvExzO28koC2N0m0Dv{Qzxx!X(REJu-aDN;-q7Aj$FjX0m;ZF8Yi6&bom^BSYF+ z0;a}I>52g`q^h_-LaH%ACJJaVWbho{%mM-V=Jefbq%x8sH@wGk>>{Fl$wPkLG8^`8 zA3yeCw10AdH3&uZae0#BkuCRcESp1-oBi*MjEpJ;x=Tt5FoKj2O*o5pH&jPaG%7@f zo8c5`U#w6RtioF9Sl(V=SMc5IB2<#UEjk0?cUCZFa?tIHgkfNP5kyLK=OE`T9GBX$ zRB7Dy)8oELkgqFyr^wE{B z2ME35?c}ZIi!ZNT+iz~D_g=CuOnU!e9iP4hGaZ4PnX`pu^EJ4G(Ofo~z!Mk%{iR~; z0vu9Wpsd<1|M9J^B2_wSW1U5-d@UiCZ6xFY%O}{I-+(YXqJtrofy7nQFfwl2bQcg= zx}_unVnZEnk}4i}ezuOn!}ch-Z4gCGqcU-7;zy*qL6f0ZL7fUC_nh45B;B%_cxl?P zXV>Zf-+l|~qh=6g$*H2SKMtQ7s`f}=?0W*4Y-uo^-92Ujdk^nNvOhP3Q%gAcLJXfp z4hR_CV|)zSS*4AU{s&Tg>b6`T6EkZ;W3^U-_Y|cLw<}e0KbrA-jK=y+nMZ|ThM3bJpgqh$MsknXjtk3&-UG>^;U4r*c zbI1Rv+I~M?Q3#cxj1j%hd2D2W@E%(tMrBK&J+2bT=lfmkYL%y?kwwV43S}y{Tvi<1Ohj60F zT7D=&MWXKNFXBJ`Y{{%=(nx@grmoVt*vkL^p_GJw)X+q*kcq1)gPSo=}~A>z#t=HzpTI@7Hv& z=e&dBBN4{A_mU>*;ThLUdP4yeu*NLVvlT#5 zb8T^gNtqRCIT8iuUI80y9eOV}RWXY#kcO3kMtX#+o8N7t6dRX#t>qi2^rW&ppi>%n zbn4<3t1Rhk2CH;jZVuX$6b*cgED3%YtHWkjxdKNPzy3_6rrkTXp8qGu7Bos_KtL>u zITmix>SJhNV=XJlyfZGglV=e3! zpLt(qe@x$yhOpnQCXn532FZX(ddmclya*JE8-jsmxkme6aX$LRzV`y<-jp_AZ=nAV zz|y@V3+`oF&;oAXED-pRw9IJCC%}AD zF+!wR#vpK%(IsO?C!B@(c3cUC$)~IzLW$7K_a9=Ta!^-YXZ|HBzh0P3qXiA)h1!5I6i z@MfX7>c~$pJlwSgvtN6p970xcrQ&GR*=zc1%Nz2o>_$-txiCIZ_!g+us)+Sm&$}DA z@88ga_AY8J;B)nlrWVj!GWIg57uM?-K{<7^3k$aF?LA+}kd=Vxr>9Pe4`FNy1qYAO z9OPOU#cmSL^X2}bfsdR+)03SUAqEu*BEIGD=>}CMbvW}geJkA&nv`jk^~?+}825%5Wu{_$ci}C-c5T!Y5TK z+Zv%(wQSE=cr4Z`8oj^>c^yd^5Ens{JB>VZ9|Q)@K!Wf2Nb3qSwVq6s+^p+?W@SfK z_L|drmc6;)F6ahUsDtd=tYk%prPtGs#|MzJfkKBIk<4@gLbFOfB0d>}P^ za_@nuUD!jHiT~lvJa9Aht@bF)cLpK#?|j3$NqsV~e?+abzFvRijb^(S%Gha$lL1w| z3@9k2h}ad#(hZ1hMD;RUHOEc}Y*}*Nt3OFm+6xy#t=*mN?d1t>PV<3rkbfTK)N3T9 z_|PT;hnXGtyt-ILJAaB6f2n!y=-wlQ7nFgb<(X ziX9C)axV0HBQS2@0pkWODC{;fisvrpkMjC|>$^^iOiW&{kRaz@&i#LQh}5~&qJI}+ z8c76|s>v*P&;V{jWCHJNo_c z$(^md>ukR#&4>g9UXt4WOS)I`8fHm@QkN@3$EYvCDYOC-(6=5=96ds~$W;S~r>pA@ zbC7pjF&eIc;tf&ic7%ZM>*%x(xfxig5BNSQH7LwQWSi}5tgw>r%{|eg9oOTCh~^PM_kMDePF_8-@GudaJ)#AykqI zI6<4W^*=5lz5+;@hJX&4KAU#dGQ?8F1oDZ8QeiXCf}h3eA_#nJ4jnyltK#yde3dVO z0y~z7G~NXUR*TX1;J!o96}OOeoEU*-V3mCYtByC9x4Wx%Mxj+ZYx;)i_bdASCFC6U z$pD0(W10V;N5vs~9dF-0e$~qy#P~3H_KC%-A7b6GH*7OYniha$h>GT2{BX^v#R-ny z*-%B9h9Z989wEqrX9C!5aCDc^R`m4{sj+X?Z27Br5}FpTbz3UX zs#T82%He8&AZk_X-^q4$K&-3GV;b&2?yD^{Y`Z`wOYQ;IJJwLmEMh5J zkTU_c`nE2hzoWJ>4KvVXIe-Fd;W7LxvL&!tsV#yX5gURE`1wQir+GP4S12Qz@g@J@ zlPutP8C0vsDFW=f{fhA${k<@qOc1I!qOR}x^mOngNpeAc_Tnx&U5=`{_9e?9PXrN< zfs@d^1wpLr##hpBdL=7sNr-3DVl|_+2uvJHeIe< z3RWbF2asXYEZBqoz!lduOA6jLZuI#*oJD^DQ8#J9cPFSoh>1^y%iDMBjz#GBq$aAM(q7N}_;*zV(vS1X^h9R!xFk!(^i>By3pXAs=!L_l;*uSG zK5~g4YT^LRbIo9rmy8vN`B7PTinA5m7|THE!uZk{=tQLI;5OiHspI;?Tj2Y{V+32Q zQhuEE5$l^nyR(N_)j6z3>Tk@`pj-7}6krY`f#F%F@3J7Vb^x4eV-)5Gwu2Q8vd24Y zdUSouppp*dZUP&|Ei4#FSZm#+Sd%_v=JhtOEIqMgP>rgWOzlGGy*QvCJ6(8nZ|oUw z*Zhq-atF+I(?1@1 zzi0t)mDp1bNk-`Xd5%0vd*|?(yrv%c%sRI642?p#fx`w+iDx5u+p6+VKTKf z1zR~i-~Ry*$~_%vT5UjVmJ!#DkC$Wvu*pV3l+q6|su$He%en4u7?47%Dcru9a0ZVP zT*LTuw#8*IGD+dQ)X#l2jaOh~pFhaKJV4oM0?J18H^{7lp z`=($XvMQp|n?GVy4*yz6`xpraGa2h`!8^~sGgGre%&^0-Hwo=0#7gL>v8^_YP3*xX zZDnfdtchyogB&_5O8o_*>)`OTUFi%!WhpXfssts9`R7+oGD10U>Dx$1hDhEJ>$M`* zkrhO~L+<#+b7zOjFyu1Vr9WrbPrxufXdnD#pyrMGqY5+?*lWc<>|=}h8kE59zD0Cm z9k7-`DB#Fh^Tn4YA9V@ffMxOxlvH}8G=OWTNz#U&1%TzyTa%CU(^nj3HLGt8<73-& z+77S|Bo0Rr8ox|koq~G}euZH#k&5Q9^Xlx3iiJt*cPM(RB3f$cf^C@F(9@J?NF1X9pc(q6tJWx)WyYo%R7^`=A)MiO+Sd2gNZYHeR1JW8!S z#<_?L3gO2^*$vmP$B@eZ#PyHeN1luzFa|5M|3iub&P7D*rqj8eAG9yQZt-ZM7=3 zZEo3{g3P?ML}sToKm0Yt6+E*4d>g)q+$Q;bE_;66qu(@#?{%k?71%JdT926lo47A~ zq)Z7_A`ziya2*}Vh`nO-{Z^W;cc)T<9$X3CcVNnBgTQ)m-9KyxMpCJg0L>U7F)5`( zOUi?4O&Ug&+b);xUv*hA_4oi#SQ!kGHk`2U6CPGjypBu_a{#^Au>-~_h9w^&rYTM< zwAM3z+**v=wFQCkYF!(?x7^Oc^XgKlxOCyYx2(g+HDZUB5Xx=IXJ?ZOJ%r|&j3SWV z?u&Z}nRFp6RlkJnC9Z0?IG95VFLmxSW2WI7@cwbL3w_%d9YH1HbA9lVv9l~L^E&oc z{mm~RnrIkJKiLo3oe^Kb4!0D^n;VNssg$9g)G8p{dCM)kQ3_FEZAHM`PWbP+-E9r* zy>d~I9fz~|C)xG}3vyM9q5OS5K~#jy`lZ}gS5@=~(Uo#UfPXaS$vx4TAEMaU90hWt z43jf-2X1v$SZCoXR<4snmCQDxWUUxRmKl)P$n>o)a5d@%bUkuBq&bq(W9hn4HF-h+ zr49grdbnz1GSd~RFSlfOj_xzIw+gEAZz;B_1>j|>N1uDqdKJCm1ihygKo-mS_0nMm z?*quE__yY3H8(K}4RE~0s4BmJ(McD5y6y}Bw+^JvO_9Q)C?TTa<>}rIwW9c%*;;!i zZ2t8T0v$666QGBE*^O59rs`L(wKrPh@J<3>HLdFF$Ezk{yW%uVhAU-7$rN?>DNv0v zA8mhm0sL-fq1s0Lq*I2-db<4?8u+94#?NZMD(y`qpPSCEFVol$ivvoTB-g`dK79EJ z@l2t?t|_`>m7k0r(c*R4B91SBJFI_f;a$ANdHePK5v}c$%3eqDSDJ|U<>$pf)ce$@ zuDw+S_1=&^3vR6a)xMaTbOy(y12XPHQHaM^hYSz%mA7F-SH^s6@Q_J@Nq0_>C=0m2 z%(=nLa0A0toZz$ka;jJ_;ugte?P=d6@Ff(wvzliu3%ZK+rOB=)BOIn8m{LG(kT}O= zK+E-rAV-RQ2qf?h06V6tzstXX!=zc-I^@td3Z=neuOF*K50B@1Y-j42Cvdp=KpWP` zP8cKo*?*gZ?H>+u_GBANe#0+IV*|ys6}%N9v%sC70?#gIu2cV>z5! z>r`1)TMJUV&QQs7z%6L~h#CC!jj3KCLxG0ERDSe~w`nI}WiN300o@$u%T@>+8m<pQJ97q58r)hZJ)~YV-4Kk+6ux6jx|0C{D0lv?grMiM0_@un>j0h(g3A)Ixx$xM zn9%|2CT48&x+8xM>|Z|#{=E3gJ$L$3^RiANH*ywm&46hn)I1O^nhum+>1GvH&Zd3U zXStTf`Xq@p5RW9xyoUiD>NJ&IvNa4?)OQgk=TmyE-$8b>*u`h7>FosG3%DQ4EnlSA z5}7GI{a$}DaH)T)?q~J<@^)%u8RQ?8DuA63^k-VP!m^vv=}wogt%L&Q_gdyo(sBJ} z{!LR(KyItk9zadUTUZ2f4Iw|u*AXTOX#B1lYTH`lF{n}{tY=%jh z3J3Jz%CUpxvN{`slWpjUF^`6i;kP{8DxzD2XXXNerA^Dn-@B@IcU;oGsVUlp<#E>` zV37(@@mDd&r=YE}2h)&L)(>zvMB(_ad4o!TMXp|u8N2|p7!zlLMQDdx)zvBBI;5aL z696!ARg{o(}Ql3beq4PD$^jV4$j&btvt{93Kw0m@n# zOQrJZWc%>kr%tk4iDt|TpMO4+z4OHbIa2ORWfSFWre~N*527QTCQ_ac#JbE**ygGc z(eP{_vkv5hQZkaLO`Oo~o|l`5oHf7;OHF0uLPS_yehZm$p|h$?e@uygUPe3}argV@ z&#MF~duZk!p($nWiudgI70>62|5e-29Ld^CNat_mxi>DKOiyz4-GK|%94PbXs%7fj z;Ev!nR%zx68)I$w(R9%RIxv^ClzPsx{N^C`p-!cV(FlXsmme==8zy<3Am{F^+}W7& z`*w-?>cupyN8ZXH%PjN~<_5CS{3heQ_FNqSl?r>axx@pvdSJwNokZyIAGHo2z=AU+kFmvy*=l_1}M`#GMK+Gm;gz6+@qkdY$L>KFLC#QCD?vY7O z*?XfGiMG;IpE6#8glU&~V<^K;N{&vg#i+`$_YXLVJ<5%&yW*i>q6-ksWIOqV zZtFq1at5$oh@=(3(?w8l z8Xw{ItL*4>c|AOIibR)E(RY|iIKb^=l*lY?Q4Z8tO%f*}9*SHwy3T<1Wk~n#cKoF* zd--@L2iSL7iB~_CT7A<5dtrhpfbdKl-k&vC>&6f#S$eU@>;iV~ihW)qHN(eRAy2f+ zT!~7|3@&rXxYHen30K$UqBW8GSPhR)#WaedSbu$TvHb z5-y-EdQZ(j({2X?;2&!j0tJfH61;|wqboClyn*{_vTaRhgy$hQ0 ze>5wBi`iZ1(GDQXsubpwB#wB1c-eqTezD7xZ5Nz2%HDV#tpI-z!qUsXA_WBP_lOrN z|5SPKrE2e0f#RsT9o{St+J)iR#|Qt1y|<3aDsB6QM@5HFX;4stoNJw{`uB=*Yn4$#Tw*_z0ZA~ z$MLI!7XdNdb~cz-LTeXa2!GY#bNDOZ+;y|R@oduHmEvY zvK~OJwObKmRw;-q3;?WLx2Zh}`$Ga99wM$I`>`|rxs3ky(=Y$W|0tx~nIrEv>^BD} zXUDQOx7D9-WClqDe5_JoYBUag)bPe^*Dy2;i>C!90)yQ+2k(EyrA!xw2gD`dmAvNl z9MN8Amz>}kYA!g12MgRY_)z-wlVkXE8~@u+|H1o#ud0bxlSO+|JVx4|vK%g$#b%ET zVPVH{7MnXzm~M;JG;>t95D4n-rQf;DkZbZD7eRYV5M{#2fxf#)$?O?-*hbv>hmVfQ zFR>+*xboTNAKTU7G<%czgS*df{?x=Pb!xyBAVm>X^=fywl3v4ylRKtYoIb5hHV=c! zmo_Un-=?2ySsN1A58M&SLYIq1hDPJwtcu5NQWlK{XDTR#w|dYJs{EOP$MQ1;ug%Qe zezOSuLAvU8k@e}ed${t8keIC88!;*Zgt#NJp;V8+%fA8n&o_B#fH#yx3NM7q@|Fhx zz9e8E17pHn&#<w4qSK-BWJnVY{9|9bUu7(&Xa3JINRC>l2V_9l8gR zy#`?{nuoR2GR~V~h&_2L46XLa*B}`xxmYij-kJStU7KmOIw=DxIXxQ!DLWNK%A^i} zPNeHDr|i{e_3gqGoY`tnHC`RI0N%lQM~K8`5YSgQF(#qxDQA4w?a7G!b#3P?uZ)$M zfsO53k!;&M_9H_FE?u_`GDozRRbaeR+>h<+U)@vCj#jO|v5DeR_6)=&W&P%W@{j$j z#9N$r0(6%B;~gdV>hIAlm!R`7cP? zH(b7I{5<{Jjr1a>1a=84Z-JIv0{)xg(${rdPJK8v?7lAamwjRua|8o&8L(Siy|>Z# z>>xIt4^U|R=1mi%DU&(x9O}WLw~c5G5y`3Yk?@I>&n<}W4@lRQx(s;OhmjruH4H_1R5O9T#IZzg}!J3u6nWdt(7qSKeCqiD1R`4TM`q(w#~M`}C{2 zt1$wTq3S~rdORl|amn`icb<^-2Iog499*mI#v5f#bMP3q-qARYMs$+*03LV)i;lhR z0sFVX(fz5MjwMm{5VS}Eq!ep$3?C=g|NQalJez3z_nSYZ-0rKOoQuO=B-wQDs$2&M zf2U2(I1Vb!dY|}(J*W7&w!!#=?-pCI?shkEx4jqrxIa1|9S$|dp=@dtI?O|M`6O;H z^n1;emVIpK3I>&z=d#TKq`pgo94r1X8T6kEM%iOZN+DsqtkX<>H-k7s3?qLg0~_;< zVwUB`0#hQ~@ioCV096}@pf^nS@d5=zJ5dv#S6_T|?DUG~Q&3a05xzacY2uB)(P@1xU{!$g@)kSayRS|Bhi3N1JUo(*}JHon@Hc7`Zgf?DEp~9EK54- zs+OSi+ZRIe3R&BkuuOY9%AKvZ;ME4F_W6g)ofY&Sj~MmtgCue1mf(P@ok6*iBP=L6 ztOPdI5QwC^5$WnwmEn+RHIryuv$M5a-3n4avFND82Q!y(uP~o9rKT{bW+7qbNn#P_ z>UL(uPRfuhw;&0=`t9>$VhbeReWy(rGO}>xkRu*HZDzgqvQ>Jt$h}JK`=X||t99F@ zdz_twcXlN-V>JZkKySEVpLM5KIN@USl=G;~NJYPPRo)%M03isa@IrDt5=yuP_Rr1r ztB7=ThIOk2;@U^G@8ZMUp!Xl}uary=H*ASLKArN>S?f12*)DGWY(X>LfHbqVgVM3~h;v2CU<#NcLMO1jtr9+RbB z*3WAIx|JhB(Q2(Lfw?Gul=xK(^hpgV=~|j}t5OUo_F91ZkrBDU1@Y{nt^rSW^M32N z(yRXkK_tH|+Fm$LLXvUq`1vbwF*U-t4-})g=zCX;apf$Z#sj5SV{a`A=24cf=K!9} zM&xOE*p`9XXiik$LE~N;k~=iR~LBWdJ2n5 z#)ntnv4u>S+&hQhll(s~Jn#m-SI6S=&Jk!Qn0KYL+DR!ln0J)m4TrOPOkiF9im0AH zreC|pPH5QI!2`@29AOTyJ+pVGBeP4gQ0hYz8$Q2va>e<4WVFdR z+KKd(vbE=}WG`Mp$7>Wxwm!jGhq>5ojiOyejS_!-Mnxz4r$fd8a4?08$ zty6rI!$eN7@VM}@)p=dkSOqYr6dKpOrtU1a z!f9!%Naj=iDJg-W85hw?p05JV3+_l^*`m%)5%z5#hOtrq<5E=VcDpp@1Zc4Jlu1Jo z)ndHXYbVi5dP^+Y84K6X_i?4pNyfcag`g_64rJs-Lg+*qRKh5xqy*pr~EJ2tKYp=@yzyx=ZG9o{t$aRS$ z=Z`xhDvo;}1*X5fr|^=K_>H;L0f_nSw`k3cygi$Y-~5g;-NMCT-Z1I0vx!Mm1o+ER z)LTQRM`n5j_LS`mmW*s7-cy^9I^UIx8hc0%Ns2|pr((i}YA!11w96_Vh88a6$MY>>sJ(~XpF?#X+t8om^B`EA(jo;h57pOiV-#zjyP zIO7_oTQ%feOO~G;kZfLfi4;}DJ*ltD1CH|I4!pX>YeNoNk*jPHH>L>@Jkj(Ywm@Lu z5>$t*uNRr6k9iNi)r$_n1{pcM5dh7IC|1A|f&5zxW74=WOin~6EDjST>_o#=4rO(M^f zD^Q0)p4x6L*`^SQ$Q!__Yt`4*A%sj`W30m~@j+T*5X&3O`}D_e;NFTlVGHEW6l82K z;pgl&JoydJCk&Uh-Sh!+a%}mdt~9nnZeV^O%Sn2^Qx2Aq$3Z1e` zr>PE!aaF(#%KMmMF9;!ekm!^DQ0ew~m*LNxHvAA0P{2b`ekWtSdo$hvA_5Wp2vppW z({}kV&IN~}ld%lIF6ilnedVcukGp&B6t#2fmEJxDBa9{JPDJX6PTU|_Q@cW%xpGqw zrYi{AwM23%*Pho!v>^B`=N#T1DQ;k{=qRx_5~T}b*LZ~53T7!_;=w?GAtKrL*@h&7 z5d6Kg=w}(BOr|D-tQs8v)CsZW!#t*}UOikkAU1)pY1PI=q2bnfH+bpzSNL<@X@y z#|aK_XZe)8oAo=p;R#CeRAe-{U55s{%l~G3wrNfG%KuMUyzvu6q4F#4OoF(-E(o&D zY)%a@X@K+av5+h5aIe>VSvuiL(YA5o6&$)AGbR${X?MQ&oW449QS`NH#vU>`$%pb< z5ry@Dc8`3wGXEIX7J#F>#_33Qv6BIy40%e!&{xc|4thg8h(-_Pspmxi{?`>pt38sH zFw~U_aWLx!mf{W5^eV_F%7MY)6`~h4f>|erCYEhQA)Z*Iv3^#W=&!tj1fSJfH}*ey z(P@#g()0P9=*IIZm?hF%NrK%9o3&^n!T-33 z#41_WBzPuR;gTa@qb4(Hp;y@? z|NUl1R;XL;{&)~d9E1K?dAgs1{c7|Rvd3&q+V6m2K z?DP&dq$y3;6*rQGX}HLWXCYd}WkJBtCGWEcDW`1dIUct)bl)~hb%-25PHZMtp;2fY zuDZS4dGqKQFXrSr_JZr-o<;DF_bkAW=Tvia@`5v?h+nH|hEQCwE=4qH6i1n2_`&%E zBiY8l&3HYnOXD{%ia^B^3@RraQCK?eOpLA8Gs$3koZ5*+GB16wuIWff@LQGAqIF4H z)b2M$*I?t?48b*b4|U+CeTU`*p|AsZYw1yp~_#h%A z`=lH7Fj(b#)%AoXwg*{TY6`%;meQP}?15(Fz>sXN^WhR8oZ0X+`rh0=Hu0S)0Pz$V zPlpH%li}l~&O}nwqyux54QenuSW-(cyI^f;N3om4uM8X}dli0H^fmi%aR*$X*>u03 z?GXRVr=>qJ{ro|-72_K+P5x`iNfYMc7zFnCthM%FxR%$c5B9eBQhbs`^~(!Dp&`QD z&8?yUOiExYJl^v@;holAyw?(_bJq{+&};u@qk{o-1DfgjJuq1K){sNY6S@H^8z?v* zjP@5;yg_2lAL3FZ&VZd(&S@l~FrgJ>_)8@Bw*i48?oH42Jj#x%qmyd}^@aPHgv;O6 zfE7j1A%XJ}65_h^@ERsFG@6Zv3?d8qEXai?ktuN(?AlSMtm%+}W;?b{mk_yBytbH( zF;!)%7d~!V!!FQVABhWbGKas#g+OkmJvdMSm48zgJ&t|ocp{eP3`zIdKMA_r*%5i4 zu;eEvLgJ#I^hI--J%d-0lele_k{*{l9LByOY`$zNitnYvY!JE1i5x zs&drHZyY$EzH+`=dF65$QYO7(o2cq7=eEY+1ph*q$8)I4j3)UvD>@?@gUc~jsP$I- zd~g2{a8+Ca)9{&@Ogr;#%6MEw6hv|Rjnn2~8ayN)9qZ3WR1Cy{pwMn02q*krhs+B#sJ*Kd#l+%0E)7;LpL%UNG;(?N;3E%W#{!SG$#ldeT?&Z_QhJH zlqX};xe-I3LUBuW+N9@EA*v@(+V9NR;bwa`x?|-UA{C+JHuuYkz4KGH)?}ZQA&~JZ zsfi9Z6qJ%R+V*O)vZVLJFBwGhe}et*3t~Gl(rcf}$jrVCkej?sh+Ua<&@(4}URg z$^x6HyGYl1?w6Ek^Ks*PWISU?7g#6V=qdHGSDt3{&y;7)jyxxX3n;GFZlzZJk=Jz{1Ma))haq2A5O19 z-@5bgx`&5uSEVZqt=ie00df;;X_plV`{WL7#ti?s_V;HIJ+y+Pvjp|62=}|sf)k|w zr8{mWQ)Hs?6OB#DFeRS&A)bW*mdMxoWt~2^z7rS=90_nzI&xmK5>id;HL(?_Upgrb zau`4g^wN<+)PWs6=q z-1RB{;WGlB3`xV}Cw^-0k%1J_clU`I6df|=Bv=iPoU(%CT%LP%gfid8lCD(_f@plk z=SipPwTuT{#kPYQF}7X#HUckf%dzi%q=ghRd>lN2KIX&wPWKP*JJptwZ)MZ=`t%!^ zEFcuTZV$ddkN|7a)sJ7?#;bssQMI}eTVrL3pIc-(fJwh+G>BEzK4 z1e9)p1wiEkac-R$_UWK^=>-ZRkfpo!&Y1M5U=VV5q$U30-9fVL2>X_fO8A_1MtJ_J z<-r8;V|+04OgmLM&b4GPJPffB-9EJtqX+RHcKC+Wxdn&Yyz)QX=8>E$BG2xjRXJDjfetgj@`?J&I86pp3W|ozbtc4$HIi)m!sj zNF)npcm%7s1O_-SvQxG05*GS?2uk|<>-^HQVoS2ZYPqfw@QVcmFP0hHto(&z zV@`j*+~0p*RT}e`08q)EY%&%0@`hLM=hVeKyBIJ)5&`RIwrQWEfG7 zqFlP))~JQS=$@X%y^sCVE-&{^rmpW-845pKF6#X@vK#wVcfO$72wUv8qXbN+j#}ji zTr6bv-+iKng8%X8H>``lc_z{XewD~MMTPMXx`B7(@LwMO;=g|U-@pIg>-T@j`bn{r z*#=~<4C?ZT^n=W-;%Lw*#aY8iAJr6e_ScgUEpc(t$B^|u~@5(9102n;D~*s_MXHHJdLeT@{M7_MDW;~K23ZgrJ1XlBYKP7BacY$E(5e1};e zho>%8tkf{Yo&T{JiN%Ty;8$vi{>$6IMe;FJ(=zEhuCQj5NlX(-#zgrI&=&dZ0(qtn zUFo4o(~Om=l55uk5a|2+5QO6hwV&TkK?RO&X9X1@-QB~x^_Ez67t@P;P$V1&W|sMV5MLUD`K?EO0DY}=IoVyeGnxQPn z+xgS}%eTvajfz3^*Q#pZB6fsXG#}5bBX%{Ui9xiSB}?V==CQ2H;!K4Cy9))w59YI` zpIgWt+@=CH58^Yxzn3KKuMcJW@OA5~B1O(sWcruuFxZ3c4cZj= zw-rE^Z#mF2>>)-qi7(TJorg z95o{ykkz>je3Af;-R*ur$(G-rEBhEhFHDkw@M7+_^^OL%)3x)1%d6rBy<+b^09``> zJPmZq2~aDwWscM()U0?o7Nqr!U4 z8{;)VMa6M*FkV!}K7v!Xp{EYisLnx+9QEY5%f>_XEptF@hLHiPq6SX&D#DwgZ@{Io zx2)1?bb~;4zTl|b-*%K_<)7P#yG+mL)d)??5PK%|6h+5q*=#n9e-XPqCo=W*!51cy z;aCLriSe84LM+s6T=a@q+pK>l64?=O(Qnl4q+p$^Cj6l8(Lz zVJm6^!~JZ`4JpdhFFgQ(yHAwPb<*;kYv1ab_ssYdHmo2;?X0Yp8HVa|-mV`lM6a`S|zng5kfE4w>MjjmA)8xJ>T#vM{-g|+ddss=bH_a z&=ht|B-OD$VAWx8d@&-Xk;WP&w9~Lx66F#UbYIrch2(@nii0+w+@A50-8z~+t2`M0 z9?Xg%9R4ZfUv;93O&IQSv0qvM7}DLyW8&jb#j(aaL8a032KdeOKdPN3ScpD`^GAN} zQ4KN|FQFR4wAD|1UG04bOrPb8#e>;Ho2t1xIIlK!)Axhg zkNxej=u!CbSoAy;wi3qoG$9)B9!TM5i^6HVS?Drc`7^Q4Z79+^vsvwXXzkm~m3i(ZT zn%?WW$KK}fThC)jU2?s&O%10Hx8cyJ!;SukH?Oo8JJ!X(7h+7Pj`jGux$Cm=kbsFq z^3ke1&5#&5T{3Vh)3rx)u1pn6oe<-HHCuf>i#Koo42kyj>+xaZ6jv(IKkLk&CqSTxXJPL-f`L~a{%M@_ zN8i&Gc6e`y?ytTulg`eSSZkqao+2+1GA;P9qVZ-E=p4KkyJYQA~arb9iy=^Cm z24oXNK;^RqAD}#^YNsiyd@jQ-tLW1j6?K72W5;q3;tanF)%=36<6M-UvB#Btf8K!x zFtStAo_v8Cs{nGmD%N|usVhS>)353SK3(7rG7${C5#K@TbiM`8Tu8K@lrdpGErQy~ z-?_TProYo?JnY`J0=m^l?g|QhDG%kg!fS};@7?%r$c6D2Dx52c-jDCq_ZqP8NJM++ zqN+ukt#KKJZhkmX&m-_yG@i|mEMLM9Y-Dr$b3auO&IKpcCuJ82{=b4k7z04 zavBI49E1N#0Dk?pYV~?;ErVPa)n&g5fMlP?ey^^@d5^3*)_ALvJ5>baJ*jPPs`yY{ zXV~frcI>Dg)(Y+Tu{xFTKfgyEZtFT%UE`vl(+~8K=+dk5gECdSyM&0au6{o!@vD6KS!Ije{jvErevIm-5KD;k=7lz^bP!zd1=r>W zOLF4REDRK73XVUeO%#e|bDfH^I5fX7&R!8uX$)^~qA3jGm!cuny~HW6Q^F8FVJ5>6 z(apO}Hl=oe=pN%uQ8B=n_iPEaq`E2XD}1I^AR4e-Q>1>G-;em3hV`wvRE%RxkyuM) zz)bN%^DC=s%W&*&&SKi9fCg%#h%tPAq*wn=E7zu}LVI1@9H+#u{!aEswI}iC@)g1O zH-V*^hRCZP&A9Wj43tB+ahvH|g6ivRo*!JV(`wKa_NiCeo=i?eLW@&TgnneVpazL_ z6zTQ!S9`v}VnMB6q?(nRVSG@-JN`v;Z+sPD6VQA2A7;q3wSsWm^aHc-*5Gmk2p3zC zGF!R&$~XfRQJwWd|A!QEDpXF0mSL~><_M@D!%1xE^MkeseYtZtuw{81p{8_sr&*!J z8Bwpbs}!pubkT9}{Jo*E_spvg=w#dX%)M}l2WBS8aq1@C(eJ-0hrHpX$eRJa+F@Hd zNAc0OKW^%FFMHrTB(Ylr&dD%EDRW535K(L?Q{9AhcP7s9!&$YbCX+qOH(Ss4-7kz^ z4Sn{_pHCDi*C3H8`pUIeK&dK;;%nSNQA>88Hr_pNssl`0@s#KGSE4n%~m7B?~ zT$N=`pz}6Ul(a%g8|u?dwbKQ?W<$jwVKTyy;ZqgMK(%>7Ujz@$8-1};PtUQLp%6-^ zheI%9@=V*@s9%?95gWWDho3rA0H-7Hce9K6C`J3AQ)e!}wJ0jzknRVmO95Ftk5zEj zgfVpr-;TY^K(^hV@G03xr|fUhNiq%C4OaJx%ugA zjjfA93&R;T0dC=k){cA|t^`}5H(kEyxn%HzR4{1*jwS#KD=cSp1vVDaruFrPv?Pov z`@MOuYw%)}yYu>#g}jxR3OnpE4nZPX-3MBY+SN4%a+ZYA-X}RADmSvQr3&jP*vNDk z;=J>T+cyPg5+2ixc~-Q^UQQTw+*xE6gqVb+2=3dyzt`-dI4o@{RzK`-Xr%)JU6Rz+-DPv3nccfs(? ztF{E8g2>qdmLt&EIVrn^Zc*B9CO*ZwyR*n@$V-(uI@h7)0{dV={tjfu`d~3W5SQ{g z<06+=)m;0`C9h-4-(An=CEC?YcR!Lq>IUCAbUK+pMr>;CPOx z?a%Mz<|4`tYPAhNHWe~+qGx*iJwH|>SpzcIhJy@uFhctz+CK^6az~Li90hts;XjcZc0#z(w%ItDf?jgeE4e4@fpaLYPK!zH{aj#s_2Q- z#%KQovh=v7DciM)#(lns^9oOC#r?@TWc(>6C*Gq{-aEU{sSWD9$Cmw0qr#rQvfrIo z_dAiLP2PJlwQmLb<41-iqVd|7r!U*&2zkni!EzAyiNaBLdfnzN6e$1pqWalNZB%POMNt^nfaeJOsiGntl8}J!f;|#`q^I%wR?r zA9OJAP^#!#CON3?hy*cr4UIdl| z(ah6X@E1VJf+nVFt{|J-$F%$t*iK_dBOWb7+q<>hPHlHbxu?P#%Q@f1M36P!mNGzv%F&5^<29okE z5xGM%=3gfX#?xZ*Bj|A|xB9`Y*rid2m$F{3F$%TUn(Mlze4L&b+}Qh-1;A#nN_0lI zvfRR736^t{@!xSrRsJ94E6K-~v6_m=$&Y!;Q1`0wo>E@}k3bKY>O}?U?0LB=S1ra# z;&V4%FgV+I<+GtEl}-#`eL_Zcz8BQ8D7KyHNP!L4#`%3$us82E7I&=={yhi*-ddeh z@=Nmdh}npkzaPWzUqUH*NzyXO_gZBZQ8H`#jMcQ%}jx(iX{C8{ae~EnwwK|-49V(W#Lr! z6r|R%=C|vin7o)@v`as4#$_xpZ6rDnvY|R#7-{czYOsN!a5b)JO@@Yy{ZaF{+jBfy zx=fudeo_7&@u(U&b+|D`wp&f3g_W zE=?oo&vEH~ur?*$z0^Q`*j7t8sN7R$1r+Ed3_{t9lnuEeMem^L-@G)%i9~~ zF(dlT7Cp>`YSsBJM}lXh?C)A}Y1q?7%QBN(X#Cr6K!g?9KVBR#iIz4NM}_pB=&?Sf6_lh9^3Y!y`#ZzFajK?nn>+&Ww$ z^rMv=7@sA+&3Qm0KWb`9m;2IexP-Q&OyXAdn;R-N-qw*4d3wiFHEO|J%R}()7Riv!Z(b;ove;{?& zw%(T+t3+`oFUk1Y=0~|W;pW`QZj&!wdnNw&w!!Xa+t3=#-E+8kpo%)ADa+jVcBE+h zRaKEj&GNQ0m2R1hmP$;_S>5nJ6HzJbu3ppbf*!F12myxhmQH`_gmX_zt zp*$_VN6oSNJel%^E0vRmA+d4vLMS95);&DYIcQ;CPQDo)!ys78M;DUq6K3&)i#3Cy zQX*&bx1a3n1nmu)P<@xe-(I7g+23Bj|Dql5NfR8GH8FKchPW-(elP*EgLyaGj;G^c7{PV_R;QtFEaHaS`~sDw(F7oPCS21@h? zo0|nYHk9^^Bm*|(vneC$fs;L75$!CE>!ME$&G}})@#DwdckP_JB!9qRv0r^%QCpVf z^*9!TVr1Z$uq;RP%yB#ys*Yx647yit>&?=`ey`(r`pe0Q1?|?Mb%tw~I)U=Z#jUol zAwhe03P-lm`2~uhs)<{lhhj0!Nenr0%-q?40M&0R;<%dhT^8b)7#=F$FXLKd7=O3B zUz}(9J`j@+*g&X{h>ey|sAloi&~O#Yq;`d!y>ooNf*ZP_Q3O)dq4`i|QKdTB^6(Mz z;bC5pTaw7L@%Sn`<)q)th_Ke7u^;?0w&R=Vk$(J+83 z+-`YVfqvM5mO%4 zi3d7{KX^V>-op}Y{%ahSM~DvILoS?4oXD49KoR2L7;n7JvarXQ+| z=@Xl)T?vmZ{nbDRDRZiuBn+BV7fp%oHaD9MjgL4WO8etStnh3nqD*0|qc2(I!RiZ- zZ^uo1PnwP$%?%)BkgXOUPZ^aWsu)~<2+eR!I}$W;R?{0r=@_9yQwRuiJF9f0Xm8br zjED=lPS{TmpugE`KB<+IUFm-8d6BLN049&+TxoMuaf@z#0#zZ09k$W4%f|9m4vHAQ zv%C7y4)5oRZJE3vVDCaKDwLU>#B+w5E$52yw-gkbcSm2ST0=6p*+vM{E-h3%d{@s% zGM?DYFqkdAU7Ev>iAQ~CLhX~tG(%y~);S!9adR3Hv|;#GV(BEHM3RYZF{|B`9Wapc z;Cr$FAvz}5H%RBbEfB~-(|R~7Bu#S8-df?Slk1jOz>2}a6KcUV{G1C9pGl-&Xpc$d zn}Mx~{Hj*9DTRdo{V5gLDpmuQN>us7mkUfL|BDe8)Gh05le6^*?8 z8^jAxO`VEwX?guMM7F)^dlh8`EF@b2UDM7MWRnwUr52)SqqZm#f& zlIY)V!IYlRl#-N<@K`0oS#O3i&FVUqHSe2yy#ke_sey`)U9ZY2l^y~b`d(#PNNea} zWmF1|suD@GRi~_5ub$)e_U;&SjI1=V>6?Xo1(JiIrhcvGNhV2r4K;bQ6_U!)k9x7P z*&kSTD%m&DyA6&G1;2+-q+hNviR0oa4V_8;{gx_rjg_jXSP23#~w$3 zYg>5Z_3?eWuJv@Xl2%~6%U)C4Bc_r{0hV~ORnTPJMCNetyO@VI;yrz7{Ds&06Wg+Q zeW%jpz~Xl4O=~q>D*D#!@;R2}Vexvn!FXTB600Rq*CWX}ga>`byq(TH_=qDsV7mTH z%@E`7Zm|KuY2{18^4?xgXX=aucl=+CI_Z>S(Oq--?D@NE-^E?Gf{&DP4RqF90 zd-3d^UhcBT4qhEp$iiQY8eX%1}+o30-Xqb|e|uAF&bwM2W8BgMh4 z^5NFk;U-vtC2YR28$_1OXV}VvN{O4DRtkq3@7PyI!vn=Y{5xmnaWih{ggSM*I>+sW_!uhEqL_)mInyic*3?3vEb(%t4E7waV+a7nHE(%Pq&m+=v8;mrXN^ z+vkI_*sOjKqH%{fIqn~1LxK>BvM2Surm#mdopQ%fTT5gb%@b|>b$Md)*E$b$cuzJH zKXYV}uuK{~yOzBT1HHB{%|!K8m_I?qz(|ZzpsPgY%v~M7!#IOA>f%sLhBxmm)(tHa zD*Dg>P2nSZc7l+}Q;`~cxlmX4{V|wY^UC9$6m5GmEs=hMqGd>%x}T7Y{{_*JgS!Df zoNHku-(*HKCaJYvs+(nWxm#$%IvdfX*9h`q_O%Ue@fIL@JhQH(h0lf*4ZURZSk$umc~_ReON zv3m{`S?$f*XHe~u;SY|;VN#*K5yBf}o426XtNgF}=Fz%we^L1Bh-@3B{^IeZh$>u8 z*2nEB1lK3h$&NAW^y~f&-AT$-- zXdP7%F^P+R2A5dEQ^Q4s^%DcI%YUs$zlr{M+O|cD7kVxqjo#?SdRFQ3QhJN0k#6~t z&Lj~(fTVF`$0m}cS9=c+V7M8&hfU|=;2kMfYGwPOW|FUj$WyEeJC~4h1F1d(;kXUjuE(ofXe1I%gO{wSHN(`yt|A27M$X;JM%ou- z)d={1p+?KNluj$q2Lq1xj{Ll=-;SW~20s<+9bHn=OuZ}$T8^q|wvLdRsRrmT>>!Go z!?4}W-2N$Z^%A{{e^5zsyIv@cdT1(=7Ia#C#Ka7Dn-0?eL5#C6E`Y747iJ+<$1lHl ziDOr}sddm_q$=N(Q#{!*5pA8l`d)(bX+^9~-y{+z31)2WB;RMiP33cQh#-;-N`c$2 ztOp9y?IlJ}jaNgxFSQtbkKOHeW)l72%Zy0{3iygogHzfWHk#mrNe{J0&+k2H; z^oI=R`DGcLhZCI5h9}hz=uQNu(njHUeSZi2T%h!*3NE*u2`#!c_>to17LgUpxl&zd zVdH)l`2T@+pb2FkwjRMK84opTDq-=grZ>*Awklc=r-liqx&B8fDGoc4=Grg#-fjZAC*nf`JKI zjc;YDlGN{>dov)hB;1~nw}Jx`K?YORsXy)sl8^q`WJ&`{Uz3R=(wHaoCV|XO`Ez;g zRd9eM)J>gs8f{b$!lKYZMjaSl9AlOHM*QqLU5XCKdMYgIYiiQ(Gkt5%^Cr4gt7vit z9U6W=5fVbO6X6udbX2G?PT^!(h{f4Oti>f@%Kz47Z0Pp2ZVwULL6Vro6N09>XZA|S zZI$lTG@-`PF*V6_p}_gda{|XuG1dY_$teU_^Y@}K^2;tyaVphk*9RfY$H<6jWEIC{ zzwcZ3@4kAb49&G3$>H9ef zTf6KfL*wsxMT}?T_2Wqe+x}0W1l~~s*^3U4ePuDxPHFUj^)+;$XJ^m-+#hhMkv6Z$ zxBY``F0i+2gxF}_>yf-Kj&C=4Pa~O{sqGiyUDxCy7bG%osp;S?mnn`AkObF}8M4RM z_%pfsd7r=_QPU4Q)S}5oNK;Y?3OGL;zr30c2ybN9(W)q+#fF$CQDn=L+YD6o`3y~Fr#^rV2KDtuv?5`C&1G72h7Xoh9REM!o)E@HEwao1q5k{QvZAGi-b*NDc9oeeHu zZ?dV$I-Zig8M@S^- zAP*9gLKR#Vic_9hw|VI>?(9>~AQ{vf1_C5ep~qYC5!_{S> zW}`%s?6he_WvJLqd*pddXCrYW^vGN;E*<<|7*;V@Y#EFjUrF1@sRqAk+y$MbVV$WL z{bb0@6b#?<_ck`xU7UZYf;svHCG2Zg_W`B!zIj%sS1dkkMMQIS($=vdkoxRa$=dYJ z>zQ*W{;nEC6aRSX#}*oKfJCCcsOHbG%Ol4e7!|-a+#hl!XDRfd`aWz=VQkPM_xD#r$RcS`D=QX2b45=qN#Hnx5MWNi{to6~Th1OB;Wa&OlUxdKl`+43% z{-M2eS{=ekZHY@3E=ECtH1X+v-ZaPvfa>QxTTPc;4AlfpXmXg0BeQaaeV>G?P`{v~ z>bR1QlVY7oV2`_)wf#7Qmv|tuRA#YxH@KqyX{w|MIugs6!bkEdkvQ3P<*ia75v$Wu zC!Os78~!c(DXuN+eLnCX`pYIzTY@^}=wJ1Tp$wijph~5Cm-Zk36lpR-PycA5LO)j4 z%Kq^?u?_-+6FU*`^T9iW@_sv-EcY8m$;$Aa^r^qxtx(>dukm%SZsyO|@TWUe&=dVt zK`$Tj8+?$8B|nP4NQaqhe^da>i@UxZe~{ds6mo}JW4gb88_>bzL<9p*o+)5Oh@4IWPE08O|9)Kbo%#I@}t z;K%=Yro1&m6s}ite;()mwI%*Mi=Y9tBKT1vSPk(>2{ftl)8_EXk+tQttFJv(k28rW zMDzaL*boxvK=tDbsTLl-3&FpAmr@4?D}w$tACnkJxgN9y^gyoX)dLY*Oe>^vE>gLF zGrkAI4N4((=GA~U%TH9Pn+~Z^2KxT3f27}=d;3H%YjqtjqOV#z(FHEzL)$03x~hrpq-s0AS@h&9H~2K4Z8 zF_5$*2zt_C;CW&kFZn+fJ^0=Qqm3+(i7bvtI&+LozAyO(h;M@kET>wclrPwAzJXhd zXaujP=#4vq#7CeAp`=R?B3=km6%xS%)Wfws-4gYsZUV_>0g1?0x9i|E2ye8&nX6BY zcb`MpbEJ1imLo*!2Wm$a!ockMCT$V^-b=inG%T zVs5Hw9FCSCxu)N>-U7&LM?`mz0?F8z9vlQlI07d*xe9DPt=yLIAnSob+5m#(hj3Y6 z6ZBXMUU!Ovl+&22&KVXx5ESG0l|9}z%;?KLWcbB?NLDp0x4U)h@XmTV9iHQrD7e@x z7Mb%;{!X*~QG+1&<`%_~EMn{P1D~GTX1Z5_oA|hMZxi?qvB{${9*gOsdDnFAfMoMQ zhfMbV63pC20vF4aBUp!P1m5F;1av3cWqoQ10KLtcFwhb3(l-Bx1A(j4xgBO5BM~p9 z$Q+3~KWTg;hWI~h2)B`GW5{64ir*$dJW|rtaTg%aJI79(TybGnTQq_xJ<2t)HjqFL zF&A9Qi1HsXJR6=1bu^jvlth6*{T@-b_uVi4eC5zvGP2?|^I5iEKv5(_c!_pQYe9 zR-v?CJA*R%%VYp@Ww(EW{JHlayuWFP6_nCG1=?K)7|IfBfBk|Y(C&SKTcj>8IYWFR zOWUV@S_VQ=&rWVbBSrhpr=q>#vA?1j{kfof6j2rBk%3ZFwqV6VaZm+)lNihEE|#QU z!%f;p68s{%;*rG4L)Bk^(oiB6j?~5^4RtGwn{}mfDOTGvN3_+*lw$n%$vm5Sdl7Fz zRO`Olk3?S}gPDvX!W1MdX^#Xf;rV9p*cGuKx+1jv=x{q-qRz-NCFP~rQ>({S!-%;d z*sj6uW)Y_?;%~%2m7zCnx|W#a*yvPw#V(H6=*V{UA!sTX=s&viiKR0FUP6apOZutxT@uy7QVIP|% z+F-^HN4%zS^aSAtHZXDZ6v2uve|-9C!|9}~O(h%zkDG_q*-3ev(Z9Dw&<(~x+s#~i z7pQoYYEyIkd_NMB1C-B~Ez-n!WFo;XkqC2LD3;J#A}w`5)RJ}_vCPTCLxSap&_BrK z^5Ct^EVf2_(sEUX4z~YlRsT}Hzg+`+Bw}}KZmY~2@_&_rXA3iiMYd}2IPNbIWfs~F z@_wO^9Wp_MKttx&^6niVH8auy=VsLrTnZUWH)8{$F{V2<(}?fM_;sidnEg3eU}s(V z{7%FIY(oa%{5MJF!l%y-ij?{U*}jYzr6IfOy}MhWx7{^$iBQ94&;=>VDnUf48vqAE z({ZJ}FYgC3ksLUh>@Q0N=Fn#x}Bu(#AdzkTv>_h3HkcFVp0+U@@3w*GilLQnkcbU(PMhbFzA zMa4iU@gT(Dv=u?VF|Iht@9ZkfxW~ejEY|_&z3MB04Ax^@<|9f2gzLgt%}^Q3q!n2r z@3dhgWda!qm7dj(!nDExxGW*pUz1eBhQ&i&d6keirF`c(ImcZ@ z9*>fI?>Xw!rL+V=zlPHA-6YnY660Fa5u~f925fx-$=mDKs2DiQ2ZTXDb9OjQGc!C# z+ZIWfhzCip{5RNOq>8sSu0MxR-!jnB^V7y&llH7WtqkMOI96u+@{+o$ zkjK655>cgTL1uP&6LNmP=t0?=HK!H=3DyHI;5xCtT{B~N0igaE50 zK+QIF*_?taMsy6cc!$0&4)#9m=(l^bI0Wv#DHT$hLbV2Fm#@0N{4^{*`!H^`QacJ% z0fNgFU6o*1~fX~vfkK{pVP-^VQIKhZyinT*ywHVnUW=8yP z%irirg-A+I3|Mr?i)2fKTc4afJHCNAh33UvoI)a?!JvCnTFoUw0A@qDUWbPtY}fG* zAw|wr0R8%!Y*IU2f(y(6aJ_a3<39<`GJlnEvZx)98?jypkaupL2s-3FM8DIn21&|t z;potr1`Q+5Nnk6RSiSQC)h7uD6l3{25Pwq@`(`C<0`8){7l=0-tY6eT(ySv%X)b*Y zRi_XlZ-B~zF^gHh9KkD77vju{=16< zW)6nAH$3M@tE*LD1rycElF$mmtkz+~skXKF0>xjs*2KDh`4X_xB{25zNAqU(0ZN4fiSgke}BL_0SQFN-SY;UcjAw{6K41Iu;Dwk}gw z5$@T8eNAK`q$05)#&-cemlHB=kj@4N%?rC*a>0ts8WHU>2WwVgFvlP6R4~?!qhes3 zR4a3ZdfZiKWN6|z4E??^8OBHM;vB?G(u2rTx8NFSr{*d_EGI_v(*@#zmUz+8Vfc+5 z5)uwMeJ?&9&JzcU&mT)P+~{lzxBu7LyH4l6ilZoSZnbp(KkR*JJl5;?Zri4Kq-02? zNM>cIOd(^LLS~UUWFAUHhLkCp=P6@mA(=B2DN<3!42clQkXfd)?&qQU{o3twUYs}Q zeEu)?{ygn1&v&@*b+2`;YhBkmkha$hTzbhyGK0)D)PbS@Qqz}pqDiF%&2D)~A*ns8 zjfRWC&)LF)r3dNR%h)VCk#H4~yJ;Q^${RomSNj*C5uIV-QlT!O3zMQLl@M!+YiJDF zpGJ6U?85?(s(=#0)H3ydB8>lVXeMzJ-me0>3tp_pe2Bt zJHr93^O1B#GDqr{&FK|)ic>#zfltvye9(a!Mc4NV5+gNZZf3*G z-?uU)t7|y<26ZlAe~g?i{0aw@(q1A_Y$`x;_Rcv+@LC+v0_pHMg2TrHiCm90qlxOO zTr?%TPAu*kvd?6o)=T)+TQD@dq?!64U?4L!@CsS0C(|CRO{9dH*Vs$u^SrJr3-c*q z)A0+RK~YdLh-SjxN+Qg37^ce{(4dwIVU}WVip$=}EGW~Iu4fjwlyN={>Vi$#O6>nN z{tPdi-ntZTn%-rcPn<*+BqEy1MG^WYXxKpTYr*aFDx*ieh{;RK9)NhoBq$*`f()~7 z;^01PE();zSn?t;4v%K4-xw`^^?ww&wXU{w7tS!mJOFu{&F2dI@4p$o)r0@$V4ai< zsj@G0ENEtg=fRR1agxI+!0RI%V5Wfb3hE$PaaM4_+J(PZ8RFV)h8#=f5j_m%b^ zT4PQ$8&K0rn&B>jiOzCRq92}7)m&9x#q6hiOsHJ%5SEojGHaX$}02_m+=dYXgn@XxpJXnjc(ddx@A1iipPrZ(rdFy(zxze}IRL ze)arW!S0Onw587vSf~~qc)8WPP;A8Ah3X7JlJkG_9e&;e>CGos#1EUj7OPXm4~MKt zV2t9*e(^YMBk6o4{A#ckLPMA7?=tqXYazAmG-axYAMK9v&2QjvH~-n~*t);1pMsO^ z7$<&c$3e?@vYuD47+>EL>S8Li_V~h(?f0JCB|{%Ijs>v;4bVaP; z6wAM?qwILxMX=Q{a1;I$c(C=eEV9^(*o8@!Prl!<$>(;}wz#PZ3+v1;_>$@=-1=2> zlQAX5VVb|Z&0jt$hNHKSIYjYeTmx6jh$g)x!oBgCbK6fql&yN(0Xw8W4@M=j{R36%dMbQ^zUcr;uT}5b> zy&Bqb_+Ng3Xc7w%!-G>40xX{Yx+H?dK7#JVHPnMO1E~x<1-UI|K>K3iQcS130_SMnf>&d+?Vs! z$IauB=O5@sC}exjMx4=y$tmQNW(~&zQYFHQB0~hTM$#UK1RZkkt7kblF(j>g26Wta zGDDvC{j+|lIB-ar;n#kS|8os)Jzmj0C_1s&6aMQGQ$OJW2jpAiadYY-(!1z|v~6k^ z|HqpL=*nQwhRMtyA#Q?TSKJ3>_ZM#6TysK{W+QuJC~rA0-v)fv0rIYUJy4Ne9bxq* zM?lsJ@CT3+)IE7W3W=J#SwVWP^AQ^dUwGX81^&2Y>>YQRS7oNw;iQvDjN~Q9mQPE$CDK~2s=BZ-cxeIlb1L8K}q*Z z9YAj#8cN8BV8obb5_0MDmIk1?as?TkD)|tuz@7GiVfWyR??_z;PEbL+ULzLjzm9)^ z{x9%U?%wmfiUw>hLfX{}Y3&3uK|C7PH3AQd^J4vw_dl&`O6-m>o&VoGbw$&Y;GZ>h z>I@BCIvo3x&@|X-Lr<10?XP@KT`BoBa0kag3;h$40Rm4DV&;L{l>yN@_HWNx1B_ZC zQ4%5gF)JhC3K+Epnny;b!>n2!uvCOC!-c{spkQ{_^ZKymAo z#teXRS3oqQsd z#gF{lIim81aY2hooAG-vlZT?|)s>0T$KbIb+0Lm|)NsSQK=BwDP8WdKOl!()NotD< z6!uvgi%5nXBs#ylgFI%@u~Vg}rvMs9&8s!e^IyuLrYa}l?RwGXaf|soHqJ?2Rd9rQ@%HweV7bsKNe; za~J5u#PfBl1~as~#i@Bny^n`(8!73rZZg$yRcnZW%J3Au&JMCBL>O%HRnASkX!+2K zN(;H}>WY%9AGUjrh+|%Y%<;D348jkEkO1A{v$x3-JI?u)AUyp^wpz=)+39PT^)CZewpLh|J+uAS(d}m+5$zc6Zb3)Rb%MER!(;|8cHPh{sD= zxi1j0nfip0w7tS&*kn#&7ea-%lN=bT!>@0WAxvG76;EyfbgD-BYsxruNiO2Fjq4wRFR;YPGUqK(_3e>z>=|!$V56VYk6*>uiISzj&hH7VV=MpqM{+z$SxdcO-V84{M zdmz8x2F&Vxdy@+?ERk}ngH=BsyP-I><2&o5o`=}}Aq z-!A6z#xQ1|jFSs{x{W@vEP7O)X;cZ2JCbWj6O1A>@&%r{!%CqP@mLA-PbriK9yVdP z5Fqi-snf;73SXj6&uIxec?JVastye(;=RYFd&(BQ{N)acCXo>hkta(Vr6|fme3?DX z53*W)=+s3X@gz`yp*bBugKaPYw`fh6Bo}t**?6&MQ(2+CHhX1JT1~QsPXNm*l&X3#B;E6xN+RyiCT%07Sx`+9jU!eg;IsKP~2+d_Z*03fqnP2QS_rH0Dy=!lvG>)_Y?v?7G#kB36f^(qKXP&9|m z@>A&F19d=z*XS|j=lOWbotW>eHGo}lr$5MCYKm0G)`%_*ae)`XOhYH5(rXc@nW>>4 z)Ds1dH!~LzP1)s%Ie*O}`gJ*DS2lYe-M%d?fNdT|=$SY2ta9%7*D?+^f{bU1q9`WA z9%v|M>~4Pgpma=Cp)v>h1CLf9Cb<;i(~)@#LBvtewKRgWFc6MA5csq{Zwl{mK*3CQNX72UTJ*J4m`@tmq zbIM(gnFPL~en3JTUmbs8+Id$h0mgi4@&zayj#>{ICS0aamKDd35qCzir&AWMU{rK= zWu}Dwub^BIk(>nofSDDHD+LwdGWn@>=~pSF!pm}WMfMvF3gD&L&?H@b!XXbNf0Xt; z(*AIjTR1?4i7pWTRAG@PFSSkOLvY>hak)2;*h1d|!7XkN6IUe_sgq~hyZ5D26s{UF zWl^ui^Cgmlk6qM#_fJ)-Xe>6ySP}p4*EEA?NM{UW3Rv?qQa+faPeVSUlAMs>(|GND zcL$Qj)1N92vBLzi(c3!ebsWiwud8jEY z^EMCVBM3!cA;xB( zdc|Z*kQpJB)uy%`<=GwgUBj5+5KFziP*yYN&Xi&`oq zVx&KigdqZ<3CjeH!fR)fLn-hYzCu*J3cbPXLy|pQLZOv68>oH7sbnnah|eBYN=_4m zByxtv{usOVzTNeEA*6d=3ip*XJP`9ee_9=of=4DgEEkj-l29fu5M?Fx>0yhq%-XSh zn1~S$JJ&S>P_F=ykCEN(W67k$2qcEY#<%wL9goVVU5ioGiS{4l66`EpBKKNT^O#e3 z#ba9QT#53Y2hmQ2&8^57JXO~+OXE8C28JPp-ucWbdn>k4>{V=+zCW?n7IohaZj1HJY;FcZ;&^i``x-g^?G21pp`vsabxj%gM$VDj%@jkI1aB9Wl2 zujiM+i!7k&Y37lfKl?#@NK7i-R&B4A%!}kG@;hP)(5K%?7dSIic;78j!!(skYcB_z z#^?hs7v<6Rv#umnZI&QHr(noJ>}3xED-|jVrx-6u5AYvb)sXZ)K~o8?OL^`a>q@Ni zJUhwv-fJjKwN;v_rEgtxg#N$D&^wCTZg(}yPRynlEl;?q?c=y(D~@d0`hdvhqHK(@ zqH!Ljn__3Pj9UY#2Op-s7i8OB-VT{uE(1Lf{d`bwoCLhWKXC+yxc^s}P(6S}u&5=m z*`ylvU-D1BSjm^mO@ZFDp$O8O-cV1kd=CxT7h|uRfkb!cq5P3kCpOPca~d3)!7~;6 zHq~!W1EaW1HqV?~AyiWWPJSVxPvwX|kfk>urW=jxoRZ)$RW18{Rc)?^rf-kX*1mW% z1q*u;oYwBX^sWu^b1qU!OYS^yDDLy235x+;8ac=yawRwqzN9=LGq}si^!T|imtok+ z{4&B2OtiI!?)RTCG*2g0HE>HqRf|H6fe})oS%HAQwhqHhUxU`3>bb*_#+^|hc*2WZ zWnbE~z(&ODyBBM}U34yaP^%;}eTgYOnWgC+mLeN zlSR*&ReZLeY7{@uhctl6I-3o7 zV7J8aS#;Xg=vAw;5d4H8e&&E6w}}9{1ADOGW4q)NPu^J7ARotujx4Sk`EK>}E=lq? zh{~VH(&lNHOy2$eyTXAj)FK9l)EdnUW-bwhYe2w!4v5LuA$f78r{2#nh<=KsXIEfn zAK{-lL*^aphup-*2GQjEl%^z|E;Mkd_0$b9URN;^IgCUXQY3HRyMO#;-JN-j+MPuF z$Kpetr_?*0^fC;6;SUX{3Z(2!EJ=}Pk{ZB!1&PcWU&V$HNfK1{DkLbqVo){%5P<3x znlD;+y!8fJ+s+|7_BG`^m_ZPhLFl9YaSzV1Nz(5XyN z5mhiOgo0o5k>ycQQI~qn^r#8efw2pq%-w(JX)%|xwHfFzlVZQkDnOo~Zy&kWlg%DAMJq%f~Sli|E3nU&L3Vee^ zx}j7s?tX1%XD9o{-~Aq%!g7rpVQ0~ByHg-%nkw|=u_qhT^Ox!hc=S#evLQXO*BW>V zpcW-jT?)DT#ON@A7g^Xelki@rZx1bUqK*%}X0@(xx2J6k=UY9rpUOg0lSqUDv-6zK z6IcXarkvWDN&*h>%oy_L=qyg}68x&~^N-T%Fo%o)qr8+Z!kKXP(ES$Su)vhvYRsFH3N5zShNpwVTI!R6Xd;?G&^ zJn<<_zEv>p4B=`J*U}WW8YW3!RJJ)lW)RIduaa=#)yZ?cpMt)WK^(s)PS=QJRi_&3 zX;eEN+=J-wvAEm&r~Aw83sB=i~7M4wMUuGHlD9T7LzihXaigp}^Hi%>Mj0*0>q%8ipmr~0gnlne((CS;eL*`=vXu?;3!xPoc0SMYxzkdbM zj22dVMc$AzPb1W>NZyg7;E?%no?>0<7O7KE7Ke&E!}=ZxFFj@HoR_>hM`5(K;H*K_ z43RTtq6vvWBD^!ds#bvY>-o^J1EUFGryWxBxh+v#PS@U^m8V3gwa`P84_- zbZv%oq!#4?+&`*($at1?3E}AAlU#Y>ZvTLjs2%3Ff@PbBEHldROm|rBvhYfq%-gtV zN(Z)9Y(&U#Kt{{U?;XQcNc&G#WE0s`Ww9=fXxU0PwWSM-gU!&(3ex086M0p4*kW#Y zn#%y1t{Kmm8*14+F%J=4Yc^RhNoTq}-kCr3sOwpg{4NW_Rir6@shzsYd8JM6Rw~lB z=iJr?GUQ_c8da>XJu~(g;V89QqUrT_5DET>R5|#7Q9T8{x?4`yfQ)j`Z{ltCI>%mT!toEya(3Gqu@6Y^YL<;Rz+W$}Q#v@i9n*)5H$AY17BgaAZ&BzIo zM65lP*Rk#2V0k)zdJ(kf16$>B4`erA!*4*f(+7KY%??26UZkVAzB+pzC5z7a++>aZ z(A&Ce9L`G7J$fBcZ2&&8hhA4_aw!@om=PHLQ1w_4+$1*~4afSy9zl>OxI_D@d?&QI zf0}Uo+7tOT2K<)EWG>^{u)tCP)x7*}LW)N%OjO)NmlcG*otY{(dGwlhcEv!~DKBIP z^?R^kt)imwN)Bb+sk(20jiS3j;tf(X1d`O$YSH1N#NZMIg`6~Wehvp=dvhxWR zMG>Hp=P+4Nx9gFm8)#jl{0PX(qyDoFwt&+v2djN=X;OIudNgBD;V=rm-nt(8&Fcw? z3Q+j>>p6(K9{;WDsplwCx{wYW-j{dH8IqQP`cuhF{dX+LZeB%nFx1F0zKU9sGxp@A z(1-$CxH2fBpFdjqggOFPENc*WKV@ zY~z~+*Z6LiOu7J58sb+0t$GX@$ZifC$Z(6jb2i(�f4u^0+7-&h+5pAdXd>j4@yE#ygRkIkyZI{X-~VW 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%0D&f0$zK$D9iHRAh+25%H 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 literal 0 HcmV?d00001 diff --git a/33/images/gfx/Activator.png b/33/images/gfx/Activator.png new file mode 100644 index 0000000000000000000000000000000000000000..65edee2e6db501cd056e2dc2b97743bc82ff4433 GIT binary patch literal 142074 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 z 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 T_+k7q)a}-n)qx2NJsAHdM1ZOH literal 0 HcmV?d00001 diff --git a/33/images/gfx/Eclipse_Detect_Servers_1.png b/33/images/gfx/Eclipse_Detect_Servers_1.png new file mode 100644 index 0000000000000000000000000000000000000000..795ccf24ae9ee4f146e826a6dd3648f84fb235de GIT binary patch literal 36476 zcmV)+K#0GIP)Z(_-s_VUa^{TpxRaFIW2w+M7rRe{0 zA+ad(N$fEIFlIe_Y4IVk(Tx8|Tzq^A08}?0fJlbO_Qevyj|6Jwo-7W@X3hWt5iuEA zrmdNZvBW@oE=@qRT9_0$1`rVuB?xEIl+hjkzV*n9I2pNa!%B?y>O>jXh zs_|^uB}-ZTKB}vf0mK+%LOv%V0`9->zNepl@|06f1;9D4TW`sy1}U}k+KgtzfeV2o zG7%?$2`!is{%sJFsg77SjK%U0agmaAr#1mdsv~O4B56niDI_ovEeQh?Q8Gl0s}zk# zRZAlfKY)<6rT`!k1Z>>6`RS*h1aQ+$|Kyyr`1e_pr)X{SW=+wIhC&Ea-pG!f;yStN zf2rEWAgV*c5=SicgX-^uWzU@?S_5@e&1h8nqgo*CE*2Y<5pe*PyvLED`Y3BcaEoYs z4^T$)?&VBc!lSTtHY0`P;o;z{CfPqO% zVu5o<-C1|-=^dS=83FU{Rl!QIlLx1Cbua?}pm0&NUw?0}-tdAn9&tGWaDWPm^)I$W zDi42N%D5A=I;be!P=4>)@Zl$49}JIn(U6pm>6!*IB2-Zve)-2>Q;K=wap`BYa6p(Z zzf-)9lncjZ9^+H?{#^dVmdK$IrMhXb!_|k8*dLC zIuyXnJ8$pVqeq*zZ4=Vg{MA_8dv{{)ziiu?5T~@H^sbqAoN?xv9*=v~s+DJtKXc2r z9h#~&CLd;Z$}ozv*YCaO?hoF7@9S?Dr}+Jhfhlayo;||`57@e6x2kC*q^luOEhJSF zt5&Z%=d5v?x9!w8Pp~NvvksCB`50qRqV8MiynNw>Sr0yVzZ|%|JNNB(=e`|R7_hl> z-+BA(H(z?`JT4)ev+m*qe30>NII&0M&cI)UHoFBYl;Smtq z7!q;>(7By=SRcM*QR!O+ho`HIfg+rsGH%viEr%W4sop*=E64inK}NdLc17@KLc1KT zXNE(qH0JL&8$~lJ*Cqu843OWeDhg7Z?2t<*cwH6F6gGD3pKiVFcIzh>9E67+dZcaJ zHdfb2fDj_70~AQ&@ra2cvvtVHypXDrkb8A!9It~&kPsp_x8;KmJ`92oqNJo`{wJSI zoHWVha@AG-s5dt{lK}!J0oXi=3M(oqdhL~0F8|v!FvduY&Uq**0|b#E!Qx!O@r>EB z$<4`q;K7GMRG&@3tZIr@kU{`sa*k!wrcDn%ct4=jriU3*HHUZV1rtY%I9`al-Y&1N z(L^`_fJs3P4l)G*RO}9XRmg`OlhV?yIJ2C61yDJlTHC=)wH$V|=0NS#=?4_MX=T^?4t+fIU4vZU>)l~(GgCFf} zoJNjn1O~yuL36(@&Qn=onR&>i6I5qPLTYMSPENJDlZ|}hq;okptp+cI;6l`EK-9F- zS-ef10469kEiETEw>o!Auf?QE+C(I{;5;`sXX3e&O~VkJ7vvwj^Nw53JnKwN(`sc* z5>XU2Hj%*v5kc6d4wxVS4?TF_sbj`;=-3fpAOS$p6osimm=HqBV^URN56jJMIqBTV zx?yU(?$^bvDcI;NunKHd=lfc2q?r)8be!U3p%=;Qigbr`^D!_vld_IMNkl)ts= zwk3gq$EIG?$<4UW%c#3UF!n8o3Fc9S^8n&OJ&t< zz=*XI9_GbiQM@C(d7ZgR5hZ!?&ef8B>|Ml>LkN^8A0;E<}naWgFxWC|?x8M5q z`)>;l9Gp1m-1Dbg;BvWU&3Z07D|`Hevn9dZyLUbO-~<19{D~dgw>|ve{m;#stq8$| z;DUr8A%uwDkPsxOI?%ckLU1lP=UfQ!!;0lLHK8V4xw&mp)BK}P9;s;#)8w(_f++qH zf`rfsbzjz75(0W`Udol~IH8a4(wcvYDEU=>$1wPWA3M@D#c zLb#LX!ee}C8q=$cf^rj@lBTjc!sD)3j>M`1pIKfdT_YJS9Xet3i5cU&dOQl1mm4Nn zZWsT(ecUVd>6%k}x_dneiVhmQwfo+YY1tkn5;Us>JQ=R3~uBIs0C ziQHbz?NoeOZmA{!I5J#QPfybcbr4VUs18l-(m%DkR|VjRFX`?;)Bxx?GW+4tsly!6 za94Z}%2jAy)#p@P9yLd0I>GH#-A=`mqGl6#YxlK7Q&SW`h%!=AVl7&}yHua%cB-jP zrS8(zafv!X1Q3}*n1b_Y`xab?MT@=(go5%OfFR;rn4DjA^;H?^8DA_|c*-fK{(0*8 z;YheT6^~tl+wKLgD|ZTqLZzi;^3ruf2*El3$Fp926Sgb<-n zXz}9jxeyr{8CPC?4S<_(x%u`xXUfhv8Mw)XOuSXwVxoRaByjRbjk3aF4VH&c~Uw!#y z*KXZ3Rf)34xx%^Nf;bo467sO*)f~1l#CAi>3v}f0zSj&mCDHP4yrAybG zmMz>aXHJWpNJQuLK^Ii_W%YW3NRQb}8D0HT2l&%8hSJc*^DA`1UB~)00D`~&pMvY= z7A!0>0Hk*EU*LdGjdlflSC?P=Ug7yK9elKe>w;Pij(8ScxytPbKar!1{qR&w9G!jDSh3Tti&yuB^z zMonw&z4*M`+qye-LG!*T+o%%&elU39oPy^|IARkJ5t1(`RuzIK^-IwJfPeC4!QbD^ zUszd_SR)?055=-Ych-`@TE9Z925?bnC6R0pNm!5CqAL&>W7|ty=?V)2@A+wrz>XMmD~Hf^*Id(=-hU-84-S zf~=SzA;iFe11C*7_x4+F3kCwZVFCz8A`v~(u3h`_6VA?Q*{V&Oc9SQayXvPOg%JG* z4k|csVEy{_LI^|GUzqj$DW{&wW9$jRH6r`Mks8xO#2})puA^&Ft=Sia0g5yqn4$t; zit6{Jv}~D^m6gdDgrJB+EibR2_+?#5Cz;Lqe1aAM!C}TG(1ZEmT~K=FI+5XdZKCpj zZ^9!oV6lk5}w`=oOPTZfU2^T`iK{=E4zDL@~MY+zApWFm*=Ws zsVzMUz&a1jyxS<6vDuJBh(&9_tXAGIx%~yPj%g|YD$!pF5`f~E>(c)2>MflataU&d zT?ACis$T&bJN8dE-*O8826%iaoD12U1#!!3AOshj@7cW@zDP zC0(8fBAPVm+3V!-&<){-! zaV|8?G4-O07k$03M~|LAuU?&+n$o#TH_inKS#P2NehO6kb1aVzQxqb0-gy&0U+|UJ z?b9@kF~$_BJ^(=KVyCWc{$<;i&09Km?qnxgGatP^=T`NUuYgYS<*|yLff+yR9R~Uz zADp75xX$S6kYA55L6V?R-F}g^Cw$H4CAW@DZ{<;-shxYLy_%{_{;aCD@EROMr>-ql zS9f-`Rsf)?*oaW9P^KuU;?l%Y40E5r&&vas_w=TNbsv_RmFWcdcgw>%A+{=&N-IoK zP!6an4n{~9(Y%PN^GaGGOL_SObV91ds;Hkhk5CM8nT0j@Dv zn=Yj7L(yo0gb>{8^-el>vYd51|NJT0EpmiiQzW=9s}~+6S5(q!sS3t@#}tm}+1c5# zHO$~r{Dd6iNAEf3l22|5E_lr)8wp$xXEg(5h;&*A5-I+)d+&enmKis7?$Q~65s5$( zt5&VN zy!J*3L5XmciIw{tLeuKPHu z`WCf@C#eZRlGRSFozMS4$|n7|Ivk>C@k0lLmwpC&EG_m3b~C2#($(E0IFI(E zHCq!CB!n={YM-L5w-wy7g@`z(wr$%5gF% zxJJn*FXNYNCTcb&7(k+BZm!A{r_9(?#;ciw)R+wD%4 z7XXCn`{pnD+@x|M%QK!kDC3<0@HwL$XhE^@;L57kk57fmG5y@kG38=Fdp7{SKX6Nh z=sC#$?2wcL`@;o6N|l^e8lMx@7M_$1wUzJPKYK`JR;KxD%4Svw75c*c#+i8zPdop| z7r6J7n;yS2*U2A$spx&+fpt}5N2SYhY+4hLg?(&A#cQL|;c#4aS?)OpBZgbc%hZ0F zn}1Vrw2?8Q5K$c^xr?&%uRU31RP*!W}Rl->GcgQ0;PJ3eQ##;lIQLo|O!q*o6Q6m`O7 zxu-$##5|hZ_U`H}T^)@<_S>k%K9?4~NY(`kL4vq69|RGR=ygo5Aw!ORVb*h(T>6*x z?b;WYlmN)e%&a5#x*-IGL!t8WQY*ykO=;Vvt*WZ8{pZzlCr#eJf8VpuJOzMrZkjPW zLI?n@TDAhPcFmfh!-mPUwMj+PK_#baZ89qDULinx38^hd&}}@{qzgC0>GTj$h)O zxS0?~n5HmI?)G>mP8_c~G`HL3^ZLB;SBfvi@As#q`2DH=ai{;u?RHgrk850pK%EyG z(82+LR~Vm)>h(y9rbvk;oo`-Ia_MGc*Uwdtuc{0Jj&#?6_8x%B_Ez2WeuW`W77->` zt2|G?F5YyF>6QB1AC}b-o^Zv$ydKr(Q~(NA>R*3WFyZ@I6XXo6s?$$Cpy$Hk?i-R?-V%}Njn#7`Vl z&vyu6AJP*M=i-rnJ*uhd#Iwf_|HFvMlO}E7wyhRlWrHpvF@OFiC!aLRx^`^e#sxk3 z)U&U>{L<-T|M=?5uS}nQlhhPKaLJg|8Jfd!+wFH=bM@cPJmYi`6Ae4{>X4}KHum+n zbXI_fh)1Uv!MQNG;GDPb(CN}kF9SdjT!@P=x%B(*zaKSn*jHbDar+%JKmPc`*XPWU zUfPi(M*CuPV6cjaUw{2SDk>_fbE$zFSGG+W{`Uzj&TFYv2_{`%W$Q~%|GK8Tu_oB* ztyBP!622hLie>$>)V59ptHi=e(SYzqBkWSn$y7kdFXb!h9a8}SMz++_4OD=>DXzn> zo1{d4pU~pGJSQUh^jSsjEF~5Aum**O5syP_zdAfaad{N4L2I@f%i_nvBU`HJ23Z;P z%Tn7q*vAKxtlI3CrFHYMJ-f|iwRVklm97pva_qsV%v-wR88Ia=hYL2*169R#NVVEwb zQ*&sMP{`}^g(JGx>#3@&*hj)LJ@1I;`4bN4o7);B@sEDn#<`5heIxx%P?+= ztW>8{^Lo8yWfg4EqVJ^JQo1B-YIpRh1eXV5+Jz z#!S~QAG<@2)>_2yqD_f~#d(|}`SNu{3mH#o^I4NgBO9u?& zvHvT4>&R`{a`fR}gZCynGpYJtYvo#P$(f=kiXsG%Lb?_=<>5oky=sy~iB2`v z9Z6L+MP&>MF)*eu1%i_>P0r2w5=V21x(Cnw(WW6PJHdPIoa9Sr=R}E0RsjASh{T4yYGI$P2;l5E=f<%sHm)G{jX6AtN;F> z=->4g;(rx84o1p+%&gG&5Y<+J|CKO#vJX$}zP?()n3N1_Nd*LKy293jA3}vT?b|ZM zltgraLb9n@IrGSvqA2o1da~vwg9m$fCY)lc=Rm}eR83d7> zB@i{}D2k$LnyRW`)!(VfRbiZSLBx_z4aS_R)9dkj9I6^Icq9Ia!TlovBsNZF`=mfV zvOwB2%K^YNg(e>xoFWEUuEH1vFcnTsenKW^ zGo#@;kMD%zrCw2ETL9D|M>XB2h-o-LdEkKu&OGysyu3VzBgu9$M76D3tshoed1EJK zFHay4$j;6_v@Dv@jQ|{zM7(BM+4oHhmcBp=%I%$yl|>q6BQ0u@33SgCZee7 zil>#}ys#?;MNzDEFZMvIkoL4hWY4!5&1gnaghC-HiS}s=`6#KVC(NNp>9fmq0-f53 z$UyD1)5bU)4*Swqi>`H_bh%s7$QBbdA4QjiCR1I~9g<8(#>QyO=7eoVGyeAw`-F_E zsw(?hyI?03tD1o|JL%ePYR1uWb90g!3klP$_McMb?SfsCX}gJGCn8t2Tb6~4Q->0X z@l>mi=5XQA%(iA6E;QGF17Vt`wAtlJI@XOu!Z;uSLI}GVVue_uY8P8;93bOsL{!tD zsHq(ibXbC@Bc?&>c-i*koO8*9WVE&|j2huqZZevi>2HhX`mYzJX-c7!%EFQwyZl;G zW*-OC)WUXElGG<4Q*j>kk1C3yB{lmk%@imt&Hs7L!S!p4wrnAwMYnD_y^d+szrQy< zJ!ujqbjj(^Gp}oJuRqnRU)vBO%Im%>V4?j4mB~&BqTl0l#52nvqa2 z95IR1I<}&17^=1||7=rv$F?ngty$B@EL7NJszH4$5Lp7!XcpT2d~C$IkV{4s5w{rU)eG*3 zykp4h2WLz^p-;+_hc&yyT8#}v+0r+M|7GSCuYbAc;J)>X=U*;DoD%?1w&S%~@9${X z*SdD7&h(OQ?x;cGalre#u`?~nx62Mgw1qTkGtPEvkIB)=4eo5hG_tdn|hV=;COzj5KT{~T1@W2*o8R zDnL;Yii%KFfRa*#!|hVNY{w3}eIm1z_dJ-N(JDuEGQa>2frns*!GjRG=1|h}a(N)% z8th0rN0y|4L(tlyvEA#(f3*Fcx92|Mc7A>9r~7T~QT69V_HKGU)#q|K)QPt(%dg(# zqGHqHyF4yww?Faa&#|UwtbX>!tN*iD3bvvbzIDZa;xYj0O3m?=yk(d7E^?$#FIDnFGUmJVX|5?-+FPV4K`HwEy4nUOc zchqJO-V&+DpGuKd*JrK zAHEcLeeinVal`9|$Ac6fQv6Da&*5^|)uDZs zv?>0otqWe!T1*)??#u~KTol;w&&4~d+gxP(!~HuS^W0s}e)j$gc<;WGM%=X}LI5J0 zKF>I27d-vr-bl34_06w*F!w+efo1g@2mp>w zXHJ{e$(?AsQjL`@`}HvAp>1D%d}dkIgXazL04%icv6fw?Ji|WvasB4S^Ns0Kdkwm0 zw?P03znwku%DZPTTCsNJ_jAuZHd94yfeE?RtPM}kW1sc8v7;;kgx7wQJ!nje*`ICr z`I|dlxTeSDb1Q-LHXS~H=I`@27RvacElbXMSH#St5P^D=%L$=7iCU zI?kOtx3f3yyNMQkhKZ^LC*^uyUcT9qeBsJC>G7KZ+%o&!e~cUAQ$S@qzkKVPN_nsV zQDF6gH#U@*F;;Vr8#ni^SJ!MamkAeB`oQ*ZpvpSRL{=f3m9rF~BKkpA;a z_hQPN5iPyNi(Z}{)|bq>c1ViCZhr8N``@0uV#o0(cdJ%{q}NezE-+W88y5d?=YUK% z=#M`Hej0K2TiY%;K708GNy!4J6as&rwfnJ)TdRpL*4yWd{2xBdJ#O5k!+K5Ybi<-0 zw-0IIRnyy_HEs;9ynEoue>|nN2S5S9+-cUlh?eGt2@L@0t7qSd$*b zOG{t3pAw_7{B?b={-V<>KiqfLU;v$;{G#H`&XZsH_Vk&jA3b9eX**aGoN}=yVjc>_ z5WjnkHjRhFcDc=+MI=VJQ#8Fro}~?ONz^A~O@2S;);r zt32f8Atwi!S;)#R)EsKJZgTmDeUKwrab|WX)pb)*;LzZ3!|8>~3x^w;7EzUwi0;g2 zZ#Q+S$5DW7(L}NjU}^~m5ZJJ6dRV`sOIB4`S%sQ$hf{Mr^7iI%v~fGyPWxm3cJkhn z*#f|#tp!Xk{N~A3p4&&ak2X-H+bNUH!Z{lXYi!|fgJMJ~g*c$sdEi~_rc#J@uY8-I zzw?V1ZpVyM`oFL!1en1pN84%LTlr)hXUE=mIJJ%CVE`H32AhR*hNL;Jdw%ZblIZ6! zNdxNzA(+3V2msd$zj}28=1fUfRaI4e11163QXFC|edL^5mB*i2Qzev&9mD^%{DJHK z;0MeQ2QWO%;Yb^!xZ2Lt&7we@cctEXi=1(MuS_=pFlWc%6J=oCWG^~%WKA_8kv;fN zX2pT8p1dxy{o$c4{ofRZ0qCXyAYvLxlh{}-S@QI1^lRsjH7kE+I}|7SNen#%;GPq@ zMXS!4+3$+J*m^KxX}KLOgCfDB$sk>t#6St>ty_8|*&26!#TyR;n0Zp~nO5MQ zXFl0-GZyf=-}=RAHMnA`&6vMoSBKD-j<(az?Ag*vK6}x!0bbQ$ z4?0AIwQLhdy8e2r-VZo-&Urm#>(;!?mosYG!~1*p%{%d;IX~_ibz1jmKFI}Hsjdyd zD}`vEmu9`c#Pt}`v`$9Nzdp!CZAb3@2B6r22&pOT=Dd_a`&tRu7F@_1%i@p_wr?`* zngX^J;uQPZlZX^u*DVKzj-o!oBU;A4wZQnu{bQ&>_O4hBP^P+>{wmK{4w+-~pS zV->I0if^5JCWjJ==1y%tusrD9wE35P`*)X>6_%A3>^rdgm(5$tLY}nt15~Hip2Y6a zq}cv@2}g~QJO;ixLOja0p7gI3mwdFUB2ZagUS3{aS+RT7Rhs(Gm%g>O<+B>A2m}BO z?9x)W(@z-F9xL*#u5It~&yaHl6TV8dG}n<&BcJIFtzT|ukXNt zg9h~LJLuRxt>c#D)?IH2lT(G8KT#Y$w^~2hdeQQ@QCDedn$3~nj_s4c4Plj^75(!0 zlPjaD!s+hhbnaTQGZ?Fu&C5SVW^9R(wG*Do04&&65DO3Pd0~C!iEUDAF>`(s$b}M? zqd@`AQNrxCzLw#5{@ZE<>$|-*t+1uy#rlh2#qj^e8uW@ zD;K=}ber+FxH{c1xLsgxroio*cF+yf?FFDX2Aa`X`J+~ddH;ne=r|1Y1f-&s^tuw(U-&o}J1 z=T&FD0R%iT@y6G_+E-kn zCU2kNvz{+qy?TE^QAkimhhD~>XWsZ?*)KnSer{ghnYxJ-m;k9+BcAy)o;v@gw-#>N zwBptAeMih(9QA10&ZA;^{TE%@=hX>UzPn~eRayR$XYV_=JaGS?haEjm3fKk|hGEzz zED)~(m4t7*|ujAiHOx=s#liWlikzg=r7`o+&RTL#04%_Do zY|FQkD}`jArdOHaCUnFyx!9QRM$v~d3F-6OgHz{4YrW81d|;Ocb4;%}~! zqvG^of8PFu*6Gwy&jA1~cx>Loe>=qkfN8xhxc{uX|1h@SGmf^?7Onqr#h~H)ycz&f zvrhcz8Ju`gpJ%UpW=qNCozvpjE800zH!pI;M#YMPTQ3-ND*#-4)6-X6eSRkg6KP#v z+5SVXZo~RKdnEu&xOwrDH}vr;ASKORa>9_P#7=u<;ok$fBl$|*T;T7yKvp5eOm%>wCVTR9p{f3H{#KhQ-03>^q8(g-@Wvhv&W6N9eCu+ zrB{46eYDFhZI6zV@BM6B#hCL?c@Ajz(icBnynN6%u}bqhVLD{NPIzkJ{5IE&84&eS zKl9zDza*>Y-w;x;HBFP#4glmSpVs_^_1Tz|M=9EdVMrUn8le!8uIttZsZz@TFbu=; zBp}xJOPY$Ju+^(qbIw&&l__PeQnn?3j4{ca)I$Km;jm=I;?n+gYQj8-q->cg@+1Wj z`-D{Lt)n&8Se^n3~mE}a;AR`deITWu&B+9H2 z21q4t0)qv)P?5v*JC9Z;V=g$)#Gs- zb!#_2{q)m}j0{V@oKC0Zp|Cs)_RmHww}pMSA>sQmDbx;!!!GZZL&P2}D)6v57ZpX3 zHi`TkMH({{Tf8MXlWGPr#bamDiX$IMjU~+?YYs+|l?g54aRsPRO-&mws!j(0C~luW zsVmUw@;O~e9%wF~mMk1l+&-WEHyOLH`pe$}VT`|K{>BCMs|f(i;qxV18?7b_Pa4=* zG?IwRm#9(`khI>+@-XrP5khJ$$?GMX0EgS>sO6Z-cv7m*mt}`$sf5fYYC+gGwUp{cb7-1r znv5w#Lgt|`MNyc^54H2c^U~3sSZ^Lt|)RV9-(Ru#+anQ09A7k z5pzTx%cf~EFillC7n&L^07I?&0{(8`YWdfSz+ZoBE{*~yttQ;~xajWsJ-^JO5Cl>c zRZ}$(oDQd^sqzpn0%@AY6vn_*X$3F_B29B}!9m1SO<@Yt7y}~`az4Q8@tCGbV4A8a ztlC-0xhdsW2(D?G$+@PgL@-TLTkz$VNjbAmpIATb5VqZN>`Oja4EFJeG#})6$+9)9 z0Z1?yJZ_->4s=*gl06O8NaO@HNla71n~QIRWzd+M+QejSNdyD z1zBSd*vem21lGn#P};^-QEG~<5+R!`V$Nd8{XY*RF& z8Am&g20z77WK)!umj2c(G~=j%b%2BYB!~ZTq}MoM=T}A&O;J)(0$}_0?Slso{xw<2 z$jJCLvpYhF``YcdFs-9sQrkPB=>9*4&P*cBrV&i&A?>wP>#355<6zn*znZ3fd(;F9 zlJm7|*Pe9JNljzm(2;!fk(rtKEAxS)!^Ha4V12NA7|&ZJ#OOu;Si3LSpEZ^yESmA5 zhySElnGsq1+75{N6%MAY$qvY>Mac_dAq_}b1C63^6e5YH=+L16-09U(RA~_E+*<$dseM7 zMgU8~id|XTlOW+O*G{1})I5SX0p(ji2<%@PUCXiOF?C$HN{`w zU8ymqC`_1UhR4%7)0>;>9oRM-fU^7sL^ti^yS}=<{pf!kGH3slh*J|pQg-DoUMxON zqxD5hO~|Gy-3Tnc^NKxcsJz*vSCHkJkURp2Zk5hhV^mMw{3D)!>sd_t7;Azut(OD4 znU`#@R=bL4HO1Vn>XMlZ6#pX$g{Git|I%KkKgM{3hYA&=97d%=p|G#tFJE5Qbdg-R zy=?iuvPNr)j{SQ$8Qdy!2xNKGmL5m8OKatK?)~5|{m#4}j6pB$GiD}0D?hlZ%h)Fy zNcNxe@*B%ZGn(-~g`TxPO354c^V`z^Xr2r(CP?Wx;_9uR-ZJpa`v4$P(r3(_02(Ed z5(~GNeZ8}=Urt)1HN}qAo1{%ahMAt?$xHL*rg>fMTX_EP#Im_p02q44waY$woDuaL z|9r#A`dkgz`lT7oXht%)JC6UMu-93`dgr8j7-J!UAGQtxfcQ$dip<>ef(Hs zMH0X-1(ly}E9jq-7U9%rO))d~JLl+I69S!#(loTcV9rl3o`XoC5s3^uZbDtVve$r- zcml(3fPURPr?z)F!O9KPG79D@l^TCau z+aug|+ig!h^_0AyHf`D+cifRcmW!r(gD*ZUvzse+n35@q4~FOb7;N~EhT6C%_V7}K z?+=O;m(p~8n(;q^0X@8@c67T9zIs*F2gMwKmg%^Bps$649oQ9oZo?7pa`qNiYp$tD zR&TORp)v;0{)0OAX>I*#i#Fa%b#dqFhMu@Jyp0Q>EA# z+;oqct%=mj=FV8Zt=DQ}%7l(qs_U=6{>2wxlp=Zk_17n*TpWyqb%QB~q$zZ+08m-X z84XBpIv7*H!33ZP#Ssh}c1@9yk@4Jf&rO{=_1R~imHP`PkTsjyhcgp^$zS`vVn5KO zU&>WoJt?VL9b|LeN`AOnKN-3JKs7i?h*leXZbb`=rf(nC!0eiFl)&v!05SWM(q$RW zS)=`J6huhL0yckJ_Dqqu<(zDfn>D#@*Msc^6({ufgbl$3gi`@%MM>GQnP$t#&Rs=C zS*`mNczioD)1Jz$81nwAZfD8E8<3HaF>BVWDO0A*nl-Do<fdCQ-`IU-OdHz*i*9x8|G6Vm2D)d z84X~UpO(=_h?Ny|Tss$)gs)gok=4pIeRx`?27vZ&s+#$82!QT&Ja}5VvNyQX=NR0= z37}+mV8+sbd97?sw|uL6J&-+oduC)lhnc7_bY#}oquLoh}rGdpFvg_0X6`FU&D z6%1r{+PwdQio8`Uznd-L*s){pzWeTk12pXDo16OWt|GY^XQRI*4Vz3RQ*D10z`;m? zV8yGb#c^D5hxEkSVT@gQ<(2j=KjgpT z(cgbw7Y|kFOSgoAnmT-R+8|>4OU!Z;00L#k{t_b~l1CH7Qr)T}-FaL)S9zJSr^u*E zan2Z-mZ^yK8v}d8l-I*Qy`@7CWWL!Qe1ls!iu3gfk*l+flYZ^y22o;mWHvn__c-HWZZ>=te|K-xJxZ@BXrX z{K%PvXLrtz#sVTa2_5xH<9Qk@l#cP!!>>~iYIPy|h00{fk z)(!@!)28H1izUp>QbT(Td1RF8MkriIG)@3a{?>*_hyXy<7=WH9XT261hmod)1j0lB zcwzYALJnY46$jvQpwy$bb}*RcJKOY7OgGlS)y4wjj24bQCuhA-W&E_V^3h#JQ>&>N zhZ|v^di^mTuR~FQjsv}a74pV+wLzP<1V1P{;`*XZR_cy@2L`r}m}CgW35HRw;FFcE zd{4%7XNNt@GxFOUSCQ({4y@}xBB!y$Pwt!!VE!)$8?7lcr+f1UPi}QN+IJt+AtT^$ zxS+TzspWz7-|RTByfReXPd19I*~I#kwvA~%@p|z>n{^_WX()_I`T;q)E5ycaVO=t) zvVsGqDPkWO2$-VwXclD=Jvm(l6z>V`)JX$O0Hua067!8Zcgdn$O`&eCmi$;L!A$g~uWxw$)`yB!sF;Y#_6xKrhDjs7A01$|gmGoUD<{pE( zJFs$b<*V_-9qR+2kf=2pgCc+NST4*Y0G0c~H*bs+;DmfFwGyT5RLA6M3-?Fut~$5^ z@cqWn_ZvgU_Ve96Fr`ChS7=MKrZ|ewr>)ZuTKIm^?Yg>fQpU>ni>B-9!busc-YL3X zs2@$r?A}TX<#PargY|c^^?@T|V&tW{&Of17?4&Nywq5_WKpxw;cKd-HB^5neyZa9A z*ty%FL#E#~$Dc$~Y~Q|p`}XZkVEa&DG*Rs`$m1l1fMFB1aBMm@MqhlqHQc?YXUh56 zoqw#{#96;iE^G;2zs-n76f$Nl(YEu1T<%z2HMUJ=hoR}ur3Jn{XtvICb{71S#leJp zqo>0XbS^&L9`4@V)9;jwM^{&EA~v*}d((ol+Om6ka%TF$@OQiQ7TFE};eaqWDpIt0 zXQn%L2F_m`0`RBfebMqO001BWNklj28{_DXJ?l*wJ{F3x}Q zXd?C!Ae!=}Te5ZA7q03gc4I}AU&pj{B~>_>`Qjv@Q9sL1*L*3!zTLfb+Bnnj11^6YmtaN@b>|R_9qJ@9CDBe zn}qa zv0! zD0?;kZpHcD%R55#>BT3*u4|-;UdKi4dDb0~k&#a{!{|Psi(acy!6?=ob!_*?nT3;M z{I10ern3JtxTF)D^IHo;WH>8EytjLffWFz2(8Mjlz9pycSgd4pl=+35fzc-{AGqT< zU$pYI>gl@)A$|Hzul=MTIG+~18veq=5`zkUi450b^HVPG=b=)1MFhkqeN`nu$HP!NyMKU!tg@Qx1F%ko#Y=6$hYTbxtfc)JDq*xZQlZT6 z2z}r>Xe31)6%*;J4j!Fq&tPR%KNN6T*J8Kq@ z%BMy|M7%%U*s4<3*SFF#{hb2M^;;nU3QyyZ8G7LW`t#Qv;5&{eq*Hn#m}0uDkInr3 zzHtm6cJg*Wfcf%Q?pA^~kCA_%H34{+R=B7W>3QNh4$T_)>K>UrcTC9Z;b3aI|9l7P za5>(2c(ER)rlR`p@UJ&lC*7p z=v_82FZ%fQ&Y;_Fv(esETpw$dZ@<+oxd4sM_Jb5{xxwB3&=?lB4OZ?sd{87bQ^XEh zv@&=sBi&iRO;?EY_wtoXAbjAjrspwCiqD7r|9UPE3h^bXS<*eqqZUFmZcnSzJ&Ccd zotG7r{i2tj1Veuh3~kpqu+?l`2ppsugS-07-L;`1e|C94pb~Mj84fB&ZFD3=@_(mf zkT~a9vOYai^SFv(+^_MFAaD_J8SL8w3Mn8mP>hI#U|YT(3?sJ87c@fWS8bCcBO||vgaFH3-tMz1O=rQ>j=!br zM1(N0^K^N%I_cz;ZB`r0WFLNFg-DUY!c#4_wIeHRl(li$K78CV7Jaz7qNS|P)6gJz zx@kAw3QMFE+a3fZ7@`Z}9lK)PQ9*s9`fXvMBk^jO=xFik7|4FMw!Gp~hg=YSF+B68 z+oy-XZq4)@tPhEs?q_2)pvW1DBE!HQ>`NvRVh=v9cnq;C`C%rds};qs?^#ouUEVd? zEmP?Z>z$s?NAp zqA`QbSrM}2l>^lYGzqxD#mPy938_D-dbCCr$?%2SnBxe3;&&3dNw2LMlmFqGLNOex zwm31n7>z+kg>gQZDC5Gq&iQyPF_S5oqZYl3)rXIBSr-}_0u)rk+|JO&NkV?#UjmqY z(1r#}ivV=rhGApmoS3(9sHD@Th*br5vC!!AC(2q{r=qOVAN-EJszsmO z1VS-)L8U$(^mEwouE~=V`Pz?iRv8nTJ{n0}Nbj~pp+~gwT?S;?Q3Ha{$+++6Ys{m3VT}6=IkQHTN6dI(a(fN(P;5L6i1Z@P%X{3ak zrC*jUVHl~&p9D?Lv3{bcW(?bc4YjbMNH`*{r72M^IWOv3f`8VHXIux1OZkPpi{?I7 zt9>zq>$n2R{19d#l5MoLyjaP-8hHXgTCq_ozUx8bLD79m?Hk+ReckcaYNkq*pslUZ zP&gJih+B|d!3Jh~3sq{CY`SErV3d|oBPUd*!5a#~-<~DH_3kSqZ}FN9is+Au!`bsL zwC>qz7Y$AarK$+swtQNOu`YYPetv3^y?EX6rznOD{Ed)*1SxymfJT8sQPaF=jXYAI zgywG5RkYNH`xTq#6e<}4Z%%9BGrd>kGw{+{{zVdbCMfy@CZe73tftAVpq$IjEL2>R z$;bpmVyzs!pysC%N)y($qDzE%qpUn}qxe!<48f}vEWKBx2xF&%H6%^5a8X!$V=_K` z(r!?bwr5FiF08yT7?=IcmdfoSn)j6nNY1Wa_bx$}p2sZCg{KrFg_T2utJ?C*b*_kf zW7Ox`N!C_;r|Cko2Gq!)*3y_!EE;3E0`?>dg1@6NR3_=gIj91mm>y9E*L5% zKHlRvwcpBKWO4Kzjz_eoMh`L$-~7D~iEw{h-CvpCbGWBCS)v8rQgp%pBGU~ATf3;B zs3`~viuOW2Lz4B&m(M0u!^1-=VZx(%AwURA{uB&|jg9qd)9G3B{aEhk>gwo1hnM_4 zJ%Y>8(ZJf!(6HrukhYSxum5fj10X*g=cJs3gkz#1Wy015;(Ym_sE37^x};cy>%%Ka zt>P4U{Cz2O76px?v85-+5%f(;c>PwhUa)rx-b1F2G_V|$7lH^kwX%lMzd?s4hp+KZ zdQ=Eb^RR)iV8>mPgrxfOQL6hDZGAVLMs0+s&tA^kx9gr?pS3m-&iDG`aUn{`E8P%k z7u!&T9MabPeYh0AExe*tAr{e-G+9Zmc3E_LMBkqOxxlzm#+5-Xv5ictMP@5|%k0sK zH#ho{iwXz=kLq?upA^cR8QJUAZtV1q79XO^z}5(kr^y3^nLc@amwthFaE`C0HZ5TR0s z-z~y=Y8z3?kWk}z4WD0|^LhEgG1Gd>2DU40Aq}@HjXj;3b%0`XdX!NmV*)wV#b7b) zl>;PW#=wg^najxx82rTm2;tP~AvlBywY7mpFm z7lvQn>mM34u@y?qD=*bwx1IX9bN1-5?@X%Rn9c(s0SLnnym9^31xM)nZhga)XxkWB z6dOw@jWy4HIp~M)t&DX$rW|QDut#FI@?k6Qo2F|Xo)ARTpj~3 zr$f>qDR4}zWJD44Ngm zbO7ccF+Avd>{ipE-Zt&RTP7ml(a`tBO*?6CQen}-Q|*qk>pa}xpDke zE&hDTdSLL__l()!?T|-EhuCrR!iDlQ`f~+R1XedW{NbMmme8VriXvVTD6?IAnK62i zG5VF!?Hykd3f2m9jS8p$?#DxU;L<4JL@WW%B{(oZnDG;H`UI@CJmnVvxd2*CNYLJl z{(_j*+DtPmZ02)v@ZW>4C;r~woA)nq-Wt;!Z~SUr&h!mBT%%8bUOqVNmbL||T6g~a zp-@*sco7_(*Q=_r^2me?>{1yDum!@~&eXoX{9?M~BdCtIvNQKlvd_le4PgUxZ&r1- zk2FYTMZCJiq5rlU7QDam)kwF{2W{$^OzsK#z5S=XAiOu8jpJn%QiV*w*_FBG<|!KL z)0e@!;59E2I?i4WlgRy;8x+}&hbB1x$PH8NGnuPR?~Z%=6jZ~kO2mqTtCR_Q&6~kh ztVDHB9*;`{utAaaLixU`Ma`e-Y4;m?OUFDdj!=;gNMPGb+sR4v71PVFFLL+-0FZ3h zq_tAres)Xz!-WFYvRE@Tvcl?8eR`F|7IEMQ(6Yj|69ZH6xFCYk*p=wU<6}oB3$VNR zo7}MhmGn+em7uXjiLgmch`>U4v_+$8BwIuyc8CcWPoUPbZ&_`@M-!fe`QlS;lVm_` zW#8cA-^N|aR3E^PMBh*oh;2@D8U!F+fi)rN$)-+Myn?v9tGG+_;fT_bRS|d%zP`oB zF6$@sWQ}r8^RC}%#_Prg_8b@ytO3in1I+Z+zF*bY_aGg+=sB?J*s?YMWg_%<%NrIZ zr)pTwCPzR^!+MOA>~m;1k0s@H88R|p4qB;dx+_F85*+rMoPA*J^;c&SPNK)n#B81f zMKv}y>UOx@ovz$8E$Jb_!&4os6hY&$YAsf=Qer%FFxCfqM*ATaq^T0%ZO06cmPbX- z*uWN`BI7ez^yNYnU`K+V^p-*t3|nwG_qAUBP-)T=pIiMk$}Xm6ZPFyBCZY;z@|DCw zWD`>}HerjuJS@q|YIs?l(Bho~qY0l<3fEa@eHS$( z0EvGdIaaQuF=*1FV<3* zg{COZ_}%Sv8SKwDmCdKk(EekHR5o33f6Qi{xtZycs5VJ{iS9{vf2Uhzg~YB`jbCKt zUly*RR6N##wo6t~H(2d~>=sd&m(%pnMS-d{epS$P;%q|)pTG5j0Mb`))w?8zI9$8a zirMq1Is#OEf1&mUk&A=iFKq;&wD7688#T0)ukGlYTCHa0Ak?Ng2700v7n2WJSySkM zuDin)f<36>kiYKJ7teD&Lo@)uq_ah^_>7X1o^u+Frz@S~+(oJaDT>x(V;-tEi4^3_ z8Lbd-FmE0tkPyT7d1;#Ssh=17(OHag%;{qq$d01sGZJ`{FpVkCMQYfUW6+aqE@ld z>bUzSfl@pYSFuEnh;f?6RT^`N zs~#@rc@oj?zmkTQk)|3XgVxSh?ceJx4_SJM0cAMNQ+9l8+lPH;P?nIGfKNB0o!-l~WLY{`Nc>_UY4yR#I;eDOYMM%dEcEJ3ZFl!<^Kije$bI1_=NL zxTIgZg0I|f>1DpZ0`E0fNRt^)!VNgQH~|Z%W<-PicJM*IeI8F6%2y;j_O;W=DKp-3 zt5=$IdS*k?gPMXr)dBl>^k+TMN$yXdy~)3Q+Ycr2JDMpN0UKC}Ql?UCOC(TS8!J|7 zoh?5zB@ML`(CtIHu?U4fK>?%)mfxk){CT`60hyEef8zx$zxfZB?Zaxn)uV&|%;-Nr zd4L10x->ilq>IKLTvvv+*1!V62W#y+XHV7~EtNb$p z@Oe;P(lR_ICn@CN<(My(pOn1yqDI^(Nl&(0sCP%n`Q#fcpiQ!ek>niqz2Qbh#mn!$d z!BJ=bb-}|BW>Gas!Fh}*e#Y-742e|ssOX8&VBCl*?>m{!zUB9F=5=?%L*j&GoAz(7 zgel3kSt|cNl<(vE*J4BgB4SY<-iTIF=l9n5Ri8)M~}qSJZ8#FQR}R6?c_y1WE^J7{zq$pEqOGjILTxsg~=l z{DYSC?9j;nOvuApXicc9+7N34Yq>~E@mD1M2aELMI;{iagl^}nuKxml_6hym6n`Oa zc(Z9bR4;+leiw;t&yMrd`eO0By# zOMRa{zRXR1m~r9w!k@xQVetx>-@g3HhyOt(3=f0(qtbWi7upOSZIrbuAjN<~{sp^7vBY=+IqpSL+U7UC_>;d_Y)Sv^ z)-+Y1v=TKL8CmPu^73*vpLhEw#`k}bR=fI{(wBhsCr-we6`KR|*@>w|-eI1l&j@E1 z@ zFn|wi><6!K(2QZLrR8$GotN==k`iy3K88@XAz`-x)%FCCZxrD3_?;N2lXU2&rKLc?)U-KZasf`AwWZ4{}dUoMVtaTyZN_X|YF%ef1ih zo@V^|b)dsykQzdsEbw*d>h*iWKPRT{jS)Y!;MxhIJ+|sCB4%c0*OU3Mm>3*4(!r6D zr84Ei9dNgY_*YaK@Bz5=_@|7Fwr9}{A#g!4>Q_spio0O*EO0}km9Q{m3+0zD+Y9RY zd=CEvqwv`~$Md9X?|zaNg$<;TR?fi&ERXs!7X8MF0Q0bbprdKOEKMmUywc8ZFY-$L zn`POwqxH9^!tQZ=cB@NkcvExp8>Dn^DDYtu@kM;WNeCNFQb8upuzfn5abx~(I`?}fT#ZAD8x@?pX(~U+&smUt}kr59i{iYEc&NKK;)ZN=EbVIR~}G~@Of80 z;hit(C@UgFDEm*1_Y?_(6pj#ASy^q&^^rpCv@+JyV{MG;1!P-9Dyi)qC|D4xJjEh4g?=zlNVR$J{yKPH0#yQ7Ont?=fkFly`P-r z^mKJw?KV$YjlY6IZ2!_y&mVW{;gM;88QaF=?9Ohfm9cVT;~_qu^r^pQ%U{5I@*K0N zuU@Ny=H~B7PETsf&fuAi^<1BapPc)ji8rmj8-~)HofM-jSFPc>mc*|`9{s`b$TWPV zr^L!e^Gssni9aiIFkgol)yPn$tf?5)gi3J_(l?v!(0uA2xBOe=d2634T3%H3iQWobYz?|!w`^U59+0w@a=(DaiG#%~Co(1*3_D~7**W19rhBZAxcI#6T@mZF+ z-RW1JkePHm0B{x>v+p_W23-p|LBQl;9#b~y{K|OIBa0Px%!|^~IV0I|H*gYtK;Z(Q zRbD`BUi%hqP%By4QRT#cW*pT5U!IR?yjmKxcwuzh{Sp}kV8-iXx~?-OCUG@mn=`xy z|5Tdd!h#(j!g2;6`kB0P3#(~xty`*$Qa^2ZRM}s^zFl+wQnO>?`L+cpM8-IEiouEs z>uCQ`>D4c(K^fOB8Iu+L!<(Ix!sl2H;Ca7`M zQ-5ENM0buDeM%|Azsq>v_D9UD<^H4Zr5O9J&~oY5LTaE+TFPCEj;Ix zp5DzPHV{raLDM3HCqp;R^4@3rx(ALn+lX^+J`bo%8n|sPAYGJ!Gm7W+Ia+fqtdW>)B#_MhT*0;ACRVWI|5Gw2}!TUSNey#fWrRrm2 zFt%|wq#ZF`{2TTl!LZ6SPlgu^9QIl6oK-TL*kqQLrr%9o{_HJ7{VLvPdpno+7pONI z&&;WRFTie;p+Gt9xLEuO`etrRz*mururA+MgwJkR(sg z2@TjUpd1MpT82me;eR-!&8e1d(uvp}8?y`~DCh6-|b-6fl%lDfm^LIPClqr zZFf>)oxM|_#ye;m4wgG^Z*S2h13EO$IXV3W;J)U9hinGNx7g)^b(alsV_s$Y|pR7mu8DHmay~*Q>yXLtbOP6zIaXXwp z{qocFpCVa)Y*T)Emix&TaJ5|=rM&bCDROYSTvw2sv#}rCbTo+hR%70}^?ZXcu*$xJ zEooqy$Co0f&tW(fdFSt1K}<~g#ip<8>sn2P-z#7N37oW+R=qP;!vY52Z}0r}czY;x z>JEYR^mJJot>v;i1N^Gh)A2Ur2RC!Oq~JupySKo{K=a;f-d(5ekTj-J*G3QqkAQ#K zNDDF)z{5>+aDQR36pwh+z|Gz5@A^|{uinq=M_ARD120(;_t`>Bhufo>p_xxO;sSIK zRajJkE8#O1^PoHKEV+UiOe`$wq_Nl6*Y)-F!a{Ne;O6mYO3w1a$CaO5pskEuJ6dj4 zb1;;!j$+*FplWiLE|gdoB49dZ%MdrjP-dMvSdO}`9gelgrRNP{{a$z*UFfEOjy6@4 z5h{Sso!%U@`vDX1r$iYyL~`p5iU=D|+X8)l0K!^xb}QLi*N&-ti|Eja>p%S z2C4l2)B*s#!9IM(Q(MG)pSE6YJ1$4*gR3D~Bd<0kx#{9*>yD_;UNfe8%>Tq4uhuJq zp_Xb>ScJHm{b~^*N=jX-rf#d#LG?4CJ61?zn$q*YfTT}Y-=jWBYioC9s;|z|pA*># z&%*k|o1g}u_T^{#3+qj<4``#2F>3u+9_HO@bwzT+{DYa)@yrVbVPG9z3PkSW0WL_^ zr*%xua}QVQc|+5tqt5?B~?^kS}IX6bL7I^rDxBE z|0EvyxieC?k8c+|v0(8(uIG_u{aKLrwDk38D-DAatMtrO0Vg@&K^uX%>;Iud{zYVS z1QvxV#Q=EAg6bN^y(d50qC{9tsvGf7Lv9 zUVPkg&QJ_N9bGPl-W_+sd;9C{R-!@IEmfN^Sy~FKwIk6GQ-iV)UM9V4hi>bCu zrWLmDi;DKQrRVwWs?i<`m1DfkKH>bPLN5+Oe+Y?y)Cn`-Z${K2Bu)+SL0~2kGHau% z?D!Ts0#L{k%zo?&TpG88B*!O&G~=(K+nMuww!kxEZpunXw5P}BO-Z$;d%SoVg>ch; zVc`F=?Uo(Hvl#JAoh=&1OQhGUb#Q_CL@iD{iB1)9DV6v0XJ?Z-7aOMFkgMWaya6uO zz1{&3gJpWM{k#x%MD70UB_0rK7Pw*5u{?=)cr-Tva^L z@ubFS$HCIC#Tfnc+_EF|&ky%@ns3^EPD*fR(m$Vs zoLC_M+~$9$xBN;82*B?+6qK89zf_JdX_RmGd%_+-Rx!`>uX}gJ+r1{Oh%%4g;_)DX z7#5_cUk(%rq7+SL0WV7?&9H|$ZWPwd9NFQPXVQ4v;v|0)%GsZkyeyd7+lI(VUyH7g zShX9=SKl`1aW35bi|RIXF%tQ{40_E4pb3Mcj}QyB{`{2rXJPVR-!Ie$t#OlMDLr+q z=5T@+Gs+v_ccPmo=?Fg41A^eoDT&}F<53I4K~sQl=~c-|^WP{f0e|;h;Vci%h0}$C z!2+l8z0fyAa3d265R!XRrPXA)2DYFC-`Oj6bs1sR9m}NHPgs8_y4Obly_q?g1r1(R z_2;q+c;%WM=X(qIC>iad{)gnitJ__7MwZ-P4omX|bMB%IclLd0cf|BX~JGJ}ZWLuubQsPt9CryNlzrJMj2$g-N=$RjI*x}-;w=aHCv_p3T!$@A@>p`R=qf zlOb70pl847xo8Owj(V#4t=GojT3)RwK8JHfJG+C8!J}REAC<~Gt>jnjsYs5T4C1z$ zdS_8Jrgz0nRd^ajHyJ_f;ym*D7&%EfIru%rSJL1(SSWV~+?r!gueowXy%qEO-v5?rFzhb zT)(AQ4?Q;Hy~E%P$aiUL+_xf6=ok2BFm{K~$AL4#xB?mpo|cZyOV5eO=?oZ6IPF)q zy$D%x;sfk;zK)KeL6N?j&FVvuejb!e>Y|q>Lf7x_dUkehQtNF42%k3AG0*F#rk-3Z z=hHgyR$#b}OO_b4%~+NYn&>0EIT+3j)vA+!#ZzpO2vG$)Wj1Iz%) zCNXeQfCTGXfA-o`sQe<4ggq`}CMHFA&QmsXvUikB0DcR!+La$DUZUNCS(xh4a3vw0RUDZ4(Orm5y`riSx)U_Y*C{GO-zwJpD_f%#k}vdY)H?UvQ+nKdxoU?lv9|ZX1%{hC#H& z*V`lZ(F`tab61el6DMSyWqjQ_UMEvu4S!cgyo4f#aGd&Um~iDvYEz~3|B`*mhRit6 zsZYiouOIFZ=eUB{)NDVD`?(#Fj(Bvl5Q>fCHO~HV$(&JdS3|TADPS$-!lEw4T69~< z>i)xiJ(%Q7ZAFhL%itJ+9owlT4Dkq~hP7c;yhDuhu%C|K?R~kD;dO(#cqQEHrY{I- zUuk^9vGwAa@Vy(V_k^`Yl)E4zg4zGWLeAe%ONAF_`^{fndp5O}T35lM8dPGA8$t~e za}dP45p_#8Lqe9B#`-^04m3dV;DIUy&j7dHJalGrMz+rb=5QJaIBYby`3Z=-#7vo9 zs4&US0kx6^7P|ef2`}&ya3bdd{)CAf)qehGzh*!?1Wt~ zlyGh~EdVA==UiFoE=rLaX(Ca-HkTny6$S>Drc}v5k_%EZxyu!#rlEn`^OtK&am?1C zuk*^6fh!vVs7eLfRm0oK+t~cKUdl$c%G9t$G6jo3@Wjv;vIi_ysi-mxu^45L!Qa9l z&KS=x7=Yl*Q&WmGeSj0%M&3jxelpgA_e zQn1S}F|DVd;WhIM-nBODrn&sbE-00)=U7i27H4|H!fulOj_qh`583Vpa%aPJ>&^m432=jDfeYR7$oXx6M zd^7w_G0g~d?&jv(#`En>HAULMS2QNL+TypCJq4Bp@#IJjQA{%IA$uZE^k26i>WgWb zChzDEyV2p&#=!ncp1K=V9@v(0zL!(J^UF8o7r(bd7JCacEvYB9KC{h+pPH_@(k;LL zXQ1lp+jP>b0>E=8eHOQv#xbwSnaHN_L?n{svSX9~@2&S~vi6#3SU|0*#ckkSydHn_ z{MH7OILQ`|;zOfhH;FmX09k!V5izA91_BsemFF4ryGwubAPq6Z1!BKXM#CW+JJ8<- ztD~Z-mutU!If1;pD&VO5Pnxo>FNa07ST3@X)>Z1tGJ2jKFLgs3G{PMu!v~KzxC&L` z)UxsyZVIZlLGL9jO{5k4()I*TRUJ3RUqO#@iwc*+UXg{6guDk{|*91$}5- zoMr4TqO>1v({_}`-}54ha{VcfN(+p8r@^?Fq6me>WJI@dD%zd)YG<=*AjyjB?Gynz z#=*d2h$Wn4-;7%IOD_P3)NwVhj7*Fcap)`!5mI)h<|P|DJcV@kHNUC~a5D2n;c4s1#*Ie$Z)` z$gyWh%y;Wtx9g3yi;qp$c{)+XW~*rj_%%BpE~fnmZuL5vKR?$zOX_|b!GCPqb30$x zT#E@gE#%&S`?UFZafiC#yu15$Y{Zrn3oiC@9sRk#>vbz|*Ilfxsy{iZ)TJA`H<6gHC^sFft=fLWR77$*Hxi&n%!6DW3>wWC`Bj~ereX)251e<;5m6~c#ND4UPcoB;T3oRy;$D65R5WHzn_B(HUxt=(8 zJ?myOm|X8Mdr6e^m`qdRh84W>d10gwKV@pVSZk?KL30`{K9aq-zl2iW|1<7pQho<0 zE&VCOg&qD#zrV4ti>FeS!Uiza?EiK;LRqZmlS?BzO7BlWaWx2ks0!e0J^fwi=z1zy zK`x$3Zh%SlHN@|1-*UC-}`q z56wo9>d*g~j~F*`0~+%M#9w})g*~2nAeZ98LiX0-V;)eZrs4|%t;g#!f%}31s1ccb zof#xR4HLTjAB4mB0&6ziea4uR8(zE@f4zyvfJ8!<|gCmqY)6s`*e#w-T#Io393#T661U-t-g8Losnc*hP?A&m{$svN5mg+k{Gw}h6Z zsXvYDYd5nV-=Af0+EZ*u;&j8&%$|CnDg?SJ(#nBEV4+WOS`2+{&Y;SKVJXICC|$)T z_*_bAFSNVV9UFFiJ?icp&*9(t=ez2Xu*EtTj|uEXI(<)ws|c0j)rc~jd(N*t-@Lke z+e%6U`2BUdU(`U{>sL~Ys9DrmoUN)G|9-oc;RxJ9kveVCk|9{$5w727>Vz6(H0VMy zIf~kkhi(pF>*TC{{4w_z4Tm7&c)hIII^#+-+lWxCcd2)2X8UzLYy}aCb4{=psxI=0w)UeS{ zK^B>5Z1@=aySw}$JLDrr?A$YDN3r$A{Zr8;^XY*;mIZ0S;fvB*gy8}_*~-Y_21_^m zZK*gHR|y5-Jo|)7S}MycSC3b}FZIyuj1)ti|Io@tB7hcLI&uM>o>L4N=SIJ|~6}z?x=w9xL4z7}t&YOQ}$x zrM21tyd^u0#1K2y9z<{R(5|-H0}Q;sc^}8NqMsRexEJ@>Xt~^5=dU##pA)kfP6tGU z!hA(V8$>2Z!CBw9HUga~8MxKQu8Ovq8k5UNV`?tIKq@9nai<&GN_Fm{U*O%Ja{ZxZ0g*f9%o?9+FOyxVxZ>7Jg1QX!G4Q@`4mlS{2 zrhZA2*0f`*PYXZJ-(FhsI?S52-NyjHpuNsV;bv*Xw+Xa&HaM;={C=(~U?UzLk6J!x zX1hU{0}JH(Hi8CfVx|dP`NW}s;zp4D$FurAssG{p1>vSd=#Osx%c#C_eg#S&*Zb^Q zF62PoITf@bphs)VjH2>7#h&P9%-N5>!bs^CT&PXBT1_gi!9TFE`&UxsD!70N0(uJK z@*Xa;&D`ocf)+pT{W#V4YeND#3&`>=_A+`-h+kjM4s3!DfP8y1pm)Pqn$$@;LQ0NR z;%M$8yS0zaU51rfw`1!CU^*4d{KJeE$h)S3Sp>xX;uUBv{kItg=D!nA?|QyFC9E-W zvu3U2LIt#K;A_bxhcx~VuTm~_{~F+aYzs$xB=bq0?q`vA^!w{|KHn9rny1}$-Gg|G z`uCy=$?pQH=BaN!-;$Ixk1)8ErC#VB8+aKX0!d?pz)1}N#4eoQQ)DEuDN8YG_*eI~ zFRj?pdaZa^y%6Q<00nm~%ZJ!br z_%sM=PBfK;Abu@v5bu4siGn1K2{u5#9+&LcnVvcp>Ak@KN;WHl*t11n%f<2bXT=XK zSHu5?qT+K?SmRy<%1F+(gN>10?MO^(|+xYGAQX4n`3%JTQ3f>l#}r5h0;Y z$;&_Y#wrlD%h~g zELNpuZiHJ9V_%vx&Q(psbnHT5AVik(!aGpW{{<_XC5=d40tT-D0T6t8qzQi;F5bUJ zRDp)SZY(9O`UEYM{h#6+=mGm5SeVXLB8A_vOi58Da{$kA+z4JSr)rMx*hvbkeCGXcoW)z>ZXk09> zzel?}M`rKyxDhXlbDnZ~W6;^+b)B2T2$E(~nyx*$0hz!2FEI1?49k|CW#kj62o(}| zSA%luMGpl4w>akR-?q*d5*6e&6#if6qHS6Q8H@*~{>J8dUVo&m*&iFDE-;ROB~Cq2 zcIaEtLf9j47bE@0Gx(_`<`sf=q@|MeGJjShQsP>fgtse#BM6*7NWY1dE$$H|C0-nByrKCJK|>+>is0 zeEgs)4isU`zB})(B=-Z(Vyg1DXpIN6szNm!k(2Nc7DRx&JoF;Q^Tw!nF@yZum+6O- z4G@?=QPF=V0NnJXeXqySehe`cz@i+j6pf5Sh4?l*crT{e0+%a)@9rbYS;Y!gKvWS} z8m~SxO0G@%iGjB~U{SLe`An7mwT*)D{^fYl=bWL??)_kQz&#>?U>F)eFALlOHB`Pe z7M!ZrJYjuJ9{I_R3DczKx^sh|Zxf|dk~PH+mAW7v-gwCA$LV&`c_#GkiC@i2+~b#w z0iGI7C>b@;k+xp>N-c4F825&RI^gCLCfBm8O!{KGt|k@5S?1Tj>?d^vg)r{ez;W=o zy7>Vv9);Bp9z=r9CNUN*kCI?WN-?^*-+GOP_C|<^ zDX!wAELr?a>xZE$xxJ=J<{or*Dss8*UJFC?hxYJAAtUl+xcQ_H224*5OKGtQHeS|5l!}k3;g$hORe&y_qvRbw&G4g#Z-14h`RI^E#YL31@ zh6FkPugc|4*YYU^s8+61*`>wlW*8{j*Ug1wVPf804TNWw|1Z?*jQ3z>nCnr0t{RN+ zZUMvNeKv^8e7|IG@FbtA^2CE{))&Cxc7e9D<+qOOI~E8B<7I%7@?bm0u0f3KYBu}R znVQ=GB7nKVFRVKsDmgCrR*M@7=w7L{z9u+>>ZBrQNMpw2<;BDL5&Gla3KJE`mDR`8 z6L5kdY)y>yxz~S7jEmBqmSnH*Esv2WWGg#*W978d;rGh@k;{l9avpZ4J2JiLaWWf4 zYwjL>gm$t}|5fFNQyj8)<`EhAtGkA?+HRk87m8k!mD%Q|G!XNl^7#YbRR)P)&&ai# zDQwN$CRV*lSCR&Onc7XaKkpxfuDSgClateR+ZK+DR~uLpVMqr8z?~9}jyluPz6WtV zpUywFteb}2>{`#&h}{>YE7ygr1LUbD+oVL1>5D%cNL_^t}3yN9$- zHXabrR%dh>QD8>T<#Rrql(4c}41W=Mz0P3GG#9lWl-|RCUZG2APpP+we(hfKY{(;3 zS|(v7TA1|+I_W)^UAtS&<9%I>uuXS6=@Ieta1f1%j$2a`r@XBJFDyJieI29JJ5wMI z7AkcJ-(u;xTCoDYM~W5b)hr#m;71jMWwo;Zk;)DZD87Ajq=n_%#?{ww3I> zvkj6!2TV_|o8IAp>CV&^d0Udh0lu4~+EM9Xij<{d=?pM|O(NmYy%~c_USD|*W|-01 ziegPQlNal%XobyjVT#@niKDkszLHXR@N*r#hFS2nEwS!7B}|X zAKl-?4?yGMbB1wC^JWZ`wJ!er?xIO7aml@${uNc~zS$j!#?La;d^9v+(}(JC)$Q%A zUk;+ng8u{=4ObYRntv#Qkqao5z0-!;g|AO4t0?LckB@^-7X?9 zzeQ+_P&}=%&v;m`8;{HSpExlySbrch9s*3?&0!!9{8#sSZ~zt_X_LnC^U0#b3g(V) zy}D*B_DGoRv%j9>33%O>UiLkBsKL}xf4`NJwNGZ)95XNjhf3}QoJ}@0>Chi~K8Y!5 z9*$?FW~}(CtMRc2K&052@=e0X> z4LOrp(O!j}O;~#M9JiMLKI9KwInCA11<@=Di!Ka*Wy=nZ$jel4SRJqF268{$&$!#ayoWb^Ku(LN&B|3t2^s6(}$T za*avp6+2~o%BML}>%-|x|4Y)hN`fnp5F$L1sJ&clo-o02!c7%Y&IANZhyg&t$YKYz zfH&L#vZdz0b&Dt@VENDDPX-D%kh)ftw{LGLQBg;~?N+?1{JLpGB@-4SA1OVmVE#=< zR-!xkKQ;1q$7hn9O!KV(-|J`1ki>$Tshmtkql<3s3z$AsikAaba0+;n_YQ!yCWEqf z^c-{t*Uz4@WaQsFr3Oo}LJ^zi37*E&grwoLQJLu+P|V2c+E+@43sOp&iJM&);f(d{ zIL!vrC+JB+l}Z1v!XqC=mOCvr;KlBZno0%)7$Qx{U3_Iv0|IbY{xa#4&bna;6u?%s zUCF91?08PB>ub@F_i|ZfK_TTZzykji&GH}uwCfeg8noLLkC-6<1Do>pD-{`Q{V{lf z=YVXLDoa|bZZ^?~nVvD}T^zG!3)QBV4sC`_(7TjwONt#R=L;J|04cw>XeUVQ*0l8Z z5|fN1TX)lOgfK{UK@-tXe9bI5>Nhq(TETfX7WE|SL;t6>DrY|n(MVass(FBX@rj?aa<7VQ!PbT1puj z5X4_U-A@O4i)^Rlr)D&>`8YtEDp`5yiQ2Gn)ho@1I4|dv@7%+O6AL;8L)EeB)@(K> z=wLtzT&^v=%nvY<03rd)?d8~4ps756s;z!|E+DhM3xrBLJAh$ zzrk8ZyTKz}bUjSv)HD@AtV3h#_&6;2HGQE-u;(tx{s=`pQf6G9W~O}ZEXcsf6>6P$ zwyT`UH68y?B=yZRT|=cW$FV<1xNL$II<)7F$v|>6_PW3A@(E{u1c1B?!~NQ&sNu?SepZ z$v@*+XkKBKAQX}atdkW+ub`ucohDDbybDc2$&WW+EyG%_-x&jVhiS-0re zCg}LVpTGPY1hB<{(W9=LqhtE~{44TwUHn)*zo6RT|0(9Yqngk)5!+ z=j=P@?f$pt&0qJAJ9B5|`#Wdue7@g%%hKA@M}AcB1F}x2We1WoeG2EHbKL=Upy3{R z%o*7>8HO~qPq^(L+%m&R6VBFzeqjMPOv+Xn-$#2jlQ~G%6|QF{Jl?A|5a5XBk@hE; zCih<3n7Q?ZMK4NMrgjE>a71S$JCm_I{9H9ywHkV37+vA|qVIA!{|fIPfS5WE`MaN2 zXyuL78OCo_F){Xjx)UA|fHIp|vAWZOlDqQ9B)_E!sm%AL#kCi`R8%n!Fmy*_pV~90 zn--!CvOhK5u6RxxT27wkbu7LYT485?D<_@tm_d#rDT+BuaglAdrGVJX($E~d8=?Z>4|7b!sUm8pEl3(fP_L~(s(z^*!_%NGDU6N%-TfQ8gDmJK_Q4mXR@VM)P|9)+QU>E9xSuHnlE_n^Y(DXwJ{aOE?Q+Z~3gw-n z@axT|rBK;XX7kkXFcqQX>UOIg4*6@FJ*6jQm2C`?Su?-Pmxnc(6L90s_5R?7A+~T6 zTe2~7Mgt--c|RxlLr_EhhoI(hP2cwUN_YI&!Mub{+JL}!p!l^;^l4!BTC@TP1TatN94mlz# zuBRuyG}WDVF)@UH%ydyGk_8w`bFXEQb&qQJ4aJbpvPJje1!kMpY{JRe+0YYHtI(}4 zp9RI^N^TfR#?dSkZ_E^irFi$~%QYvq@I~-k7uy($SQFR5q8>Z_JYJo(Uh9HL40hRN zB#yrAJtHmsKd=3^Bai{E8t8W>pk1{;3EU$Ghlu7E54yo z=m)H|_ITGZ>bj$MRf6xFkOmdD9hIau+*Q!52FJ%O2nME-yIwJP9N~=o{d#UI7S| z6jQa&s_<-__3QDP7f=#@>6>Cvz!w{7#~HRQT>;N1>mVs8Bwf>OVdZN!%YH}#LJz*y`BSR zG3A$84J_Ehj5X?K=rX)xdg?sr!I8pv(;z4=qDG`)c!n*Ysl6!LMy`kAMvul|z2^gI z6C7yIG=!m8x)YVC`;902R)9p5r>zJ!I2V;1ad-RYK5kB-Xo*NjTf*G8R5TdK_mudm zO;?!#C?X!~@8$PPb#E0QSe2x;iU^hAK>OcAxWrq(i^3sagtSEA)Q3DDS_AxVYCV57 z!k>t#mLuXTI1lLBE*eWi@G!&Pht_k+tfdd(>_tMv7rMlD`;JCc6EM>6$!j)#PvVsT zcW-ru6}>GJ7oly7OoaGx*D58vUNp}tm#GNh8E7Wp`?u0=cy`D`lzu{oadqdakzY2l zyu8j(6mKPUUeg#+>v#T%y2e93l8>AzmZCcI^Qf>`e~VHsrlbxG*T@k)j&ihhaIr(0 z^dhARmCriH1q)J~+2zg?b9&JqvtTbwBPYINc|_5q>g7F}-Y>UcP|vkR+S^D+SXhF| zlgmONW;66erNiSjdV&Ft&l;uxDsK)qTT(_GE); z&NkC+8JVAQ-MAbt$=YZqc#8~CTrZ&7eQ;WzZVF6{I#LardvBc)7E)B#Ovga*);IAU(er{xBffM9!6Sa5Y8VxC{5ch3Zd*cT=9M38lPKAhiTu~2Zt=_MT__V0A82Y*&GNZ^hq zlo)<}&bTdS>Iy{Dcj(19NPy6&Rj|37Ep>w>vlT;XLH}$A$?9D!4WkSOj80{C{D~Kj)DD zg>n9son1$T^FZqaTuR7QhhVp(Gc9D5t4Ku=#;pw<{3_0M?5C^rHA` zbq^b_SB5S#*S5eM%^)lQ>lHhY0*e^300Gg=bu)-rn+%H_Q+@-OrkNx#whLll9rzMO z|0#Ha=Ec`I=Gq)Yc~yv7;90P4&w&s* z0`=L+{9Xj?50JJ(;4~t6HT52#a z7C{sR?b2&_up)kmW7y@K2geXCol~h=XET7kyLdKTD~nkM0n_+^lz$aV%DOHcdWzk^ j#b}19eTcDE`rZKx@|1S@qkEWL06ff1tc}YJJtF=A2YMiS literal 0 HcmV?d00001 diff --git a/33/images/gfx/Eclipse_Detect_Servers_2.png b/33/images/gfx/Eclipse_Detect_Servers_2.png new file mode 100644 index 0000000000000000000000000000000000000000..72d8ac1eb7cb24d9b933f9b74b8793c1432f3cde GIT binary patch literal 56318 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 z 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 literal 0 HcmV?d00001 diff --git a/33/images/gfx/Eclipse_Detect_Servers_3.png b/33/images/gfx/Eclipse_Detect_Servers_3.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaea20d9b789a87e438e6636187fe1625cb6a6e GIT binary patch literal 104095 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úJnVusjP`y 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 VrQ_6-2o!*Ept?qPaJTLL{x5q_BEtXx literal 0 HcmV?d00001 diff --git a/33/images/gfx/Eclipse_Detect_Servers_4.png b/33/images/gfx/Eclipse_Detect_Servers_4.png new file mode 100644 index 0000000000000000000000000000000000000000..dbf197d7a3fe93a9b20584ff4b5b448539ce9d59 GIT binary patch literal 38447 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

    %_c})l2Fv<*s{?bTP`oCyqFM`>gGOPKUTR}u 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 X6B&gY7TqY40Rh(y1DJlf9wOpDlALG{ literal 0 HcmV?d00001 diff --git a/33/images/gfx/Eclipse_Greeter_Deploy_1.png b/33/images/gfx/Eclipse_Greeter_Deploy_1.png new file mode 100644 index 0000000000000000000000000000000000000000..0205fcef6d97498cdf1578c8edfd3a294c259802 GIT binary patch literal 75699 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 X)rJ{`;{$k-%j5y10*U6$_fAo1Ok-q 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 a3(zGAbtrW_zXIvk3((QfSFcoi8umX6AXUQv literal 0 HcmV?d00001 diff --git a/33/images/gfx/Eclipse_JBoss_Central_2.png b/33/images/gfx/Eclipse_JBoss_Central_2.png new file mode 100644 index 0000000000000000000000000000000000000000..3f82aa1272f0e93629b9ecd7a36db061c9678b90 GIT binary patch literal 133641 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

    UJ`E>KMCk`D9JJDCYOzoC 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

    Y-UtF&g&(#LV4yYbC{5xeufD%iq zLjdh}K*BOPtii`}b9M&oz*PQRK|t<&-=H3vrhh;zwz@2N-iLvn>=0{A83(mT=$W`KdOs4}RI%UB=cenbiq*OGz?l4~XV0TCv zv4($Og%VDQ>{fu%(4?uvMqqr+5pj7Y^XaL0epj)kUXXrGk+_-Z?xFo5D<#!i1z#!~ zce<4e)7Q({5k?C9`VI13o-Gn8F?z)C_XcVOrB=zlKl2h}jl=niV0P0J89xJKMx71j zv)?__+zT^0jZ9z2LNop(E-~a6lr+7f{Ji;RGTONMm-&~FKw1uC*g(JD)6S;-`%QAp z^t25Om^qY-?51$)?6Y#1q68c5-?BqFIy@d;-fky; zoZyzlT?Q;TKbA){v7q22bnj3MqAUI2vhs4`#Fmzvf`U4r+Cx@!HH_u!hq1@+EbQ$` zHFfClI)w!Snt-AI{*R?wF)e0A*=_({ctc>Y5jbYTMHwt%r z4WPHr+1W4fnIMt#IaXJx^Lu0Xso~$)j&Rv^1SPJ;y5iQjZ6$hH` z<~_w6`a{eSEuoTyie&z2Y7Dtw61tMuy{liN87OZ?`9zc&80rQzUwPrd!RNl<7s-FRxc#SAW86IyDie)BI2^#`8m?&GsCI|MB6MWAmsYp;vfs z(dHZ{P6F#wE|OQV&_o$rX�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 PFMmQ&Qz4gh-tYeanQ_k# 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 z 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 literal 0 HcmV?d00001 diff --git a/33/images/gfx/Eclipse_JavaEEWebProject_2.png b/33/images/gfx/Eclipse_JavaEEWebProject_2.png new file mode 100644 index 0000000000000000000000000000000000000000..6b64346bb83a7c78b1622454b68ac10d520f3aeb GIT binary patch literal 46834 zcmYg$1yGw^6D|(LTU-LA6f02NwYa-$ad(PCaEeLg7o&y38gkV49rIuX|Zo= z9vP?Y-mbWdNzms%ep2g!zvF@tq`n7u5*k@9V; zI1w#rU;Ss85-{4z&%9Qp}y}LN-H{7`g)fsBtIFo&)f+hg}d6n%23Mid9avQ)2 zss&>=mXth^w^RVx3cGH54&SdyJQ}iVEknh7ZtpVp48cr~$&i2kI&k+HYKZPb23fV` z^l!A|Ts4tlCWMG{lUB6ZGa5*y1TD&)YXWBctUBuqSD4O{?}FZ*(EaL7`$lN`&i%8{ z%nx5u*U7$4xdE-5$~~Xd;X09;(lNC=k}LJu1w^ZnI z+SV?sBup<_x#%xeFWdI5oc!^taTz8xUYOMDRVQp_x`%&hI~ zcB}^{EU#>Sk4Cgm+%JE)h=!C%(r-COA1GhmH4NYOxYAk<(e z@y)K~Q@XE7F)=Y@?ehx@5~8B;X@&8LiK6D_)Gz=5pst}|$Ca0e$N4i456?T9)T9`W zHBHY&9ihCh8c(sr@Lzg$+b@xiBV_cgL$2)iyjDOcJ(rN(0rg0aSK4 z#iU+$N_Sj)fywhL4lrUKyNJrkQT2@+uLOQ6jGg>w9k`2bDuf_UD&3CZQ;+G6WKyoZ z%*ftBvrc-GtD*M_OvAv*+wGIlPSM5NUouZGe#FGYj=Y(28Qk$vQRt+Y$S`Sz)62`l zlH|T(Z~L~gvO*_h_D_*xWARNobmiS;%a#B{|2;iDP4u&GVgsvxZ%N%%CkBNS2yQJ&yW1a@wy}vFwz6RJss&Ix-mn+IaYss#lAd z06jnS9t09@KC-cA3iawf_BOeToaU+?I*U?*3Xz*^GW_%(u=G2IXreKi!eUMI%xNTJ zGPAdLP1whDhTI({r0EvRMCCe&Tck`z=^!OB_7_Z0qltOnA7!{T;dGyu5hD#l=x5xZTh7xJ1TdE+X5m4<`pPr10eqCqWnW zZM7DY1DPiE6Wzt7)5_)~QSVx@KYg9_n2^h=#xN0Zd2!@k8=uhf+@;Z2{8HSr?I^OY z2KL(7EV=GGWnZyv5K6s>It%MHa@CK8M$b1AXD3`a{3c3#|7?F#AWTn|dKR6(7 z#=O?Q%V?j8#>zY6OwY`C*LXed;Fs8X-V*73p4EH9vb>lA#8by`pKY#$l*-(57)lt9 zyh3l!{z+QsJoth+(HMf}cr-%=27{}XZ699zY&mrUyR;6{lanQ7Wn~+8TPjQ%S9hcD z)w5XQjKNWqDT>=E6{nA?1LjdnJ^``k**_C!wvHTRTQH{LYKNJl24e;tQ>-eu6X_yxHS11inf ziltc9JKu1-rjq9KYtV;{KY_ zcC+OVN zwX$G&NRY69VO~hR*y}B)wE+ZR0WM^|*KK5m!S1GhtvbT{wd&W^-mje@ctc%zCPa2S z__2e<0&`aKF!zL)Af}_6L>}>1494Zi-Muny2+8?_V6FY%t@?3bzBbAlWzp4(gCdn| zz(Qx+FuB6v<@j`_TBj4CKjf-l&HaA7=?6f3@td+zE(;0;@dhw)5i6t1yq2YDkL+NB zWuj_NBVm17scymg!Hjx}Vf3$}OI7+R=Wn(Kt8?@L zx3`d2*o!_KYe>Is+}R|ZJD4!HpDhOAK_!IJJh`$WmmTKTeGI^xy03^UW+81>_pIk@ z3LB5MTo+lirV{aJ6u3V}xUcOw_+l-8jT?#?HO1ROUnJcyiN}0Ru8B;6$t|Ir67oa) zGsC?Iv@cIk_i7gK=?jP_D_9JO2EBqs_I>k*1_PDUM8H5pUwW z(tI$C*j?zx9XFKZ@rAziVK=+m$6Eyda03`}jK##fv!K1kQjLA9Ledbx$tt-yQv4E~ zLH>eqp2dye>7R#GWx_`sxVvwcf3F+tb}gvQ%xUGx8EE zCE177bQfW)9V~O^lK^t&PiTT(CscQx%7f#w7R)eH^B+5KfVoe#4Cj!Edntz}|8?M# z17|k#cEyEb`q}5o&KFool0g^mZ5TBmU$W41$|g`l>d3t#to4@Ct)nwc6UoEFbj8tC z-#=F@!7STqlhciKq3Lj2vbAaK&9+=vGC!4kDSy-eTLb zxN-B|ZO8A8tID`kS?Yrb{j9oSz0-DQLGg8jPn44pD0!mKpC%bbN9Yb*4meHr#}CKB zWxW26Pz~oXO+A+8fta*onE{_MtwkR^bM=WK5X)2<+=7R?X~zuf^Oz52)hW8fbK(y% zm$kHgT@37D2r(aM45(q}clM|$JkNHu;Y$wmeEsp-wre-=@?bynYsfZLY4WN&p3^p@ zF+Lfey38WMuF>Uq76&1seT{!@V0BOdhd8R zu$k}&_cA+vMCA>nz(rSSO5q635xrLOuL`H9a6LUjZI}fflwZT4h)lSWk!6Vz!&!9W zl4UKAjC#9QJ<9P48Y10)ZGm^!k|aZV z5I^qyBHuwTN-_(`boJ~X#j}@WiEE&`!_PAJK%Q6G*UAK-Bm*CZMQt_e*W^eg+ThXs z9`o8Ct>pmGGC6M27{yv0L`B1WqD(tX8FA$&hRNb&JfeYAT^C7~XBr|{4bAr~z9zS2 zC@eS*Wj4P}+E7^(S9O1I=ke!ln3Ie_NY11da&X1N74Pr+fO5!`W14<$t?jGoPOPud zfPs-s^JgmPVjvJ8ULAlhR*&brDZq7=F67s@dNI$&508r|riIR!sM%_$!xON>4C_ zJuB-qQCi|RDfQ`T*pM-Z9c}X# zDknSFH0IOb`_K9BL~^iEgNDiTv1izSRYef%H(+n;AZlVxD8Z;JW2b$;{K@dk1oJf4 z=C>%yj-c8^$Dk}z2T5!nw(23=u4CJ} z`C`Kw1-i!zA!rMX7@0=-rGxWp?47c2iHrU*7lNbX>G znd+RHD+P8-jB(>`9i6FJ{@|{RGB5XH$<`fa_n(tu)FoR~k;U%wk8h|ZaHk8=KcW@2 z4Sn}G8E;Z01@<2cv-1FyQ@mqDyPv(+BHz&I-C?t$yjt=$QHKg`=C5xqo9{|sF$ zf{tFjHCy$NRpY=P`mvg<#3>-qWD>omrIl4UjXTTInVT&q2_qw;UbAxu1Of?eVd;Ln*C#C zn4$T7SRt$FDIsn-PC9D>iA$#RL+o*-_=1B?VgC!Q{tLPA68I9o^=iIj7&K`hhW5i5 ze2JV z{3-$z6%65Q^D+FlK+vA%3G6ic@lF_#WTvT^6=GjH2{wWi-YHiAbXl~`?=R`@xpvp4 zAQ%w3{Pl8Rq1}}h)tcG=&4HD!Q+}`97i~Z?@o5x`KTuL?l-ld%}+-n0;V_5 z7D5Moz7D=M)xbx0!di2BlbM+rLO~zyB1I52HVU)H<#!}ZQk1U!(d1^wZMfvG`o<5J z+xZ0r{TR$6?759#R5Y}=Hu~hiH4n#C|01#N=H|v8*37lyG3BaqIm?u9c`U#_RGrU! zd7z6eOY>Jnf2;XU`5uW`YS18I_MZnXgCrt8QMm?B{R+=6seO3*M~!cw2w-03z{Rke z81XH;%g4tHMkw!+ExN1gymC_aSlZb>mjh|PRgj|=)%}8lOKh>x;w#sKso~rLWSCzq zC0do6mXs}{7dh>6BSlne(dm#N{*Mn5&cM!eZ+!Y+^H;lgG?~^aZ3v2Zt&|bz5=ZEy zhyT&a$?2;0__t4uP?`;%8Nq*t;-5cp3mPQd(wJ5 z5CZFl^Sutl`|q`8-zjHkdPKw^`T03vy?@;h#lzV9B^ZeCENMr+--NE)K4L4`qLUep zwC~nV^}^+#WyqMii7awBJG^kZ(>VSS-eBa{ONo|$tHQP4s_?gl_4rY9B1?ciDk-YR zxaZ7`Z`(2D;K2M1h_4=fU_AKAYHDkVSWQvhju>@y9DJTDTqIhIaFK=ZeJR20Apf`>_2N=RHO93&eN9>6 zR5?EOAU3^21_r0QwaJSqB>k4T5zvWe(;bfo9SGul~#MP{niPk@&08+OP4 z4iyc4SFDqa-XFj>9zcfqe&$nn>iT(CMJYlroGqrF0!hGkY}h5zqx|J04^Ld=BP+}) z^+0Rxob{%!5%8L6@cL-)l{j#qs1tRrry`Wu)<~HYjO!svqLwW&l;a`t#ldw_Br74k zZ8rnb=YCZgK9X~S7Q}asKfh~bFJ(4ma0cdJx4?w4VWb!4!bYrztG>fQJ^8!jxQdWT z0Vu+$t9l%y$^~JtL3z8gW7x(6KJ_4&w5(?2^PPR{L6~E%aHXLDVtcocq@(27P_Xw0 z$Opf_W1l&F`!%uWC;#zq`tfhHepl@-#av=bky-&h~5BINM8yBk#zlP?g`ve788c(tQNMG;^%VR-I5{SQG1e9%w;hB|`&^LFrKfh&Q<#?y_ z(~XspYvA&QZ{M;* zIC`EI!+@=n7-90+Rz^3KbkL8_oz3!Z)YWFxNk7nMylDBm3zbRlLCpdBTCu-p$*N51 zM$gF6pI4CFeU_mnL} z%8z{0{W1tH-$o)P3rUn_xNmjuP|%(b&wps&&b>|=z-MUqkIztnWo>ArqAjao@U6GNN`d55@WS?Y*{tzkoNs}Qlw5KZauk4h3M3^RU7v^R_ zDT%+(h#M{n{#V30vqKP#^!pMO)N!toZ9fOe2~vIjSG+JNK9-@0=x8Po%^;MN%%(?+ zu|EF#e`?^3*>IcGW*W8MKQEer=_vjyS4ol#JW=hB(@h`Q?&PMHbZJ_JTIfg@-dP`* z#Mfu~hWu}Vjv8#S4+;PZk!exbliUb;u%t9)Lfp#q4@8bN-)ki)97~-|9L4`B+oy>Q zr-buCfdT>(ESmiI;OZ@Mv@=cl(Tl7fpeQD)!`o6t^9#cYu02d%{Le>nR;K@_QXs`u z6m@1;EWiS~ErCgHQ}{At#(S0;u3n*+?{8jp8=$ zb{vY!dZ*q8r8qjEO!c{gm49x$dhSh5eQHNe&A8W0VP9C`@vOmMMWY*W@qIm${jVE* zx^pPRK2jW&tw1O`{9`yR39Yo3^S$}sall!pL?**qCa*Xe*dE9ffmR1CuG*LT*I13% zBX+3sG5accaLoCi(|ztB3!eU6%D-t*BWiw%b{MSq)&FcveW25INAb^7k8H_Q9a)&R z|A0f^=mnI$8IsPTRaTP8IxxMF8hxFo9nrhH|GwJ%Vx!gK3hUsvz(?acTb&<8Q{v`6 zTitjGfGA4D5cLk-NIm6r&x)N5>6h3gbb|-1pDX54Z9i5>5hE=(Oh=5c)Ef&K0|yi1uM*tOfeb zd=n^iKbbz*ww%bk88wl`9PONKe&SsRGydbb7%}@d{Oy@A&IP}EqM+E+cE@vVR$X?Jd?l?-&b(eFD|!=_$Hjt$og9W*B)p-B37dUsfheIb(Y`x zy5;sRzhN~JwfsjWt9G@ez6QJ2?= z%2|RP#1c@NV*fxM9V1GKpQTWrLslu$_v2sj#n$xm^&Dk-yr77rat~SL-L{%!huDl^ z)pTpED`Sq6ZC(ZS@6`4H)rdWu>-QD zg2`CBLNGB`ulj?eQ3i~^rNIM{+X)Jia4=EJy=;58ET*|nkMjbovftKPDrkO78Aw`8QPHh zL5;wgRNh9?Vk78wP+MbtXg`U8X)}R!4B6JytGmB*q5M$jZ+J)x@pm2}AIGnoj6f8B z-wRU3IIZS=RX5G{F5Tw^IHi{pchw2MujvUv32Y%r^<6y}knaiGuYQkTi03FtmtSO; zt{6Ckk4k*`ABSET9`}*Hz;eD2gtc;PnG9arz&uQ29bTPX2=+v%d{^Zd^bvF`GkDik zBH(bfmmsMHHpT1oF#UiyOLpKe3X2b(#S_|{_|)tq{U5~K8AZdO5JB0tSd9@Swe1Xa z(84ZaOz_~fQ-DhwKrZ_9EWTz1pDM7;*`e-3&=^fRSe)S#m=-&G_9K6pGFDBdan*@$ z#*uH9Fb==D-+*g}VKp|x!7-W@%le)o~ zD(=%n!g5x>wC}dn{~-ERVWtsJ`J+9b)=aTBLP=fimYlirmtJcn5rrD0B+V7DU(7cG z<8cmD2YWCs`S4c!-&ue)RWGbYMPyEaULnC(++UMMfyh2ZP&u&z4iA?MTm?f^Vfpdu z;QYqFg^;1-se*@UHCdWb`o$Wf-bh=a2fAalSPA=!!HMxyQROmcW^mE1@u~HvFsFSO zj<$QJ`x{PyC->zWk&IN6+*eyM#2Gf&k!G9RWtwXBRzWo&YQeuy(XoZ?kNHVhcTn8G z?^<;QTmjREGt7`ol1!Ok*))r!lCn=Rx}WRu7kdVPS+k~%F6H7xhb@ho!P#mi3xknm z{<^JsfsG#30Kda-`?Yv}B5ar|bP^4$HM3JPMb&sc+Lz z8&_8tkE@u!9VB0t-anGacB!k2T)bcr|CJ*BLtFDfZxI0mjz#@EL$tDc*9wn^|{CF6^C7FAeCe70NZyPmW) zy&j0RUDN6xD1XM`gt3E;*V=Bh#YdBHsi@bdiZU*o2#y+~0Y)A2uxT@RIsBeth$txy z!G%|OD*hJQ8qG27_4RG{Ve=XO9S46fVrS6qrt1`1jvB&eR&7?{rWs;j?5>~BC8@-aLZ_5^J`Q_ zIv9uZLZB~aU3a;S5A66y%6MgDV)Lx9L)xA@;Xmc)gR@9<=a=itYV(N$S6BM?Q|$kw z8J7H4Guu1i(3bTFjLE|>XNzrT?jh&qX42z)k0DyrTIa-uCH_x+2a7hlHbT!q8&seY zV)+h!?o4L4JGhYmi{vCWn|UG)_22OIY78;w5Vt6EWmk*FMrS(J+*Iw@+Yeh&G_E$k z)vK~|10x~|)c9-3O}=QhI}@Sdt0^ffch3}{aXYSjnI1ie3Hvm>)Wf6d2%DuGzpSJ+ z7FC_)(F{^wtafvvd|2X|${w zrW7C@E7*Hi9~mIekiru}S9@>`rYZLiYfY|%vG%m?W*}Q}W%%D|VM{9LmN78O>B^D# zojYpQ+~Q`71g2?sfDU&bow_*W3N648B~T~DA3s%rf9>HNto*J@m!i~cF&{8+K(<_Z zwS}9xYg(1SlGhuvwH!zitJ1Ok*K%I3O_qf%4$<0Nc1~=P4_+WiuF?ZaaCqRE5)Zs0vF%78@z-jaEVv+vQz4 z40_})u(_{(wwP^+uz_9i{eszu6FZu(*d^IYPHN9ZmY0|}Xu|(*69l>4wh@Z1JTsj{ z41guWBFbVfaVOhd7OJ1+-@}EWLhO$sSLr*tn;jz+2+2tel5*!Bl8P)loO6wiE5x2- zH+Xdi<-~*R(i^!#c2}Eqyv>9m!%XH!6Fa!*xi;rX~30XsJ1J4?L~8R9B*9Q z!RahXjLHF^xsf5i1`L3_elSn=Nsb6H3q}1}Q``Chpy=j6p0=^+1!B@8Q*5*drOujE z@O=HEJ7^+h9s6>)F6Y_C`3em?Crs8_i~l<-rcB15NX7T{-*{N2ELOY7 zcC@N@1-AG`G#imRe_Ag&S6&m6({-12-Szw1L!rX*Yf?4|`CTzxHtll;Vaj5wd_Gcy zdS)0P&#JKZVZVn85vpVi3C<+pS`2$fy#5FuBOfgHsvFVM<#A5c*Qvb95XDpN zro!=)`tRW&+p^z7y?=9BZ*+`|& zk!r0)JH%1zT}xm~Dx3|wGCYk+uBJmZ>YXdXmuLU+{?Vpm@asjBAJG=wcW@@6Kyu=L z+t3G6(?}I>L$Pacv zo#W!EIaoaNf8B4>ISLYdhQo13{NZIflu78J=pK8Ab^Cj|`1oEGPomI)rQz&zy!M!7 zVbKw)gD)8Kf|qoRkR#ftLb(gZ9CrgYWNQ)L$Kwuu<>iMHk){X*f6O}(HwWcQpBl9^C3$z|of0sx&BkUeC=l>Kv; z9V@Yz(E!U15haXWG)r_xo_EIpgghH=b@q%H=59w*eG9u?W#sIxpUdtq^u_T9J%pTBg!%4L^7qSk+1_}}mfnC~4j35y zQMixrQ}si9O~}Lz{{L{M7-Kme5VML??&uGfI7<2taKw51CPM(`pX(S7BghRU%7M0 z02h%;oUB(1+W2qSx;R4*coDtu^<;#Te1QxG#*!yU`2xNN|nWRxHe|E^4jy!+o(-X(uQr8 z8jsac7&8EywnqX?lnzI%SpS`+=TS6dF-G-aov3Lx z^NJ%ab%MVlc!KpKBSs@-bhu}K@Z8?yVH8!?5hhJyP0`M0_*h0{;72gh@Kh=e|HE!- z@DCE5C8Evs4TAqsN;@vX7PL#ZAe%U!+_0(eHu{(D<+mH-Gm!J}X80yv>dV-Ol<0KL zrA>T8Apx##MDvHgG7^z&4mliiefb%G5ayZlkYZvloE-#aVY=2F#;pY|SLW`X`?HZpRXF2e8=Tr`DquP`eZs!qn zImRlvs?Q>Ts!UcwK^O1)!tvcc_4sz~W5%04wtTbU=^Ge-KHAJvp?bBpth8{MmxyVw z6i9v%q3l|qa#{A6TXdN=__jN>Fn%hq4E<@(Qx{$C?R`J7u|XMPpo6o@X}|wP?N#I( zTHWl-j7a1Ky|EH#8bsK(@FEPy9&@oih9mp?Qf&U5>C$0sK33aY55#h6gE|hh6U>qQ z+Z_q>D;bZa$dqeZ~?{}S>l|V>?>J1bYp** z4OORh*X>>F3oO7>n=}~8FIC^JL`^F6ok#esSNeHnGX0tWdu?$bQ~brd|LBNoG?jcU ztf}@d@zGq6!RzcV%`uD3d&G7P9><^J=XADT3}shKg(B}2%dL=AQ4g7|U%naWvpy0Z zZ}L6FR8Y>gGQ2{;c&m?RiM6fKjEf(_H0b5tos07Gobfiy5ZurpRsIl)%RZ7H7}FEp z4<#T<#`kQ!t&iyygi7e_91k+ERZJ368x1U*lXv==nC{p;;SNc;Y>m{!$GcHR zL85abfhBSSI@0wuCUnOqAZ@>Z(mC2lRXwWf~ zG#RXWXgxMjNpmHCl zo-mjzl!K@e^|r`@37ABkJG@F+;TUNi_cB0h@w;??U7RmIcjBf+D<+}TDM5#MGMXug z)=2^?RN8J{s&NG(Zs8Onvz>V93fQ-m9DKImiwy=U5`~Nmls{uyH&ztk6VA6*Pkqqb z1>O&lPc1d11lkfXK5Hfl`Em^Yo-}vn;vqg`6s)=CX9qxkY0Qr=U5UTQU=9eX$ujmv zBi$riz>plaJl{N2mM?@_qpGojGeCW>p8;>)l3+i@ehf8cY$tHH&MSGV6frdLvmI zfXOrX+jKfQU3r|TIv}Olbc@Wg$*CQx*r;v3?X-mP%rVzjBjx$&q5JXJYSVR%lHatn zR40~P^#pvKSJlM;7tn#yO+&r=48h{9O&LK@Lm3poo?d+_<5i*n2m=uuAQd4J^ono^1OKaLLEDX7B z@|f9rLpeYGywN$1ZnX}JqtEJW)3s!cqY+C;s@duJcn#dyXLZ?6Pf5Q79rns_} zZ?OO!7EJU7|74~0gjgT-HVNG6Cd9R^gVmiFoz3@Pc-l?TyW|FF>O|j#$BOYGvs;I!nrMBWS8-7euGwIe#4`t2h(RVZV0`_|_N&=8h%>)%jy^kI00 z*x4lLJLnAQ^6He!<>4+t+%$&aU{F^`dgfe{bOkTii|+Nv(q=y>kxbB@Xd++|^ARCqM**f=HWW`e zIkv-8F3nO0W0w>g{JgAKp%L44gZ=qN;NX?~#r9tKji&XLSdRA{MPGM)K~L*(Hnzym zmD_zd>?Ga0@PmdJ`?LOu$|YwdcCN*6^#T-p`}Za4>$tpH%i8N(1i8D}S}4Z7MSc`w zLB$B&I~ch+y-d7mB;qb%Ux?kxvA6K%e~jn$R-#hy_USMg&v!SRzy8r@%2p#i#qQax z()akLW?zY82Y3y3Zr>i*)S|ze<3yzhUTSPm+tO!h@h<+xfLz_w@(pF1V0?V~gLU3g zZP7n_Ub!pBQ~HYe6oL&v7Ux0H`g+H~8F@x8gZOb|@%+Ph^mCsGcIjRHySHVZoDqIS zG9r_RxvaY>qZ)7jR>V2eJQ3shd0YSf*-ib!At#=j`X^d_dSXb4Wko4|!N&zMTO5&x z{>Xx#Gq?33C=_Y#>H{V;>I|;^zrHjuNh-C-_^jka#DwbS@*jiptJB9cb46{X4&Y7r zZx@hXgK{&RtBrcW6&=+MN!hODOC25j21V6wvBh?$*dpwa^(=<2q__niIp@S5UT*qB z0%tICDXmsnUa@W5eZLUf7~*cp6H1~-grC{a_wR&kNO?v!ozIXfcUUK1qESFV5>L}l zD=`&KV2y|%jOg56PzG{*m!@+Er7uFYkzvr~GoP4=XsyybQgu({rG`DhH~`SIX4i7t ztY#ttXRN3DK!4;B&yATMp=iQ)BAe$#6RbqifI^G+%&YP^%D$lmq3-kWsV4ole_tJ2EjG5^|ep-6S2EGDlI`PF<)?JxklL+@n0440-*&pt@NSv;+bYb(BqxmUB;av z=mTHQlVXI@Andk-$Jf{8&TFAQ5LCKKv+1WxqwwfD{r^-9`~jW5X*+&>B3{poR3uXEMCJ=sTJ+5Tl?=}~gpk@KU1m=K7A3aYn=AsL_E zk;LBd#3pfw=QulF;4zywdmF0#oDr`YkhEra#qN-qbFv`Ix))`_!fc^{NV3TrG?*J` z0e08^#yDv&^seKcb`zoWOQ91uNYh^((qzky$-mb8KqsT!%Qpz0auG@m;aY-CYJKQ$ zv)VJ$UHgRMwxwSmOLHhs&E&w3CuE43p7u#IrLcwW2lLiLD+f%QL46>NhDP-}Zr|=$ zHwX-U0HY#9{?KkuqNZ@xV0T=b&&T9#%InJ}FW~4J$7hgo*AzsgMj*Tq=+zrt`uzhA zn?h}~HGoeMrdg|unyBY2a(fy4?CG`JihZ4v=f6sAu2fqcL9ihRi>-~i6^z+-YW++# ziwbUf=~(X4F?i4>@o)j6We%LhFm)rznqGQoCGM|_gfI*iW@D+ z{4AT32}y+bQI+X5|NN93)OK|bj!Pa&^4-GOs0bfp{zZ%W_&(tMKc@`(inM_?e5uB3 z$}|~rRxWFnj_ye9WM>eY^eOc%9(LP+;9r=w`>)0nHcL)*;qF<$jD0A7Z2S@6iWM=@ zo^sa}L;b|B_nm(>YS!>Ssuc6W)LpIx%9lNC-fzpz-@Vi7XpaXaMHhZQ^^h5s?+J^f z+Xs#&fL;^oBW1NY%@A*;@04AYMpT99dl8!?HU}b#z2ch!^&MUVhs6;+NQXV8GRouz z-2JiM)QoJba@2YMH90IWm!C9-RANu$e98yRpJjiNKIU7|XaXnJ)Bx73xyo(zH|V1w z>$sn!FZP9Kk|JYjjEC(*$JpJOUXoA)6g`@W7baQ-b_gUf#WyNk7W~}elZ8;*9&r!M zOvp9_FRuKgjPT>cjSSpI2wQx>F!Wb7;EU1At?a)Os0-dkqkN!3Qg=q&Pe%@a-s3yD z|G3Iketu5!&{S8^*y>Ia2!AI3QotcR!orZWj!jbeg$R1vw7Nl$i|)+)GjH$E%w@}j z6JeCk#3LdNpKFX^gwKQ?{*|K5$14}Axob%r#~oATj?pi(MKP2P zTClyyu@p2eT9rTAUL&8{M0ag85?+H<(HJ*sJNT}D2uGMKwX7maKV z!FT$`3?6#?DPD_tid?2PLG{?{4~f!N@6TWx%!Y_}q#{Qr^TBFz^@_6Ww;f%XSZAL^ z!+hBSu+#pL`QlGcc?Fd|wiY^9T-WPZ;&T9CyQn%YS=k^bInHOy(tz1qWzwgCU)cN01>Tdgi46lyLyBLrl?&g>?O z6`=nNQ~g4QF4gVcw`jF)EVw_Tr3yNENfAZ`YR3}9r6}bSmqrbx^MLwsuh#~&Np;^b z`SHSA{+%||*C?(thSmJ4>Mv`(NOfGWvedliCx|1*DbsCe*2V>4N>zjq3x8GE)yhQc zh)Z)`s~2PPlg;s7yA?2qnriZab(S>Kn!6}kSI(TtbcQF@S=5a|I_%maMTS19;Llp% z$DcLCA1FV4ws>CG3q{d#)sOAihk zP+AZgZA&|;*1$!qgvQler-nENTB_gx-u%6y&rF4r^F41Nzrkp+K?SvYp@quxTIpP) zjWC}>dlS;{*xI#%6cyyWSGIF_&a10_J!-|QG1Chveg((qEE%fHy-I@uarp5?kx0ef zOcp}RePf8HzWw=2WAelK&|c)YI*dEMNr0?oi+8n!y-(ZosC<xJVH!+9V11% zOZ$M7)K#Ks*8<0@poS-xvf!Z;zWoD*c)NA$A$jf_ zPk%Oz(Aa+dab8#>0j*Td+GE>2Y|8()r~{bcGWtD!do?myOI(x#0UMbX=A_{8LLQ^P zgsdtWv4S&N&cRI5xt&O(;NmJv4%+%ll5HDv-l9p83BT;Z@7kK&z~hUDl%QHh@wM_l>xYq|MZh37(S?xozW1$|o= z>Vde0B&qmy@oG&V;szNVK{cN|scj3`L5OPS7jv|%dmY&kLW z?nkVBZslL3_;VH6_WQP@Eq`34gu7qZPjyCXQbXd!S105+Nw49>`RA(u7bA~*e0UkD zkB|c#p_u7SQ#((_T5#rAIWOwNvYOtQ%U}Y=;xsvuqW*qe9l5Xn-gBM%)mukCT3xzns#)_H9pX5z* zo}1xqv>I-t72I1zk8*s@@MS>y!X2~2DL|gMDu*^(arl$=ST<_aZ^{{aLN_%=F@K7* z937!-^<|cN*o)6n`}hk2th_6(_e=8o^it$=$>a{`vvIPbTKSbLf^){ zPRXO(fXcK`>uN?%yi^6@-=DQ`HU;Brcxl%q7B7p4i2uUN(Jdj=jISqD@ki zxW4$IYpJ&-u8hk%{#E?{&H}JT5-2qn{FanxRf%bRPlaxm|HLRSeBX4U*ha{56klIP zs~^NQD1VRw?8YHSc(&qN{{aT^bt;VVitY{pi^sb$+)9iy zL|lre$KWX&3`YOS%AE!+@}zt?K@fS->a5+1BEia^FQZ1!(Bj>BNx4{n)Jj%p<$5e% zYonK#qoqC(UfKT8WQ3K&{qB+c3j&~Sh_ZCWJ#UYHpd*G-?)vlZ6Z_J7EVvFBOvQU$ zc>xM+6#w4&bx`}31lq&pZuc(S_@St5k8IbW=#Lhh#e8d6AHPenFT1mAzFM`%Ci>FU zw#Qo*{Zr@eI+dVfYjn^gmIOe@EqjkVTbn<8|3?OX_IeTZKKs^n&Q8={#Z40ml}$UH z){M_?iH|a~|A)D^4yvp9+650Df;&M&AV~1wP9V5Lg1fsD+(K}d;BbPw1$TGn;O_43 z%;x>Q-#54J)J)Z#nwc8@IMhC8x3BJA&sxvwZd>#5iTqJb%D+nm%}?sWTL%J<&V)X@ zJ6R!k905)UR2BBQe%wF=RE6zlvFD{$!m|C&ldvu$8_VFcKV}4|fqu<$w2!Qwq+(wD z!{16nPwI@INWG>UdC}kdz^GtqG+x#7NBZH4b8CMcOSruxRu|ijgPAN~bd>s4vcb-d zd)a2wCf0@%OgMj|6wi_tXwIXmUzb>Z?EumN@iNc~y?9?A3osOZK6$yd(DhM(hlN6b z!wZQ^MOL@V!8uo+kkM4pQf{1)Y#MB=s^+QD93D7qG*+&uQL_+PR+qAF@K-i|?)xf5 zZ2=a=6v7pz`sll%=2Nxc^BO4heBlV>Rnk?%n2Mr_dZl0Q) zz0@KevP)jdQlA%_GXtug>MfS5Y6KXs{qp&B!V`23u4-22onEksxxA8d7?0LZ7^&oK z_``E7O*Slc7z-1xC+K+}Z>hapg&E!0_83EPWR=zGR2MGnO6o3=-D|>5LvzHPzL7+{Cj(}l=8r^6@{=SGwR3Yu zD065YH!leLx1Cek7mYcT(>8&z2QIEsBMst9-(01q*-hR+fw6_c);%(>aESFj`}4-+ zte@n;IiZ~OOF(7(`Re*dxJlotm8+76Vv4+9wJqXKM7&2w79Ng?FeRl0v0ykc&-Kg7 zgW|Hu{eTYBtO7t0c(BRKVwD-#Q%zD)uI*t&mubvP;TlvMGF~vL$f{=ZBt6%Dz_Bx{ zA^iMo_x0qmE_aduflMXK?1C$*KcINoauG^8}pB^2w~ckCXStOh&F% zMe?TVZI?3ZuMqr#NEQll;`E%3LO~N^_$}kN+g*vlkLC zqpZ+7(d^R_NEDXx_SZ{k{}TD7Dbk9g`Gl>+7IOdTez*aNAIbXZ@cB(rVbQ|l$9yeG zHmbpqwJDCUC{nBhPp&UY12V*Qs&gw?#*c^B6opK#6fFWdO2ZuclGPI1qdi0`-Lt9 zvYpm#bQmzN@fze--4SPHBL$ z-i(v8AHH2{B_;W)Q$qD!6bWuCqUA%jiK@9p{&(y`Ms;dFJKr^yOy-n>_W2*2HSB8I ze-zz$cttz%fW&0KQkv@-Lk?_+1Z~R$bW5mKp5;UJYc3rtLHR{2Ao(I{qJA!!iJ#~284VbCXLarwGjNn0o6j{ z;nY+Us9|F8`I9P+hHWtm?WVUwJhR>NrQ(cVx3q>1;Yr4|`8^&lA76PPQLi-Ozje86 zA2H8e#2I{_hPLuMNrNw-fND~!u%kFXzpU0@E-NEGb}QkwbMnoQ@eX+s$^N#&1Y{85 z_k2oCsrY~OhUL6dbW}M%EZj}zwB?r2_t7Q8>`65RY+BrIanI(T`qzJ!pQ~Yetf8Umow6w zl^&vBG@6NDF}pKPA3_hJb*kBWDGdGoEnbUauNI~}F{Mo8>au~i`8Y#)V=D`Yc5vrv zsa(SNw~b5rde~#~MHzDCcr#1r;wAk*`)Bz^FD>6BqR`RA7C$7EXzzg7P2J|W~FH_=kqdnHyewI-(tUxq%BN0X4~m6@ej~b zM6@hU7FyxHSOmf*oh+Pb{<5IhiinU9DT{CQb|Fi%;-~;M^X^EUha&2BL18Cg@2b$P_bNNl- zSR?Ttx%!G1tuT5m@t>aF{e;QA@NrG)b^2r?^_iOV{@Y@7>nyK_qgwX{lz-Z?P9>Cn z@y`?|TNL%YzuZf=_WNhb-UdhgJNr7U{_XoWwbB166?pYuQMM)gS7iS0zqABFL60yp zHeO#NYbE@ry6&na)3PSv%gydtki9o(XjBvwT{&(aJ+yN?JUsAue$b_-r}Hggzly_S zpDG*pLb@DBKSYzN= za#WJz`0|FVOU{QDM)S*;FR*ZMQ1a^P`--=5u1iI6k~tl{y?J>luLT5=()^a(I2QI1ZFOE!G6Xw~Gd#z{+@@V&CQu$b)`GLl+OlEsUyl?=2Nk&LflK5(-8CR8K1`zirt~*>g~BE?SIpdIK5C;_I@oA4pF%X8K*DmM z!P+9W;1Lu`@}T}YEnxRDn(t9{(*rA zxSg<(v zagJvJmeSXsWr;OM=RNa4OgJaH(p@qX&w8w96$-@z47H?2A50)2gIUEa9JVflO4(L{ zPZwfYkl~%60+9`AI67Iip$N~EL^A=KsR(^g+yvcrgc*Ld3|XgkWPvUg%Z_nWwONuU zt1~lKw`;L@1u>6S-I3I8wfXa|OFnjMzl_BRTnz68 zpn1}-G~JlEbJ2Lrx|D7_#Vb9i+1tXNJm286e*gY$s&H?njM0idZNzIs@A+}fZb4_n z=;Czj;r8;E72U;U3x|u#5ropU2lcTCzfmG0HoQk)}mbj5P6*6t{ zx)SiPhIy#d;nLwENyXFYJ>H&CP*HJMZ}di*^v8S*?^UIX?}?VH4UiM~Q@9TuFkz{k zl#W_pP(K0@?|()%F3C4Ek!4^(u;^FE9Q4zPeBW3e){z<>mo2kiK%4`@A0=5os5EZt znif++^sqz2X{6~X?QvUu}0JepapL~+=q)!M5d0WHae}^Q{4WbV5JxaQ8-7X^R z=c|c?^WBpUA`N`Wn%g|q?7!X`wVegUoxJ}s;eopyC$CT!D`kc?E5G>p=?99K&Fii}?ayABcLk^&(~NeJOv0;yKCPQDsYH!m!LJR-LA~aKRf*JO6n$zByc$#QQ^|Fn@0GPXwf%+&U?bi zofkgys!}+cavi0|$BTab3hViBZMFE}!v}FGDGRnOZ5^GH<R4WUFbi;G9i)Er@U9r$wZA z)nbC+u<92k$ed7=Haf;lt9}I_WGN${F0aLa&F^l*yJsVm>M8Ik zzS~c)mqS1hES?MHu+7^a`0}ZDW(Mn&!g80@#ROHZ<&13Wb`^1w=%w85SCyW-i zkK0SaA(Upou+{A3p#~4@12-mDhla|quJc{~>dLt0lzIcZfhC~by{f+Zh8ObestbA1gzG!g~9tzwPm zi07CR#?9chSDK>i8YJUSN}4rmmRs$*MhAJyB|dIbe#G}Jpm@2ig-scjPIV!DDz&lj zEIgQZ7d`-$Y}=2rRw*hB34-=>({MovL&m4?h9F#Oi!D}IjKdOo<4-nGDe-+ytzOB+ zUurAOj-;}~)Vqp!9NuBEMKHGDPc!qN;r-e}?u>5#gQ<5vxk|u{cY|^Xy2p+}?nERJejx3z zRzm-)r4Gmgp_e&YWHUjTnQmTU!P7#G^Olp;utiE@y3FNzFglg^?(@rIUi=2cODYZx zyY~CaDrM^-H3)D1*pGe0?1t@C0ZXYKBDlJ`+P!iE+{*nUBb5C7B+c32bGeQ6`$?xTY> zIr~lIKeoA#$ZyT>uLGaHTdgeHSXcM9wN9|;T}vyjBj}ZK!q2{pa=_eKrCDHcdC)~k z=zV|B%*@=ii;#Jg+k07i6X1p*s63tU4Qi6eWQGS_fD;?+%PhU|{vCL3ntdAkNU#4( z9XSKE)D%s~$XyJl5$Y(T?9Zw0N!_(?3K+@l!9#Z!7Zgw;zu8vz7A$9*ZB|+?udG}f zWl&a(Eq&iPpC9NcQ2(x>aa_m;qh&oGDEy6oL>o1cF}&}4me-I~#vQ6-@z$CAP5B-Rc(PDMwTj?mb2Rb&E1hL)DrzMa?N$ zn~M|wqlZ07Y4-({aX$f_G)FiOX(Jbb-2hrBHeGi^pRZDM#c<&zuq1Je$>UyMl^-$9 zn!y#m_sBvN?a#-(0=OuC;xvY^>J_m+qdH&JdoVN%E)&phprM>G9@Z% z2xB`kRlOHIE%-Iq_k^Ai!ic!zGR|n?7GFN0eY}Q&KhKNQS-&)(K_=#oyItY!d1AC$ zpMmj|A2Gg2u{(SHHtwSuo#qAYBXjiA%*yOQuoRiax=@VG{;ua?%i{H}@aYIq0BZQw zQYI5Tsdu`_$=pwym09K?kSMPko}VWO{N~t$I@o!eg4uDGD5QhZ{xPS~<-`T$3G+p~ zr{le1>^eTTBXz}DC^hSvqX6<|Mx@S%oADJU$6a~RTsnQdo{Qaudg3ROGYQZmKh4`y zvg-)5He}39tC_w;V}P64j2<#G?TS)2qf0^Vw>v; zK0Dw-69rrt5)$H;FmebR+wSudzC<}ZlRAIO{IANcYX027alIXVgi_WNd+U}6^E)OQ z`s)(5~)`Ul~Sh+ z0AwA+?AD9oii((5S81U?fyLX!-M!LoL-e?ABSLoOApYdXj47jB)lRDu)dudI^`fh% zP8DP$S<#}Z%1tE8ZZ9c9W>Ar*L9f8Te>J;6Yx^8UY{!+pl+nx;1ewJ)BK>W7Yt_|@ z=N*_ah^3<==1>=L<9>fzL%3`nQ9|`RvICWP-I3d~bAe@C^>fre@ zZyJ+edAKt`;InxvdQSxL0%W*6`kfxI6t5>c1BYg|;ZpFhK$|n+=jZ3IF4jBz3Jh%g zR;w}X5i;_yUsNVvWMruN3PqQM6|k{I%wF0kSqV^}prC+gI&^gOv1dfo|3=dr6It=E zIujtr{=ej2A>*4hcFg}6o_;O-_iN<;f#O1S;r~}J>0~(k9vB)roSe}@e9g)cSgVd4 zr+1ecIk?jzPESuQb{m&O0&j0`nSLCq0*!WWpm{C&Ho8KU&f|K{LnkmlPznEYjm0AjvS?}EXa5?5?*fDBinTOpK6J?)*K zqvVxD1aA6QsJHQzBXhWkFx@ zs91A00(vWDANHbaX)4e(R7jVGklnQkX>1INa+8k+O;}05$A8W{hFFiE-uxI1{*seC z>`W;yYkcuFrkU1EvN6(w77Isa53DCiYLJmgpwFe+*7^y(|=H_OP z6#z}?)c$6xom%4GIa=Ia!W0%V=u!`F|K8h+;*LLHH4n&Z5!Dlc>#bqBP z5eG7MU?VM&+DMAA!v-&l7waHKiY?2wFE!?WPEq4Cp>TDruW2zan9I*V+oa#F#zMpf z(;6%weP1N54HANrwf0WcIN@t6UH>%Hqo2FEEM+(k9JzCyCugiR!9H|#m8!uv$8PUt z&(R-QVxWJqnW|};a}m&oh;p=`$hJ3jwdBeTBbjv7E~LK>_{5;@p>C&vdWw7KT3|<%IH4^TpzF z_no8YhOMRUMmVo!J{jS>&b8WXu0N|;k{w{iA*CSZlN*u#TBMA{^(h$EU7}m(1Yxx@ zEJ5{pfX5Kp$fWG(bk2UhdGi3x2d_?m<}I7o;&q#T&*|p}BpCo{{u+&!`S^hX{q4=g zXJ+0TT}&@?HU)#&caRKq3tzn3-GYLzu&BC^%}74bBltKi&#OlI+Aa~g8 zvD?G75TBgs_vXrTd@zz|_j%uxtc(Ra<+OcW*7_xIzZrJ1(OWPfrFScsUVPMqtd zm3|+g&0LugX%#;+0H?xpL={b46jdO0$xjtWx1gY0Ot8+`SpV>>76dORFqW2nZv=%4 zd}-r*>C+pnhs6E3Do}H|#c6Xy?i5TNBq9^hmx*%e zbd0|h=y{n@Dt0&c%esgpj!L50&6`iE)OvjQF@^Nkm+Jf+q8?~>0q&r5^t z!vG!|!pY~W1+Jpn^OWJHn3km2w_n2_*~%j}@P6X6TjF=>e>ki3PM4|?=*aJdk5)?U zBo#>R+}(1Aq8^!p=N&07sKqekU#M#28KQc_|9Gmjz$i1da@IZ=h0Rjlt$-2cNi^Mj z`fg{E3>kk6jS(B0=;j~s|0K3HZe9%_N7fJIM73Ejh@4Kkt!FC9MpD{h{Y7j zc?R?ICrO1XqrWCm@P%Ug=IY`us}R5Lb_7LuCX!0eifx%IyfHo=vBWJ;ty6n<>7*Rt zhR$ecvsn}4*c0vr_41$`qf6>aeu-+&&R{g2t-25{si#mZ;AJJ(SnDA?g`vcC{)~AX zu@@?tqu*Bry*%pfPdGJu|2cQBo#TA|rcwOUJ*^$H9ApR0hB@Gqh7QeEaawGT#lt|_ zq(^-9i&+u*_VH)_`)50N5QY+XC#x4J=u9O;@s6cr)$Uw7DTIK$5f3$^Owzwl1(|fI zGUg==>1)C4aFn>W2A2cB{#I!LEOgJgH}g&f*C8zjG=b>y12i3pza*QVO<~sUVDt@5 zBM&^Fzq~{>x;{Sf9*0ag-rlE8X*`!zXAi4M)nni@1+Qz-N)X~0H@fx?f@{yisi|tQ zk{&<5aGv7@h#+s&pR7=wR4DMqI>nF~Y%>MyyiqE^f2hq`#HviupjxoLKeL(hmst)q z*1=juGjW)nzaJ0?_}MF<-+v2Lv+F(ZMf0OG)suzr6r)z0|+;fAE>8391O3VrQ^f)vX>Zrc&b! zKI4y>T0!>k&XuwFtV!J^pGVMTAQ#w^1oX)k9-9t;O${)ZLmHh=wi&4@3&V}w?(VAR zB6Ii6S-olsHZNA1gjVY4&cjIU9Sn46{wOUIPX#($p<&I|X=L1cuxb1HnySYY zB^EL#H=kZW9CcfToT@R(w7slaNhz@?Crt^^%r}})wY(7ysuQM;?S>qx(u-=T|Io@?_)*>9AB&b4>qMw@IR$7tKaVQ}2A0-LZSEk(c^>}YJ+%ni+S?Q#? zmCC=PRI(>{DnEOU;GJ7iiPEtJ71`>&X@3e^c%j`Xz<}a|@Ek4HiJv_G!x_a(wna(1 zFEb^FXc;Lz2a;~*+X zx{r@`U`*>YW#8Ds6BQ55-sCuhl1-4=j#1J1AjBQ@s|)9R1Fh#1cJ*a7fJ=)0Pcfvs zRSrjWfY0h!x^;K;ml852L(qr{ocWt~=xaUjh}F4AIhe0YcB5v4q5FMpUY<#ws2~bF z3=R%XDvvV&)NB*>kLTIInS&lzQ!4pWnBQM<;W!_*$QK3fn^}Iq2rDQE0?;ZfENtDk zvj2vJ41DGiK(@fUD*ubf@xS3EZ}%gCf|{CynHddGoA4FM_y0gr*=F|}z{7??Lh_7t z=Qa$^9~h8~AmJNm^M!fGZkae}Qv(!A*7ZBTxHvmMKPXEq61pxH+)-1@HGIcm9=(vBs`kR6RT+EF{E)kIe9!9&$VbDw>)<4itP%mPrdh#B`5yiFD6v zHMgt%txHaoN{OA0yuCLp)O2(hp}xK5x@0|7_??L7N7(lw<+DEWNKW3K&d#g;ixGdh;rGhK zJOMums@F6WH`3QLQqk};;NWC-V3O95;iyI+MK6Lsrzo*yK{l`!;uH|(%s1uWzID6|H+C5>u{XIufO96B=!3GX#5GW|y`fDyu z%~hn7SbnOc_#-d#dsy7z==&!R0v-qZdVbZ;>A8Z|i=CQ}y)e??sJ`1ALax*Y3b|g{)!0sF7LJ;U{;Mv>LYssA{rsY${}4BVNOBYl zPJu()?;aUYz{z7|UsLR79s1K86IlbTZ4}*OF>tSOR`xbL|Dhi*? zw+r;$IOl9?-^1PS5gN+HQ;tD`Oc(GLRm)w?DA%gJ(5!aX{)n+>Ps>My%rP~W_fJ0F z4I(5T_)rFGkxtY_RI1Tg=JCJDR_TNT>W(6q5s#`F`Onhy-EgxnnuyOW4h8|$_MoKp zv;AftL+e^S68OSwRc9}W$(@qs%#TTh2fo(p@0yGNl;wYzQy_+E$VgD33$qe!+95tQWtbBd&9ROi54o{IB}uBY3-j}LCwNq`W1+Crs|e(g;jzPU!?XH5W1(V2Ei@Wk$pYhc5vAvp z#LYKY>wmWELRZ6ERYFVSOaGbTRKJ>Ik8KBy%x^r>B^+3c%w1L4Kyqas?`K+jMn@w7 zG*iF#58se4lgvX|MdhNO3LF&^GqLx%;gK+6lE7-?UZPt0pz7!P=(F@=F)~4VRa{j3 z7s*O7s)BKIVm@>wzv*tGd^=U`Mw5C?9fy(9JkN}b3~U^nvkUMGQE2y1$($I_r&ock zRV=WC907Jt;71Gsf_-%^Exz+PySD)>cudr9^Q&vBqdGFMsAK`#KQmxA4h{>WU}7rI zOQCpOiot(?o1>I8HKl=F6BtQkBF=J%(WUM!HgOL1TO%W*R8G5}kUTj9Rs#11iPw$) z7IA;72=D3s%3!t4_m{tahO)C4rdG!en~(zbka1ZM8%`CZUSC8Ps*?GCj#Bmi=bTckQNVbN+J=A(^4@L6E~$n8 z(^GY#`HhvQ)fO``U~r^t-oc3Z>!6Z#v32B}nz0hleEPJ$*&qAu`*$wh?Zdgs!})3? zA1;UOx@Do)&Uh4K5l9_nXdpC^lROoCUT^*v$H|AgY>nhp*oN21M05+ zBb!I7K4+AaJ+;;rN_ZiacfE~C*bXdaNQ#Ijh9}e}=Y5YILveAOtSV#LGt`?_b75!k zh+Tn=t=AE|yAQVASJ-%2uz^^GN7KHZuSM6j<*5!dB8>HIKYPc(Q_t~R?cvirS7GYRI#qQ4@Z-4~y=czG zRif8BnSI)(XV~h@Kb8-V!b<5)^DeF#Y^h-t~?|>hV0VPQV0K?nTCmM_N#L# z!Ll>+hxa+j2D^8ISq0gT{Qh4`kxASDGkMLLVUAA{H}N|$^}u%DPV2xYQvE@(w}Ce& zaG!5WCx2MBCu6=|*4p{rJ} zP%n9WI`Q7AS+L$Hsa*ypNSG+OR02b{d38)&TvsBqLAiPf1KW^%xnI43 z1ZKR636rSFf`GShL~Nyup~+Bf8V{v^@Ae7R*h0HS1G8lx7YzPvRD9o$^Ca{P1M41) zxQXJys{_TpK89Mb*RMN+?N}3=r~+LW8V8Ol{1Uc`t+TH+Fc)HCOvcZ-#$^^AfzbnA zs6;HFtwXs{gw+M%EgxS`8!MA`VqvS9luBRhhpT->+*mE^zcY=&Ne(KN9}V~$jLG|I z3bvb2F2;v7W$GagUsh4IvarW%=DRZhL>nL;K#sJRHZ=cL9EL@+iX67mk5NulRCr7d86nmlyt zL0f;~5n?$+pS|g4QqPysZ=p7r$SM$Z`1kGGn;}Z84hS~2IwgM#37^}v3F-D++`<1$ zy{bmQV)4K8Pb5?~FE;izb_&Hc#ZRdr;ft#AA|>VJgR+7oOs$2<_z%Inh;lh3IzB;b z>!b?a@4SdI6K^a%!uE(D2)g1{U`^C{8n7GT_*=>{=qVn4mV^>vF6VQ=pp|^_OYO9% z@7MNqW?W!>uB#GaFRM$CH}OPFJG<%^T zF6^!>+6J21$n_95{w766Ru9oX&>@LQej{6M!OOcczUzE-hP;n~E{n;8{G(Z{i@8_< zgqx_g-%j9xH3GCSaDRUtj;$OQUCEVHC1H0+UClOP>&6qBE7$w-Y-xYfGy*Wo-dA1$ z^X}`7{ar*Dz@`C$Ii)5aySMtUN2G_w^pThjTR}U{HZuo}o z8P;Qnx-Qg-0P{FMpG_MTppaZJ;~H&N@;g(Vwbzh1O(uXIK}a>F`ubtGZ+6D#PQUf5 z$@gO5S?SLNAbWATLxU=zCC_S$VW+cYK57=hTT!b^AKFgj4P!Y&YV%)NVlD?uU(Kif z$QUk9!1gq|N9AQT6Hh{+@0ZJzJj@AN8L+MV#pKg4q0EGv<3|$gw~Na2|R)- zXLjtp^{EpJ#ov!f_`TxF@$Z@>ci#%W0d`YdI#oeOM^+~%C*UCfjdY~WZi67wP7-Q% zbWJHijA0a;1fdxXFg>?Gg@PQNss8(U|`!CzUndvvgF zH$PNM-swJKQ_4QjW0@2ij;4Elh~7o2uM<+$}f5-x z2fg!>88)tgsT|;F=2wru)EWfPbCvRB*Y@^;^YW;?yu2PyUY;2bX37B8dbZt5fl}V- z#f5{SBxmHYYuf%@Y|z-=*j{GRl@o!DY$TNQp+>TJm24n`KI=jrgOR-@=-2X>k)9m7 zWNeE@UkbXAt6q(=JEE9#IwZ`Acf`bBzCB8rrWD^H%eeg{OVTVqW6;u62P!c*8 zb2$ku4vvt;>zO|xAKPL4K)>+@IEU`qlFuwFD>z7NI4GweLGA+j5DL?YQwcB9!*1)NU%*kTbx?Sq4%b#-;@k}P)HLvVt^g0_N{7%bg}ZQ1$bHJU61 z|1gCJ=n3+KE#C$p!B5VE0()l%;KP*<9OGpFcUqB|BDi1Ihy9?I)a0|TI^@{S>aUKC zhLu%oP`sy^?o}eSOG(rNLOWb+!`=M1?qBV{j$FEZzKs8|YI+0b*FIVJ!ZVRap9G*R zR#OcWJ)ZomaQ5n@(TD}wS2gy=fyP6-&er$mPiWxM6%nWE4IF1cq%KcZz+e2}G0@+S zYBt^DtCoajnjbK4clSS#|C7p=#zVbCd4GRj9=m(bftQb$SH5TpKzJK#cHL4^A{_G4 z@YvO1@UHc!(dH znw!tAuDVxNNOg2{681}qi#K=2vjD6XrPmptWw+Z9|6N&G@!Pkq@hmZ@(tJk1c$qV4 z&IXtZx;llGMS;?9_x`Gvyka>33*e=3m*wULgyJ#UUmvQ05}-}(?3iKTk#)O*Fw*#M zdMW=$8z&~ecNi}(FTlg89c(RmrRE6W027NBQjOjw=kK;c+y z+a69S%SV2v+!#_Yb>8R;w8HKq5L~lyt}f%(ej1x@?hIUk0_)dqD`NDR-?5Xlu0Mbx zDaRrF+C?geK>Gj?DYc_sGL343=P;A0SU^zg9^WJ)0q6VzeNF(Ooggj_VNAwJ*q!_(G=|BQ2a?P zmcp%^b<2kAdJlLb1KdasGne#<>)I0zIB@nW%5J(_X3lr!+Cm zJF!FWna>xt4BmBn^JwX>LStIm(z2X$B*_+bsYVz7gPj&Vn4y@FBdlraM`;eOlnnnx z51+X4HZ35G7wa=76_fGj$FZ%Q3k!rcHa6SMPjGCwNR8=t#Aq#P7PMs^c&!&CV#Z%k za6|nktVT~8@mkyLnZbA_sFh%z*fPfX{W6-_A*L55Ygyu+sJ@n_TM;va`NjGYT2a0X zvD_t@O-t1P**xJqNc3M9m>kLnDM_xB_+d*AD`Qa-UHz59`h-X@_)9%>w?_I0E1pBJ z0705HznC=q^a}Q1awi^9e6@=(dyV=3pnI2@h~UCMSiGa*R^HK?Q-=q-RLHR;07JZJ zYG4QKJ<{NGpl${Bes--aSPKBTeXItG49=%xzL$A^H8yi4#@(`Ujnx`dunz#aRioc`|^ELD~UVw1V`Sb zI^W>xRcq@H#*U(U4x+>zz38NC3Z!S@S#WAx6Dce!7f(xh+^&ARZ?TU`J|qYcxWkf* zSQ7uvAzkY%^2gczmTpwN=T}wPT%wY=ngnWp;6#wSIl|kwYEt^Hwnnfi4iO59E{S-Q znrMP!rw@Jf1%K9OmHQG$d*R?e^yXCvqTN?r5ixiqe<3&>_v=A2r9L>oFvN>jNUV&G zsgmHW&cX(D?j6x3^Ao>3RQ4}ja4#eXbTY&E1nBTLq<29PI6F(xem;5yFSEduHkQHk zz5OpPKvojq>Au{91Zp?Cu~`GrXJq{RErVhLfTfg)ApFRNa-m`3PdSsmF{Qof0fL8u zElE~=JW?A%5>hZKY8%8O73~>bPT52XK`C#x{usov zLs4n8)>r5H5v)U*A-6-IZ-5ti}BOXq76xX@{ovqarT*yDz z`;*xzY#z>c^$MhRptTkIaQl=CzClK$R4sx-o@7^68mMtpZMw4lP;EX&`5G3nvCMb- zve0;Qo4?QVvQb76%hV3#2Tv)Ej*fxyM!CrkH(R-#=Z^-XzxvFF28LtxdxziESBfe* zmn!C3B1Ou@>t)b2+8N3@Z>v=m;mCq8pn@^qi~IOW$MkRBh+$eIz9Hj+_2eUs+<@6x zY`M5Yby!Zl;4`UvSUl-4VRGAtE+veDIg`1}(>e+vb3^9j>HB#YzorzEO+Z6K!?VO1 z7ZcMFOqJgEcz00?2f>o#jgE`M#tcpie8|bkfpd{2?pP(mi*a7#s%oG}kn(m${3yVW zjW2j$wNs6038$W86RFGQUHCrQllNvD=kyTLYBXnoca|atUva(L=z8AIjvdwzV$gxU z&zzbm(tFl%Lb`cg8L_p!;@x(8F+YJ?XL+9TIJ!z6)Qg24GNy>|0p51oq1PitcTo8~ zxo6;vIutYJH$`~E+{(&XA?w4*SRKZnP&=s-a(@^cPWatb6f0AX9%Re3$f4q3#t%UV zAgP#a%BdDlcY6nig3{9G0k8)$gGZ^Mr$m_QSugfT#5nB2y6lfU+@4Q=*)+ZaPJ!iGbltI7Dn&EiM5Ux3lyDda`(}5~bWs zi6+=3Rh3SZ4mA(?okaU>o*E`h&{+aiPkYedF2-I@)Hu^!3k@AjxbO#2JBhH_yo*Hm zFaox)jSoh2aQU!r>{P`P8w-k`BZQagOku;ok2~`bS{;*T4)5&F%q$~QQNDA3u>;sw zE}F3>{2wI>$H$l}8XA(Dnt1>I{o6M!L5$) zV$X)R4pQTY#RRuU_mAmfH3)Arj!s{=)`;GGMA;R%?e9B0=9^{G&-N3G^D{l4AA%P+ z8IXd?Rx8HyK6@D-6}xMj^sohwwfj05v*D*L0sls>9D4^47 zh|7xPcLU!%46%$dxm}t9%4zZ@!--b60W;>W;IG$q*oGfu>C)d51y2$Rs8tT5M~g#N zT4R!vB}GNyW2xk}3yVt4FMlL6dU*MN#B6t64IM%1t1j26$n9t}P^ z=-%i;#6aa(vLB%R|E7f?14*Rv#}$^JG%k zWv+K~{k|`CUU1kf57Cx2b(HIM5;T{<#PN7okIPh(3Y;2{@ z0#BVRf@Dm#O?FQhhqR20(ZO^{mGx4C!o%TWJqus~g!^MLQ(9#)b4)vZdp}>U2Sck| z{0DG8r}McV&(t7;V<-x`KQWfMM(HmZtu%lCk5hYVYpco(vR$NND%cxAEI}DttX>@g z=*t5G1a zt^b?APM}7~LqkKNCp^*O@@i`JM>`)|3xM$iZek_p<4cn_eHqar0A@`LHojbmL<|KD zQ-B=s53UF3?U?K~{QvyanMWZJ18r~{M>>I8Q6fY(U*#Uji@Xp6s@BdxvU6Ylpn||*-=iGDl-p_u{si+W67PK6?XBpU*rHF z7fwRNMcUd^EOU20XJ@A0UkLN#H~y9y5;Bag%ftZ!^X+7%Kk@f(w3y?++AQ-CEheHU zv|Y|b9;m~r3RTQ~EbBeiSwB5eaCH>`Ms}<9zNCN!V<0o^H_s>Tq1n;rO`aHrjiLzb zYE#~=)olC3i1Y7SRn3xuahU$j>lt7XDF0>tqFTB$cyKKWtm1*m6g#%-JY>8bBP@6~ zFas#({)vLUdiT|CIWm-VeSN+2T%CJd|LseRUmnSI8cnNZ*F)>@4!ojdkR@6y>FGTb zBn!G(f1zp9lpD^aag&$$GdPLIMqjiqk!yC*?03eghfCWvR-8rL{7wlCGO&q55qic< z<nqG=<(|+wILMMP;KuNYl+L3~~VnGF-5irpXPoMb29ha@yYg z7z{TrW-!37Px9MutF@j7x|yivj&Ifd)T{M=-k6BPHhTKB%Aec=MX6%(0?j!0 z4yvnvW`h_!U)-w3Jhts_&T*WK6L#ziv>=vV8MxL>wbTC9T_jw$4^fgjpaXHIqYE~E zNHZ^4;FERV#5hB|(c)=ryl2k=`i=~F!C53DC4&t8M(lSDFIp6T#P}?h1vOZBPm{jO zO_)zQwn0`Ln|+_rr>AIUJu+2tM`a^%C!1{l`7VQaY>Fi$+FrCzkpe8wZ`!aYMW(De zKE~dXj)tCy7SfXl*+$>*vUY3f?bNOIPCMJEd1)?cck|OX-EY62{T;`wR&7O@>+Iz8 z8_g1R_3pX`H2W?jx|GHR2(X1qy!2FujlB}Zxt=xz1B&YOlD-5~XC*|0(Q+7J+OyD3 z1?sgv2rAXR=dd9=9OvF&!UqC`E<vOzjGVUy;Xu&sQLSh)VN$v!teLjDH25QSd>OHxhYklxs z5%Ul+1$s4EHv!%E0kKDLx%VX_OS$0BRqps6Ob!|CL#5pxMo%BoSOmJAYnw(3q85D& z`I%yb18*sCaYm-fF{;QDIkX1{*_nH}AIUtIl*!=ua5Bx(8~OQR)#1CXqM=7531`Hq z2!e~4l20H}LB_bw_gDbSJFtw2``mQmH88}kNmr^BD&vZbEQzO$pSv>Wp##m6#V-ih zfjp(4d~;#}yyfk+X)p;Go#rZAzXq@Gu{utN;l%{pk@n+Y>k-;5N5_>q{%LNlW5=8X z>-s?p2cwMl6$yCy{Cia>Sx&ydQo|MV-c29T3kUMn$aCnG-KC#b>OVg>$=sjU`1&=Q z%Eq%#EmimcuNmknZ=>uuiJ)k;%p<@8pckT}!Klfe?MX8jXEj5N|JW@BV6X>pyS|Y` zU}fMuVLo#GaEded(dO(sWH~vu3!BkD&|p6Y8Dw7H{mN~R$+cF zKccuJl&%lQ9+|gW7QIDR)@F-~wQVj>Q%E+-bprU?=1L*YRbem-XXtHx z+fITm8C=Z||0%&-=qj|vZR!tlixQ??&L``+} zwn!-*k&>@IW_I>8hg%NUuS3^LL&WYKrVw1D-&1F?D{#qVy`uoj#m5i4J1Ep33BN;3 zbN5_c8EwE+b-mQK>?WmYd9A=B6PCH7=0b}3KVUm$yUQlE^W#DmKZecr>jUdqI!;7n zRlyh7FZV!fGCpmX&Ehh5cXyvb`TFn=mkY_1>2jId&cLdh3|rmG9KibJph-%TaDJ<; zv-;?|vnv0TjLKN43_8u_5?%~L;Bx^vGRnL+2j-gFP_F!q&nFFJ-jDkw5+s)JvQn#X@U-LZeb{0Pa;)iT;JZ>01_-0E-7Q zY8~ECa5V|rGUeo3s7+9pZe+SMa-{W+R%%FM(Q%{DJ_dj9tdcHF(r9PuQi| z)2sy6x{tfRd46lppZ}&nkUku0abZ1WmWucw*GP*Q%erp?Ooam!)~YOPU4h_lT@)Qh z#&TTTS_z_Ali64fZFIEF%Eg2ks;lRy3-BEj(T!RpSaPq=clgO|g`wsW1U6)Mzqw&p z=FtnF3`7yDBFa9|{`3PM6J8R;Hc<`XZ3pO<==+8Bqez8<+1}`DD#X3a8OW3;l@F%( z$WTF<(I%^}@?6j1wDpde3>R{tqIgDZP9(deBUK`Z^a&gDP%9p^v=!FV9(sTi5-U%) zr23-)oN9lodvqOI9;XtV>Dh~b(5wpnOuGl1&kweq`vrg7G%wTfmvaIk@bQx;Qb0QB zpQ&=|W(_QG`4?Foz^h1LoN}0y8&m>>rEmkxbCf3P_p8KYhQ-e=mgwsbUayDJC{0HA* zl1u;A#w40=%%`2}W46)W6Y4(Xlv3&3eah6NUXa}|AzGUUX{-UG(*cg2{8e|kvZ^Yv zz5Tgism0*NAXQw66VTdNWPEZ}<5+Fpy%Vd`^o-&U4Bth!j)+N&)ZI-ynEDEj79?Tl z-FZhZS@Od*EB2lcc9k~&#Np4q*hu47nO*MY$c?9CO-XJ&Tz1Z*XtsLqFQ^uD5@wnu3HPEccUkqYnmnBj)wws#_3V z4DV-C>307kf&2CT8h=quOKc<$%+<{ z)1ue!H-fvBwvGL$%rvajy)pWWL zP-KaO1Dm)}9Z+-IyH~GXodkgJ-h|?7Q@`+0QJWBt+reiCr@Tei9v5aeq<`A{vvB*^ z8NSE3+r31$x74IlU!ucyt1Bv%a&Pw)H}&>2$(BrXew#OVH)!wLgB*}wu0$CUE{nr4 z&xB=s+mHDIP?7vAl<;O)e2HNlXi!4p|H_ui0;-l1SY zqI?#(#_M7Jnj7C)#l6W`M$N7foCtbAZX6>Tp=^%(uqXmgZtISrv*L% z8hO!gr>rUNPkF5FoGpVr{@!qTI$1K{je~wc^oWMwI2Lgjys#Xp z707#IE;fFr{~VvLIV5|*P@wtJ+q(`{{*Ra)3~9u%)*557PqLY2UCTx=XXy zfZ4T9meu)KM3TRAfy*|t?0OsRZkgP6cU#OJKw3-p+h(e4Ha*$|>w;$1p+og1?}{>I zLVE9aANUhVWBZ0yM*W6Mw74Sxye(_T2X3lMy)ykUJVgk)%RZzvwj)#H!@XLX+ABAT zE?=5}j)0fu`B;L)FWy%EkqBf4YohFq9OxF{1jUlnnwAd}_x6u|HA*_Xkax?<&{9{& zghtu@KK`AWM?DfDh`|DY=gZT&H5HBaacA2Cbw<0{``Oh+s ztcTW9i)hDf+;K~*#)Of#Ej-&=2FhH_QsLQ;ysj)ob@h`NOP?AT-m;T>|EIf{lX?+J zj>HyU6h9KRKBHWRx7y$IwS&mt&#$uH!z^Y8v96)fo`0%HOZ<))ZYe{pZuvDyJCe{n z@YuSe`RhI^3d@h4%PwO~B@$eYel$xX7JgEBF8U_+_h?z|j9s7e-EtL}{ZITYMZ2g3 zb!1H_drPzomZ@`85O}y0jkO>JCrOljaMotLF&RscmrB^R9Sgrwy^XrQB&Y{bm%pD% z##}A0U1ub&N{XqJf!+C0zXP9N)h83x<>yi#83G29v)M(W3INK-$Hz0>yBYaU{4#IM z927%Tg)fWKniRNtEIn>mMLMCmf2fhjgf!58`FgW}bfhCq#)XP{b*d#OLf_zbBbX^n zg=Va-quZfdm4E%|duLWK6*64i@6%>l(qIG!PQ+nNdCuTzdSye1I_KkHpIj`%huLRE z-%d0+E_#cMP@2-Dhl_#_S~BEP01X@mW(_f&^jfHy=VH1E{|^+cr+T=#wtTeZC8&HO zSoqB~MS|yrQY~F|Ss~g;59?6k# z`H>6b*qj%NS*uC-vB^B1b2Uk0L+>_u_~CLB&2kxlPFh_ASYoA_&S2i}=o-8>pQp?@ zw>u~p@KS6HY#^REh4Q+-t`DB}y!-OC0d(QRMD((V5~5OoOwl^qi9a8_ zsGikrM?~8QBv_i0DirOZqBAJ&Ats93_zjcYxZPS${p>fR_FC^yrk!y|kfmH>N=*nF zyU}Vc`_!6RV`Ffs@55>~w2;h@|9e?k;_48QmHrY;x+m?lGJKqiB^foY`N0CHRM|Qf zcI*!y%q8!(=2c*FRIR&0Zr{Z&DjI{w^{)nTsY_287#VpI_Io_fmc#yTB_!{b|A@`N zS7xQtTNr$q2&qJR-u)yXn^2T)RL~fP+oMOVMsr9UjwH|=?se!0yB)@x`L;#mUU6u& z$Qjz|U;h+q-D{b5u-5^6o}+VcD){(eeY`T8fYtIr42kpW>ToVLfw$IN#~WgXdgGNQ zh{Lp?9TMCj$tUu$xsas!3r^hC3lvtbQR&~ovI;eWnwRF_6KgiaU|ES(xMGHRP0GT} zDKj#Y`~zpAe#s8_`eY3>DPKTm(P7#U^EJB%5!yg)y>P?;y1*_|I!mO7v9b2gk@s)+ zjCDFf#NIp@b-V<3$_b80kSYyvL2+_NjRk_h%*gYHIN_4*g#K`uq1A6uxPw-|1mlyj z(=#s|$xsBcFWnR;mgjZMAj_pbWAgen(*^$YQJUtiPuhhXWOor~MMl_8b-A1@R~3|= z80=;Fl?pA+@cbtTb$O-v$*R8LcRFe}(0ZE861lT!(Zq5OwT)&RvGYlxng&e*oNPFx zuseF%s=1J%(uJ@%ba|MkhTUO~uOgc0b?zL$ z?GtT;H%(ru!%m(9$P&o8bN1@qJ8P`GCqpb`3zX08IS%KdW(>g{3!OPmKfq3j%&o6!k&K3?*_75y)(=>M(U|7TIb|BqXFwvlDfu|n-LAk4Z*%L^dw zaq^`w4EQGN7>G@q~lVkp5qtC9wf{>~Qu@y2{ z?F7V#t6%auO%(lb?V}pHEc*g#l1&k)mkPvJt!{z?Xu@q9! z_n=T}*&n=M!OaI{uJh6Wi!iRVr82E`l^Y(E;`tk>wikT?gi|rIwTt=Q#iuQ^2!Cws zMHzM{EIIoJK3ly5T{XE;X74~}tzw~u%8}MJFi`gP7VFv;C;2kk!b0-b4q(Ex8o!8a zpC~qEl<+s!6MOcGq88YhJnjz%0P;0~=jl7a2i||*`x{CAX;3J6GG%?*;5yOh&IC+O z`A3de$&Y&4QtJv5>t9CzW6n&in~s6O9l!)IwJiwU zo|lX%KHZ(7iLnM%QEJW8XnAz}Zo~>&{T^ZOj%$V;y?kt$>}oqg4}JTrEk7~EXh)PE zuxP965F*B%keu;qdpU)n!^AxwS+R?lJp0JpyCrpXsems7ry#NV)f;d{0Qr7Rll`XH zi^|gD1s1&3{v&SOs1IDe{f-ZHzqI5cUh3P(+rI7M!#IRX~@sma|}MsMdq=kt|^ z;pAndK%O@sx1RW)ms&S}ssi?#^%eJ!Zn3pNaH8C`!*(UYc5z;On|RJXx?nQxJPVq_ zW!GOn&#KJH+X}m&Mo`G(5(TopF^^*Y0X!D~c3Tr9e2$E~mR2lW_hyfmdA^#Xo~5$> z0QNy&pR=Gqt<3d8<*jKy@WtG)5eAQwUV;m8Ow8~&js>bPb7SD z7ny!E(D7&Z$5j?;Ck4d1hyc3rR=gM!j#ybd3z5wYansc-nRprB7rtV?K0{= zyIp9Q@UGGO$I$P zY2>i4?U%3+W+abAuj|;3yqmsUJ@XXIU-Yv)a9fPr89hmGU?j;kG|(Maa#_e48w z4a**DzcQzi_2dVe`H~?SCYm?Kw;cOm2Kol$`s^*cBJw7B-B#uS9-T(XVnc~^E`GQ< z=mE~Vc^jqOdG=N@oCDDFjRjh06)o@nZcwhRL;PH!QqsiZ{YqqR2 z&-gHPshTpq=Dy*@HM99NR(`cAy~ZF(&!8pqMvgWo2gfHsAMe(LWE{+R_eCwN?=H`x zwJgfYePpV!b{B!&Ha1U}G2ghMpcuLBVY6fH3Hc}MlZ%aTiAX0)9m9m8pVLOmQQ*;< z(cjU`ezN8?GGP*t{Xc#_UYYC=VUS;rnMrqDn-+TH(O>oaX8r}RwjVp;xSPKB7emKK zb9@njL&e*%KcZIC_Sx@b+e?DzxCz|$a?b5MH~>rd;tutPMa9V!ZAfOq)hFfi-OWU^ z4%SPBwmPF{P&-nZB^S=FyuQiHIoyZcRgF$)Ds)$SO!e%1dn0P08RH2TB7mLeTo8u3 zNuRgYB%0WKQpHK9>!pCY`0g^BUO8-FDsSDV!@6F1(15yl54o6env-kF>+ZlpVqy#o z8u^Tr+oI?t%WK#|b>Nnbahyj2tHosalJ(OLNEnLWwBKR!gccx{J~GXR3+&wTI8xKT z6+rV&n9LE$Kf+uY?{(?dH#CF=O=WBC!#S(pd)u+5JIz!bAP5`X2@c?~UOvn|TVMsz zK-+P?wPJj{RYO+Hoqe)O>eB*<$T4~3q9L5t%?k?rC}vu-cfNB&7BX6DTqmY3To03p z!-<1yFD2w(SHi`f$S=2Zh&Tevj6HYkdeQAI`>8#^0=+SsGkCDDRl-^Q+275K8VSd< z(huRDD7yMaYgJ> zfHd)9GYr)+YlZQP*EfPn>eKwQw4U5>`sdos*AV2SmM{}drypPz%V-rf#el;a! zq#sv~rTUZ4)0k4+J1`nrfsHZ|2Mlt(*TQrH|Hd{_<+9T=Tp?*%y_|RMWcWI4X;J#s z@UxYieYS&~-Qvg-;7-##I4`=~m<82ksMc2DNuds<~jvD(_4fla5a^x`LlTReFnD| z#RJG;-k}5)#Mg3N?UjY0iplG%6gDi%wN&Q>VmzoU(BxLd<7qQP6&}{BuC~9iB@fA` z-XD=1^d%%Fxh!D?31ljAyyp^k%+0mrneBi(<|6c@NQcVi%s|6IYdXl?0BS`5@a|qQQ<){B%edGC|@iQ zwzC(dI?HtHX8CTv7W0hlV)twH5pf`-CMY4V9(X7wE4*2Iv^AWpf!b+8>-6O$mZ}imIv_Qmz+*`$E5XY=+>|7 zcud#Nslu#o-azynR`}6Blnh-75=07BG50;$RHfLRK@!*HuG6SZPh0Kg^Xqy&?}(YE*GMTQR=sfaZu7+S zKn5(EDIR7cUT3zM$DbHjAFs_qO;mlLCjGMgND}jW_uTqM6vR^~$_t?{-q5|sCznpPWKc^!Jibz_S{C&zp}<@T6M^K5M$W8Gg1zL8sP-w>oIniDR=bD5zfr8QWpEvZgdxN@N}p>EzZNxM<9QZD1YyA+zn<~1&7KKWX+&d9Xc|hePUudN$O)4 z`GB`4RO+0tz5FA<@5k3`YA;`zkp}$H8#jVaWspA%QogwL{r25t82IE4VNsQv6l$vl z9Ls#06|w`}8x+TV+3~!6`TeKtgLZ6Y`{&ux*#oo!StyWQj1(QuvE#GYFxL?ay(clce~gjLecA;nh)Jj99M6EgR3#jLRj%-PO-d z@Nc;hi=)J`BB`zBL$M-f$k8u~H5dFPGoiF|Htzn2^4}Ccpwu%Ndd-GPQ7J?tcgH~yQ+yzK{V*&UYCQ@ zs+^4ilf%H>j!ZC0Ro2hxeu-40#PsyE4SLPvpdPdu)u+fns5D)U?*}H?U#<-?|MjFU zCIkMs;C#*%Tb4ECv5_eUzXzF#avG9O-q~S}Z6@AXX~gLLGmiW^Z9@%*0EIaGSpU*F zFoT6Sw^b%rN~5qs0rB(KLTtdjDN^R~BtaZI<=Au$y@?`q$n3?V%R?F0mXlWvUVYqY zbLZLx-^RHJ2j!snw6r#4Oha%i%Z%7?q$n|<{kDqb1&eeIYGLs&Gl2VTFsj6{YAGu# zH)Esja?w4y8>Yrd8NpDl1em;cpU6MsyZh*NEG_k(qno3n;~>jP!XwXd10&41G~tjgtmXWv{5%c0HAuADmrsTLt3Os-??f>{w#?zr5`;husV&GOnhajoFf0T3 z4UQ_q@6e56dk{4+ur>`E%u~eIkm+pRe*oC5kGChU4nj|?ke}OUY3j0n30UGDvd6#q zWM^JHQEI7UYrA1l3SQba*DDN?wh!$fm-Q8|S!kr!2YqHYv9Ytm-j==cd^vr|q;g;Z z>Z7>)OQ4OOX*@s1tL#KkkAhqu7%;XV_OLyvy~Ndss-dMcP>Ztn3$22pfS;G~s$$NW@G~~*Fuzj-TRd{l+O^K#UQbl{6$Riy?>JcR|J(Zj3@0B;ksq4hzy#PJ z$^*}VAo13s{@Z3#m1Yb%etBD5Ocf;B`|eblo*VTwU7vW^pdnSIQ)4=sxAn(ybA|D~JR?*GNwAGH=%Uba1PBP3L6%fKIA)yX@g zn-)XueRcsOk#bl?ivTD2`B-NxBT(?%0I@wsBPt!o9|QRavqh-ycG^>sEvds5js#6%O>}zs&GK2;|v+R~<~+?Xm#I3rq-` zg-D8@Y&P}8Xagb)zggwK8|58TwLEGY0bfj&#Q(q-uj%;WMPJW<$U8U4P$;SP%ium*_>>m=~rmn25RPy}I$A1H)`+tf6 literal 0 HcmV?d00001 diff --git a/33/images/gfx/Eclipse_JavaEEWebProject_3.png b/33/images/gfx/Eclipse_JavaEEWebProject_3.png new file mode 100644 index 0000000000000000000000000000000000000000..bdeadedd24fdeb04826f794fc0d7be512bb46ccd GIT binary patch literal 33013 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 IH4gm00DWBebN~PV literal 0 HcmV?d00001 diff --git a/33/images/gfx/Eclipse_JavaEEWebProject_4.png b/33/images/gfx/Eclipse_JavaEEWebProject_4.png new file mode 100644 index 0000000000000000000000000000000000000000..eecb9f7858031397ec97259b9698d57e59d42332 GIT binary patch literal 81955 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

    {xselGgrh5GvFO}#Oytw{gOkro81w;xoO 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

    r0;vd>M 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%0DyXi#IZL= zG6DeLtM&-ooE@BzuR()T<{}bT}={+(~N|%Ar4Mg`0tT0Kg7bw1SuyN z3A330f@Ay(Y-{6!Z1=~5i~NseYNzoS`FRh?({od()bB9J-^A#l0y3Ws$?v9#=|d?b z%z}gq%q*qlkT3%>&6+t$Yy1X-m@J*;)PI9fH0^AZ9{mmz+Zih0Y#1j(%gveX7JN9Nih({D0C|HNngl{+)L zNYXz`sIJ;DeW`T#ims61G9Unf_?+kJkQC?;&w}o;4HyY-=1` zuRn&>^Xyk{ki7q`RKNA~l~lj>JmeR=U;Ek=dJq|LQS1qO-};M2S`0Je|fowoPQY60B|04d3l<3d3m0Vk5jNE)Wz|N2ne5m zfQ*=o=gu7-M+I>O$N%(m*$&`hqRgXwMg`FTD7YY0T+rn^fD$PQ8gj+CT6BJYKq#nS zG;|EiYu9fe5o&M%6c8#Z3K$g)4UFsvkT=g*U;2L4iSinshPQj zr4`iK#nsK-!!zJTV9?9pkkIIu*tqzF*NI74**Up+`2~eVl~vU>wRQCkjh%1bb#?dj z_VtgBeH@2ROioRI`nm0TbI^*6EplY4SpY}ll%ijdT9ytucN2&H^9 z$vx>xi|kLc1Wav@rz@8}lsy?|%_I82;-Ekrji-}R-!0qTQ@FgE=gqe1$Q{#RLy-mJ z31v)_>75C%yAdg46fl}&x;w4C>tu5YcwZF9ov)p?wgoEL+KSW7bOM|5*ZVJqK317i z$KS8+Mi~%$Ey3J$*A?;BaRKI0ysN{mlXh(dpR-(=hZ>?DtLa{Vb2_NyJ(_KO&EvTu`Pu zPN4f%uFQFCrw_M>MEIxF*DlQE1r&mN>WFHgV4IveBN9iPkb8TR+n}ocsKB#pnW)_0 zX@}da!kS<2Hn%<&_EX2NzLS5xnQWI@UCZj~dyQWo@ONCbKj-%Gk^{wxm&t{{KCMlX2VOuV&U`{IEwPoAJ@{XM8T&du_KX;B+< z@}n+Z#Qv6cjyY_yG1KwRZKxrB`w8l?261)qr0^@hL+j)>Y*Hz*UFublau}8yVGs(& zuNH4^*1XeOa`hspm7$FkH+&utb*%b+57 z)7^b`{B-a)w8B}6acV7AEp$>RgA`x)qLRZn1t=8lK7hskM3b3fZCjhCJY7`(sPgY; zYuFow-e(>N$7gGp&M;pk%v7(TJce9+zXU!60xZ|Hm4M+LpF@rOW99P&_$$$>OJG9z zJkDwm(A-TwZ7aR=_!4kCDCSl{vuC^nnodSm#EyJ)tEB#K@&7-&h0rV%7)Xh02!>^9 zM+{nC0#?bVmq13rw$DV*#g-3;Vg`m(f$%_V!X`T>Q(30SWF&F*7NS*Knj5E>#U5aA9`zdMtY6?eLP&eaDB zuMZkwRWa+6)DeQs?ciTH+BZ_L=vN8#Rshx+N`IoyAd_9uG(~jR|P>96>j9)g&DXndw&5G-}^%X3BlxM7Kbd zL_GHK*(dNWvfsJzZ+KCj{-vrL?v&L;TSWDW1T{Uul_Qe>qNW&&kJT1^qjl&rJ1PIT zd;lWS0%cz}V4w|>9u-Pnu*ndiV#$k$HH~FgW1l?eSgrV6-4OBEa!$BcS9-bub%4(M z5_qxj^T+eN>RrE#XLkEsfkUHY|r?8QO>bQtH8Z>wQidK}&wSOHsWU z*y+Cs)ptK9*^N4)EASPX47!Txfnb@1YuEtG9mUTp%jhS(maa)Af9A(Z;1fW;q`vIpvs ziq!8Cc;2N+I+SJ}jqAkMO`IOPh&Y|(@1U(G;Hp^%LMd>3L_ItIcT*rWpuH&X%%w`^dQ=n&fwJrDAgR(!^H08n_fXYF~tUY z+6KgfDbalKbXd`qVY>o7N}#proYDQQ*UR`q)wHMC#oktPE5lLlzT7XL6Z$T*aYDa1 zrk}ayIfZGgmT@OfMfXr7LP!I#^6lnkF99)epZiv(1$EIwa7%yMp-}NzY3;B@=t0R= z$clZuUa+3EgBl-(o6_}GCn!vCwN%zD=q4-O4SbSL0wutp)bHaVYD1}jzHyo2m|a&d zq$cfdJd3a$XUVk=Li!(~SSM8~d`GCVv`(`TO-s-(NKeh*Cu>E&RwwYJMqWS9sTKkxaZL2Nkq6GRQ+kI}3 zQz%2mb-}LYIzf~2_NE-;94x;PKauBgscccgPw46zYmj>Y0Xj?bM}C!xVNEY5gg@7r zMp1|4#EsKR#GCO08f3P1otqX}p>j7A(^;z7ioTO9Mg_EIV0kl3$B()jHP$pH^hNb6 z9!45>3=3WB<>#j*)H}VQ4jah{zCXjdyvrJ5bdinKuyrvd_7%6wm51Pnea7QC6tPDx zoq``Pf(8(MxLaDH`7Ml27WcWYaW3~`w_+})%J`?vpk;3hP-iF_0iY`NA5Ng*c?+in z>&J?;n24cS+&=qQY!NZi**bqA3q0Z=Ty%h*=Pm*0W=Fg7QCns{_2)#lBgiG-b3*Fu z&4BVhK5?I3h}j}HTB|j=I&Xg2aDg?kGGqO3J-DU&ZoG`e_KnZzokdv!`AkCD;khM| zueWOMMciCB+?=5jj$8^lxwWOaGYxK57BTi=M*}T^Bbt@@_lNKF!1JEPH^T$;7fdSb zO-=D%2F>F#IkpXu?Jdy15i7Is7xJp9ZS!(J+aor0%BV!)^7SEopJpk^#qIExhIffZ z(H|2Gjit>Lv2rz2FkpOya(|%+Z2!98`lJ9Y)#5G5K}$=9d>XrCSDv^422-kl524I4 zV+S{0vl#0M#WlIqL?unBP%;!8dqVq`(poAs#j5jn*`5y)e>}ZqgRa7Z;N99Wxan6jh>O{W*?Y{>nXKXfI{&U>1sD4yTfKi6$gEV z*aR=GhVDxC_?nkcYErC@On9^$T^R4E0LULPj8U;)TEMn#R$Z4gzc46AqdCW&OqQ+! zqKpHc7O=6DvZdZxohC^X-EhW|S<^AzJVJa5AKq5n@O_8_vFr2@fks^dTSecj)duYR z=rvPW@}dn1o>j8Vn!_;HLbW!9oCO6@(T6bk`S}t0%M+xrqK~BkcjUw3jj!*Y zw%wmdLmF!H6iV8Q&5voHB6yRfb+GyP-k_$y`19eN>(1e$MaUJs*gms_!NouVQI_NN zn#eRP=9=mK8#}0E4w%FueTY!I3J(`E^N<~bM-CXl#|o#1bZf%S#1tH1%O5bbr0!XA zTA(s_p$cNn#3iwROGG)CB)28@UCC$BUyz$i9G=)BABL8yC^vvb~v zn@Dp+UQqBMh%y|2!t1zhcrzW_uO_W-FVcNT=r>$*xOOJw_))XA<;Z#G43at=FBT)TMB^-nE$xC42A}Ezo-gaRw;`|a=w;b8exQ0|_0K@-a8ua;o zUU%k`1dlUoJ9|EJAvS0&?|VHPnqNI}$Ljs<)w$|SvA3{yCK{Verf587+|!fU*fEv_ zA@_Pb2-a9>ag@tO9e2h;)Aabw8bd#efBEJV;AM*umDg{n-%01H2c@=Y`vK@i z2ft_!0Vx0F#V)cx#m+t1FM;`|r)!tM8wDxg9_8r((saHA4mL1-cJ5y_n6K`}c}%pc zu+n$0i?xzxfUlfl5a7qS*u8jq?x`^hy;#p8G(h&WFd*VO1ys}mQ9%ZCG`v;>VfA;B> z$@_O2*tjxr|GSh?THvld(YJ;ty-1&VGuHXIiXr!4nfWrKzIT5aPJaxm|IQ~W&n2*Q zxbW@5T2~|K68Ls%kMxc3lrsJ0e3RbLVDlNT`!HVnJMaOmA89>vp2=XvSd3zR<|1&8 z>~7J~@S}PTj8iD6RF8KBwx%=9KAONC*u^@Q&%c{|+M04QAtlSZyhO4S3Vd27vb+CC z4ZnmfqjOF&b!+bssZ`ev3U_eYg4x0cS6WK?IJs|e)}Fs6#)O95ksuaPvM#Qv4jnPU zH9v~x4v$IGUjFz!(;3}~v@}PVsK#^V{a1bZSho~u*Ph-x%?G83XG`L3v~MCWf&OX> zq%I>L%7vh<9A-^`QY4MTLh1wOPKO+4!yNTIAzbT+u;nUlOgRy`X{O06*rLN@J-Phv zuFOp)gEffC9;blsPrpAsA+0OQ7Hx7nOdjx(eoUq(Cs@0faqGYYM{tc6JYg!$fEwPW zkm=?D!FXM4O>4#QHroO7>FJi+ir(}!%P-4q4jpgkI0Nm9QVDz(sGhqNN?~F%9ro+& z)F|M*9H`M@%M?S@tJR<2Tmq@OfjP;KDq156qL0*I##|rFuZvMJ7iR@#aD~^`M0`0( zJ)XBS`Y0aqigGR-=?9n^bWC6DyInzO40ECuC01;OUf6Ov>bnbr-tDs&h*H^>qI>CxxruW|T zW*u$0h-m9a{qO$n2XaP1cP%pGj7@e^Q}@Cm+ii)5B_}9~6b#T3%S5MyFVqw4`KI0m zklmcp|CavD?2Tw_n@#lR8^y^GMs)R%pb6Smr1i7kbt8jI^i=Dkq1T3S(B$+~e^J+f zox=m9yMos3>1eGT!muTvuOY-VEK^TT@k4;2YL$dK@B*3aa~0m6&F>hFQ?{WJjV{bT=Q&BKVKB_HL%6v81IGDyIV|{ z*JhKo95FQe7tX3}&kREG2oi^KGm_-vI5BvmoXt}F$vonfMNn|arBj{b)yHPo*ihpkju)(L^zB2W#2UGY`aphX<-7pPf_2a9YfFJMJ)dO6 zIrkA}Ug1)uIbJ%E?W4sr#erZPj+nPDn~WjFo90T@sf#sxZxZq5KsNUz?!G?SNV#5T znbBn}%vriJ8$=w&L=hYQ^1CB!a=28HEy|uP(cVN?rS{XaLXGlubweD-iLV)0b26t= zF08aPaD|pVG%C&vGS8@J_x(Wy`%?X&np1U$7uJcaX3o8!o;g|(7{}n#h)1eC)uXes z%B)QSnvrjWg0LOX)IaVUv4ulT?Q#d-UqEgf?GhQvQ7X#=4Y^O`d@LqdiYl7JmzN5~ z9j=`$iNzV@N#aR>9p3TgSP{x(5S;wK78542Dcu`4LSo34LK2~4RAza3%6P-}bZoLZ z1cg2NxS`5Mr9-a629cHvR%r+}x=0$CTT}1Fn(YFh&W_r&MWxq7#x)AMIGYUiaY(G0hSdPkM8pGBvzrj*`nn|dZLR*7=MZ-0 zy0JHsqS_H%J*=&`zI%hr@7mq90C zBEUpWP97;%YFHLh&=0R13Z`p>oM-RdY9!`_HGggLIw&1LoB zq{5<7&onnt?rk`yCfE_KJM~1Z&URxRUlO-ktK1E;b1^r*s~U8cuoau=TUw1 zkPu%|??597;RnpP1||urMe_Y&LhLHbg88RC1d4*wF}OGJsWhl}yDB-AfNuUl3SZl_ z7M}C*cbc#4X(|AS5##$MH2{z^A=ZU_amDFeyAO zn@+8H$2w8Fx+G9LzCW(LS2$%Y4DRv4esoN2w|!4jgI5?vs9%5L^bRUcft~DjcNyB> zpT!}RqrF|^81p?qi>WNp`jC}#e)4>M2^3N6CYEM34iKnH0cNfL(4*RLI*6@@u(HfC zqG*`$7hv7>>&aizi~lNPiz12BN!1Qs^(Fb~wfWbuXBl}JmkZ7cCevr1_WKfrDu$eQ z{e!mvxeBrRwm9mC7n>LAz$Yng8Xp%QCW9XpKo&VaD1`r$zoC%*)QFE7Rf_Kblww9- zEWiD)ZNC4)`HuVh{+P%1&yDhxj}&v8B%ZvO@NTS$S0t1FZ2wfGzFavkO7O$PMHl9S zVz>8rA1kPUjcA{F!l-o4d;EK%&>=q8r{)*V414S?;jcWV=Cb1C8`m(1u|%ZI`@Fne ziiR!ogK1%tw|FgMYqi4y0o<8Z%M&Z&RTT{_Cm{f!oZZ*B&>$K>2x&GYk!d#9G%|e; zAAiDo9YY%Fe{;*V7GiH1pjROx8u77KxIQaD#ezB5bmvvyM%d^;$;ODDq{D>Viefse zFTJavAM9ezDktj_KpZwE9C~qKrqS2ws5hGUlhOHlI&pP-!Of#wARf8R@mX@q_4TjY zVWNs}`N3ah3EJ0L5A?{QKtYRqY40n(O3RYaPM(rh+u&{DsGr=kt6FkRL>5;qu_|~ zI|?+XTUminMa!u0o`0(o7@m_jYa`W65O3sx)CJv}Bj?EM<}5;!m8DQ(ic9%oZlPVp zh!)vcPG#cQyH;w}WsY9>#_Im_Vu$$m6;d~L3$FVsi70uVs??x9PwFk{?^3TkAC;lq z(BULuF|QqU4$gSxB%GT&+aG#M9Msom|AeXSaPVxw#2=FtzNupxr1(XinO=>f@6N(S zqoF+~-K&~$ZF7F3Bp1WCC3Bf!23?p_uC{h0T)whs+MZaE*w!+Snxjt`^O>?JdE)T| zD`A|^b0|A~*_Kh^p{x6IY!g~l4b81jc|UuYfF{pA1R4|E&*Ml+m;6|EuXcwOMe6eo1VeD|b1H7wnc zN2>Z6lrHjLF9E*`7vt%J(rOcHuUFdB3WbM>lA@nh`Q|j1(_%p*s@kesw-ZRsl6jhO z&a-wUNwnyg7I~H5d|jgq6i@0dBFsr56JxqjVas7K<)n>OfCz&%4A)TDV8}^9!#^|5 zXt-yE=wfb5HPOdWLx*nIp;~l^+%htt__3g0E$Y7}iGQ^v8adHu8UqkS2wWU~%S!dZc4@8vB*>)zH!r1$L!~8vlH{_Z&g|wsgolX7XcM*2fSZLi}4Fbp` zo!DhQb@La+tV@}VMUU!a!O)|YU-R$XVBd7YcJlnD7raGhweC~`!uY6`1a!5G^c_u?M)q%*w^j-Th67~l z{8+~CsIgMa3rF?YtO@&6TUJ`sj!H7wC+ck9?CdQ;m0oL1@ezi{5r9&8BkPEY362t! zY2@$1y!$DL9lOyv5U_)L>3Kc*)!S9dTtgkHdA9E&IX1K`GOl-aQ}S+1-o7nrfFlY(iNCD=$7GI}j>`4c?N~=p*BzpOKX(9on>bk&q5&f#U=b8I0YG zoAON6M;|%}n^K3^DAYt!mg{`-1WvA3iT@uy()iCWMVMtnENf!>gKcqU18j1~6))(^ z(49nj-jrJP`pYKqo|a(p9~HgID-vC)Pr>0h6A`;_^^#~c{lS~<3hpVwv$+?sHv9u9 z(sIPTbUrst`XIcSWmbn~f_XE6N0gZX6~l4#f4pwY*C`?X^vwqxB`t+oAIIdVt+U^Ya4aJ^xC`-@k! zk(^3g6NI%4s1yw1zpB5#f}Kc9tUW$cqqS7ixFloUd>=dtA`uE!ZC}1Q=ia6KNsJn? zQp+yY)+@nWQnGwNM&>q0i?KouHIPP!!Ylx6e_w%c+t5F@GPy zjrA_u&$CWYL^=5~Eb?W5{EPbq)!N6C zTN00%_XRDOJWmzFOYc}0zY^o!0&~2#tpmR)6N^)W7R+1oebw7!wTj=m(}k1muZ;(d zN}I2-mJB+a@9A%8pLQf&qr0Ce)}I+Y_BcSJxuKHCCV?8*OZ8LBrU2I7l=4)>DL|WW zr>tQtarV@f_h0PT8T&bzm@Y@fjFImt2_{Ux*-xl-(>CV}!41OJ@WkE3EUNl$QBAb- z+O7PW@V+l$E4aa7389hx zqPZN8hY)D*=16l)+0XGt-!vfCRyZ^}6~3?mM{6o4!pI>oZ2m#OR(nCl8^4k+O4v?K zcA413Xz~JlhiOn{)MhY+ld-y{W_D`IuFG$!kPh4G{4c-6KfY8#wEa@Fz;}J&-`>4% zI6&nQk@UEsuRZ(V1$s2ExbmZ@A5J$XTg{8v?wBW^b&Rz_hz3L*`H$6iHo1lzCwSgK zeAw$xv9pRP=J}-Cjm(~^uFE){GqV}sU3^lX)thR5h1U&Z%Ry&t8CyP9@+h^wff4%H z&GWN$H<{b5Celm51$vT}R}ek;^JF(~?&pE8u z7UW;2pg5)*X@p6wnrqj_6WeoPh((<NWMGAm@!c|^XKAq{rABuqp26bO+KkAWJcy+4h zHp7ys2P}cVZS{;63|c#~tXi_JFtZpv;a|P34(mz5eOyz#x)}VGbPDn)Qpv&nLLFpw zW5#mDA}dx1lqLw7JjyG}w)mo92KH5!41m>(Tmsk2;-gnT5>DgIWkaGms2#zQl(XJjlr)6E&OV^OoHlwV^PV^%_Gn40KN$_tG7uXi{vO@YpHoEIGc*%DmDe1m z2DS*NXc%(0**gmqQmTn2fpB)PJ1Ztn8xDNO`T$M}Uy^jRM^RWI;nX>_qjFu^dYpSu zB|8%0=iaf<0YJ*U8QG|#b`WMP?)?i*3j4$@XGAArA!6B&PGHN{fX zM;NRz$qZ}_t3J9IuUI=;@=JS}o=<*3s4Ht{mm;KhEUJ&~O9ZZB??x9=FW2pj(XNsP zLQzV4kM&TI_NDl3qa*>Oo-yp54N%XnZ)xIesf!_(?|S?moY3?97E1ouXLlC3z-?=E zNZ3gQO|jmqVnTPc!cmH>K0MUip?QFt)Ki zVVV43Caw7cx^GJzW7~V;g_V7QxeZwLfY*8%o0*>zDHlv)weUQ8?Nt2fF>~s7_GNQ> z#i=1KO+>WzPFbDwvj$?pR%t;{gf38rJgNjkN!stoch5IXMr^3k?G2L3p-5H3BrCvo zmU4B9noR5JBfD^;8AWXvQLWv!w#4y<`2%Ihav(1x#=|*DW@V`xu2)9IF^{~gtIutE z^~@-qYL}Ujf~y0(m}FyN(&UjFU`F_0XIe=@^us1D$9}=X*2FZfbst z%8pRtd|`^k_iPS2;mgmXR;m6}k!9(PU2^K{L(UI{AB zC8#;oGt-xfBWqPYtk1x0AP8YGT5@r=lVt1_3m0sVQYdBWur*H2X!PM-`f^yolB}MF zuIHPb-|AlYDSCTPW2Efn)T^N?PC+It%6i$g39%ps)Qlkad~73!PvqHU*LI2gypOIo! zKVwAyGQ16QjwyHer1pfg_74DPxSHcyn&tC)A}yWvA>AZS(muEvv?JW>pVFvplIIL(?TJw=!z0(XPQZtO))Co4;aZ=q*UFa-7!&? z=*8rLGzxs>K(lM0^D{F6xu_5q(VUc{EqI=wOEwo#pq?`gIym||_T-sW-Qh~*jQ#-2 z?yTGA->)1(jvr`UVNy+FicCNJU8Y z{ey2k^!X?y1GZRoI71tW)Wh*p!X}1rpTqOEsn4-`1~FU+f3f?k31KVJo?a>HF`FBB zlF16SX)5no$3c;3o67vC`Ol%^_y!xUZlgH~9Jig(B(MkKL?k+vy-2MriBwC=W#^s` zq%(x*FfYpVF9!f3stgv7K5H5mZ4BBuuouJNG^45PovEI+7VPjKs!`tj=X? zCbYQ3iVrUM!lsaZ%Ey&GepP%W9qSsUvtO8J5-^ul?p!K=ad@G*yL`&G18CK8ykMGC zAwHl_fqiuM-1hpkI#`%^PvzlZ(A}quRbzRdU@2?dpqAf5P{0b-DEcj(-L23i=+Q<* zXKsn*!N=@8U4__O;W~ zov2Jd$%e9?O({$bdc+l7ExB1CwC_p=-# zyg@jSjf|EAAx^-yKNHQpfzYLOG2ul-M#8T9zNIp8Ui_T#(K$K!*w!xJzuz)jQ^sE! zLIVCO2@xRP-?sM5+WX9RZ^3=f-=1;7&M|!`yxlbH-h4kpnCe4yh{?mar+HRgD1Q~M zTKLo|(h~71c$?RD)uQT~eiwnVO{x!ES0eu-iYRRDM%4)X=4O|ctH-XUuN*;AC zws(tnUha5N_P;>y`aP(Ncx+w4tysau0eShxwn^191rQJmwC*95B<&%6Aw>*eqjA_} zcqP>7+#Y&lr*zJx_5pnRXNY6+PdD`cUVQ&w1$}_+;?&m8^}KKD{Q&^_$S6!y`YsYt z@+M&Mlg~c24&Heg-1Z4cZnS~CwKsf>VWyQ`bQ5`TgMPkont`NCZ)UnRs_@v2H%1z6 zI@o;utu+H37dl-K((JD&DUHR^)jm&}BbaFp-m_z_UkX$m4=Jl7PV0#bG9*jB8@Pl(h6y2peQu*8r>=$;x-{nF~+|76s3tLQ)x79A% zCUGd|={aAt9+}c5z$J!&keo3?-X1y>DSA{VhtMb9sKO7#<3s)6m^Ael1D3I}JLcgx z+03Yq#f<9``Ksc?Ng8LGbQ^qi*AsB~VH9iV>S7KNk71%&1?~wZCn>Id_P3{R#ROT- z^G1>g0@;!5PG06TjYaIp#TtY0Q%j^(rJhLhQwwyP%As9uL$L?M4%pJSog4a%&%1s&E0({#Tb_}E{9<&*lHI-A}6kQ22`&z`u$Q{6}TzKO=dHe@4%$|K**RKd%=Q+x~IUAmfIY^3m{y z^w{~~IU_P?c-p6RA(u?~Xl6e%M4gV&82v$*$thHhAcWg!N#HReq8-*V?R(qu;`Di} zt=NM7XngTo5AumRq9S6E*12UE_NSyFnSd){r`Er>qp{& z5p?P4Z6C&#{&j*#(@SRitSzD+u3USD2Q1q{U=sU9PW|0p<}Xz%C1Uv=KEg z2>TY*v3MQcP!qJx9+PRRIm`YII)=RM=>yUB8Ky_Z%f7kbakQk-HQ~J-Jyr>_jG94`mbyY)3)fW~-On^ATL6#XF_)m~E% zC0_e~KsaTj)zj{m)sc{oh?B2`w*)4H+N=!T*w|e?e13vJpP$9k#nImrugQ{nw01ALgg{v38FP*~@5p8j?n(m*> z!hEM17nZ;xaQc=$<+%%Q+?r@9%Ntu3%-$ZXQeU|z%h);i%3dPU6uR4+a3KLm{WU-C zuw2(L*T?dn96iRCE=}4`+;i|kKDj6}TP#r9H>#UQ`kcGxJ+Us=ogKuOD$8>x;7(Kb z@-HOm6F}Y?8TTrsIb2d9O;5f)FW#<~e@`U!Ex9>8ecG)0{X1DF@RIlt`w&QoPOcf5 z(pYc%8u_;_Wr-xbE!W=uaw$jGM-L#&_Yei1_|bwVE{D0vdNmT(D>5Q|jSs$IKECVQ z?YTtZb)uoY--HlUoQCT4lTK0D3&%~X;1C;Zg)MV;ja(2{w3W?%Z zhYQs=F9Gx2XHhA3bF1d*-*0UxWDr>tls+Fhw78g9@%VmxR)QF=^(eIXHJbCU;D5c~ zc)1GYyD}@%?=C(g1Kq0CY?Qa}|ARNuAMtX9*XfV6b~7-pGiKtS79Xp9xvC(3L+aiS z3O}m<6Tjj7aynr;8mRphI6l1vQI5#{=d~zekxmanrNd7js#WU)n=3y{Z|swtdt*$5 zY(EUQ>txwp@^z3Mrn>Vk46e=WLLK^;Ze`&nSuwS$-*7Fcj~3YOanv49ezLi#fBUgK zd|e-%7&HM6v~3Ug5b&L{zoLdhPqnV$gkAl@W{x1DJYcK%`8*owe*7tDI|VP{~PGctNoK;EHfC zrKOsDz+5>$$+mkD)Jpk&aC|p&CV^vC)h)V;s1UlaeN>CBo$ne#Euy=tU*~3Z^egpe ziWJaVK0FBHidj6QqwO7mc;d5NckJU>XMeFhYc4uj@^WN*rt^@fKhTcVL`U~-jFAm~ zB(byb!9hNSkl?dd=gB?|Yj`GejEUN8d_i+F`MN-hcX5|p?QIm5_$pb+szP!b$cJ5Q z@nX1J?a@~cc%?^3bk3qb<|d|a=z#ywg*JE0vsROGrC~ z>5yWp?M!bzjiN%npSPlFAW$J&1el@9osezGo8Pu zL9!{!o%U8QHo>6A8X^|sTJfw&r*zVOR-DXzO@M;wptOHZa+L)t%@tnRt=dMbJ&;T0 zeVzDjU1JLi&7KjTaHeW{Y>Z#PB(9b-vsbb;xV;r4%irYY4k^dyW}8$C9qH9a#6})zpsV zrl}mJ`J`eo=t`zw1yO<0>R0O!bV+)cCJhk-soCfc_idn(li<3x%0{R73D-UT<_vrCBrDkJj zH)E=;0fBT>rc5t*hi=)yy$f)z*5t-pup&)eR2Z>EE9vCGlP-DcD`)Htg>fi;oz_Qd zu`Ek6JykCv$RH2ex&+{vpsO>DKZopJ!2gn#TV)sd2)9~RvmJZ?TdL4(+pNjy0rDuB zd&a}@q~@lN!W^!(FOJnDPqA?K(fgqe#>sx%pM3{PAIh$+{74hcNI!0p3>;UyR$+FW z0dR-mzIRSUUd?peiq^2*rD3FHzUTSLZ+J_7TI7|UlwAe4;{!|y^03##Pb9!=^97cT z9g397d+}aP4NEL|chQ0|qMgK1^F6Cw1|Zhp5gFk@q1U5yk3>JEw);zS1k4A4D>sNZ zyHJQ-Z#V{r+4c5{fWV|R1ae?T0>c*)zBlk34}_C)p~YP`G>>hebfYq>uOZ?F1THLG z-!-aJ>8tdD$(#i3r4PU+Du+OAO%QzCHd8S&W4bunK{PKrMzK1+TZr!kG3|9+H}Wz; z98Z4{s7`=N<0bIIxO;E#{45V=ryAN2dxrz|;^UDhRZVSu(!HRS=9f3Pay+#6!tkJD z>2GQ%9xSm{yX}e&7*mH{(-+>ML_0}|Dw>3=^-q&ong*@XQpIUyEMdHnNPC`@9!dI9)3&w7*3mUG2l^r^ z(Ks>Y$cgg+SerZ`UmO=|u^zT|sfMjUtg9msWMXbqb3wp~3k3tJXXwxb@^=wNR+8qQ zGO6^UE>bi&+`@nbRh8DftV%n-Z+9_gZwI--?HJziddc!eM-Q@2R#xSLUihJnOPNhuYfeC!FxNs1u%hIc zY<1LKn1?^?!ES2Byt_W_-8EhlHycG~^R0ixHzJ~k|4a~7oJ?I)1^!V_S7_RRWLskD zdd92+r!qb98oUO#E~|F5f#j_V0Z{#S4q5&c!$=u7YsIDopT&1d;*)douUVsDioGr< zRVp_Lw_B>zZWo1ge^GGk2BDIlCXE#7niX3Yu^_CpgH1SUKTS~dR3Lwk(cs=mC-XJd z!RDBm&JVq?E)73{Uj88`3@e$DGVIq>(PTmmbaAT*UYuZ8fqtB8#AW_j4ar}=CJGmt zcA(lQ#4r1eeH#P}l|OBymaN9=Jsl)$i(#6LMukSUFYXr~<`&N$Pu3R*~7=q}!&>bSVG| zw)-Vu0*@Q-oYqxz*nA&F?Rs5+3hSH3P_fm07DQ#&_J=-P)G$z*#YNkjdh{;CtpY19 z*@2ZgCZ<5)Fh&fqRPzl%x+E_qo?MtJ3EF$p7cdULDA=txJXMx16w|Wb(62{xdl-Ez z?4X_D5dolDq=ftN@Y>VTl~5rLR65v<>No#I(B5VhN76ZPVir8U#eTJKxW+%m9O?~5Y? zs(|W>C|Xx$CxvUSDT@%|Vg4acwV4glSQXtVkN7r|ntC0=3)}6?Dt``NAK_CiNhv@T zZj-JuMpvVl=qkCl-)^Y9&d9dEV$ENQpba9FTZ*wN8}F=#v{Sg}Keb{u=VoWYpH*fz zuINN}5R8@suw~XX4HJgyyBOx&4LVrOts6VIJNi^1we%4Rdf+{^nc(i*%wgDqdwR|)=!C1uUT(R1 zdJ5JMx~M{MVv3C+ps9Hyy`a>KKgYixGcR_4M!IN}@-vl_mDQg=Kk@5k^j~lDiM*Me zUZ&q?pW91?yx$!X97K6E<9F?qq zP@3ye$dBBuQ`d8BQmGvxquPCY`nGVbMUo&`Si~EQtLKOHHA3{`|3lqdheg@7>%)T} zARs8xor08fx6&eA0|?SJbR#7q(hbtmIUwELozmSkAl>74`@HYt47A+HF86e^N%>U}gC|4tAVy149C{AtDwSc>)2ymtprL(u zrPpQ``khs`W6@DgYJkZqzCcoxz$A1r5_iAIw5E=Y@BT9ODtC9aj@<~+2p9JV#=;XG zGSc#sK+p4Cg4A1$rx~m0bQ5oc#&)o~ter?B z2DEFvSywsuC{h;6`wcn!UGHziB_VYgnq8EA@?*Q7KD!|%WGl6!YfiW)0kVtVp1kf{ zjiHtaX<>ozxg5Pq zcLG4)0G!gLt{)(xgX@_31P@i`o1cD!%%8UT*d8qfCl@yoa!3l#*5+b2iRol^4bL+q z6>STA{0G$g1WcHRuT0Wc!0({pv!v=jy%F?(_zCR1t(s=Fhih8|WESViWgUj|x{}tT zj#PN(2U<)DcWr7Kb0cT|@I*x9|176_cK(g7uGBrMLey#~f$V!TDj<=bv_wd9I(8W=6 zSK36@b?|Iv^C_?0KOA0ngu@7po!_EX`ZH-Zz&^Yf|U_ zQ@3{t0CpJhtr;MvfJ!Nwf0X}+e?#YQ*Wn|;<~1$<2k3CkJCs~G-u65XcK*u^!uaX$ z*JttdPR>N`Zf%Y-ca;ywzL7TlCP(t$uKr$iPg&je|7Od=^W|#(-m4wIH~e>fID6)T zWf8XYms{pP(H7xsmKB)N9PFn%DfFk*G#>w5oqm_z#Q!znMwm>*4YD-ceDp6rd7!zL z>@Z9UB%uA(dFD*S9<1l7Qig(7H}{ew98NriQ%~2W-t=Eh;c%g6EFGPRC|qrOccq-) z{5ed<|JmOs*H}a0Nh4lP9iC19R3a#x^Kak((JNPtC|gp4+amlM)I9bKkMpFn$6X&% zpAHG9NT~8miG9L%IQs!g4Y;+We>*X!6tN)ZC}0D;*YVw=-$}77tOSbv)MLx;sjXqc zr`2Go#yS}ty$VY*9?oc1lGB3g;^g^Rl!_fg=&xed4sx0*k~^6vI+h=)t5bw4DgIU| zE;;1cI)n2-(&nEv61EY$ntJ?a+o~@||N8o?neP8-Gl6mQPv!en{sxQJj8%xygu>^V zg+~e17~e#y7k&-G99}6}$F5yX7#t{i^aOZ$P57Ue&zie_eFw&CA)x=y0sY%NB~Kye z`EtAW>BjS~QTOY+_OB86^KJiUJ+dmi^yicZB!UqA%ddZ^^exa0nLq1bM{e`yK;8oe z^51^^V^seaZTi{1e~i8#AfP?lKP9FkHFxmGta81yrVa(4ub?LZalSBhH%(;g76+N- zd9}IwN*up+uKMZ;jOR9j2LtEjJtd+H=_vI>F;!R8=QZy#0aG!wT6MMNczL$ z&8v{z^OEEA(hnboba*m~z%Krnn(l0lGI*t!voN#k{!1slt|H{)~I} z1GXs0CBZ$`%3XFeif&I3Xh8m?QbQ;w+3{_?KwRf+q7>2Hrt4RfRd8nY_cQ1W)tuIQ zd;Tj6V)AHpmBN6S+S+E6Ex0lLAaj7umGe0}Wv%bRLA$>U0;SvfsEgOraCMDZjr$QV zdA^Iw*!^9M6R4!25d)_{N8(@CU zVD9n=-0I-KVSIjN7SzHvtSs!;sEZ%@YLZ921jj+*bC3c>FNnkl{_Z-_<@cukt=+HH zY>!dVv9^IAEM27y^XeGd%w4N<%{*jV)%sd3t)VC`2#fk0|XcQ0oukP;vWJKO1>fa0s5(vD7REU8?y9| zcKlr&XLaO*m#pUw`wnnpGGj-P@1N3swTkYRO6o6N{+DKXx6%C8Dst4n9{X?9^p`Y# zRTW#yQhkyL2i4m{nD|2f^eS9swst1>gw|y?zh=t<1K|{U_(#|Lb7aZeJorj}1mG@4 zc;7Je;o6Q^%YvJglTA)bhl|ogRuq=N9GCW+?81X|vpQ$G>8wKb@)CD`1%Q?TGHwop zb2Tt3M>VrkcFCnHc*>w9B-5;-01mzvVZcu(qX59>VCGD-ejo{~ku7k!2@geyeV zIq`1^{hr~3d@YgQUA13JL-}}~J#Qp>4YSgofD}`WF@;33U%kE9y0o8HaZE6f7rxsH z>3?*5L2qTcc~;OoO;mDwO@4Ek25bp23x9xw1K@DF%PFaYc{iQOi(8xd6dMm>j3}A> z*BX|cLP_Y5Oi&00!ojo2BcY1xSIYjF*pPOH9R^OEw?@i6tZ0V4HVFW@Y4Q5)S!cpc8x_XyzpWV(T-Q@)R zc-^}_g}oZxb8eRBNjG*y#`?@zN`xRxbo#BmWEE&4Z}FSn2j`XAgqM&lPW^6%tOL9cFs!z*~On1fZlpg<5%D(VXD9e%xQG z;7Po@^;@rx-uV`K|5JN8J-~VcP2V@-4N|Xpz76j`)P{Rv-QE5a0HPW&*Zs4n|9IC* zKTD_3sZC+pG*R_0WkQDjsZ66Vb8q&W_Bh=jkG(fy!kIa94cs%wDVcMRco9L@XX__w zB44>|{@LZ>f0dLMvm?MooBMezYFh@XbCviZGDhN9MzlZqD=A0xpzuJ_ov<9&RqltY zh;XG_xjPH2za9lDss5{y7B+IR5;EqSBJLNZ4zIL0cXH|)9+D_M4EbQc9)^GY&C{4n z;5?=|0hr1fLhpcC4=w!n$ISpiHviJ*Cpo!8n||8hu6cV&i3<9H_;919S4FOeT|%CF ziS|AFVQ6K^k35Jfe;1{po zx>GoTsueXdJb*%8a^&>lBo~Wyxxv7eZ*bL9WVjYmlx8q9f*9F9{S}M_jty@a5NoBh=Z7NM<@MaxB<)yth@AiC z$)bHD#L~85Ju=tpuzr`+PtYzc>Eblxc3S*V=xHBgxdV=Mm`*J^BhtJ(04nQ^7PjN<;uV`eV*j8%iweOUJi>|MLWg!b(7W_O&OtI6K6RVTdv(hzbZwu>y&y`teDC5jgn zGMWgY&*U@#p!x@qMiAs=5+4B89S%t#;^vP_UlIZOF&t%+cutV=m`TV8f&^hECqkbE zPqlg~b@FT}Z4lOT!iUFU-$px*Wvs$Ey;MIKNAqi=0tIhpW--G;Ca>wdk-t-N=4e1;&vR^|I;() zxBxG(R%T?P4Ee-57QB-CVxVEl$}nuvwyKPymr?3NR~zz!yp0;l=>kOBr zjq)$|(4@qBqZJ?3-;?P2~?qQhNTR!SUz=bZC@6}J;cDN~PWPe;} zWVCJye#wr~Is#B-oW&7~D-wZ9^9w8P-nfkw}11IhhG>@l&kDims$Vt))DvI6BKFy34Ds zjdNvz%uX}Pkd&@eRg3ejt2<4`3#V8*kQP$D*RG-Q)lCR$I$Nl(B?O(FWqsQ(!A#3v z(q*D@qY9&6`%n%_FOQNYq)B@{f$(K^z+rAtf<%LR>VfrG_tw*~{_qA75~s~1vP#lQ z|1Yt0wV!8;#;#-u3fAJRrJ5U26q@Q&-3|sDtRdhdtvv3Y=JiED`?-l3_1BKm#OC<_>;BT?Gp#wxk z_-xRcfc<`?PXwW#X+j(9`MP5bSd9&G6pu!75gVm-8X}&Z}ttXc}(YWh0m%tcB6NI%pk~ejoEoO4K~|V>BKsQ z7hzG_rR2tO1FY~oTx8(5X^Lf`o_oz(=VC~xPH6(2hv(wjGcL{BRUrz8dEWzBH8s3D zeOG8tN+xdCL!n}UgmCVi-7*$4)&kiUNg7nu^XcmDV%Hd4EpC>eHQAbGkYd^NE^=yq z6>5$b&&_Qz>87q47}U0$vZ$v&??n3S0+B~$k_A%Pqs-*_@m`>_Eib##bK!aNt~!!Q zgzxh%+%9^M$iZ*@9JOJlsF+@Q@jkX}6VA|Jnp6P-?48(LRfHK#G3rLzuTM5ZMkPQ- z^8)BQK7n(QJpePuVrp5F$b`&Q$>k`|tyljUd5>!0m=ED*^X>QO6TPDhAU>M%KZF|p zKhLbexO3mMl*iuma5>%(<*q{Lrf}p+z$~TpUpRjA=B{pbk$1W;(x+!&de-^7r=_-5 zx#tU+)JZDeb9dnkLNoS>YYxGP|VWq3Sf*4F3p#<8ML5t@SD(L%Jl$y9L ze3c>@;c_$I!o7M{GLZ>BsbA~N0%^f?_B%cqS$8<)az7q|IjK!By^D9iiUOQnVuU>u zK5m0AAeqA`=XU0XF7M5sehvwVf0&ZFJAt5mBWYUYo0De4Ql2M z(I##M$y5=(ixgg3xJp|Xa!6fZQws~X8y?2zkEq}E+9Gk>Q*8ZGS(S5wuKjE@_ax5k z0d~%7=`K`WSWmjQo)3q~^$t^!XA8dyWnrQO7oF&VKR^$*1f7K^5Ihtb z@kg!-Z3O8>8H^Qq?y;k`a@pWUXPB33%GeK;zQD}bg$*0lUZNC%MSTQiqmp~{NBS2kA96X}NZg@%-0sQ`kmHYUH(mMhyk|2=*wE__MqjsUICewH)@#ACxA3GIw zr@ug z%oCq%V=pnnGpGP7v4YPdRJP|RJFm@|A7vciO-;J^`$H!-)OEmYDD5D zuORR;d7?ny&OM0ll(mMf`iJIgzVoZqdVz63gBS_m{`BUbgGRtHdumxRk1!OMi_7`$BjLUIiSv{3X#0}YU=0&U)y2?J{%x9S08KQk= zdy{hfv6jfvFc8EDm+aL7Yn~=NUe96B5(fzy7vWh#aiF|F`ij}-Ju!=d;hMG zR3jg4n52^oZUW{Mn!V~->uIs6N*JRjmTZ!|bKC)T#=wWGY@~NB;o`M)JK#mKN2GWU zD7-lak!48E%&`{fmN;8RWDFxy3?oS+V79pe3hAf0lfr=j!`DMYcoSe=l7I$@0xK&p z`^#hNy&`(464|ORfaX3g7JfDg9Qnlqo7c|u^5EjxZ(=}86|Fx&LYV+nLnkgR4g&fw z*x&zIve3@}Ms}?X{}=L9l38mkEg0W4E9tZATz!>&-)9BQVAx^`)veuz6ldFTb+COx zLy=lIVIyyo()YB)rKpd)meVjEa9zA&DnLbP;+V>H-+(F?8O0c;7g6I?n#!w6m(K+w(4=}kq0 zv4}W@WpimioO6IVdxI&1dfE7yw1 zDF=n7ZyBTwiqH+o+4{ithuP%?B0Gd$qNT@L|zL z_W94HOeRn9$t)$aV@OI7sY~8;C3rS1IB82CKCQ3jcZ&@vX~;|t!?Fsq6D8H>16_~m zZ1h(SW#-X#-cAOZqj6I4abrr#r5ysvn%!G!Y3fZCK@YN64)bOy{5_a%F;Vng5HA%` zv=k*=aH<{VD20uPUDoYRFoHJDf)kjP#?T8hg@Rs|P|w4ZyHO5)fCwp0661C`qctaW zD<44LCHj z2D_fWuw$}JUQuQnzB^IJ#*s7jiwg4P6O0T|b=ENVz)B+G&#^@}OzZg;#DjE$1Ldrj z;~O}lPLSPSqJdJPZ=*l)eHHyW4x-MOe^A|yz>Gn~${kg+Q9kS~E2j$uWM>2dE#B#wcyW1hUhHS_# zrUDO!_~-;Doa=-_vsTUCQcgTdO8HD7B>vvE*&l%aW9ZHWOW{_S<6%!9e6SXI)=Jj! zT>)JAFSu$dMxnHUYmqOg-xuYkqvYkPgLhrz+|IR=Xo9q;O{%Fp`ziHS=xk7$y-pDX z`PGu~#^$oD-^M!g3l^^tbOF|iHxoLXh5I6yjb?HLu$3BZChcAheCGEpe1{duUWmBzPL*9rG!X=_!}vhC?_rYSX(hZ| zHm@6R-aY4+C?nl4Fz}wFUvn0?=MV(4PSUqhHl$g6H{N3udG3$2jEVBrhXH0FTv$N6 z?wl(VJQ%4pb@x1kh2vIuwaSoXlrmDB4^-xtO#bTP3(8M|jD)`qI~hrE5##Idbq2K^ zQNSQae-HnE$Lse8;5`HSoOB6h>S&1{WMwDZrU`yBWk5MZ&N;) z5gygR2(284p+@r-i_R%|MYi*^I;~b?2n;^9V(l1D=9Sy?ij)s(YxM&SqU&M^NRq4E zqhT_Pn9BApCNXhUCl8RmzFbvAJP>t37#FU@-kGFFl@oA60*MB?fz~loLQTaAWL%18 zJH9SxcT67h$waWgHIVevyxmi{VxnZIxLxe}z9vM{gdkFd@ow$3c7u%)g~5a`{c&pU zzc7rzQc7!4eu1HW^l3SeD#TG$5oMi`VO$q`M}0~KJXHQ#Jd3`Totqa$Nsp)?N(t2q~O2PdrxKrp!jo3?IgM%~@T3uFfJ3cF%E|w?TIt zuWC!Rllo;AhUQF6HIG^iSg}?HwSgPu-c|Dz3OE-!Dk2Kz-7fL;>v32wTyBvioaTKgt*DC4s;+$hjQo&Y5+^Mm*Wf=!Tlg>6 zm15IW!i<>*QHW`*dHslU_libE6a36gY0ESl&iALWuY6VPh-($?F5yl&RRE8c5xVR8 z@l#e9CbBa(|Jt7VcDBJ)<2SNyq3oUbIHC@v1Vc+Rn7FmJeR`8&mkW84VDz=>by48c z>a3SxP^zJg7}g$QEQ{H^xXA?;vK5Lz6E7lB9}Z6il~>UTPaQ|CD;!Mity48rsi;f+ z_$aF#yB_K`k58^CP2@yP4ZbzXN5>f!5f;7J(VkG=(dUaPOO*^ILbAUUnySjLUGEmjg^WR>(s{Gj-3HJ)h{)TQ4{n!`3>Fax%^2D$Y( z8Vk!zeEHXX-|xSHu_~{f zN45bl8lFTGM>oG3|J?|0rl#4vwg(4!e=ZdF!OPRL_&Pnf(MvKkC)j4F^A^F1<+Z|GpJ@MiWiO9$EFc!qUW zL4GA8>8;ucuSE)EP3wiyIi@e)-45uFBnB62>>x>J=7+@M9 zm{AKO?ZaPpX_>qF77dlH%biXgMXYgnr0p{x8*Btwo9x3 z8A+NIJQh6Megf73OIMec%?aR=o3`4{46UVVF9A#rb9z47;2~-gnRK_T)=gTaA>DxOIQeHX~B`8ftUTEi%ozXT2Kv$y`pHugeE;BsIjmf3)zmAgUUy`c{ zo78r*PLJaL(2)&ks}{WX+U<@Wp^9jrT7!FZ&|vat;iZv(qNto9VGk+)(W}Ya)Q8%# z+(&{#ufDt_H?xVaJtei60Gq~hr_iOOm5PrV+AQ@T3c2pcVkE&=Zmnl@u(d= z+KmiRBIVyx1Zy*+5kkOxO_R(<;a<*c2UvC?DqPGm?}9J;2GWegxP7uX{Rs;yyl_W7*K6O{`(IR@@yN}wgaIvRnH-kNb-T<@rWbpaN z2B%uKUcu6SVx-}?9%SK02Dyj)tBY`t{=!x}rqO~&RMR;36iCv*A|)+^+5b`Eo2K^q z3ev)k60k+arR~AX7A~vNpCHm3}P2HV|)&lir8r zR;kZunK!8c>O6hv&NrhUVEWbg>vQJ7dlmpR&U zXqv9?QEC0&R%1&>7||_I2KgO^L@w4_Vac*S^X;n&HNLBY1PO>wzOf1#W5edPLbi4j zOq?0f%^G1MoGvH8r#TZ;4@LHQq&$Z9=hPaRph5f@BN-z#2jHjquX(F56_m>B>W=`A zzp*+-Hs*I*{0-8*tU#Ku8EkXG8PHW4!JuZ|(r>=czfZeCjKu1-jX}E-RZ0EQ(2x$R zhczDow5f&I!Dr)6w0#NXV#`KT)OqvuZdFrb4P*Iw^#0SC_U~o7FFe%GwhdS2e4kW= zL9{I~i=4lERWi8LX1@~1#hIJ;%qcYW;EA`PZgTi|JWXxr_mLXqI~VidS!LFUgkU<^ zO4UnL5w_FwBKfDAs}DHyBqlT->56(ge?p1D6+?PFBtUYJeI$|jM!}TC?Ie~qib{ar zM`};~ly5R;BEIVAO}p7Kf?!L`D>Bi&(?Z-{&EdOj=(NR#Y+y>pC$gT>WMF0QY-V7# zA=}cdWYw96Hg13RI^MFQCV7Nnm9a;ngvNlZCCKZtC2zxJv+VqTv-RS_-6Qxd_Z zFKawaQI0Vwpl0B?$xzmU+h7A$123`E*Hs_>M8Kt(URPah|E~AKs%6bLS`%zKtKT>V zmYWM4+$a~!km_4!i1eK+SyS074RnG$<*xCt9i(Ro!EHJe^)Staau=a403c$3l`)JK_s3r^>+h-c66{)~q2#h(s1UpRdY! zr093E`N%lg5cgrCF#<~!tlPab=Pq?hZ^F)Xtdq3CIMuv*e1ksvOtD)tgwucSuzuQ4|J~>R+U^UWDCPXR zU3SHO#Y~;$rO(Si=tFnRS!y?8LXifdG@{L=4`4Ab7@Vo$>w_O`JyYIX&&lcN1u zLENm8|JqXCn_&`tU!3B4X=-wA5c6dsC>K(&l=f9eSHhav<}(A6(P216Y_A{>V(NX3 zVDPt%pfTg>@@GzrFNpB;?RnmHT)%7NznKiJ3b@}e!d6ooCt&~TQO|Og+vyq|qHmO) za(k9``@>|}V^~E*PXaYf%7W|82@xp!uJB!=)xnW=<2;Y0jX$l@aUa4N2~Q*4dGP@3XcLqA_ewKI8w`x@gRENi@gkuOotI;MEo z2ie3;Oo*q<`+R+U{f1wkBD}JUm&<-LT=u}EI)Pfbpr@GF#$?@d7YH%B?laq;*GA8L zoG@b$IZoJ?hd$&vO!m#uOfjZLi={XV|2~oYelAniBX_$ItXFDDgIp}dhP5)ARW+fq zft1v=3I?bYVW*$~_|v+_Si~=_zffd4DYxgY=rp(|^?GD234Z=K#`$qMb!a7KYg^UJ zpq|%|O*}GzOgxi#ej{mq((ux~bKiy;>oawIOyBzBh#8bHemg0}ZBxy7EzTLiyura) zo!6u%$9U}stvl~gR@55q#BDHl9EJ>1P3k{&_udavSfsnwcs0pd`3*?-V6`+dl0XSz z1#KM{jBJ0EfIMtY6Oce!HH-apWowV0t1z_~zITK$tGh9AqC5BI)4M%WMKEwGWng`~o zbPmpTCi902dQxes#tkIc`0-+U_)w7Y$S->Hr?kFW2Kc;w*MT8T-%jauj>&2VO9TPf z#>DkmW>Cuhvb_7@`Db|sDbZ;^v5$KHd?Z0n?apRr)HG#y$=qaa@~2B$q9y3rNb>W>SEMGB-p;^{KA2`%Xnp zjKj`?(KG1*s;(ISIRGpBZY8qk0tdku_Qj6gmHI8ub&DeDUF})k+W3A(XlB^h!s97J zhAxotmftR)NQwkGlkEXWDiWIg&tmi|A4z`ajua;*LEsYf0zk#x%}35mVv7CE@YFmHkRY#}H6 zTpzNg^={f8=h?8L0!lbI=}l$ag+y(YFHbK8h(&amda`VNWXsoyn3#8J-(@sTgNXy@ z^R`E5!dTxr`u z6;g4|eIe`>?|Li)3Y@fTx#{xSO__HQT#cCCwcpl=;P2ZSl&lVO!|AP*jY7v1AaM{4 z)v8QFcU^TerI5{zL7lD|orpjdz2K}SYV@xYAJZv*stZ74REP2FJ4~qY;hmEz?y~J1 zvL?jhHPNAgfMdCgS-d{&(jeyW}!iP=-f5; z>|5>pLc25Kx)9EXESTNzDqx(w#2;c8lnB!GA5c8;-DbC>F@GYFuLEqiG}z=E=|Wd) z(fnx06CRMf7s7OfHokdaZ6#Qv;c!*T&5nXFkv2kvn2!O5W}zeD^E6o<`}E#q6fH-G z$Dl=Wg$f-C_f=E$*L=BpJ=T8t!Vu}kB$3$|h<*=}EA#8)E+lvt-dGbQmC;Y*?I$%xuh75{F%v|_6RFzQ3d>lyxeyyB_s-M(&q1o6D0|jJ zXW$0@U(xT+M_J-KhZInMxw~NHs*RR#>hl zqDI^E=c`N1`PGDBfdiB(zZE~%N?bILV$9q4#MGC+k&i;`(C@UTHX*qX+7Ug!l=T7k zqi3M+oI%>AJZceJ)m~}0pD%j*Y}#%Hj6K3%U_f7p->xyZ$4Djr6LZs zfUlkp5oSh6Qkmmwf8o1!&O$8Wk}392aIRM1mx(DRW_lFCeGVJ4XqjZv8KRC&ZYvsk z2?>uc#$@$I8yr8aFLW7e{XnJNZ>xh$&QL1gaTDa6V(x*LNf(cFUS%C-6r`m#?k0%S zO5;M8O&JGs+Ix0dbGR@d-N7=clG1%C+NF8Npa)Cg)w;`DplWaKXKD$BZi}sxLyg5u zz421A*~$#LQ!mYei;Z-%U7igI0OSb7@(ney#YR<+6G~P;w`s||6bnh65whh_$O}z^ z$PR5wzfBSb2YB|W`t!A}W4%ym<#gdb8b-GclfVGTs>o6-5j(icl_6NmJuJ?~nl}2vo2xXC2di#o$Wl2-p03t5pTYWwm4(xC@PxJ~ z?r2U{#qnK;zam@9_G?RL3UwNFGy;00=L+q!DH60eRSenYsxorvNtv_5*z>w?p3c=L z$no|FsM;1rPGfDF*A=HuU2tz}u)3+xghn18DBia)avxPSa+vjs_OxLRnUXNB!LFa@ zPX!&HKhJSRJmI=uSzIui9XbfB7~_1s$3YlTOz;S;*j4H3&N45^m6KxNla}61L2odRt?gN}Oi7nq$4-LSQZ!o8+fOGxq_H4&JA z%^^G!NZA;#0sU4TQ^WNjrV8i#!xEgeFTKjw6_$a`+ST@SCK5N2w^uyRy`8-ppTy(6@ z?V#Tr5-z!t_ylI0pH6o2Z0sbIrcF14v7NY3XXT~-noWFI%{s~Y7+&4uK`)yFIf;BX z86b%)g6=cUdx7sBr!e5jBIPkFZib9Q8VsHZqP{t)Cw z4z@fk)=<9DyQLZT4E9brUbDH$EUBKXGix|3r<>)zn!c)X90ajHzq|&(5Xd(fMhZ%Q z?Wgk)EIE|Ek@YzcffK4aH*1%w(UZx(K7cSvZ`fsUvF~H_wsmP!r}y z*7P3A$yQlf&3KcMgtk@178H{W9b_0v&WOQnF4=R4{C)+{svpso%ov%G1crH!bND4+ zFXL^cS{w%B*@!5l&clzVdwIzhXA!862hC=;N9TrZsC9LQn0+;|B?-c*NqvS%91?4} zvQ*~V1r8P->7y7B=x-eZrewY&JHQ@~r={EZbkFSK1sOlKAxrm}(xqC=q;;CQ_Dc`G zNgGZ{1C2KJkdSK0i!L?|*lDnUTBV$m+1R&)$QP!xz9@X_X9efiNZey{f-WwuRR#v) zeQIL6jr`=pi#`;>l!oRu?BZFUXi_%>zKFd?skP=i<(zxyyz5xY-Vs_hJroux9fS%; ztS_;aFcZs|5o10LCbX$0Ut%O<8xp-8d}J<8K;v6tz2Tq9h7=j|L1o)6`OZNUm-9{; zu3bpm5VSzu=${oLDPz=v66MM_yrO=F-k;T2RR(zHcKrCIOAhC%NYs2imd9oc$~ zR%ROuulP9zieDWy;f#legVx$!(O|LGjS8#eoF22sg zv#)r&-XYrege-N*U*@jTeHM~cIwxsuQg_3LNr>~^>usv&GMV`#5gun&&_*iZq;m=p zA^Rw{yS0$(@)lGNKBysQCp2(U@x-m~K!avEgapJk2r?cl(FJP_RX=-BAGQPemZ?tf zLa#r){vAt9d@nwyRhN0q!_T>DSL+RD1dk*_EqRITXqr@2iuH?%^xRmJMW`Qf9tc;c zP8l%M1%z?c)Ym3=vkw$)*rT12AatS+V8Apq8po;bZ)&RQ4!PyO z*}W2!V+f?ap#m4>a3rtM@xtoE`*DTN1MZ)m^i1Kip?`S5AlbsW#!DA+k>6bY1Qw~2 zu*ps%EVo`vt9SlU$dgT!a8|h9&fAHoANz_!QpYMtY{M`DoweP_g)BA`8EWo8AM}Jn zT8x6L;S(lGzTz_`$5w+rs`@%s3Q7v+`#A27!=z;vSL=_XICexy&QhB>%rB}n-bf|b zkgZu1^wOA)Ry)CZaNjyT6rbIoXbzhR84)b45coLu1v{56wbAujwKqfiAfY%X6_y>) z^VEd!LGs!LVzXDp9)yhE_;;oo zlstB-tCNRa;ZL)<8f(R!Ul2X1P4XI%5k!D#FmnL=Z zZ?nLFbC;B>y#YnU^>&8N*caWSF6wFo=gC8C!;s<`kybRPW5` zUwf=ZphJ+AknR~&Gn`QUv0JujmR}CCq2T7i!H5#3u205IiWY&gmpl=m5Ht4)SX@dF z0~R*lCxsJqaj%j4gEY%yhD~vDq_bJR#0MXc=T<7H?L(-(mIX~dT+}f{wCfe>;pD>Zo_1=^qY{HNhv^&d6Fy+5#tUk&ozlzkFA zY~bm-Bl=`ii`%`ASab1+CggMCi)XK>Ave=oBDq54%1xyhO0p;Ig3JW!(<@^7-JmeL zsfiGmPLSEC>QKh})kQ>%RI9xP7L5%cbBIUeqs3b%>mjA5q3eWKxUJSgdG{>+i8a>CqD_vaZ3F35(#wypN04#~=DiDT((@o^SnLOuCjC8S zUlCB|MUm0HMAEiYwbd~SXacLa@=|gL(2#{V(zfo*5DPP+Ijz4SMe%NkM^V+06|_@D zNoU3q(u9&~f5c$Nn#^;3Z%#R4V-z^chexFrv+TET(FiYpnnd!PwoZ^%#UY`swzqY* z2B7B!nf2$+C@{)#WnoMAS0-d4MQ+Q>GOuXiiQ&Bc=FE7X5Pcgfx6)(~%Eb0&^PWjn ztf6ML1ErN!caFm~5oQUEdy%?>wq!74jQW$0ULV$Tcu`0lMDbI*hU8*vJv51&x@gQ= z--acR!v~SuQeS$=9Ws8^uX0E$b{jOgj8YGl4=E~tNwmsk@*(0z&K{X>N9*E{gkKeT zaZlxOuWK;1^jM(XJd5PMCp}_rM!vZ@_UsdkYI|xnzB(2iXE=*!Q9=bQaRHjwJn=67 zZRE5k^dv%q^llL3=%~(A2auAl=$A#U&UV~SHHkr9zGsWINMR44<9QmW2vvYtep zl+hlT0r)iNyXi>Ift?E@k_GB@+hUiIE9PetRQ|LiAt4KRWS(%g<@v`T`q9$z{?9UL z#h_NQ7zD5XhBE`X$gFrMFFon-5uXUK5hxO9wAUszF{9OEpNF&{Vl>kWx=(gEbURo_ zzqAiy$7B=5_|t$^sb&Buf5{~R+yIIO0@D{kz>G62S=`4u8MLKFkFgPD>T{b(^LdQS zUy~eH?pw-nD(0DINw@OepGMQ7kQT(X%yF9I2qlk& z?t~cAU8$mFEZumrn31~{+V9VWc^)ZeEetY@Dh9bU_MN+T@VGo~gKYT>e3S;Ofn+ns zk?w5ml=XJwu01=mI06PIQo)aq5!OnC&-{(Ibobm1q`dF%t4nXBqV|ArXL(2>Yp$_g zXb4J~p5G+N*$O*{84|+xe9+Q{pxX|avJlxtQuU?RkS@1xDYnQUvgXL!0+@XqnP*pi z?yiO{r^>wS?&FVW86A=$c=O&wxu$mJcFJ*#?Wz?;m0YdM%~R#?Y2-#gV)1p8`pMYMdr<>;T_T9Ig6+BgmSMEP7DY) z^ya>1p~%|^YOofK@Vd_NzFk7WeF$5f`Gihs!*Be-u+;jjZ&oIE*40YvY)lMh?9 z1Y2i?YSHPQFa>yX7F@hC-|>%7@IP(4|L*U9?$SWVLGowvM92}%W?oY#pcJM4Ua+NH z@urOYW~I3;`bNDU?w)pYzO*9IlGGP(JaW+VIUKxLTE^-0;Sto;b3b$^WwL5KZe~=Ve=)EstTK`Xb*8$Yj z)~ypd3JM5F2MJw3>D|DU8YxmjN0BDIN(l;~C~6EPG(j-|Ls6zrhtv$NOcu=lsVwZ2@eU@TrU0WIQv;yieN*K|;S zo(WU=y(E}as1hbL;!Wi0-4c37e)SdKz8zrt0wCzf`~ZJ&~(9;i8Ckw z9Tz5L;ZlWib&7pRrX|)Aq6opd^De0v?JP_lbpzOh{b5G%#p_r;#V{>@L`1@0TlRn$ zsN|=!Hh_QhOJ}MoQ53e>FqTXHzGCP8YVvDqHraNjFJr9)ft)TGQQq^=<`7c&(|m)R z#!~*fNe(tUlzP0%jt#tBEH@T{aO+2j{q%scVVHJ5-r*u~FZPfb-0Ofgek7yL9=c%> zY<|w!!)qoi3s#=1UchUptBPyRp9~3H&Z%)-VU?}cG~r-)SEs|~xvEGqugnT##W_m! z4-d1wKmA+{#6$YvVbcw>y0*U2k78GHInDX#f?|8)uCJ@QjwGtgeW3Psne&voK&-`a z2;HYrtW?tCX8!!A9egcQ%T10uH44Y*s|AuWVmwK!y4+{4sC2nq4{@lz^Vz5#^$}n+ zxof^IN2ChW+{wO{qQNH+e_4b~!lYwm31ILu)WQ-AlELa3FP!X0|p;l&0MxflQ~E z9>j_n*G5Y&GX)7pVLTgmorq3l>vFp1RNoO5FA3W}P(9?RWXgWyEZy=`|nmDB+R1qG%{oLzoZzNm8&+A{B@5lWg6KYSsTYr@|Q!&7WkZ{I^KL56XMRBapSI4BWfo>?I`@NgXG`u=9SNJ8Gy!pKNAVb+?!4CBQ9s``dLFP<#(OS*GI>CYR8>ZE%BUYj)@3f+hcec z2lPo;W}pXr&t+;sfl)(DU1)xLxv(t3Le+4@X7na#7 zXj6t_D3G+!X0_*C&#b2p9Ff3ZJu~oJEjYk?0MAv{8$;~dYzNZdGlt4eH}Y%Ar6d*X5Em?Y zrEF81rbl@P9#i&WhLkD5m$<4RJb0GETFS*W{krdbPzWGHD6^9bo%coI9ECc_?$QscDJJdRMAQ?7>>nTC{5vz*+rt7bbk zJu{AzD$8(G>OQURe2{zYj6h0?!YsMcoZAE8^Z<^xb%Xwi!>!UDZeC1mTYQa+9o=S$ z-PX(OAn@Ah{4>;Rz_rDKxYGNM5tl zfImS$L7L|MNpsb}jc)foodm9&*qUqj(U!b!$`0 z(PM${Ag^;$Ywh+I!i{{T;t932qGKn_y#U?aGP(1W*SkGd`=%seD~3AU%KggCoUU@E z7oG@o`v$l9Rlx3yfVz0n_`dE~TrYL}fSH<#AJ# z^`Q)6;4BBic$qWOn|7%`FuU}{x?taHqPwMrgU0%)+sFj_*{nr77G~sC+)iYN&5-V+ zGKt}Oi_^KT`*ptUjab?Qy2v;hq1sMsk$HP26rjB%0%VH*mxiq|3Ir4N1IVCh4FpM_ z&5mJjqnl-?j)&Qd^B^{c zB%YSN&{iLXwJ(ySRGH8ChZ(`(blm$gQ)46$uF;*& zJ?oDOCTCKaRnE_PqG`GYFTjE3uFZVr*O!h z+-g|CoAKHb6KOsxP!wi=InK%I8OR6DxVe$nUFf!|LAPed7iX{UDIGjbMeSpRw{g9f?QMZ16{YnqA!ZmcTf7u#e?pqT}SWm zt3?WigFw~H`V1W~qsB}YI`x>Yu;WcM-Sj}*L-JtzO&`GT+*Hs9z?DYXAI%z7J!zyD zhmlUCL*yVES#y-G$zcWD+Hd-2s|&7JBLk6QB|zDi@1P%bUm`d^=WU-}!*?A?78w>J ztzK2%g|D45yF`=P-<7Iq-(APH(~tx5LAV{X>_1y0?mgIn(<>MwiV9g5|$kSYup@hCD-|JWt~*q*wxO0`R%U@462xHOmYBc z_JbI6ZjHhrf!7~=e5}t7lvh?IH$LEUw@PyqNTo(^F@r09>6+Er0$Ta;oXiEAp}Hhua77sUL3Yb5d{6D&Jk{n^h1iNmID$_@W^Ki-GOfQ z1NTGk`zcwe=73v!hYjnw;>IIqa?3y9qdKRoNVQ2_8NXrl7?_ruKT(~0XBdDB1r7iB zxyChja)EhpO1>iU}CTWFHg#{{l3)L2w90JE zP$OO%%R(3eb*!etnFK3s7QZegqfq}v^Fsq-7yVl%>%4RU6TXvG{q`R>)aJ-9{@OZo z(96XwGH!~IOURedR<7#!?Jly1#ijY%)i*Om^{dZ8&r{ULXxbqZy_E41(CUU1o*zR7 zOw!4J&mmYVIV|4@$SyDB_cP}Gw)=1anouB0h&biUyemR3i4rM1c1$c|?3;Utg z5SL=dN_57F3$HgJ6QgYk$%Jc>p#3}$HUb+Bgg=?#H=Z04Wlgl1`R~#d+VIU*Dt}$k z^Fey}e>#&a!iv}pBI8l znycStsE@j^T}6nHJG%e-!6N7SK5ws&25X8xct17yRlDM%*+x`2Pt^{mSX_WJ?gVX@ z)GT_ts8)oWe~q&s%u9|&;?X>P%^eIoJbAet;zv%MRoDOs-{Q1RdJ1NA`JIVTAou=g z2v+2BsjYR>axoXndAOXY#0vw>2oZd8;+MiNiN|~`rmr{k^vwxc{Wu-WzWD7!4$(<| z>nuxl>AjWu9ahA}%JcqjNwY}{20nei_0r`Mzwj+$ScyZNDC(5J6N>X(|QNiBAC2YC# zsi7Ix&L1)sMK#>{W1XCoZZQO5_7z9BYl=}QWlKp5;?oe>E=y-lr#NPF_V+X(j+9-~ z`FMl6NQ$dpw|}oI(vylTGvd0VX9CLz1fcmGg9E%f^fUg)9x0;2N?}(#G%kB>tkBDQ zAeRftRQZME*JAS%@rnHv{`viYT+zydc1!eDmtL{gfNuJeG-~r!&b+J1PC&eeTWDrt z(nv4+K6YYC&*^N&dHVy!?;uzBchC`L3qTI|6&TgQ{=Fzu1>4mBcrhU){ZY7sxU2 z+E2&3IA46PVHy>>OB63hEES78BOC)xW)K-MsR_}I8;cf4lmX~0@cV&q$}xZk@TU#R zp-NG8^E}?FZ}HMro_4RO0pvG0!(w4f9GRGynYnat>e{WU%cbVd)L?acDj+c!*ju`d zAbYfb$Mk-&J*nt3PAk9V=tDrDZklmQ@MEpI)R9=Zs>jc5?Z#~FD)Q6CN5+|? z---%97YMMvIsyPzeGMz4$UD4$nV`#c#B;oc#LW9o{k%bsgfS_C&C}1=8&#(YM(4J- zM#3_5CG;yF8i;}3NC&yaW+s_+v{{L{>&+biOkaythUq_Yxy#GdtD zw-fy4CXMwUs^KY32e^)~;JqHxd28rj9r?9S8gl5R=M`h&mrj`f{;Li4Mm_&!iu`@L z)QaV8J;~eO@Hs+ib^bB|h$A2OZ@HD?)lr_fwnNb5Cv|%0*UcmHrnza3*?n}P>}^NC zb{4PS^BG&KD^UyQlSG}V`KTbc<}5GizNfnHyeeeM5wWeI+j*0)RjUs1kO@2*9albD z2GB?srOYkVhm2#oK%qcz%ifr-*3U=IA;mHFjcAkXE=#-$crIbo&v z_N%He{?VCRHLU>|*E2VsHcK|Z@}biUyt@kxyA1gj938q#xQ@28cWmB0uij^SUt`QSwViu&5V=1Po{~wr!0mBf4e-1fKC9J zs|FzJ2{oNr+pfjIKAQUZ^0^T+3%JxfLz?MK{;C2c*-@Ni??=Vc86Gpa!{N!$eaet{??X;f2u(`_r&%Chs0j?* zsMfO~3w{PyUNZe=LV2{xwW7Zn$ZW$ntvF{#d#DKy{2<5B_HIv7fs0a`1cU_3!M%WD zXUR{&Px#$~lHh|O=t?vo!Qg2}qJMD%+8Fj~jy%BOXniR!46L0Cp-VR#mVsh8w|IdH zs#jL_ULYr__g(-0EC17R0aR80KDyanS2m{IM`t1VRfY$1f#$@YL-8`nqie@G*c2Fc%m^1EAo8!1$os4&V{ek~>I${c_pg7YGH6dIt?10}~4y zIiThqfC2)8QBc8m?w}$a0rEzE51``TA)w|EN4u}`3Z2H0kkdal3xigoqV0j|=pls5 z$SD95i-?$n^da42dIm-&ZXRAfeyD)tQz>Z~Svh$%bq!4|Z5>@>6H_yD3rj0!7gslT z5141*o1oy3(6DfLTzo=e(!1o857{}ndHDr}MU_?6HMMp14UJ#gJ370%dwToE#wRAH zre|gmE30ek8=G5Sw|9t$_4W~Z_p+sy}MH?n9m+IjIBd1X;A_(^i-O(@8{<7@rOCBNE04H5Uv~tLmRm`RD zS;R24Z`HjYJvPSZwL5zGD&_b3_14nRK8PMbqfs3-U0`+x4=W*;afnM_7-R{zp|=Ee0sx? z-Fyo$=fA60^?9)cxKLaRj^#t$#;P~E0~Fr7d3D@P*w0}(3VBt7It}Cs}^>BQEj07*FdsAj^I&T z(yoIe7IgwU%(suZ7`DJHXlP1hOpXP*@zMnAP{Vpvxw-fAUWOA9Nq?Ll`EM7L@#t~c znVpa`__7p+1@3pb?RM?1r5Wdnqt)3>^>cT|H^Z5jXt^Fp)AEC9Gl$8|{GROn_Wrnu zWi}}%HN79IIpoIm(OE)P3Ikk?wkIp8U)r(yJH$^6ePUv8aKP|8R`<~wvJQb9WC#rO zn4_?M`qZ$WBulbX+=HP~Z=Duxd)OY5tn!@bAERA~aKIgaAw|bIiX8<>$}{bk9PwHR zZHk=rvnwW7P5XlH6aOb;$_o}1EYDm69wf?b98Ua4&K5{45y*fg9mUA$Mz>5M}Lb`;mx+HBM{%b&tly$sgi2Z1#3N+n<}oYGb^=2PwTRL zCWfKM)M^q;(sT9cr^(2jg?~ro--%f`S(+X8!o1DQ6`P>?O^^|0E9qJb31xNVHzIri zT747)jjl-+-a6?Xay*}SkYIAG0(ZsQO+&^}mdIFtqQ&%x4gJsYyp0v~EFYQW=b97d z9s@=M?u9Hf=zxt4(b+=uF(aQL%b%eBF+s;|8jfjrU+@F>ZarKI5<||XIQJ2~Wkt(X zVQKgBas3P#PVouvBq^0?6fQ9Q_|1N~_1#h%rQa_2cY13Gq-h>@Ob^7$F4xkq(gZ!~ zjNyMF0|B^{yj6z;gZ=ZaS08ACZUYPD=jZO z2(s(~M5G6DSMDS_DzMnI-z7MR+kh~wLFq{zP5IIPrk|V${k|VE(T2+vlGAhPmWIh} z)CAJxj5j|yANBZ2sZF-5>lzAFc4s(go26*E-FMUC_8AtvI{QUkH%!r0zu=zziz;q` z@Di^4?QN0ikM=AC*o?{1>%@;rUyR_t3O|OBJZ*GUNe@IR?1a!g?q4#`xbgansBVD= zGP7Gq1{?jwV7EZ0hM>3n{;|Yatz)WGeD|gtho%iV2Nq$331yD?114)CPNDFsI{$Mn16-w>;95Mf$2g~n_)+OjS1b!F&s$UJwdXd#ecEjYQew7mS2}*DTuyn?-i%)dRF1x zx(q-?gY*Jc1>b2}=sEF8M)8!F6G7-)KL7&GlrZruZUZKWzzb>K6}#W-n>ne z1~!gOk;*#RTQvT8&P>B7G+gno3Yhjelcx9e?W5?Jxvh%uA%gNj{PPYu>*=`Cz*m5! zFkzaR#l&}->xR4OUrfg`vYt%yrFUucQzR!JuE0GRRLaZ|u-hL3xA-0CLW@j{f7ltx z?Emvc#?k+{7uVk>M)trD-*CWdMcne#*ofb2Hs@nB!jOXnrBtB03SG|2ObPL!$ zN21^4YWx-m`;d*G&EL^b>58d3UYZJF^2)M|j#6a~xTH&xhZoQD_k*1;9<7XX5WvlHl z{bM;{%-mxnhxA@N`Ju8QdUYOm{POSvbAmQxe_u23Sum@_=Jz6@adzsyyFDoW5kDO> zy0RXsf1I0nYn`C8M|&LD?3LgTkeA713R~R*@ksVqRO;oJvUS!Sg=eyaD{!bgpe(A2lR(z(nb8 z0W2j}q?pxT0{s~8LSSgZM|rj>I5I?&q|hEx(L{^-v1gxQ1W&uP*P?AI>{UKi41pdk zo~}Lc>hrxgpkHrUk@>BWA63*ssY?d+re!h>RnLN6c!dz7BeXuc9Zw?^SvWt1IfP;M+Pw(C0a5D#U@m zXYE)x2*OMq-$l(KAlHz?HiXgoRY`x1WG~{UM$4bbQ~vQzm}GL^Vke_^dBJSI`akrAayuzQ7jp^O5TBzule_J)X(pRB&A(j} z%nQUhEaT<`A(IR!_-Rva@A1~fIC1^S0lq9k!oM53_id@%vmEy=_p>NAqZ5L)VUjmN z8@%|Di|?UV-=0aYo9N3S5u*=2~7RikLlhgDI@eaWvwylY+ z!}G!joKCs)XN5g0KI!o=`!w$l&#sBD7|_bpyy+df5hh{-n__A9nr1d$hIKEG*$g0K z5}J#$qrwg~o3t30MFeYmz`QtT7=@GZ;^M{Q+5#&>8SQ44TLv{M9wK7P6k1=DaMk|q9n^55tjXIbnTkvM_nJ3;}!%yd5j zS@1VS_=4T{1phFyY*lv0o;LF3bIOD#zY(4BFmz3wf)L<;e6xn;0 z!L3&-A|@Q2wc2&%J=*IL(FZ;x1#xl>!TisNZ-LLU5sJrM`kZm;XuAP|Cg}p3HJ~0; z^1zXB2JmA86k3!{@=VwZt%Of}fQo!%J1rC)QC(tq$@)Pu)L(zA@A=!_VKDup_i|Ez zYUB7u{e;L!-3xu&dyxV8LjdG`c}5ZxST^4v4`+3`Fr2v4ZUBodk*34RfRduxy}p`h z1JjCftWP2sP@YfX6zDYf^bp|nL`%w-mA@|`Lq|vF=dK1i;-Ls}EeiG1LdK{tnw3dy zuZZ#2aFO*&hVMhZ=@uxuOi%t>^Z|+CZ~r3?{^EQ;x(``1bG6r5$I$Nn8^X_j(EooN z|KWc_K_;d}!5^6Zi^2Y{b@}gQ%d=CFh4g+EdEqPn@{etRf|S%h;K*TU^|K>4_dkbS zGoV=g-+JKpud2fAZvjz)Uj+fg^8holTQBUdlJ=j!Dxs28+8#B(hom7CE}XX^!u4~1 zjVJz{90f$0v>LLd2sP6Dr3jVp2o9ef`hL0vDr;1bOCT}A2baj^V0Y5< z_oC4AloxX(>%mZE*^ZJBaN!v=XL2(5eR97UM@ef(=N5Wx>!WYsyIb~`BA;hV1z8nW zb>jFejs;}R{o_GaVr%^C&fU;q6}>k-6~vF{rTG^&4+T9{J2wZKK3ocxIVQx%UKNH} zIQt?_ZUN(q76cY0w6>oS&cZ(jr?G8Pvdb2h`D8oaZ~HiEe4)E>rgKw3Hf@b`-Sbj? zn&3J?eZJQktD=?jdG-D6o)56kgH?M3x}BR8g`d5fqBDEeNABFES-i_OD%26RsL;R% zvtrK*U6C2V>qect%iMqIoe@{J*O0VVfB9qU;1+1Dh&bEsbV)ZDKBqxW_(G6PUjba& zE5x62Hct$@>v2EBImsa4>_h#gw`iCi9%NJ-mTqGvtL0@H5bY^0TF_|13sgZr*5_eRUbi^^n19g)sc`@+KMV18`fxZ=i zU)NCuM}4FUtxA=pVGg;ukhgHtq;~mc^s~D9@OAxX+_NSp@6ZgF^GU%KI|4_;JfmS% z)@NCC<+DdkgC{r7Jhw=4F2#<=lmy26V@%10S3(N-H&fgUO%!;u>>b&@t z3#`?U#*}V-ZoKT7 zW-qDeWcE(0ObUx%@zFOY`38564c`Xhm;FJ#R6gI2y#>4;+BlJFm)P6vqRHx1%4|!3 znKn0nj_nAF@(-MgVdQZ5SNLE2#4%*-8O~LESaW{$jI`{P4o#HvnN$B~&ir+1$29z2 zNQ@Il_}9$Xvg{MqMTB}US$3+!aGqG9P;th^7V-6!=+$$;%u0^Q!|A&cM~b99HH-R_ z!*qb6Wtb^V9mpMcwJZRNXm?Dy!gEe}z`LyHQi9{;x z#Hq%2YkS2+jN}!M=F*&?nF8e3K`Q~H)WnvSR@3*v&Xh|mE=&d5_lV=B8)KNhSWS!g zq?xCI*nxJ+QCfHhI#au#>{bBAR;kMijp3`4w>LMBZXQQ7ZQZ~+ZvkJtTj0JJ=|kbm z`In30tUd2z_9^w4rQg>3@sr+-%BmUC5a{xjQ?iD(&1xTX(3X zw4sme&5?*-K_cGj2}fnScdf=3zJo@NF3?(G&)U2)8ncx%g={y)F?Yb%r>qiX&&)~f zU!W;^I%?2Oc^!Sp$@{%>mY^F93 z7lU$?L4+5b>JNJVApkn(Cy=s@jLp8(-$u(MINt(7tA7J7Q$aGlHu-9HOs`6?ER(oD z&XS{02)|2OMk$|AvPi#rjaWkNUEkwcM9bF|@wV;sOkC%*BLlqukdfWjfNc65eV5vA zfsWC!_HWM2@+o^|ZU*|WxxMUEGL#@ASt{c?aG6!q57wG(-8(g(>J!o;>ra*qLjrGx zk^OR1&FF=@==|>xL685@FUx-bVdZ|JLv(3_$1H>;h8Vmr_{v`y4Lwunw6{2K|0k== zrJ$Gm1woj+|GR)=Tr^I7>~UE+KERx82O!q(Ikfu+M&NfE$URFU5GO-ak1jV`^Xm9ylMzQ^D2>w$gC? z1T_dwO3jIC_I$X;9}8HEh{_hW&Oa{m-Aa3Tes~KUal^DkPlldc{_y>g0&KBuHC23? z5M4E9Zq#9km0oce;4|?~+6h{ed;5MwjzOXU5O3ztr2zp0tZ>4#wVSu&;tebrRo`i$PiT zRzlB6DwT6fx}R8+zBe!9b?@#*o`V>F7e||rukP2^e`Gy{C)0b-!e{fulOoOfpG+8s z3-|}rIn80LcxBsTCOV9lC?uL1K5&dMSwHLTCX6mqKzm1*zM`qaeVW2j(BB`JhI?JV zr&s6sy3VSY0fByX(%^A&ia@iHEzJvtgfqNS7ki)%Z3WjYWZ`tDpLw)Ym(ex41}r3U zYmYi{7Pu35V|$}Rhpil64hl`(IhCN*s|#Du;h>sJz;O&r4+PAGoC6KWhYmqoJk7A} z&o<`Y^F#MZPzVU{sKW3>f9#<^+kB3?vEVR-iqXx|S&0h+N4@vH_I$#&me=!Nyz#HJWH-IbBeA&SFZO5~I27GZ(O{lg zX$nzE_X=GOZIq~#^?61;L?--}NL4U=CU{5|Czyd+jn>`?BFb^Py(iH|*9>8CfEcs* zdWcc z^sZQA5w9a0Je_0Py$-FuPZJ*-$Qw5wkJ?QE0aVgs;c~rOP$8d&Qs@(-@NHX@`YMHB zDvXph9J%c-F3skqKb)j^K7pgcJ+1qiw@TIou9qK_RzMa@Q5D0#q4p?}$h~&dN}#kk z37_S_F+MU4&3=Jie6czgk)#6anzZAsOMGa@a$`J4rvvXwS?QSM-;x>M3&%yT=MGBK(?+J+?v3 zm5N8le*9n|_cfjoU-OI_>^NIc+TE=FH2=NhBej3?$fi9{YG`)2Oar^@x2+Nze2r|@ zRw!B6TyGc0{8Uv&wN+H>25TmjahCZ_CIfQ1RopV7&9_HMn$lA)$%E5yW(|Fj3ZSXNu?OwuSf zJE5I@u^-CWk+Be)E^UKpTx=gUJB|_i02cd zE7i9PB+zAIZCFm$Cmw0P@{OU+KdW9xNd`x~=;lu9&BcRRe~#E}6qFs1DM6Z_CjrN_VzNU=3SqJBGKaW1_Js80MwN3374fP+@o%eR^?DU zW8}Mri1~}ur#NHr8u;ieBvBZE?HaTTHfWdK4DThhwHcF%{90vF=4oOa9@pP+v;KEg z+DC_q6blj6a>@B(7jqq43WW}{~RA5lu=pUe08cDH^O;Lb-lBayIot|@y%ipb=D%%wM zBz;kB{flW@XY2I|EHd58c)W1POA~QX%G~u?JQkS$pq4QFEW%OIgWko&VwI^K6&8|z zeIg?U?T=P@I-vZ_!u5>1tosI2kkV}86mjaZI#yS+mRuemh zDbr#MD{cXUzZzNc?Uo7i>cu({&3;SM`HG0% znozZ2F){R`HNx3)yS;rLC~c#8ycAit-OQIlu(N-}vh&`zlqI+t&S*PJVlPX}&S+k{ z=!kJj(!X1X5wyEClN)_=os?PkS>TNqql7Vg*s(nzck{V?tMIAgl>=7O`UxB#)2PG9 zYTEiCMUJ@u$E)J(e`V)?v^1@?6Q=c}Z0LxGdhk^cQ@rWo3{a>HQfU%tCLixmlPX!1 zu`qh7AghI&bBOb<>#ohGl1joSIFM{R{f6b`i0dV1r9ZtK4z7kP>0b4vi(YxvyImtM zkG?`aHu1h=PEUp}%O_e$#UKswxl8eHT|Q!5)d+DiLgMD{cYjM+_z&%Vcb%#3?%;O~ zlTTKI3Hcm5PZV1$-W4%dicD%k@Oyfx4AUILCu1XrazJf*UQSyS*ezi68D`%l4WF01 zba$V`gv%=Hs-nrYQV6ElD7PeYJx$!`_c^i2c|Swp@hw6X{C=EmFF48KQAaTtLzyH{ z0_Amf1ZUhu3Ul7Eo#XVWG82ics}`IY5#f`gDqqW~ElbJ;Zj-p#cir zJ1u-7I^A}2e$zLh{ZZS*j0zZ#6aH*0M#Af4S@pxo%ffz-Dx56Oup{^>icxQDY+LJr zmd(Ml6pHl^US1ku$(s8ZCu9Kn5aH?f9Z%O%>Ovi!=(#&zcxoLt!3p$&zLXw?wq>sx zL!0k5fVw3_-vg%B(`O?&yp{d-v^l5$tX?8-VLJ_#goek54A?^k7^%J%{<)8x>9Cwvt~@m@T{h+Tb6jpV-Z^knC^BCCkRh?R|Oh zI&;~1Iu}4QzRt%n`$}!06Ir3G;3Q(ZxWI9sU-rJyz-d$xW3#T|og5xnk74J!-HMYk zo9~w<-9n;VQ`T>~-JHo?;w1bKSKvFu9h?i8dDz+Vu+@+mh^!K+u)C_qaM1RP>6Ix# zdr$MN>pm)d@Gb+LrFv{h(v$;xKH|eR{ux$NwM}(R1Z0+Q6|#7z5GwY)pW`TVmWehJ zl^vL7t>#8@>*o--1vvVR0-+p7W1W{|LGr^*sR6PG{f}*r7~-g$CvdGT%XBZF)x4wu zJ34c<6MhlORH;uUBtO(}LWe?}qpY9pxS_NzeCn{Y!5teuUjE*O9^>6Ok)(At5MuKJ7*wxYYC5V>POMV;c^^$ezK`eBL=3@S_&NmooqS3`SUJy3kzhB{LDRT1%BK z_>RCrU&s#3jQd9YNr7(eOtqyW^lPe;u<)l&?o-^5C;6~LD>oH(_qzI)bnTg2pr4o0 zs`45S)wi{1URnM%HTCft)7i}R7{!LywIY|^wwEoHL>%K1t#rMxwmIz%Z$@8sh+0*$ z!CD%j6x)zE7NILtNEIb2j`>o872Hxh-y|sFia@Qfyog z7&~xytePj|;|05Sy`rzzWjXD@Qj6vG#>u#=UJd?r;u99RDvP+=GdEEY20OXBGmNxqo`XTL9Kc+FGD+k)&pDUxSOs(JTz8v53)ubH3Acg zSavj^P>X)<&lc2cX)sYC4k>Blng-JFlwNgWU>YM=e+J1p1CDsR=O)QW4^AHp@2JTq z@`bS?HWzPzs=gwW=!IH65_Hr{Ejb!YS`$ctp*WL+%*dpmvw40uQ?V=;zZQ&-14d>+ zp8iSQv2_~}R8NXssQ=dFgohx})@AhVaVTcQWAR=xX+7pNWAGApf2r=aOTW&Na?}G> zHa!=|UIE50mG*aFB>c$kCwzyY6L4-!FFQLYf?t2^26sf+PJ9?z&)DZ*H;!OLFV|h* zV=o<>BL$M<8}psAfs6_DYGt%LdHK}Sc{T7ueIj%GPHbv*?Ab29!ZlJzfH(gG)qdR; zUUxoLXVl}|V)?Tu9Oh;?xgck=qnuq z0y*1IDF{lp13zU=0>$MEYd5d`xK~ZXLi1ry4y}q?^He1c$2jQnt%yjc_PYW}h5`q$ntf*~R?O6ApYL540?FXz& zzq#L(jwTDH_fN@pE_g%K$5TO(EklbvFa5e36=>*MdI9uyPc@P|hO;w(v7o00V(ky- zu^Ar@K6czddHN=u-4ho|;S=9mLsn5<(}Gy>S2cMWAfs^-&0#`!-MLs(E-3anWl42yqh4a_xhdNf+o}tvo`#S1=yECSOV(4J>3A4P3&6aUn zT7s8oI(F>SI7R954~Dn`vNuV3DUJ^Gs+G|hg})L%l-c{_&tQ>MNj8X>L#WnJ9y76;uwTs+3VhB?MfICk6pFR-y zXo~X*qbCzbk}Qd!4<=$RdTyIFEv4-`RF6 zI-WSk%|*E6TPBSyZr6oA$$@)_JvQZ#P405YRY&1p$B)g(b>W_R^^l7)oYR3zasod@ zqyRGRvYq`|mUWBTtnqn{Ob|UOR3(vQ-OIJWuzAAXXOQ3pOny{x(=?PQR;5*%l!O$O z@*Q-oR)A!|G|a%crj?c|FmTsXt+0YMLLoJbt@`{kv49gXZ_MWS*~+hnQak?|(Lie#e>;*xd&;vNDNy78Sh@+^$2vLA7Q>^lg{~ zQ|P{WQ0>O02T3N+Bj)sS5No^Hb8+s?>nyT&e%ldIRf)F3?sLQ6t#5b5)Yek1A#EM{ zrI$28PKc0%?sHmrD$bT^^W}?JXPall_vV^KY|hfUA$q|p{%Q9z*G&$+zhzg|S2u)y ziWuo9;b+B0BW*>VAy9YN(R9-7b*Ll^VAENbjsQ)IvXfGtvgQu(Il^M>5V#^1v$#HQ z!0NP5I^4%}Sa6bhZ9*I!H)&*-LFeuP`P6=-OY=KP*c8jbWH93|7;TGK0j+U!=n>AyqEr3(Q>vX@)4~e`G2$KB+(zFz1BFk5P7Uw#$6jxRb?kE~ zUmQyq0fWId3_Y#A7gZ6?i*>8XbZqzCdpZ@>qr9u8cNl+U;_TtB>b;eFs8CQA&?BKh zR=nXLkN}v+jd-e4QkjL@3b-{yVHnp7ra$e=Gj_m)l8~<*m4;jQKICL>ER5MxR$Anz z2Opv$cd7=L23;wpvc1ebG9^uM8f4osLr*Zir7>>h3q{Fz-?QI$RY(Xwl)BSgv4U!N za7WxwZZEJ4I=rFFETrTJ!J19v(KPKAbBPgfK&jrc5XJHHOBD zBWL;1A!}&Gde+mdWP=ol1-UcgdXG1T5Y@Xa46VbYP}I2bJnP~Qa4@!bGX110Cc*bb zJSO}tTi|}uiUUApzEnT_fc`DfU^Q8s=hsYHlEBX+CJ47^=dZ#(2}M;M(*%0OK4<@^ zVac|?x0`9XpC@bdqGSst^-dPbg3wvT^Lz}p>{sW_yH69`0C{KD)tfW^HKaeDyA9ElfS~e#0be=fTvdf*=bxF2c+%q%B_w8pd##N*U`G_vGMN-QA zT(R%;Oi!Qo^TMSJYIy;A!FjQI>sIz8o9*`%Z@PIcw~s@bTA?LxI>go!08_bL0k82V zHFqUQY_2ZjD~Yiok+cb7AyhdqLm3I@`91zJcsQ_m@Z?mKY13kVP2AR$qD?!7J$7g} zB4b6+=M$7-mpgB%lK?jTvE%VCiZkpD_DxWP(TWz7A`IbNjG+R_glNp^V$inkWnU(D z++f>JqtR-gtKr)(q%`0>wpq1lTYhL_t5vTiYWP{kHg!7t2lIJGqWiE4+UiQ zVg7FUuTv(lbm}H2!&-I!;b)W~hq);n+)89bpkPc*CYg~aDF~W$$m?mXBuC_dnz>hz zw5CZ`{`LDkr~t;Y=Q(Nd!-e_87%@%zs%}UYT|ELXzFz30bsZGfI;c}!5j>h>(O(V6 z|FrHj;5cG(Mwws~jM35DP-nn7v{F8{`k>+2d=(qUyk`R7rQz+Roj7G3AN5`DU8c?} zG5?5Nck=>KhSnjDsGQY0`sM(Hg;9KCb+?rfFLQ>3SnHLQ=RFd>hpFwW5dQ%u zw9V5Wv}wwd?Pr)v_X#W?t4LC7xD;NloFF>AC%G|SSqPf_*yrYli-uP)=n@|f3iB17 zO2v_LF1!=v6>xXFt9aw_7sqkZd3H>S%ajcHiG=D1UO zs$+QeNP7M^M2VD;nou#BokfQ6(a18n&r`LR)5|zpqScd&lCV|kSM0IzbGD&2pwLG! zxv!w%*FRMZL>MwPiNYCj{+B~?$v|XD8S3aoEWzct*k;Ry)&fUtHU~K=-Fqr5iLtCjGWN|}Y`e4@awdId*`}{oLRXMoiKEWYaR7SU;kn4T4rd(T&>7lyFSf;BzrT;X0Lvl1qwtKuBJ&FNE z@)n@xcPI0^Q83jKQBs+{E?2Ud=6hxC^0TvO5U1xXu15^9s2vePcW!(qt@4n|Po!o> z(?(#jWV+u9HQeC6acmMME&U?)Qgog$m)L{vj5K;pUtiUvW2A_UqSbmNSws>?_z47d z>fVe7uRTv(<#K))Y|$&LARB=@Cb4{e#>19TsAnZdi-5XBo)IyL(F5z|1#RTxxgOl# zIKK$T(m###gnNQ^fWh_ZqFO(yg{Cv9_Zgv+3{!E>IC z+-l9Y+}2K)keIHXQ7Y8901)aLa2fbCn2fQh7Q-)YHxp8@w!Wl`9Q`4vW{TO|6VhFo$_$31^6emx$|4*qV+eBm`Yvuii^r4-vf7J-B9rkvwjb>TQ@DOrS2s_J)g zADa5nEu$=leyH|S&1iBNKDnO)&90Rl2-bRrl0E*3ih4Y4Vdq>cwv)wyo1+7#;$1&G zn-VIx_0^!Yh9HH6;8d(o;j2U;qA1gLz>^Y_gkLnaI3D!A$Pt!ne&h4k^s*+~^{go} z_}mxXVst68mu?PSh!WVlyfQv2r7+!lqb%i|f88{gWF=KYwuw;maY7ff>Uc&~71Cd2 z(cSlf5DUjJ&5ghHOt?N1i`m@Kxo}>NXK=u=6JiFDW(vW=_C}uV7(Xf^nkE*V(=6s_ z)=6JAjS<-hF~qA-_a1LWr=^clvf3^x5%5kUzAMB#3K>jmEI^M#uJ#c5i9i#Vhbep2 zjBV)R%RF}S>$eI@usdRAm)gmb6k}dW)+D)%(fE@QaKRnnUej_kEEUyG3?_z>;F0hs z1Oi*Oxyb|0-OH~M5jQbX4bH%JsqHfr2s!gI;ArI}?a<>N5_xUkd)h|2Mw9GfFIu_x zQ0r4)b*>R6@AiFBD!1rO&AF)07o=q$!htPUIXkJrv~Lt^eDNW>VVnN->CQB-8z?aB zL=qa!QMPTb8aR7idZ<+!Mq!?A1ZomVmoL{Lh^;E5hmt0L!^+4GNEIQ?A( zdWKJW=$^iDBN3&=Wyd-h_Ia*eX{*ArpF^;~b69J8B!~0v#9O_t|C?VkC3DdSKd6ab z!#*Xm*(7a^`P;4ddNYzZ*qsJtS(Q0*{D?p;7ag`e?(NMMVyBPVOSrjdaS!*gL>iVg z=V~X+u(bWtaP#22PaZZ%OSBS{MwC}{0>(c=`zsgLywdJ=bP_0B4xxc8F4VTu1&%a$ z=s&r+&-#)N+650%vuK!ZQTJWtzi(LT5`DOBX#wV$&7OYsg#3+g!}D)soWb+Bm|*Zx zNx_|gpM%x#PLJ_!N8U5nS6FP*7=+%7(oj;7{4}lSQh?J>`!m1V2Fu4yd@oIXIr+lH zgcdusuRhmfwv`rR%Tz^f!Z$bFJtpd7>t45##|WAWqvyW(;Kx}bw~_K?$^yP^2$$k2 zv3goeivIB;M9?|PF(uzgn)Rcr(npwmG|ThNi)508D~~S6bYU+oDLF9`mDwHQE|LQ~ zyG)uvzIS@|2To2-g3;pLJmgEZ0+;qFo9vI3AP`kD@JSn%rJF8MwpCDK6%;&^~bb~(C&Xa_a`L!{1*g{UprzMqN7|58K z^Gsw#IApnDPXo$mSl)%D2gFKVr+%SNZTX#P8tl^|ZvkG8sAkvm!c#%LRKcgRY;5a6 z`+SP-LQ#cvnR6$`4(L(I!o_aLR*8IG@^KPZzsCyA`)B)r67Z1k8M@bDFeGMYlyhzIh2 z7R|?7;q0ljEXg>tn$(J;J>R18Q%cRx){14#Q#MQqoy2%oTa9$8kOSthqR!LRDSe8=IO$F1K&9@8lqx2%g1 zSl9p@N5w+7M05NE(=D)8&d$GF=pN6>I5RJ6O+H+ zWuM=_6i=M!Au-%vOz!!)S;thoeWp5JI+5tW)7nN*ZKZFVFKk&ye50|d+ilBz%z0q{ z#Ew>f4FVVbK`Qjnb{?mv;_SKIe8du${6I#>j?8|~DVc*v<|MWOftOA;@utq6>X@D@ zej!AvZ5?zzB)fL`p)oI*K7r07Hs{%{Q)a@jKIO#ERNO7@L702K(mlET%(_HU{Pj1T zkfJiuBulU(;M$7pSX*ejOPM>Fc&Wch}U-moSCu*#bu9FUxA&1)}(L30Nq`hwO z3LO4q*X>LzP9AA4z{Rgd%Ah0dnZ`l#^I?@3Db3L8mU=y0FSTGTTzf!1LIanO=x1OL zZT^}H;_lNO=^=Y=Jv~8Ldirapx_SNcE=Avkm%8hJ#l5ay+3h#BN5OUdWW*)I5MQn15bLx0b z7N8UoN6W|Cd9gz6RYOryrX=LAZvl=ip^R-6>k25mYgxD_inQ`Z;(!T@9eI%TSZr;o zq_+^l8zyvi(y@P|E73}9wu^>IdF`o@3VSwE5_!KvNj;7%>05xzH!<>?ENfSm>2tSX zkCH@35{ZCdIkaO=4!F!C#0Btw+xL4=aki;}H!b;u|e{P`U`iv8zCR z(<7Nch41G$5pg*c!AWX_J1S(dwei}-dH1VPy$HTzKk?l0;e2j`{bEna4m%7>ObB^|FbFg< zJh8|(;W85w=vHM9QesM#HS%ugo(M-yCpD_QEZNuw?!8H%!(_Gvnrzk5&X=QVtlnCn z3%+{gMHKm9VC+$~q@htT!zx2>0y;VbKC3L~&179HIA`!!hjqVfGhLiGxjvB!e3GCt zl0fetmFBD$Ukw`Sm`+4EG}U<($D(dD2S-V{NBCj+-2z=Mz-E{MH1lt1#n;RAEbJcf*!2OO(Pgxe;xyZ|1;`GVVMe~HkR(~U_{|vO0IfOBlrkTB$n#Wpk0gU;0LndZ$He12_Dbb ziSd&gx-1)&TARJH$4jI?78*T^uG$(nKJ+wBZ~9gJ3@CONNgsBNW=gDcFc3SVs9!rs zGwqI%WSMI(s*3t^#C`8Y3C8GcFfrg9lcjBjGweSI^;m~Fkio^tqJL-@c3myH4B$b-q8F;(l&jgVqua()KafaiGT;Cy567UGt5Vd*_G4HQWAi|$9yo%s& zWgZs3;AzpYwZGGGe(#-W*oqcD8IZT{W-$XdH0I~lPrA@ zpo4)*N_bD&!Q*iyf;qNy{^F6Xj_whKL&-;&ml}+oOpgkGNKven9Jy!QhtP|!hoi!> zFU#8LJilKJZ)prwn9-z2Y~34ToiTpD?uWj^ptv-h$@OS`iT*5X%4d9&_kecz_^5tw zu4e8ge6dO_+FFW}TS=CRPq-%eutmfo; z8Yj0Y()O@Ud}O0u$jdbo8|~4LhGf8)8S})t! z)TrQ}LeSCaMJ7Oxeq}?MTP^G&2I<^9p7oPK0tz0y}HBO4@Qs#vB zl?O9E~4yql&R3?VVknj;FDeJLx^%yc*a&h{TP~HOa zBt*!a2Gw`beHSvl-Tiyr@xGG_K3)eBQ*-)XHC1CFQjqF9O!C( zw=L`gXQp@Lq!U-5vYa=kRmCi}euyMh+yHpvj`$j73F9elFi+lFm~A0KpN6SpnzP>_ znf%crs^cjR=qH|M9Z?+r;Ws_g&toHN{qSd*cJ*fzMPARH7WZO}rRVL^Cxd;yF&JlL zVgDTKF0L5QP)?cXwy7Wm;gY6~7*C7=<71n)imN}p%xg8nXtdW&S= ziQBJ^QI|~hx)DNE?Bw?Yt7GGq>O>}}%%m2A)*FjuZJw2|t;VuFdwW?QJYN*xB)}^J zL>zlOFj`Xlq;MV9IT={P(d23Jj=zFyMP0nqq~$ zYk}oiojGSg zLid8J#Cauf1-ju!y8&%GSPZM~51B@+YMaN9#;&AuJ=&iDu;ASer0CS1fqHn}STCe( z^fnWDV|b<6v7)CPuB~L6Y8B#Zy+RY+Nwwel4G4#*DgK-nAgx6_vxH11;XkSl%k`N5 z?2u0d`pWJct=l_VeX%hv)j?Daic{o(AEQijvZEr;&*C_y``8$Q44}<5Cmm?3Pk5@{ zEb@`Nt|8#eb8P5 zA?%Z$aA&V%I^}K&*UUWWy|Sg*@Iw9qA$|RLPlF~?S27(s882^qr-Rx-d@)zb2ZuPdbJfHda02vU*L4B%ktF%kw z;eD~#_Exc5q%?>yNy!#M>^{gE*+QWCTmir3tmJFQn08PQ}{^=(_FG-Y3gQMkJ^VbG^+AB?F=ukESoGK3x{R zd2##Rd>WOV2RN6U_ig-PJVX4%rP34j@-tQptANrVZ0(Sm&eBi} zKdizBXfHh@A*(ZAhcMBa zIpzmKq)3ELCfDB+&Q8J7!q_j)ek9X;(N^?V)4m_<>dfNoi=NdbnTVbQ!U}iL4T8rx zA+s;iwft#x{{aL@`!V&#e&S)!QJAk$5Mgm9ALVc=4j{oK*$T7z*stt|nq9r`sIf<8 zzIauYHJafnAF^`^x@iih$g(~#!i8mQztGhWHRlfHj;qJU-{gg`Ay2|UbbaKzbyx+z z)gkUu!fY0r(u)y{7CEMJP*0e_VDw?fqH{VGWf^y$)C!VX!;3!0Lv|h$O3$k=V9i_r z@Y4r^YKk98zf(uvY9{FI^kuL!cWwiHdo>R*R(>`E0dbhUR8uoSZ83Y2L(r+=%hhLK z`kRM%qLf*@=^U;XqX(MQne`UaB6pvLJ|)}eJ>)m$NGUh&R@jL*{yT@>_cxC(rug(| zn;R@vO1{V9Lx>!XB&juCUtUr0U$y!2V9YNG3$VC#t5@}p5K7xvf=?Jyx|+=Wxu??cP6t zSFC?7cl>Qd%&m_!GAtGk>0k9N@~6|37%oG^h%%*`CpxYuoxt2HX{~ih)w>bhDer(n z(F3EXx#~=H2Zt~ZR-}dAvKE2+t%_o416n6aEROby47^O2mI&i;Q5ezPKpiv%QetW$f1y9Sq64lVD6r%qZZ;8)(V-t zU_I!#Zkkpc)b^WE8XjdSDr-?zo|z$H@gpt5YtwpgC#YB}>>ZLv3tHX0CJ2PB{+?4U zQ%vlZq1JhSuRO(~mM}zcP*mazp~+)e7U*UDkxpe-;;wmIIoVT%0AjLU#MN&@^2?$@ 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 AT>t<8 literal 0 HcmV?d00001 diff --git a/33/images/gfx/Eclipse_Login_Deploy_3.jpg b/33/images/gfx/Eclipse_Login_Deploy_3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fc87f11c124a2a3bf4a6900b8eb5e82e291a7cdf GIT binary patch literal 35920 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 LKmHW+->?4{MKMHP literal 0 HcmV?d00001 diff --git a/33/images/gfx/Eclipse_New_Server_1.jpg b/33/images/gfx/Eclipse_New_Server_1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0fa9a172e03572fa4a3bf6923e98a9c4dc19c3f9 GIT binary patch literal 40375 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

    h}|ZM(TeM+AXP?I&E*$v1$+& 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 z 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≤(&MXF#`ya#)eMVqtT$-8>I!^v; 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Ξ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�ssF*sM`3)YD zB<7CtbQNh@1SI&{w=T%EAqI@8kFQInChzkh!pi3mmw#N91NP>K#1lVQY5Lpp|FGSG z>i=b>$x9)dGmbo`9vp*&K0Ti$V^0xUAYwnH-t#Ij?O;|?qqk_wmV)SufMO`^<}9UR zAph~~Q`J0E%molXCSXsa9xjo+gIRJ&6pM8`|Fh<15tLhsw>ZVJh;%-XIUZ*w!ju|L+QtJPYYN@WVN zG;=wPkLna?Rk;EuUrZ)f8XuV12Rh`5J7YTb5C<`Rl{}~&q~+>3;}C6-j$00J_J^Z! zNVM&MQ!)9`GDiJ`?7*j_y-@!Mb>xbr2K^9#6K*>0`&N{)_p7E&-{g zAF>!cfqHrmDz`RL#Na@$RJ$r}qCGW?2GFuDvi1V z=r%b83(Q5M5$`!&ux?ek8`QKd*}8g#OiacjEWMEY`vz{nPyCTf8sV{lgKDit9g8F6 zP_9bt98_njZU4(Q4BqN9WPaLtfO3@(Ut z3}TR`q?>?XvuMgqE|(?iRVeOd@uY+oU9O_Sy~MAPgO0&h^*g!onj80PkYcB8>GZFF znjQ&kF`QI+>GaVM>WV<0Hz@vC`eI#~HMzUw1dBzL3Pj1$a``FN}qW2Ii!UN%K;8*(R}=di8Zl$oT+U2rOYQ38zD0M(Q-08v9ffIKLkfC(ox;DeY*T91TUNgW9~>4VbfEusyhjLPy!kPoO} zo9zTQ`JA|__uCNgrbII*rg(Q?hNo8P0!9ZRvJ46As4BTUL%E}7yPFj&o!=~v6Z0pc zwZlS!skZz20%7M8@M3b6!ta3uN%q*YzZYrPu$c+g{yuJ~=#$?*!arN89K#)lklWPn z58bMf@v!-j9^;)Rz}=H-aIp6a1mz)j5V_iQtF@wcd${r6)T6L?FL8B5ngL*XfmmN7 zPr?~dY734wBi=T*Cy3cpe`h&K2kuDL|9)!!Jeb0(ffZ(P9JZaPdNL<&C;Q)@}U9~X$czjeC#&EF5#w}vs4flbXa;Ab4S_WqM zD+bW5u^)?n^T3leQrjU4=}Rqny;aeU@+p_)^p1L8bD66|O}r*Jj~Y%fVPuA4nrb%V z{1)5U3*x2$24y)(e3TC{b@3wXJ#OMeP-S0G2bI#mMZznPuz!?4{4vL(j^H3b5kT&1Zptsu7uB~f*+AIdchz> z7h?CUn8Z}CS)%JJpbXY?aE_Qt(%6SbtLPH4j+(n66IueZx~z-8$~;_WV3OOv%rVWP~w5%5IY> z&V~U2NcL{8YNC6r5G6k%$v%FQa@Mipdn)8Xp&An+N8q51{|O1>@C};w-UZ3E9#BoDAeZOWq6V zrf3Wuk!my9^>Z&Ad*At=~+n3>P36#h@Pg(8T-=i(-YML)n8a zz)cEl|9qCliAaS{c&S1!)!%so(Tam9N?bweJ?%Zu)1dsu0T8*YZmCQ4*aVIpg#+(6 z+HIIb;^|}fK04kKzA!cg_{J9iL;^h-C(~p7nH!OiSN50jA^|?G{`@q#*w;&B0gqX# zZRcAgqlFSQpd`d;VVu$IDDi7gk^H7;pW#+e(Q+^?4YN=zb3XP-Q8bpQ#4Klrbz<7w zcwUARoS#K5P9)PG<+u(7kwe_sK~?bwsisX3OcFm7q?>db@vD6aKSXW;#iKsp7Ns*9 zLwSWU9R$>PVx%qH>PTYc_VF10hP?fG)QHd{FTz`;nhT~bP#iOir1kiI633Jo&Ky<` zs)Wbv+NMaY*pa1ME@JT1x&&2kTu6tJYmt|SiD5y^9bW6hZK$`^*YStFFK`iZ4^NG+ z55EsUhLONlcx?;;;_EV8*T>?ULkP}-VD|Yktwc|Ls`Z1?cKyW7&`z7@w{+3rEu1P; zTr#T}fLNwWel4K#ytRMi%7-c(gGGe*uf#eqbyyOe@d% zb`!tiaa&tD>Qg8XwFeY>VQHPVT&p)U_g?dcNDHO7TA{-tbmtD9DM7O7!?M_`{+($5 z_wwl^I&*h4crt_xCynuUOU8(ZL%8%aMh(!#Wr%sB6u$Vo(vcOxkFA#Ofnb79)*kxE z@D$r6!qIPkt~0AodFVHtP`q@=lP`69_DVGYz)9-&>NTMR2|6O>fMmT(YF{Iv_%oW_ z#<2ahp*e=HjqCw+x@?za+h~E?N#yKW-EfgTCY-5;pSX*lN0Y7x8Q$~7b^W~H-%sve zKRYKtB*%y(_2fCxXyyMgwBj>C4HD9=zkC)?{9nFS2tf^GL^><(wNU&Yf$NWvhkYq3 zRt|1xh@x@+Ys~K3kSM=y{AIri#pFf}aFKj`ikwWT6J$*+mxJ9u4%)`&of-f`! zLfL7EQ!wY>Z*NqhI+95Liq0Gnc76+|OV`X2ce#S3hzna@BTUBh9kZ9r>I}iPax;)-YYz9x#L2MoiG}Afk?a=mp=Wd7hR4c@ygm5m z6<`}7!VD`@KyS0&BUX-CV}46HwncVSf8 zT;=qT&HontuT}N4((vd%8(hontK8TvtP3ruKZWbh{{jzNnXV&R$J+wB=9`l-Da+A1 zn4DCtBHN1Kz5497)*qNrJYtJV?#_HFEI>3;U z=f(WDn*O~yk#!oJOb7$s=-F5S^Qy@{@%NV>!X3Qq+BS9lL2O{;ji=OvaAVxAkT>;4 zk>_w3)T%-JIC6fd#EN*B+e~i44VVrIk6+bz(vcxQ-1b_aGs^*EK`+?YkQb>Ef0>9y zGe4c0Arma*4xk&;H!XLvNg!uY>4sfkvHD{=vo@01qXtIBWZ|GC8@+O*Q6P)}l?9c$ z@7uA7)~g)$F$sv$$o7%>Z|JLM&qUgrPNW#$w(Yu~@oS4;^AKt0f4xCQ1VaC$B84H< z@|6f0K|96gY7pu% z@Md01;fnMW!+wZ}kfTpVT)zG{OkQVU@54pg$X>QIj4S^1;4_rMIp98n$h*(2CuBG! zpGolvRUj3$r;*o-EiJFWUbmPIFFQfV` zfx_UtGs=@s$J4|TEk%Kw9dm)|y*SuEMwq58jHs6tY~U-4GgdHO&^_$r3V=XX&_bxU zx+RxXB6*I?-$Cb8WeF*btQVd^hmFXd!pdTp_aM;8F&~bJeLVnZ$|Alm$t}G!61Hsa z7%s3Htlytwa25EB8ClT+L~+Hel5QO1^4)J@OhryF8qD{L0;`t=od2~Yt8EArgm1$> z84)5l!TGb)3|=LSFPm7nx!0m}Z(Bbj8RS)F$4#CF?`AeU$F0gy>6Jd@T_ACMZ6AVr zVjF-CFo9Mrh^PlKv;L^l-Drhj*#t-{ZVn$9$+ud}*7flJ@{!N#qd7A5!8a;GG#ab{ zeQ!MW>^bRef*9Q4rxclVGh!H)p&LW$A0WYww!QlNiSO2jL#joRV{Uj`gwA{mP2k2Pvp<$MH!D#ENpC{Dc0E=lV{+pH z7^qz%y_D9?nf4~^3iLb;{WenHs6)tFzxd)(AQv^R2uM$JfV(X3pnM)4`>TSA&-_^V zUH&Y3PZXMwEWOPE@X9q7S>)0WL13L|TZ;Gf9a9_^voRwBj6!L))(9 z%41>o4eNp@U8vPHxQX(o`wIF%44I*vs@ND0XzX9>JPFu~;O;MMfI$@*O2$%M3J@vg zl1X)a?d}9srf&I1XsO4rK1*gVKs5rIQ)Ltk<@alXp z4lFu_L{wZW{yH1vcEL4s%}D+vBDUB4oK$QG$ZgbJ?G$ofiH&3Shx{_-)`Xs1XCGqWW;)ablQ53*EkVBQ zbY_%W&;|QRy9#HDUz_dkKPAi1O&XExwYb(1akKo_F&Rbi03twW4Z0QHDlXHmm_+(^8G5v*A~H`JHBJp};3zj`dcyVyQ$;p;#jA$vvNcpkwC zz-|QTtAnFr8-Pt4$mZU-Niln)lz->3axzl1K8sqnnhcFxg)>Q=< z-7XO7Z7fv@Yxo^Gds78`2o|EGHcS zV~i@00Ag-$ z|I)*)_w8Ki0E~9gL*{`wDpYjAp!1n6O}XYBU>Kf?u^u-8-q!yT82lzI<6|HC7>5>E zDL^N0<(<@O3YI$@BsCXxAo0o>YOhXZWPV)&r$SBGcNFHKVj>l=qI2~VF?mMf_y@p5w@LNroB;c ziWM;z3<&YYL_r$w%Tf?z^!8)I6d(zpVZTL1pB4}tmX7hKC4-(Ye`0(SH_48An=(-d z1*sW`S2;25Ez2xgFC98CszvseqshXbu=p_L9&vG5lXAp(hs@48SiG$F+D;B+?PK+8 z)@q~|zuhx&q#0ZzQ$_hRat`+a$Eh7Fp?8!fOH9nPcpqZ?*RPaXrgy{1X;eNi(T>l* zGow=iSu6e7su~>BmzO-a}35q^s0NY3L;8IVu_S#jDcDg%{!6d z4(HUsnB0e)&aqC_JcWf*R%!HDWhXxeTLMrczeqDrycg)n=hq8S0XMaa?QGIoQ6p!1 zgMP!7y{SQ6UWbCTp+@I${;zne2U>KK(K_z;eqDyf2U0-o(hGx9EFhNhb|o>>+Hf@K zU1OmWk4-?9%k=KBCE^D_#(-LeR1lXPx#A)s=@AMQ+1_Y3AZ?HgW;(kT@PC^P6z6He zTahcA4DxY@Y|doQMVZf6T$&lohYD2b5aF)#L z+3@1=Om;}erKNn}KNuq>0@2pi0hm`35oRtI+|~-UZ#VFYKDZoV2p7({>bYk=Y^}~s zUep_f@)5zx5t4HFr|=anB{@r%h7c&YJ;`9a&$sdrrb|YAJwGq$VtT{Wufwf zfSMe|L>cw-_dq#EqZARm1T*hoH~^l)SNviWQLi18i7J^|6F(CDS%HXu=D`92_iW_ zDj#)*;W^VV1RJ{a?*g6x#JxL&`Q+Q@w}_Y+<=!6VB{W5+E8Ig=N0w38;frhED!U_@HQfrR<&5H zARzroB7r^@irL1n6-1Anb8CCJ&w^(@L`)`?kMKC8mOQt-Lwr5aEGsGYQ5IL|R|(;a zL#kuaY0ix>l6BOFri}qFucRy*jl>-3K=jp764gp^V7VLEXt@m^0%9gSeza`E>mtG9 zYMpwhX!enw{NlrQ7k1Inul!o}QWz_A?e8@D>hxp_NJp%0)8R<^YtbDdLi(jaK!msY zr3z7MLOo^sB(+yJRpP`5`DL#`Wsm`ukH3=3Y(^xI5lz`&z>#u5$5%JSvmWMT4xG~6 zeOAlwY?(~ZpaYalods69{AqfL=u(9`*=9okf`0VFl%;9jFOMpY95=zozK2L=Jtzt< z>CGX;_=g~xyA|JY6kvJjC+1Bo*M#X?ZouH$%XT45cH_mldb*b{BaRdI8do!dKh@L> z5_FJx!vkN-*Qc$f+pY`SyP~f-0VvuwO{;UGW^VAO$(+J6#$!3Dgk;zR?&})8H_#44K=aAG~m&hkh)8gV+O{z0yN2>Nu@wkNf zTooL9cDtX8_%?*Aomv!35RC@kUN21Iru?Fb@fh~aMX78oiOoc%D?X@DL{X=vX8GtT zGBQRa#pUt5d;FA?>b+GL49i5)fi(M5mCnIr*VX=^A&Prh~Nw8`D6f8hjwm$C{wn;EU@?fUG9 z2cYx}OCL-n2BA+UKrRQb&qLhB94kA2Q>1gN$%pv;?M2IV6c-{6yUhYlnxHcZOL}lo zvrCOMtOavGnjNW60QlQNskv$vXWPD!iQ#J*;BXut+z->dNPYBMm$9}oShfhba^n3x z&!MW&Y#KZhnqI_};%AqM^UT5hY{~Z;%7i*b)+2)zRbPF-`p<-gEF&lZct?+z$4}XT zJ!S9Q#Or2j1*Be@il6%m(2VSz^-F2)0n2e8TnNwDqb@MHB#>Pz^xktdnag+%62ppQ zuHzR+7ix%3KvTEQ26CG{)CTxVZ4pS!)&g6==va&nNJA@mz63q>A!y^2!JEx16+F51y{`4C z>3L@2tDmENqFa|g6aZk+2b$*rd3_DaOxBm2t>9p{T+v!$=mYwuqN%tkK$kYtP6?XN zCuUAd-}Dw|C~2GhV4z?VcJPkI7}W_L4z9DDaISATP2aO%%252SKJzoT*B`=+j^@`S zS!29E0f1i!rZqF+R-Hepti$%hRS~4w3A%P&a4b)hRjjXbSj?GrCxL9G@hU0bC&}$% zmM(egkZp?jxn8MpTUsGF)sy_urbrC^!Ha0Xj*+Zz=>A9wl^f1nY;T97%>qjT?q(`j zPW;oifi)6cIPP8UN)Bm{=D>VE1eqpb71s4Rq@uGwaR-6(lg_Ev2)C8Ng|VE4MIE>@ z`HXz;H#u>gRKY4F7y{`@@o3_}xw)9leqh2zic#n1d#XxZfqA4O^Ur`hV+Si4WMLp*wQ?t^mn^zVI_bgx*XuJc~Z1z5H zbBvps^tJo0T^q?U(>R3$Fk#4g3vCiE_#$E?m^`n|Pq+egsLm=-%l)N|1<<0X)W>1u!V z72Qq-#dJeCTU!`eaMrVq`8zVm0Iv?i#hF1Xr0Pz4mS_!3Slb}S|9LlgSX(nBh*B?f zari7)bd?^<7tjXdBEf<$ty?zq7Dh|Xxx2Slgx=QaUiP!A%N3XW(>&4HOsp?QNJ(GA%mn%pybtwF zPeptnhJGB7d`s80q7?r}i=B}~%6?2`Cf#hCMe>8+%1@8%QFhZL6y`ZZ#YW{JygqUL z>zMZ4uxWv@XCnlrZZi*uYg6V8g^`Tipq#pu-GSv^9L8(q)ev;E7r%(jeHV-$ERfHP}1N2Iqo0nr)S`Bu#o;*DUkB>oWs0r&b zW@iQ|%DC{<;y8VhpglKdrYkQ9Pw2gE!aTH*qor2^gz$4o^L_ART)WoIbkiPi@hWtB z+LbAB*~F_aEOtra-heIOux4CX$+r9|?N`JZH;>4ux1vaJ{~J-H2GYR-*%IFs64@CC z#wGwH2MYQCH_shjaQSJ(E^>#T>egxin(u&{_~zM!1QZ1JdT#}aHSsnZ8Hl5j#k5Pl zlPMT~nmDW%vub@|%1DP5dV1Q?$9 zS4G}Udy)KHnNV6fJ1egzCa+iXVmsN*;R{zG3(rJyCO9^WqgFB;spoGkjTF#S?n(_B z9spImHm>}yo(jU9AHtHAR=@4wS*{MiQIO;zQ4;M_96)_SMvDB%DI3CLQGc2AlsFn@ zxLq9Hm~G_^7+RF=f}0`iLDk@Ki{LjQ(q7{H+o@_q9(-ViIphkry*#$e!En|i{o%)G z@m0{+Nrq?cxq|&2YRhTP0&0nOc2=#zxkz^+(eUxsnUlSxf7q5VIAsd&HDo;6 z(_`Czm&NOM!=yAB8K|QS?E5-OIl%+PMXwRUJC0-(O`fiSO*? zs+==mD57BRcY%tRj?YQ3hV&qGJ!Zr1sUxN)@5f^zP)nV7*{$Q|m&Zb@2BQXy<=$&} zehw$1bNCxmz$XSHS8Rj0C zQvW$hH^6d;MbN(^kPvVqF-gK$I*o0=yDqJi*$CCPv}G&iSAAeB=s(82y>LuTfg7t| z86u&t7;A#`>3qNZ$dw9ekbnAWAE>_!F#C91czU(xaJO(#Eepn>Y7l$(wmF4M73g9~ zeG4L`^0#4sH@qmoAuZW#h5v}!2M?d&_1g4?CPLlUAocl|Nq&(AR&Tz(0v?!APJtIh zc+>-6-|ctNL*X@H#F2TI=H|q_$)LHp2m>MWEezJ{9{wtM{=6i%$E@us_KyJTf%A?# zJ1e8e(9%RCm|8kVFu>?5;W=y^CFe6|TF~%Zkh2aP2GT7SEK!U0KM+-y<(^jPiHuE$N@827hJ*LKO~r~q4kn2 z(xF{)mh=ssY^R+1 z{O&cNl5L#)Eq5$mXafsjFF+(8R)Gx@k_K07a1NJB&)PFu8~_O8muzS&tD>MJOycZ3vHYKTp2rS_ zSKk848VfQot?n;zZB|-*;?TZf=qYh`VC7~wEAGMrI6c(~H6)+)I^gMa@Z6Wc)FQ)@RLT^~@@M8yN2~;NZnK3xPrT(USl89MJ@CzvAXi)i?5*3LvCM%r1f!-oz(Iby3%5I5_d(I8`JyrCz)=O+^V)U-_Ibi^5wVNn|=d zALVvYaRd~K?l0t@P1IG|YeJC=Xd7v=HZ|bXY0s;uoTiWE@#5kfEA@odWKc_Xybf9p zQV$^R4=J1*{1o;Fsqg~%5tMQ3*^O{G;;2T!3i>4yTZA7J*#+R?H{sthhV&#z&7z=G z!u1{A9UQN}7l^&ED3dJn9(qt6#YSH9fQx$iwfd=@7yJ(-xbOX!it4Z7g!v2Vl0a0T z-_$RNe(L$Xkc#6F3-6ERkP0sbvGoQMe|3fz$UAbWB8G!%W~PCD4EyrH>Rvm=Apdv? z=kW6d(uoKU{EyKWk@QrFnLkD_IE+2pV@}wIO0Z-}8BCrQTPUD#YJEspKQVqt-@9B= zj4CIH(8olQc^4|HJoWs>iQ8HPiSq(N-63Dz zC(>URo;Dv6d>tf@h+XaJGCx(H{Vh)a!zLi3>-Q(Cs&3~>dD3q=%Ox>`;$dXnvrHJ8 zD|0_$3V+k=$x$CG&b+#xd-K{k@xd{eic=<)S(NT&ez#x=`bVX-1f1;Jc1tPYlzM%l zq&EslZFE22KS?MjCX+$p=|ZI^X8KWAJI_9cihQ<8c{Ys`5}nP;({#xLy6=8bhf1*< zt52Hgp}1>9hoJBBrO|0OL_RvJ5Pv5cFOb6ALs#+yo8_DXlt`94p($kfo)nrz$Qv9@+$UKEYH>o#&t7k-j{^lmGq=(bz|ee1Fqo%fD@c`I`@tAvqGV zZ?P!z?zg<;Z{ICmQo(x*ynA|#)y6nk@&ZTjE+4D(dKa0#o8|k?*?S{77wOG+Ja6X79kBML@e}%5i-Hi}`_L1-R#dW|N?=_%kD4UH?DQw+ zU+qq+r?%;8(R;^6ieTU_L?;&0P<372@SxI(uRT4ZFi%C*_4TEs?JZ1cPJPb(i^%La z19#34t3^(E%D1HQ75mmrDBPk!YwZs_gPY3g8I)ZfCjtxj54!|YA=(`gR7XE)u4QUM z0<$TKj(h!ietZ8|G5buzP3>&qu;X}BkVcDxN4pg1!z{$5`F;osw`%5akipQF;`U>< zI;qwEJsefr+wJKI+Pv)>A4Z1TT-rNQAM*0d%*;;jtyH&_#CWMKI>wY2` z#L9lSdUOTwkneaEPj;W(2%vF1m-S)(^`;)d%BRWZ?9|63gRB|eAK5SJ1y_fF^b4sU z7`B2uFZkaP1PgrrCj5@1SJ>_aN|wO-n`CkV`VgGc^!EW&95qA5Q z@Dm9~$gBX~JOY+&puis+-ks6Asmy|u8XTWtw8;d0RVwD3Ik<^(`o`_a-lz1;Cj{T2 zjPH#D8a{gwAcgiYRai;~4))Mg(3Fr`bijT+c%bieTvuFhV43{-FppdI%ajLkV}<$X z>Qb@!*^)2&O8%k6rBE~3gLDS=05bg-ID`bo;3%O)5h_Y$tXeFLm$IGtg+Ygb;_sM( zF@$w5S@N*$gYCac1rvRB|JoCr`orosT(B_H>xL*l@uPR7g;C0~8geiZF40EG?bj`D zExyt9lCFx|JyZWgPoetFIXW`BJUTrJiMkPoTM~{U?M=o&-iLh4T&M!Qk{gx3GH=ln z*00IZgSqrsDoT)o{KAWZawrs9Qgd7L-aNPl&m3g2H_4TMCcncglfEv!GLkof12ux~ zL06#MP*n%6g)~yh;SBt-gi)eR$}P;z11KTP0NMaU*h7TXzy@KeHR(I@4!aIBT;mRs z4n+>9o$X2$+<#jor6L?i6tHWPr4bp zd2J#OIbQ5f3}zTPp7X5`b*prniAKVYesA}&h_aA3tC-8^%vh3N8tG@8teB~oI{d1S zk8J>BZW!=bw_E31msv-8YyY?s~c&TrI1}3RrGh5VY zJ_2j!>S~;Di#+orDhf}RsU3U;ae{bhO3k6v+JlL}-Zj}XSF^#pQ?scx?iL4n>BbMK zo}qV2NCrq{Lcv1WoxEa=247dCd)#_-Nh7(L9h{?E0vFF| zJ9}On?dR@;_ZfIocrQt7NT+$X(!Qmk@o4hux-__;w6M7?oEy8y9o`Q$E!@OJmPZcc z_vTMePqB~J4PC^i`|A2FDYn_)KYd_)K)esSTSB^git}t2?UH$fm65^5$tK z+K3&DDvaNVV2o{4V?>i@4=?6%KjU_w6=J&Lm}Ao*FW_B&+50hMbnuxU(;h7*faJM* zKgzFx6=KYuj_eNF4(>OnZx!E|zabUY5L*{!6FnDm6&noZB9-|X5v)V#8EP@KW=~Xq zx8m6|Oyo@yh!=ySgndFa#i@cf#|EFu=+&`}a`Aij_d8p#%3f= z-fK&<%i!nN8AmZGGS?bCmySqmcCs7BIiOxsvXXU7)ZjV0Wf?cS8jp~kP8x!=^2bCa z#WygYyk$sJ9VYtu+j!FG?1b~y@z%sozWtS8Iiq;J zxdE){uez(E8&-Xu5d8EyUTZ3TI&V4n2J-4(QNp^>l$@-cpGA+tWD7%~S};~-y>(d9 zT@}GB8|RyJ8f!WhAEI+9RI#qQkRXwEks6T$Q= z%fn{r7Oc*r^Fb#wCv3xF>n4NNx_Z?amV(0_1p(Z63ixYu*SQm=4xp_a>#L35C7HumYcX;tuR zD{9!Wi^cX-HUIV9OvRvs=31@X9K~Fd)4P3+$zO9L72}p0$D&Y$(U~TTzB1aTPUkwd z1~%|w=e$w_{w`?u?k;~I-D*E{cDi-R+It+n>4_r}Arfu!xAobRlA)yt_ znmWW0o?kqjnyGSulDwT(@2 zmYr-)Mio<*1?Y0yr@G($4zDLlWmmFVY-L?jnFhD-gtC zJ}jO{Ut3m`-(t4#Z>Mqd@gJIOrYBreo?SFYwGg;9oW}JQ@0GXc)M37R&f}tVXnY9n z;*N3VUc71Hzj?ja8Pl##CP7xr&*^D?Lws_zDBnI36-&8NSc^bFZ0f`Y$58h~Kn}^r z7IB~Keetj>jo^fd5-!36O7XBC%@KSC%3|!C(55? zE?^trYB)F^7cSr<*vLVj+y!iDWzXfp`{rL)Z~>nmzh-zt{;x|MEO_6j$;gunS=$+r zv(mHBGrr+NB_}86u`@L0QWO^bujatNc;A>hIM{G8FgQCq(>pWMTicm1eB|WhWME`s zU}B;JuAsAbwQ|sRp|i4o`|q3lpZf?K*&EoI**KV4TaiEBSO2rMqXX}oH;)hc??33<&iA5GQ&r|Cx)7N-Af`X4|2S5qE_$07X3kp6A2e|-xWj1QHE;lGW~hf2v< zI19`Nv6--(GVqS@I61)EDDXn{?|0xcLU8r-R52+yH~}~bVL@dV_}vARdXT|G_mOUZ zB=(@cFwINJuWz!VpNHp+_zWb87?up6Dp1G9z7wGm{%R<#;1=_aTKQFuYsN!k`nX1E z%h2M@E_1y1(ne!S%ldM4;Np(P#f|$hE|t7q)94EUIQXZ3eDRI?t{+6Q-tBd{95gb) zYyBdK_aK>)d&T1^IQobY^Kb6JtK{P&0dwrpA8vlYPGuE@2s25G{l&BOF!9LsqMeRx zXZ*?hIPzsj-eaJ~{ISD8k7mXZkrQ(k;5l};M5}cc?ZH%aL23XZ~yoppf5hykEVS4>-!TdJaSX)DLsO}vPTLW zd<>Kb9*Oj81)LzH;#uck3=5h3*V9MyBXb-Id_hEpePJaK{fpU#gQpbu{%%k7yD!q4 z4+10aOWGO##)!xqzS<;=)XD`>HQ>3a)`xrdoBgH(r&-V}F2>c#MqQ)hPV#x_^26PM zH=F&s^vy=Pw^Py+Zdq({)6UdK%l*LGTx@C5w(F&E>LGES*(q-$H9>j*`k#$@_@Jq$ z`c%3jYY$daP0H&wQv@n5k%)P}tnSK{GL3;m;t;jqyyWS$`c14mWn;d`8_vE+5GIB+#Q)%7F;Sqv=z4R$=d@E=2Lt-= zXLj`L*>eKDT&VGE`3dM%Db7VAYG_us*ken-2{9rj?85uED; zb-_&st#kLcC&SXcfcGhw`M8KI?klIi{&P_DTi4q>!8`E^mFs&i*=` z)naOa+*@ zNU2r%x$6rOtH-5{^LUWzh=0@vJ;h=bx*K5loyAW(J+DtI#YkP>5k#^dUMzX{NUK~G zJVSr=L%M(a=NA<0-PIU5r{WzB2c9Ie7)rTXx3ldA(4|c}A!qy`HGF^w&N+=*h2EHq z)m-f$POSUG-9-%j#e?U2LCC{_YT}8|KQ8W{;^YiZ-rrYhxhw}b-JMO(>A3H$$%R~j zK=_{a!v*qU1Cq1Ey;4Y^60_MVqp`PM7YokX!^9H!uyErdDk)$YXt(|t)?Qs-29;^e zc1My~UmdSi%cgQQl=axzc{hPZ@|+JA_kDw%{R+PrAJdqg%vrao4<@s&kQmRKjly9G zLh7ZZ!;lL?V)k(nVO8VGDwYF@AIlE-z$WLrv*%Nq)(yI6%XN-BD%`74Lc7p$S^HkG zy>g8ja}*(mS$W>5)vI^e_6lqnQVI0u{S0k} zP}7KkVW}WsgQzDl8AX%U4e18R-qX^R`?Jx!VYZxM?8*K_lPwlGq)@a#W10;o5Jv-g znU+D*aeLT_iL$W)8WBaxz)9^uEo6D{Z)y7=NCXsYh6qKdj_0!`nuUtF(RA_4JOO4n zIak2`-Yv{eV{-J2FDY~{3~O|es=a?maJ{$hKe>Kb3$Y{pXBU=)`?KFi;_mtk{M`qh znk=i;A6Q|Nwbn~%$6V^#jOE0qrROnnd=guX5H|32`W7DzFbF%3t=t65bkFn3p;Yd< z6L^ny^AJ3ZBcmW2_ngO+e;$&1ihvHH^iyt!P5BEtKIWgQx}G(jM_u?y>J(D_>$#n=)Ji2TN53T^ z?N_?PoyH_6*Cc*YZTaSKFatxQCRK^Yp9A}`p^j>K9Cft^7hHEg++Xl>AOC#oZx)J2 z7ea_>yi4#iG$ULR#C!S6zZN{l#{K*2Tc+I$nYE(pivw%^huiAG#E+ehgE1dW?WfdD zW{-NvtdWRqeB$V}VJhW1ds8IbP9=j$%#?0@R=0sfRu%mBmz_GUYqxk>oIOzQmW)$Hc~$+#tv}3n^TF8D zTlj|iY(i-da76a~b*7^oE#k@zA{#fr;%d74aQUpwROv6 z-bmj=>Rw_G+LnonYrVg=a6g+=T`7CT$43Zw==lh)Z7L=9&ue{g%#Qqdza{}+3>gyd zPxHFoa_Xf>sOMX8XbXVQEPNTJ*+-VT$wtAyo7XZ1=bumVkbZQ2DT zP_ar45I~YUT->IPi=?%i?TugkA-;0H{^gA?J#`{2yG!YPe|x@_pRSSlDS)Y_AwS&< zhUmalqlkw$M2keCvDE6hPtD_*<4HJ9J&Tg3RK^?^1t)4G!;E$f3= zmeat;o_gYdD%AdXI_5L;oDx4K^u4({XWrrzkK^95DdlkHXJ0-<24%1Ej%9R>S+{jR_0?G|j2$hujd zLNbzp7N;T>4ZUfp?e=~mXQS9xdKle7X;K78hsk~wQ4 zBcf#2WL}s0&dbVltBdXj;he3TKgGyA4I7hyjDn9F@I~6*c1M0}fQxD6JslB3DNe9l zXq?<{d+-|P>y&wo5I~P3sYpl{@Z=n5e)y)nq9_T7dt3w;NT-S}S8EB{7oYB-o8?xm zX!P~uT(jX8ZQGJk3~gb_2*@;ptL(gRZ^a_Q=8O_0J+``Ls!im)kA6*K3Q}Djh7VbgIyPFth!W8lC#APQ+kTLh9w%=krsL!2h?3||&<4Bd$oGI` z9JtVF!;+m>4A0|1p@&|vFy$At>N}&^LFmLBjK<$mIQCtJi=DDeRN&hI!?GKvzxvj2 zUn#!Em8+SA^3R?KdG|enD=uT9T4mN2#K9Oc)c_=G%uO133B$lLQp=T$dyGvg^)}1( zJ%v6JK^P=XS?69A*x!}6^h@K642UGXE9B`;IW2a)qEtXG>X}_bqN{}mRXu^ zyILn=Cr&H#2&^sqL^PV`6NPGU37@`syYR*|TM~D)kDQAdkyx4T?Yxf5GGfzy<4#A6 z-*Pi5jEXlGA`CLb09JzD!zla$l~TT}qePKECf|%_EdN3C$%n-t_uN9!FoNZxk}y(U zSZ)o}lUKO09-WBIVbTnT7&#yDE+hQBbmVIzax|o2X=L;af+XHQdRF1(fa?l4gE`%Sh@$hF!y zXTNlAzQc33k?9h3gJV?!;dbOJYT`_TV=`qzY8+gvDv-HsAqOHQRE~eu5y&*3VWyJK zyq8J-qUzYc-F^b0c}4v+3zfO(M;3l%gaT$&gu>)E5Bz}4bC?AKKHS*#vZUNARnwok zDl5Us_X?v@lCO(s%j(~ZekPQiJ}CrmCZ4`@Ur#cbw=cwx=wP7f$-^%rvs5f%oX?u3 zVa9_E0U754KMt440)rb$k$Koy3F?bf*Y%`4pXedhTg%l6+a7lv+=%UkraEpJ3Jb@j z9aj(q6=KS*UR>jj8<4Mc691`6I!wp9TOeg(?ufk9)4zW{PUDx#HdY-od-o3&csGFe17` zOYmmgMJ7&Z!f`a}wa{+7rWFbv3KDo?GN$o7czPlFr50){l|$Aqap+dp3k>Qn8?=e` zdo|OIL@MwxHcA4bz9}w~!q61bPpPWS6=59$ZZpuZB7fn|w{;6nkYeNPAmK^V4qWw) zWpq$W!%75qN6=azNV|()HQ+VQ&#!EbojH1;eG=4X_*STjo4F+{X;a}&GC7AaeG*%~ zdky8S~KVTAi&UlYY1OelEA2ORa642VU;nYtXbm+R-loNus$z6hK zP~Z}HFL!^vo(_>&>Q*gL!%})J3QxTDM%hJxZk{MOB&NW|KN*$XVS9p_L$q|d&HEwo zh3w@`q3)>Y&Nep`f#=@Y6&F__Gb)-w%Dk4ACoAj2c8H|R94U)w)XurYN?%IBroTp! zAQ5gqGCmQCs>-oFf|dU_{#jI*aBbYOX;wz~%TL#)d+Y)1I1>s=9Kx@^*(g!1q&hF6 z$k}ze5<-uJSWv%1%_nIVDoy>!x)lxu;J<|VvDva$8DtHqgP0cqkDh2Jz6{(4)H~+Z zTJ0yfJR(_jXP!p0SkMvP$f-zX=`}8sXA?1x?MR)2Bq$haS_fhp?aY(pK%Kii?q|3+ zHt=c#s_;6w03A}#(^0)NvPE$m;xRu|0jiShsd`(3X=ex#%H1fMW}X{-kdQE!iHwrk z2X$2$FYymm1$`G@io7GGV6wlze&#jAxnXD=_kj+gilNR`&!Zus%|lI) z?bJojDC`u06WY-lmrq*T z!W5-O_Z?Um7=W5dJD0Cxf-)g68~%$FL(7CCLoRuU?i*@uK_XCqf*R#3WMC^R>r*I* z5MLFHg(FB8L6@Czgt^Qj zQ$Dy6)U=W2?&msNBcGt-=1bk2Jt7aylC8)d5%~A~m35qA7LG-4_t7gTIU8?}ZTHcZ zJ1jI%XhdxNDb*-@Of?kX16(qLl(l5J_gGX}-ozPIH%jYpZeC8T1c#7s&b2mz6=!`b`?1hp zppZS!K4mBfu@QOY{T62Om;)E=V}VXl>HzGdvEx;8o@G14x^>Gq|0UG*xR-LF?)vbY zWxmE@Izv3L^`eMM1iE*eF-Tk9{Bm419)nQ>OGqCVBzFWk>|D8b;8*(fI4Z-d2rQvBL~f9THCp6cO57~ZQId6prf0;KFbkN%;H8P8m;<@t!D}%L~;IO zU8kBHrq~$mmnWTVD?O3yEryC)eqxz1kCg&ao_yw~vXq!Uf!+m7F4LtVz8oT{{%#A@ zx2Idmv<#>Stbe~YXo}Bp)IMj>`;xUb0*1SO0Zxq7OdAokPJnM^w+2anu zB_U9|$m@9Jcx^zPuZ$<>N*JIyaTin6Sm2)LLPrdBz1geN))81HJ9EJs(_LvOx9Fh z{~HyFjIZBxS^?GkgI4`W0B1*kVdxuB$PwhF<|tk{cX~4hjOuCD3mNF=5Z!>soG*{w z&?6i0%#Gr9+*>&@S{2=LxdFqx3M22;L4@9(ZNJ5vGr|#AfNIMgv$W%_+t-yEn-S3y zO1ZRMn)A*1ENzdi>mi`#=2hl(JGIe%aW$91X`i=)`jc#Ull@gPFq5cGRGT>ESAr1J zI@wVpqdKp<>%_x&T`Y=5%c`S_aBmMcEOQP8rD-9q)_G)@2LN5=-5)X)HAipGuq+%j z_8;7Tn62`{%>W9i?v{6VM)n<_E_Mwfd5wVz*B$~=R9fgMypE&c710ECGKcAkszAs- z!>mjFC)KL8#Grr1#=q~skHUw?_I#qO_IB~&NSWu9gok!PHn$4woz!eI!nxUGX`I~J zQ`|QIgc?ZF6KzsdV zIvk@I^(%SjBVGloTgr|8#O~%Z`3!^Dv}lpZ?Q}E4Av%u|4Yt{>I3_FO=~+no#!)i| z;sh9?Z0^0|atu(rpx@M^i`)bG9SayX5&Pn_lNFXfWYHTX9EMKpkd=B>GHEIq7I51|i;oru$_zp0()vTEz+Ac>?Q z%pFsH2HqUWEd0>N^e6YLg5Zk9IO=@-SnKw0lv>xIdTlnjS=G!t0XOj9nsZi3cJo!h zd)*|{;2T8dH3Jr1Isv^lo+?pqH|{*?6oddU)gqV`n<=LqBc4&S@sciYfndwKiRxHzldfsq!de})fnbOlO@W4B zmJL{10g)gVKO5JW$)4$;^`>mcONQY`-J%=qRuL@Wys*j=NJdcOW!5yzmJRXRyPcjF zm`|`yYpslZK}5x|$z*AnxvP+|BB@KW*b};N3VunE71YJ?2ejs){HYzcUe?2STPt-j zlY|ot$P5gNx}!De*hyls6B+gWcBtRe_O!X3nRBm%F45-{A%uuw)@@A zb+0blqBYHOIIv-r$F}cp4%iXd0L%;j;6=2o)Y>J~*Kqme!mt}*_YN1`){ygnvIsSA zkoj_m6t{8y=}M3zfC!L|qcN!~iSGbxLalyh;4A>Tl6^?V1}5RnlWi+7fIieNdELxr zNAkUj{n9_UGR0e}rvdn5?V7xwuRn(T!EHSd`OZI2M3z`ejs&1cOZP4JyEs)Hv+;bn z;q%(xU~+bn(^Q=$h90LLu_&^#+e7E=Hayh(H;q0woshmZlLLCY&H zYwVMmcGft%#Igc_CjAPo|)zu?2 zO+rL)l_sar@oF!C{qo|QbDz%`DDmFvaXR|um5l&+D5Vl^lA%n0ES=`me)Ea!&QhCq zg(=OnBpPKkG8>+WK(9p0sUried`>*1r?gM5>g%(R-^8!}L=9icp{*K!7v>FxS}*bS zcuY9PcCcMLrH%vpL-{nrs6T#|%kT_p--WAcXhEdiHu_ zcn(onfZ!0 zr*U-hb|)t&$7DF|p5DM~@*uf!OEFZ(-Z3(VJfLX0K(0nvv&MWkLj_pSqc2&Rp^V97 zzmVmWYVbj&qhdC9qH_vjByknRujy{O@O2aYSeK`ooUNyg!t#vROtXmu1w)iIsxrc- zE}CLS4?`JRH;ZaaIp$vi)3h;fmY-_8Z6%4z*+I6C8=_D{h-f=u*O(Qq=vO3=MReVP z#_$}01D1fmhx+RaZKiN}0|LjklceBt(7FPFq~Kdtkby$M%FRKW^TN%SPW7e!P%av%x>~FBnF$LI>yiCNybu(T%C@~ zA%(84+sXkn45$pKr{fk}R>I4YWh+)lo?Hh>3-W36|A|z15b>QyP28Nza{JEt7$Ix} zUD&oW^K6zoj*Pof^R{U*c~7JIaeru&6Jgu;3oeS zCoa>e*6)0F^UEJ|{%p(|pntW7g=keuzRo7NX(-r60!%j2_!%zL3iH` z>loj3JTJVT)^fJ0>+H>{+=Vwl!hW4rDB!=Y}uZHh(P)d z<``go@F(&$20@A%H-+4*^5h2}LrwM94r&_qoLX9cwn)BfQ~8iWAnj%|8A?f9nGgru zZpTx}z^&iKbUMv50V=W29vRtrmIWR+#?_p)yZD6=HjM|Mq(t%KX{^LeRIm|cFO87M zqynWWB&dyAl+mzpv9&Rwe|*KF7tc0x`|052_VtlI8Cu|f zFip@d{K5{@=c6CD;2W>EiwE6hr5U1t{HTe1G?~>xYw}G%r(rIBZDZ%LCQVPi(Mo{S zEqLDJWH66O-&|6M=6lYuhMNM<{pHI2XX?A6?dW}lmeUCwKgBL$$MU=#c>v5O_as0+ zH@%;!G+2-l-k~YUc8m+0I8&%nknyd2WU!YH(|6T=>eQMS!E#n6?*W!Z7a#RlcdY0# zXTq?4ZQYjk3!B~Q&tF%uLHFaHWnc35LxCiv=|)Ze!{044L&MQ*G0f?OsQcl)QR`8f z&qvd`-bT=1;?#6aj383Cf)=2>=d>%?mJnTvw$GyerCg@Pd2y$-)XhA83fAU@+q&_t z|1M-)TiL__u>&v}MjY}ZNXLuosFVVL4H=Megmq zsM^V<%Ml3ggDeAt0eTWAE!9EI7tfPXE;pQzxtpT+l)P9f(^M&r6j9|gopjelW}_g4 zl?KELXe1Ivl#_%qBLGFovvH81a4!v_1CE!x5kabf!;NIf)?04?R`zpTL8p3=eHcvh zqac#4Z7X-A&RSPhvM)VvCzpm76|Qg?YLf0brMyhxF$n4sUZ!l*d=o(8^>F8mAFFUF zEchBEKI+ye>J}C26UrxDgp}158(O=wfmY`&WBowE69qX=DnC)6a9kMRwthywOU~LWD2`mF1_| z9g;`!;blZ5s%Nhqhx05l?9cqQ@9i4bQD1KHg-?sb(vUfBjdk_K)9sZ1_TvZ0WV?;@ z0y`aK-m2U zk=9Hqq8+VX^e87SkJLgx8#&dK3HVG4wAL1@AFo4qm=AUFkNp=GQ9%9n`vw<{Az)Gl_jMhUY3 zjuU-2;vk#uecw>*k>w*^UnJu|an_Y@ui7UAPk;z^%3lux$Nm~Wq7I9l8*HPe3D1M- z$?lDp%Y$;nvGDyA)o5o~FNT$T697R>y#)>i{?&>7j_Sp?m#L_hy}G$eO!nS@^WAwx zt(-SzSjfZQVD!W34@3Vc@#t-H?7~#FYy%ttA%kO3&Z63B>M207+bp3dsq<4N%*J7G zx{_Mbnmk2@t%j|T*5NveoDMJ#tJUw686p>j*#nAzM}5*J&FMSMc-KGFeUGxYCLKLh zBk(03OOnHZ}y;Lff&UZd8$DdR*VmL8j zlt>d@5L!~Gly3~>IQhfS9))>Mm5=%~G@nlTRxIc01#IZ-ApKA8H5*ypGiCRcaCS=| zbAN=KAfUF4Ao_R zx932SPzoy5m{cj#G7}2Is0qfVg#GRc1s}9r)Jn$Dr~{dKiRaC^N|O_KuGO=t5OwHq zx$`00q+kEfay|F>$5HKsccwWmnK;xw1v9<;?DfglAA{>>cLa$A;3LHA!;Bw+B;`qC zz`08#7`*>OaR^M>_x-nz`Z|qY6*u!SO`YFfKxawHI=pWQhPZY<6zjIN0vYH+2p*j| z5xW%>Pzu0+>P{c1T?-(to2F)RX&{LiEgbCMMnQbOTU`wxB5e0S^3^pmS#BUkXtKj@_fk zPtO4n4FQJe-?S4DcvN5RKOuG@{eP>z6leuvvK6M>U+Okr{7mO>6S@S%ZWpG{iO)Ct z)Av_VU^#E~5&pbTfExEv&WdF7OC1?)mHU^^lLAw0JpI2Di~>gVycF#I%U-@C5&D>_1Nmxo!X| z?j~2r&EGbF^L-A44nw#fmVZ4L?*v8y{}=bid3p>KoM~m*iawvQ{_-KdyqZ24gK3_3 zobG?y0tZkl=OA}|{#)C+*9x@St@VvMPNaEa+MNGwGiqcY0Kx~0{FTFboCH9s%=^!J z^~x7fFK-Z^Y+h*`2Xrc zl%GH=lTqJ@qcW=e2fu&3^Z)dq!UV`GW~TR=Z%354yb7Wa$Tcsa+{er$!3 zmBfGLn1L`(k5!GAWf>_U2CZ(|I3lXA)q|9 zs$YJ#Gh3ZcjT3`iYCc&cI3hYX?gU6{dt*DNP8L^`{F!>VSd8z(T#)QRwP`68PCds{rDsxfk%vI?7Q)fc$)+BEL zz!H3Yx^;v%XEgq(GosUg+T2)AmCRZ>dH@Gm>_8H;eb>f!gI5|!{ubQ}=Z$gw zmXqcDv&p%k;Qs5j75Zv!+2+F}XK))T60CL*VrkRV*tGK6PTIZVyMBI6RrfT%9%T9s z%%C;)b0MEk%%8q)X0(*SHoLPi#ga&+{Lthm6b^w9`JH<$lUm&DKf56Ar>OY!mOzzQ zg@A}U1F$Ye+KmpqxI_V#q7lSNia$k>&WjFd%-Cw%>T5Q zqi}rzVgdFZAZb-v0Nukb05=Ww8Aq4J%tnQ?)%GBPJw}182YZ6a^DA<{YH5Mh)E*F) zC-;$g0#af&r`;K?BMDa1l>?7)SljNMS6$baC%3Lm{S1PTg%wE$*JbQE=QhRjfd)sX z8ygj!kW`mmu!`7%kSqAdTK?QpfBe%XN>glk#)=@6U8S6QZMJPR&8z-Mw(DyZb*>x3 zVU>8cpOXJH2j5AlMluASsP>BHFFtxNw6Yw@xDSTR&ih&rUiVr++CaasZpUL<4IpF( z$I)0tz;Tff*rOsBU)RId<~J^_3d`Mev#Wj6W>#p4bP`j0^Vyu3s$}HLi5~ zD7^HXlf>ZsL1$_Ie5D8bbKV~PTYU6190!tI`>eGVfp3ayyTA37<|8^UK#OF(`*l4Y zS7cS7PmVPa$NLZC<*DZ_9b! zN^K z4M1XA0o0mJC<$72!Qo{5eEU_dthUb2VZ<)Ke4PN59t_yd(rbx!#R2|o{;;V^?^>&f zrs6E4<_zUX$`Y-!w+pv`yO}v5k$djPX{!no!A61YzPTK+isY#FXKg&TVh_lWL4NNq z=*LC~_wnYT^gHJTp9N?;Ew(gc@IjMU_8%kWPayzvfaScbQm_0Rz&#E?sJUo!yKDdh zYZfa!cJR1wQ@QgUO`=WRsw@)B0S`{VY#hdFHueL&|4odv5^&>G3weMbY44>Zpa5qH zkOd-z(c`%!*OT>GsM)yRHs_YgbD7PF!Wa_A2?eJa{h)>rF5qB99i3+F!1_Rv!6T+i zr&jTuE>&S9&vZ1)2`I~x>6??M?tX_d%-dMq0a#Y(WD%$zpv}06IPDCr_PQ0(Vf9ZA zt=5NzJ@vZ!lx?z4_&s~x^V%tO7|cER6gdg(VV8U^HE2O)23f9^pX^08Fz@A?#aLEP zBZ3;&!4I1%_>iKP1Fi?4I_ay<2&WxYuBx=XYHJ0}>(08`iMj5Ma(>Af5``i`h#hML z6S(bGzh>d6RHtg>{!%~ij_sz{Ax?CFyS5SB*eJAEZ=5@rdaKdci7CfXuvn;4Wyi{H zHuVLIK1#V|IZ36&l0uVd2ThaDyH=HMQ=oVk#8zlG(5q4~<8?lFp*v^2*u1pif&DZM zbys_YhFE7>GcVJA2I>@Es&?tme0!3A(AgBmosw#C*mlta%WG5BEc7>bx#1fE=~Him ziq!As81@Nnua-%QUyeQc@n@;lb{jda)k~ynAZztkAK0w>Ahlj=ReHB=Jn|z=R*hb` z79<8nn1x0=Dj&}Fj|giwA#!6&Lfo>@iS{5@U%$Y{T+40?A@EJx!_%kB8H4uttcUyl zbSe$9Pl_FW*s9dKNX)g~>E7IVFU>?B@YS(;-@YnIn1y#7xBo%7(KKn?e4et#P?11l zGl8=IYR5~-StYdXZoUaWe@?fJ?m3%ohkFDj$F>XiX1%CRSMgY_Tkr5<%WaG2!#*ua zx>)HhP51=wXrG&4OLQD&WmYb2y~*d<$m-pM@_d)!vjIJ_W#3KaY)?`fWzXT9*0^)x zY1fO0W6ySLPIUk$#U912gHoL4-_yADA{s zk4a3*{AM^D-=-G7@6WMOA8BGgQW@UtzO6hhvbcV>v%81Xm~;_!-Siv(pOVx|In-6r zk@w86iO6J@BGP~ZO4Al&9RX;207`ns*R?udm*}Bh2&l-$3!(>SP15&hVDFOm)1|YP zN}hoM-HX0Z;Pc?wT>!t^yPgNmGq!xr3lhVLH=C)@cTr?4DdGe|Z!_BLQ|z}-9(lPY z^5hhS5#zBO38#76o(8%SK+gXNKH*;mTQZ4>xu0zt1)$;A0*uHkfIWT7p2M*Ipd?6S z-G$1!qcInxi^}%#^40*n(|y)n&oAG0GPvJa$WMBIXELV(xpl#W@Sp7+8eSY-_o5+iG;hRKelyoS zKR<-_@IjLOA<>?p&W)t362bi-#wv|p|HxT)hRAtu*J>o4)XUiG*w1sY@dB-b;GXIJ zz>nem95<%cPUQaWSz1r^KCvm1`*Mci-Ud05m{fNrV8U62!Pd9!!j^2*^g>$XODBujagaDA%%K~&<4{&fBa zJx#V-a92MFqiEUm3dOUmHbB>lprj}=Ni|&NVbt+%8@JYV;gzc6TjFQ(dK(R)vZn|P zm6*ysuMb>t%`qIvgpg7-DQ8-rDck1md^J<4Fg?<{Uh4O%Zfo`tD5PO6`KtP{)0)=% zt`||~))o;xg6jl<{kpdr6XtB)?PYqFz@6dbX|Z6ENCZ0jW?PqgMzTSc(3axG?i%O0 zn#~wcWONB$=v%9eRP{AT_YAGK`AKu2HdU&%4LT|?6OoEL!>^upb2=~j^@EQ;Ica?Q zJHISgvxgAF`+3vl1o>eO=0cINt=`_VG)E12t0dJHlWbMO9_#eB%X%Ya&mX#MO>HLH zHo@9%nhbSGqfc&NiS3al&M{VZZ-*PnH(yC%-|O5%O3&_T)pEW#hhw0hXMUdwl3O4Q zv-tHRw8?$)8@=Or+JQqf_;BC4Enwqn{C=T!5ab{2y8M#Dz)y9l_3HoQ?meTLT(^Gj zy;MY+xCB8!zzWh;nsia=O}ccE7E0(n6a@hlrAqI;gd!vmT8Pp+gib<0dI_NuN+{=M zKjXY-Kl>TmwcamhyyG3i4=@;D?(4qFob&qse=}RnpZG^0`dgsxoi19;0T0&)xGUPv z2<2NFSE|Ru@j9DZo}@3{!M8e1McJoQ=;MCP4_%j2mp13be*hle^Mnpn!dUbZ+`1W$ z`z4lSOyrVJcvx@o?!RX&BW37!a!<}m2^xty?M{iw)Y%k#(U*I8+|#&0c0f=0xjG`4 zlT0?7##F9YhOws#Y$RepR-Qf5NFq=VP;X#bba%GK#w1o^X0$K5;kxVcu~Jaxf>c&I z<-;LpA?z1yAB_G|RQ5Iw^|eGg+)!rfkaQ|`*f#*#0wU@QR7j(<-Lj!-zLZkck>sC; zJjP4p?k$K(*Ki)! zn2{X)4tc4|!a&H4;{Y!1@vh7PUYaWm9Samml$d$>4*4ZUKyRBm>-8efXZ3RN+t$xl zHU79o1650U(rSosB!o5x>J%*k`7vT^uD$+I&$$PGLPK)v<#%w%hhbrza|>6`dDhPX z9{>K+v7S(!Se5|y1CmeUK+{v-PeCGp&aIN`N-l7g`Pu_=j=EP-sIRHVNTBvn0?4C? zfJ<-OtzRl3Hbos#T5<`jUIz~wYt?2%lqyBy-pT|>-Whjf+PG**YHzP|3E?r_54wHy z5D-%R>6*>h_G*ZHBP&h)YTdn00pCZ+J^bI82>CB5=zAcC%Qg~!1%IzAIRyQXI$gw- zpSk#A7u6VOFb}U}^D7UJo*ssM#k)jPDb`R-v3r1riuVV8HE)xO7q@=m9X+>P$-PZ% z)I6Iho2c>EQFkMXIdr5>g%HM1Rp;3gQf5vLEjvz#IHP;Vn&m3VcB5HmET)--&mO7G zkTE$L!??l8`{qY*M`Y>f%2J(+?ggemn}jz$H1qSq1LT%WJ!h70ztiewfhO<<<+HC0 zpV<>7a==|bAi;;sAWs!DfsauP@k7D`RpU3*;)6K?tgX0pDgzswTlkhlVRAcx9iv&x z#{z+e-I;GSg(kC#HR{6LWuP=0m~kqnV}>mGNAm3X$^^6Pov;jOyQ_TDRCN4KpYakP!~;sN8JE(N8`5X-5dZNHZ! zTBhL_qN{=vf;&!q3*%^@hxkqTr2DiFd3I3Po_!A#_RaJ^)H-{Eyw^Y}U0|9<4A9JD z*0rES(1}mIX|JjuR6E*UC?G&JHNtFc@CL)7*-IHl8((}0FU*-45ah?OM&|u2sUm*tzrE6*nGwH^4DjUH;(KiH4C;gx5e{6RGRA!YL(uXZT?Q?^J>*mf( zm;_J$LAP8WAW^1wMjzP$PMAvICjL<#SPqdEw*{Ew$IfpbgD=xm0uDJ#D>|<7*tkr! zUJh_c=bo*u5Rd^hsId@1-(|?;jz6!89eHlQ=vYUEzium}C{Ao{q(J)GCnUkJ|GH zZ6r|n3Jvlfa;yT1GYD_?a9#iBBRA;peq!Y9=(N9f@_mCnp@}YmT7&9YQB(8ydIe5p z!F?d#d`C|Y-V$)SF1Tm3pF6ac7;5{oU?h+qk%AGf5{Bwo+p)}qG|zl4Z>O#nkk2iT zp}YD`uK7)8(?4c>j6_NhKM9d)V|(8s@@A~0kfhuk30^WY`gfhG;g`X)IGf@`*9E9V z#x%Q3Iw+Q{UJU2hbmyz+M!h7*%>>7pr*!GWq{f%QUr4ha3cb!1yrpQ=40Q2s}!*F$| z-XzCzpPxwQ?mk!{;X}U+Vv5Ok!&LgnevB-6DoMP5lcdw0wWCwhQ*J3-gRJXQf!=5E zce2?_i)NH%NmI#=Uz7frKKD6fXKewGd{(}{p`k9UYa<@0ps0(h+{Y?E5*mFPXEA@8VL(RL*W7BpR``DhBGND)^HRh0|OG5 z25j%UQH8u=kKwF>YPhwi%S&MxkhcPCPXPQGxveRlUw@%P^H>45Yy!>_2v z9`9$p7KYAJn}cW@eSB!jn9h)-rzl(8v`FrW%V}2av>=cgaATI4EfLwhnV*JA{1$@W z5~D|=FZzC9P= zZip$YF9g6BoE_elt3O=5XQ+ckijT6p_|Z{n*((NOjX=c_koz)R&8O$mY5}xa_COI1 ze(~zl+v5#&@>;*zX}c~70*-}Z6+nkp0#s%lkwD472mnKr0QEV&tmkBiVL;{V2sm@< zSpt5&CkMzqLv`?h&3lo#A+p)nuMvQN`kwrk?-8s++;Si>4-a8a2Sa^D^q#B5@uXXS z)zKclURmTK`PH7UCM^zvJb=S4(XtKyf-tni?upgOOXBYjTn^pK+H6)#P(O`;W(-SS z>Fhb%Wi5vkvP_n2w)db;Upokx#y@?i3pJ3i_X9g2rX*;mK|2NO)Xxvu3vR3f=hiSy zkL}nbel%%-WJfyerk!+dkWonU&l0YC!goKXSb_?5)WMhUs8hzaUrM@NLV4>V(lHu{ z>V?N&9yI&yT9gDD8$Q*1_QFK}(8Q_N+dt8U^y)id^Vw4n{Z$MQ^1OyQe4;@Km8zs| zHlEC=_p1{xsKuEqu!Uqd@f8G%=;Kblrwz>aZ1O*mYDmzJvzX3qo%9VntLi#39_n1| zPfuDQxI^XwW%o_lKLqK_(A*$4anXoR&vVFaG+Ua#+iV!y%kp1@Z(3V~)_={I(`BCM z9&W{CR(lLC`mp2nF$HgWTu(cIusryg-cwL4uQB?xbF6gjPFTGf^>(qK98Vgk?UY=n zDx$w(E@lzp@Pro@aAW_degG7>OCIAdh8ypqKqmLObvJJVs{n-~m zg*m5H@gsK!YnIBNMQ~3%^vhvzGSH1%87)mobM4}i6_s%jT~wnc2b=n?JdnVbz$UXP zCm%kDQwAI~P2JGqFVz_juh5%{6ol&b%Iku4SV6?KG+jeiI}(~;`2aNZgY?jUtu~=n zO>Gqd?IkVKh?YbKmXfH$*YB=)*Vw5XSS)5UWnfsm+EHQfpPP-1Hz%eWnWb)zN1n$p z&QDvZ`i6-YgzR#hK=$2%N7Ao3#a}Iq$CfT2ZQs8KdEahG^J1&*TnvnfU*uU1;VIkX zepgs}vO~+_>2gnW?QAPjW$vV3dN||Oj!{15&(WDrE{>RQHog-j6t;03ZyC1b0ik;n zKicE^SI)Z2Gb>x81fh8;Z28+bNeWC0Hc&6$B%u9dw85VdQ7mmqyD`>2b@NoUD}|Dr zN6WO+=#d|?**qEa@V?|mp5xMZmsx;n4U0#HUbdg1GrGL`dVoj{PiU~wOr}~TspN#N z++f14YBIlR>Dm-Az|7+Lb zix#1)>d345kUvnDnbpR#f&HS2&4Xsox1V1k_?fBm@@@)SMYB41rkYV|e@!|Z12Sz8 zWcEbjA{<9r(_Rz@=1UG?A)C=UG;-~G@bhop>?JM6!H zC*@_#@4$ucODHWlL4vOHiuw)@>NaZKmJAz|MP}Y|18lVlU=w|*-&?ii2LMT?)6t{A zbXf2|E*7E8Eu<=XIV6ZNb#J^NL|IZ;bU_smf-gef_5gL&QrR)N7%k-h?F2QzQB)(d z8X)R0{sy=ksXAx0ojXJTw%boX-Oeo@OvB!&ktg6YuJ=ik@TvwfSMu%$EZzX;DYz^r zyBnw;_4Y{$LgIw7v8qC4pQX;BXn_rmv5v^S(U;*1%ex|``pQ61q=68Bl2?{vI4vVt zsJOGe2M+q7?BM~O_n4U#^~j6SG&&dwBhEw=-#$w8>9w~t(Ky-e9nJ+Tm5-!0qT$y* zbGxdZN9jENsZ-Nb?*QjYX0PVYT_EbQ3riav{EG6$hY(4r<-tDa_ZJ)1;m3~o!w(dm z0<=>@OIudbCBWq)Od zCmmaAr0h&Vw-{iX!roe0tO7#W@v&oXroK@S*K=%j4Q5$i+IXO=?t$o}*mdDzaP)+u zu*pS}a9oy0eR;XC?a)uw&*`u``_tyJrmWH1SvUAK2l?6erJ zp80|M`AN+^-fFiMc-GZo5bPdkXWl?K8-}Y15=jeFb#2b@?KiKjHf`}7)PhhcCX__p9lO1>e7d^daowR3iYLTd4h7vPP_QC$3H|JHk z#Yj2ge&w{WT;{$0r_;Uq1B(lIL$dDTptyB6nSor3vju!4VLA|Duz;Znq7lx5@yOSI&*#O_bWIr}Ll%BG>z+fzjHU1bLfIwa-akxQVD%fH%*r%A|p%)e^#o zs^5v600A5TJdwItgf9ec!})*4tZ+h~e)bin6b*5>zURJsF4ne6Fj-^(XmrI;2Rc(x z(J*bGeE*N@A$Hf*`g>$;I6yi4Spk4W`^`?k>&49AtCi<=Wa4(+<|`5aqadIa*sA~$ zq|9r*i-Zd03dK;hukmq)Q{2v;p$A`E& zK)qXKiuARrNn7I|$d;o5u#C}E&!o0m=q7N+%6J>V9JETGK&^t8SCa5vJf3TaT(B*w z+$5jgR5tc5FG3>?r!7@U$H$`T?f z_@)#NomJe8XRMk+4Ja@l#`@QVJC=i8O)rDl*d->q*qz@bat}3=QLb5$yiNLxN{`%< zaBdTa)!wqRpC4~|X8vmRaO(Ad=~RJ03EH!K@$QC|kDhr?K@q0ELVo6RPR7?g(hgzO zUEG2q3t0*-Mu^{87gwBIH0U1tz4U|T=pwMROu(8IZ)l$sii47^7Z;gR)a(bbN|?5aD;!Q*>C zq`d_ikf+;$m_%?H>wZ@>L|91ZtFma_Nbr(uRtqeTNIH)cSh~Z#LhC+=&t&5#D|iOB z>|@ru-l{vdD<1rFx;kD4S3=k=7jMlmSy>qhIpjDpj1cbLNhtwUUj2;O9l* zAMU-)jpwz@IXwH6`Sq%hW+4aKy);(2TXi7+yh=Dc4OH(uz<|ca6D`MB>zF6x56l(M zwTkwm@RsA^ps&+=I!{4vzb<_7 z0s*o;aQUDDTz|oe9Mo0;SrdRg>}vbMWMSr40ke~@7D@iu1poy;$TSF?*+wA!{PAyS zSH)MlfLv+IY6rDnXJbd#qhfXY__1IPEq=AJs85Wswl|_4nZuV9H)<8jasTM4{|Ei5 z?5!#!PJDII>InMcJkBjJc1akqMWcI}{pV_{*V^IA5~r0jb~lP=w{jSDHZLlMBQ1P- zCGtV%^J}4reF=6Q-q~p%l@_@uW`edJXtC9s`4QZ#W58xw=N*l64-mwDCvNb9=YTBE zDC_Nm$-0yNB3ta)38yxeBFy$UDjxNIvtj=TXYD5Ajmx;P1HGn#*s?Y0KG|!3%Q98v z(sTSpe)}$nt}!8@kJM*cyV6h-c7xcnlG*FBWM)Mpj$0;@7P>F4g-1*9I3AMI1y}To2=<1u?bC_65j{SGUqLFxpXtg&5Gir{S=C958()gsMXTM` z+2++}cK+08b8lwcXviLF+90eo2)YV_VsWI~f=f5|I{UnzI?zo;)P-lqsJ;GR{u|*a z;H&^_$nLi&v0rXJZu&;08DZJ_`3428Q^I91a3>UR4jdQv^b6(l0(PP6Im5y+(_eKO zR%SftXs8t5-w^g-&HMc56GlxGXSqKGDNjKH4p|Jk>ckwg~9nx8aKmWLsx*`+RX zZNwwIgp4#hAaek;F~!z9KpCS>ceK>V1~39VIN>*nqrxD;j znA|;&WC3Yg!Y)S#NTzcUkU&fk0i0(2Dm^#qn|^8OnE#h)k6~@T$d4;W_ZM$A6w}fO z5X{@*6Fw#x8-ow4#X}H19!`B#$7GZ>x(c55<~#xF(9=I*rI+pA?&KITiiyWdZ@SZK9J9P&d?)w z0VPm@$BOj1cF1Gx{m-cM7MAIRK^a%I-|$p*890({L^cTph$_6`FUcswKMYKN&U&v* ze8`M%5djpw4Tf0QoQD|vw%#L0@Lh?AOkW>@+@_iZYFjy^-Tj+Bi!ko8v%9nIwIq$q zIqK=UAD89iU-iGgEWWzQ0S3fIY@T?(9n7ngqsicvQCgYU=dr@X@q5aS)-+<=`M&@x}*Vxmp-BeoS!Ejo? zA!e;55O&CG*Ibku=sC?q(v|F}liY8Vh~#4##s0e5&Uxx}yKmyZ602ogIrszyw#SfK z0t;FvY_gR;rI)Tvktd0@zif{mS(&jI6QQs4f$r-X;BMi6TQO#$dD+Tl2j(yuN)fiVKF5dhnbZxFIaXFxsFtLf546=E zLWjYiUdMnIBCcHL`$D-XlVt|Y2ICjf#nsRj+SJ0qHXhM5dzP`1ZJYLE27b*a)}{v* z`3%Df8~ToR3F|pdLoDo-hHBV4@X6s0El~^M_O?1@ZO*;m&W1tf#X;_zo||Vu{!ivl z6FqL|h|R^f2Sq7XUJEXsx`nIM?l~%M*>O+FnGN`&;c0v-Ur9n6V>^rfx%2KJx$m|k zP?)sQrF$f7LQeX&#$%1Z8%MrGWO=E3EoHSwH$#23?mg1nSjdEU=%(o-pG2r*ggweP|>TBtCSn?ygvntZwa!;rRYlb5wg6sML;2E!aXt7$F)DE-nV zbB{@bF~zB_EG0&5UjyJw05Hk#9i)wd6Pfuchnc33(&r(RWlex)(JE*})Nv97 zT=65A1P7(BkCmHE14t4-k6g1M>MNDmR-Oi!yXonM+{SNf& z)JIsa`@a@2EsGg58KwtwfTkOT2lJ`x1a8vO-k0DHtabi)Pvr&}o^`A4^28yitgNc9 z4vCWBn^@p7+joep5&O?gP2N!GM;eB*S zgPM%V0T+6(SpLRVN(Qb)>vpQp1N;M0FTgAga@TKYfT!7O}doad{fo^8`~Gi${2;&v@m=qaib98{+lm z8v&=J{%P<;gMoQnfgQK|OG6}G4t%eCis`(Hp<<+t-`MfwO#99ysD z28bjkySpi;WrUD2wYBnTMzT2|HM<4xT=$Pka-+V=5k^jgzJ9Q1?B>1WaP@aGuq%K& z;}ZQRa{6kY^KvZ!gmK0x9I9|6ulGluh6anEeYV;F2fgF@_4>Ko)S8(1*uvNWjBauIiTS>%`+PY$0o`uv?=A&vkCpZAnl?SqHz{lwSz1ke_tLvj z#t;3DLhtC;ixW-#t-G3{N=&Q?A~E*>NtuM03r*z?T9TPa@vh;0zo}o-c~MQ0YboNPLiVe z_@d<}pW1c+WUPONZ!c1hR6<3^8cJ2emwsaPD{)Ac1s7JP)%AYlI$QJVbb!lGrVy$j zGH}D5##Zqxu<^S!?KKNFnb;f-!H#(CP8$4dboPo{gir(*Z2dsvX;%A*3CuyM>=HN| z_c6pvdbMtpzl143#_lw6ozZ(Fcd*WP*gHE@&2u9dcL$WSlk?kC+2_tHq^}1F*z6|D zhK)2cr2SpN2!K2cXW%m&U+hgW>6bh6K3h6$usdwv7QpV<*?b}n!ELo6fU@{{ujeC` zcwUzgTWJ8bt*^;3)l~d?2&yljkF+jF5-Aw~eQvBjAm<(h@Wog_l4}x|1U9Yu2JjfL z=PHVY<^#NvSTR_27DI0v5Y{V^;nrXI4kkV@y5Jdz1M#uvNf0h^b zoO7QYjoY(UCB#MmE4}5amP*_^08NyjouXzdu^N+Y7@QU-b{wZ;WgViQCd;0#fBd9B z#6Ex&utcsFSo;ArMZQYMUn5eu`lpHG#PJ4rv_+G60x7>7=d$~F2eUO@FK2_2Xrr>+ zg)Jha9pmg+=X56~ILBMM@vVrr@jHOjv4-}MDg zdtehY9fPHPB-V+2M>53qi_)L7&*lzjpHqCeUgsWFeC0FEOIi9>(~8@#pUG+dsre`S zo+jIw=ga83pC4wvezi9KXWZS^P_1uMxyrQ2MHv(YYz@4wCEzV4z2h5##XgZB0X;1~ zoJ{q+2+lpVUBYBG{pet9%xF^`dmV@?ONB zgp;?5q}@IYUF(B0NGnTB8(1P>Svw!`Wo&ZD@8tEyuv?x%n4@P03u}ItS#^oY16Ys8 zF;q-%%s!Ui$!F-qb@qnITJZ~UAzF&AWqbKB(-bM<#lyuz(!xQv(-Y)V6V5yy-JRm8 zDsVXO!4}J*=dVCyx^6>=LF&Md=k0&6PgKeH&T|-S?;LzLGM!lBD;ljyTEjHzUPh=; ziC)$pe)lpVnvSsML@v!Mi1J?g#l6TpY+7iTWI;rQ3U?6qzZ5+ohLAgKNT!*o;As?t zMe@6EI+02mtlh0xvx{2yq}Dux%O&sRw%_+Rv&HTGY3sMHYl;-lLR$5*o+YVz@7bcq zTv8ktrCL7($nPstUA9dup8FArocZFOasw6^C%j{`nk&VIY=es0G7Jj#cM~+OGF|U4 zOAQ{&c1(zyi(G_+hB{y-4-F}$tueXSu)uLEO#1r-Ho9%*j^(PjA^bD1_%sV@+ou}8t)lro%*;6f z#I(vWF)@~a{N1x9v*F5*b9z!lz&X%@iV-o-_S9ym?O(28{ zRkQa5;=Tv!ILG!SmG*6es1h09qI0!8KgJ{Ly(XMLUM;8NJq0+``P)_*kOtk)@elb( z`vf&A-UG)L2+zEG6P&NYva%GC!DQ$#oo+HwyfWOk-`S~;vqKy@Zl2B43cBm4#`C5J zH-PG=a!1`#-mnQfXTMNtwNMgjzP%!BnE6Z=lIrN4^{c{~{_>SFe7eL7R$m^TKOP}W zc%|$Vv!DG8im|(J{qz_5j{V&Gv7<(*Bk^h0>jPKDLItZt)2YgL@-CGr{z+2NBSMnT(m$y2%Guft_x-my^zwN`8fw}U-9`8)u?A@PIln~k3J83fA zu`ZOQkvTF`VZJbj1QO?mODqw&=LJ-~K63&0N|GN1jt zR14lM*MfUf)H@F>v@c?>y*$dXP&cK3uWr9fedAk+zzwtGfY$N2d|nULVW}Pf9+7 z)H3|4inD*t{o6)NlK<2I62-Lv-hz`UoKvW0s7RaB05EI9p?z>^;C}CV#q)q`9ip-< zg1d?*dQ06QwA7og!%U}@tB+w#kiJV7W-ck~7ITZDq<^OFEns*kvlF^XvDB<64H&szD>NnYlgv_^kwzm>CK`Z}w3%XohdQ+T9i0n7v z)~x&w_oKT~5aKuByj27wCAmOqS}QF=V6_2Cf7<}Qz5~FWTLHm;ZJ8kFjcf4EPt4es z)Mu*XVAY!Zxp$FyZ=T=b($6WQ=hf-hA)UZP7wTn^$R*X=zZgNoL`pGyU%TZ}HNBED z{|4U?q)mtk2Myj&{WN~P(B;_HwKbN!Sr{wo6qSck|HjIdvKFP4$1@hyMH5M5yPM#@ z5sPX(d1T3^v8{eShbFXsYiPT+ae?eJqd?z)=2k#FZSdSsX0J)cscocASj5q6QoY4u zAr-x96r?dVqfBatGw@!9G)5TbXALxnQU`g#;EfBi`@_=flgW4QIf^M%mzvQ%$>6Mb z;5?j^&@~~I9@QilZZ-a0*DWAn>qSP)4Ol>*vlN58KJdZZrHW{NGsf4RrUEhTEp;1- z^vIE2W;e%vo4iblD&ACLTF;5OswyjCD*^Y=s(ADpu<=?pSB6wB7i?JJX2l+l$TQPH zE_`Lu21I-)2GSOA% z{(T#;|1-cJf&L{TTfWv}{C{_u6jIVFDk{ENE-Z}EV*0zwpt@#`te|NFA zlmhRqMyl%8&A&Urg#cK~OYPXY|NN={&zd{`>i?4);s3vu!^fB(R_y#SUf)A<) z<8F1+#qW1lcWG~5J{o4-uKfnDk!y7f1+1sTHUBGSxM2$elI%Mp} zlq%kS(kgQ>DAI+6!o_mp0J6olv**G%?Divjg1XO4LSTci8Aw}AnVxG|DpKh2=|<@j z*U`)MHK6Bz_*8)R6roSp|KN#YFRu#fS543vItl<6D@W4tEUv0bAI;evPUq@s6~608 zH&t`fWn}ql>{A%*S#_{Tw|>bt&U7Djy~Oq}$|NX8DGXZP0g96}t9Cr`iRx(!Rw9Lx>d1wGiB zZlhFRnV)~q-s|HO*}!nxR}vfNR&NATjPQ5qa-l+>HV}`|yl_=z??t zCux5J@s$SvI}aC{_MWZ@--%i1*6)~opz=UiSogBz*%tzCG3u6FVw!`xQZ!zCnwwAE zmg8(?;$9DPSioq_M!U+HtUxyo=ae9*?&Pz~a?Jul9m>vqL*PDi!y(n2N8e%M-pJ*C zN`o+fAE00?W4kvhnN;JK;;@Q-sm!R>v0bs)ZvQn?EnY)_=da;GVXC*gWmyQUi;HDA zWK=KNQdOLhv?n%wlD59abkmbBWDYxR%sT9w720$L7H1SPqGYUl z?td-k|uW24gE%&rV*t8xQB z#w?q1fJzs8{#W~4N8km6tC&g1S)kQvPzdpg+t9u6%Px!kW)HhhPqDinv`v_Y%X#F& zL)kA|17zLpevF4!_RE<2z^&ze>3en>=tufTQj0nXm?}GEKu+>v9s$O3>?aZds;(h3 zyBmDcvs-Oy`yRKhs;EOO@dwO(V)}{Ax+Ir&{+C<0?~TCJAH=rFRE)xH5^VKHxZ}Vb zpp7a2?XlF_YR(L9-H50a=>;2|B zAS&&o)>mYGl9TRqiW_wXd!c-T>tTDc$YtP6$$$QsEBP8TNKoeqctL~-;U2ETWAL)C z$V7`f;o({_jZZ4VJYfrGb3wH=FSAHK%*;1%odfM}W-4P4p~`=~vXQObhDxNnr%Gb} zDXf=CSUJ~TyW{d=XCJa?bX9+@6q~9G%l-DKovuvP4EEyl4er}C-48IWzK+uAC?z=J zE{#D|Fo?bw8w0nG42MkkL+bAVy z%lGbdQ|c_t)*|smM>4J&qr6aVh!YhH!Y< zrP#-29pA^M;m!JoV{Svpb)<^AeKdnB+Q*{ZUqGPoxOhxE(x}`#_-K%X+E>xqnsto# zcL>CNt@I~d^~u`M-ab{x=*nd;_`o~HDQ>LW&xUJw)<37QAD0nuDva}WY*W}ka#2ti zuwQNmCrq=O9LQeeC>VRlWuaR0Lhz9UM5O9{)UPf7CxI~IqnW!Bq^Wmm3u*m>8>+Nf&<+C9M?M&u4A%3{`DB zq%%$$s7U`Npx0rf&l!_WGO13v{Uua;ofTo6pYkdabw63C;~Snu(SmN-_OWZ(vBRxn zN9KeTe?u#u`QhF7k77HcRis}(%t*;p{0NK8FD?K(ZanAd~^xQ6(Ntrt*Mt>}M-7T9!+2r7~ z$(=A{PdKvZ>iS4!7YfECgCTjfTY7YXTyFC`9Dw8e@nBTMUYj}!w)y-9zS_IkM-n?JljAG=DOrK z5MDvDYWE`Qt@_j9EUS4caWRxPx>Ba>MwOMj7>xAazSU$p8vF;^s;mYm2_I!6`<69a zU2ThAX9b-f8N&9b70}h~=;koR&g&26hx!}8xlBhQq=wg~QD&d%x!yuDTs)@Gd)7r} z0u+h4`#lGtFB@zmRg?V>sk&Gj=R9!36Myq9}mp-|_aGnTpIgO-} zp%=wD9DAEwv=#S@kedAohIWJ1x(g(ZV$DSFTpP0JLUX(tEOIee*=ts=SAPWBA;j>x z66>kfD(}Zm7QGD;#8+>`ea+`&)Sp7ZtKs%ho>$$|sW6}pS;#0l>Sf4mh^iA8MRh@3 zX+9$>UtBC@XP4tw0-VIjNy0mX{$O@_bA?yxRBuG3D_gDJ^0dvwv?I?YC@F0w3M4j2jA_|n<`%>sx> zK2EDNQax>BC{=;97&ts<$KaK8wKp&Xh{H2ZFimuZ6X-T4+n>ym(8u2K$6#MqboP5j zVWTQ=Bq2+2Db2XHMpf_*o4)aYe1^RQeE${>QLXSoqFXiPs!%7@P1}L|8J@u8+uhOz zHohpdR*sJOkkOa)2ho?U=oY%6clU#G@$(~9BD;}$uHE|G?u=8yIZMwVOK7}eczW|8 zf(=}Nli{i-s^q;Fv@BqQb1{o(?~HJ`&!f~m3?6}UmK3FoPwey?Udb9HSE^h!&L6~n z$Ue1c(k#0MceyV4*MUJTU5C~{{svXBWm5|~Azj+fD|bv=MbGPGGe={5CS6Ep`&l_8 zcS4ENJ4HQF$RJ&C&;Db+4=i?G7B+c<5sqG}BQ(=aa&q1ZOf}-2j?8#?a+$iiA8X=S zG3iVYo~m?|T8I5)B$zD9NI|@Ja4pG!qsj@`I&1-F3UN8WgWWJcY04)35pn=TF^UIz zG?jEd{yINHzOfV9IG9!DSep~(F#a7qy0^8Aa2GB&c9kQCq}DR|c0+luau^@T1~W+b zvT??d_rl*tA6Xyd*CKLhIqsu2!)VN@Wl;GBPLYytd_Blw~vzwEK~-r1+w`_S!7su`Hv0pPx;mAIbshf3&CTkypx8 z+-X)>kNRMfkDXG6GbYP8Nq0f*LRY|x;}_rOVAaN#<>D0UbX)wI^rceXYi%z$IJ3NsZzZ5oJNp<%)mT@fk z^1B$)iFvc)1GQJyF=FhFg)=R9dgE_TB|s-(}QZ+eXr;lnTD* zv3WVrmSc0_FH1)qanIs|L}(?C3wuu8BIx;zUrXQIldtxyaUHQ+!4QB(7;y<^++!XM z;y7aY*PC48^Re;zW^5qe5+!_Z3p>1aEru#@XOHzo^@y{2J#nma3Q2PKN5TG!eMq+; z6-M%?MQ|JMgu?Dk`}!9WXxg#ks>g`^xhEE*4ro*Gl+T>5Q#7y}35e#%Uxi66dQFRwqvOr*Oq8ozolrvM0)pMb_u%0gc$0ky(knPL zI&S*PGx=4-)r@bN18vwxk2LXl6ZuP#IIYgzhRUP9V5y-RHn6)#;G-6BS@XpzUr3`r zGj&{zN0U@2Hsf+Ygy?&AzW$V%X!peXfn1~}YAm$VV|qL zrXJi$Qy#~1kV{9nOCE5AxYGSwcs^I)Rt9@1IoWsSmWg@&%7wg^9os)Rde?Xb*GK%; z>(p)OIMC)P5kfx`LK=UCLq#VC)RX=*eV=Jo`GU4XZ7)R5ZlS4=;+7~Vz=pseB6n4w?eZm`o zr;b>*xpKcQP3?-snam?3Z8z7u2jO4`Y8-D?8+QR)i5 zaI|G|_Y|(3JD~K$oJA7TbCC~ix5&Y}$E!Z0Pe!N_qb17AuS~^J9k3z7H7)(bEVO*e zok93Dcm?(GU&B!64R5Q+rbzeGMk&dtQ%Ky>vgW%^bGz#ffxRnKm<_Rwx! zPTm~aYQ8tzZo>AYoklcoXr+8SxIMpnDJ2WBnrxm4ugUDS+EeZhOJKKMIy|#|;~SM^ z;~Qn`5ZaaOGWXNG1ZX>V<$hql@O1L8-U*I(bIS4rmlwe+b*GuV9aQ$r-2+k4WkVZF zf%EAbdh@me^82w^``$f0cX%zE4Jq_&u+HSLbN5;99ezGD6I}%$pHyz+9p_~X{NB+= zS_r-D+Vtm2^Ao)1S{yLhF&@W&1~l7Yyl2ld;HjI*uQHdjD!GBSn61CQmx{7~&r1fD zNAACGI9Vro+H8FBQ;YdrfO>qZ=z%|p<{L#UhsxG$>)I=o=uy1)3&x4ck=@yWy13n% z9g+HEDhxgE>sQijCwk**Zr9-xNJylyOYfek|4fj`)N{ed4js3-^!fR&{R$Exls6cQ z!%>5%?hwM9sG5ra48a+}N=doOmV+Cw(QD3V7&AVV8hIxAI| z+1r`lo?>h6+d#nxXWGRZ*6v{8>AFws!wsFJ2Ov>0Ai=B`Qnm)j4`WwFT?&IlYLTOp z*UX}QDF^2a?4O(7AkQbWHkB$5ogB_hJ%H32j3GaL5!g2X&f&9qFRhzGqhpRL-2ctW443z|p05z_%QiB67XRr$?J9UJ*extFcNyHfdQnhj#(oq&J6 zu&{$*3WhYtAUQK$)o7|IGtiRUD!Prm1lXe-kKYziXVl6HeXMGyri~wYKEMIhD*20^ zo>t8){x3j0blpQ{(A-j7qEk6+Y{$u)@El#;i~Bad?@cd(w98?c7jdMOEh zi;q{(fbvGB`hH03Tg!M&g_&P8tS8`63k%a@N--;Zw)pqveL?MKKqPE^1*Yps6oIL` zz}A7he&M66Epn1tP~}d5)qar z?Cu;`q*Ig~=+d$>c?oPRAbzfGqjs-JP?Sxv;;PSERDtnDw%MuLhzw#rXf~qq(-j!F zK-y(z)Dz#`GKL@OzK)-Y7wP$i1)W6rYxxXNO9*Mhea~k&+fCHq)j(abqNtL!(Q)C& z&Fy;mHs3zwhtc!FoWzwQ_%jk`jvUQRFM;8XqTlo==-4JKLqo-*-n-V*kP=fedk;_u zWjtaD>pNYaTWvh?NNi2IskbNGzE@^<7^tRn(X{8%2rNwphWsIDnO3_VG-ecSQ-H;P zcXZWE3ba3(az1_$4!nYJ5kkB;M`qpvJzZC_p9yB*)v14I3I~WzJ>;)D-#jCdRo;T5 z&C|puonzM~YrEGUh}FW~@fbN~R@^HXg>{dO$sbSM>jhBPu+Q zxX;~W9?G>Z_SpUxdv6{Nb=&@r-^mg}r3l$7ON1mQdlHFI*6dpBjGfG2LP)Zdin3E= z&%O>>%9ec@jIr-ysEnB`GxNLL&-1zO?&tG)p4;&~e&6Hx{_*+4am>M(x!&h>UFUUP z=lMEcFX=}HXzEx(qU`6c5fxV}b2D*CbWO>^g*X2zJ0k7*4UxlD`vwwcX!&0^O z?Sxxc!h~Cym!r8+SgO^48DX_d+JnL(>hkHP-FAq~_U>t^)j>PkpXbC}oL;?*5m)Xf zyu5FhfKW=PyHO1^~#*ew8`Ji%NHLc)k#U)rbIEQ@j;ABAG9jy8fVG}Kif9js z*-g#U1oSNTRiz>3@TfA`Sugp?p>-pXJ0H_t3O_%K?z&~N_V6u4{szygcZ`{u2WuI} zKVwgH4a0F^K0wADTVPh%o)#GJ&b%6ry!%i-Y9QiS6U)Is6H(tNEw0nq&p2ouRjp5c z0NcBgGA_*Bdj5OMrC7bQjrgh(QQY?6l{P)rI}t{`g4sJ8;kI>OwgoR$x!2K;`}^2% zpR>x3t!$wY96wz8_AJQu%M(`Pkz<=N=dum8UPN%S5WHR(gEI)lvHmrl_qEH=4YQ{S zQ(AXfPxce+`82drhYjcIZC|Z=L4##XRm4~?^>1XW#UNiSAJwqZ5?wolL$(!8?FdN} zN*4rXE-U5?Yn84ZvEDWhml3rT#=+#>@T=W_H))xA0FsYJ;aSCA}o z+#8ulTvh-47p}Ps#%^z2oA!R2jAo4jkTgwP6cjNKmf-yA;BCqX>0})9s@i67Kp4uq z)+dgXJH?xirpE!E;J*Upq5=ZZb;P8m3BlSsOoO9@x++6>&g9#30Bu0|@ey{TqLmfW1I0nLrtse4GzU zh<#rDAMmkj zfimmkN#2y}#ZFJjzf5qu8T`z}O1E(PVewapqU5HlzIILO!*BkM+?=_~_$@t8OPPnL zr+H>Y@3OL5Q*WSTVy_{;Y5V#AaO}grOpBVI;{E%2Q7e@!U{WAvA<_Al_+J4v@`Sm$ zxtj;ijOl*`Mf3-xZ6>{1Bkj_z#&p-+O?4;JW-+aJlGwR(W^+%@h}^K*U@f#ixwt+r z`e0+>_&Jl3$Fk83{7CF$v|#o|h3n*9DkUwO$$FAro~?Ij!wcDhr?}IH>~Gn9QI>x& z5ti)XSbj{e;KB4ECv`g?AA<4X{Ah{&1~f-6XV zC3twKBdZVf`8d?q`P;i_~eIiVy9>2nVQ{--FLm&FQK?a+&X=gyCGWGNcWh z^EL}(+&)l`zN>nYIk8Cw)m3<<@{*S~ZhqPyTJxR;!1x_bKKypSDnUnT0aofBalH59 zJ{H5?TY^sR!C+N|Lb85AF#b=HH-G%Dr4T&nh$5tH--ydF09J14ZBIM*w>Q{-hW*8R zkV~H)Cb50P;`jm5NYd+~J;Q$H9Sq~j>K=d#M(KoDo0Ce;4 z+SKGxKKqUJs#4>>+l6hDRBvcqeh{boV1M`4Kj3~DXTbByMGx-VCoJyaCwHkmAMSVm z^?~8Da$k4cH#FW8Y(MwFU|EHIK19$G(1?qOK2yGLr&A4_&SmAsQ#||K;9kJ#Tx)%9 zy5IdhvnTqNlxoeqpF?kNEAYwf0m)}I#P(}dcX2Rp-MSaT|2~uS53?NM24?MZf5*08 zt6pXY^R_6I(7bQI84b+3bXkvazgA5GB6JZOtY4@9ep~*-EZ43BvwEG%`A;oFzfKWf zH^9BNY|$@#`}Mc~DP;KH?eO1|W&dqkUHRYb@Q45W_Y3RE|89qUIJ5s3Plr8}0!RUG zg{5B!qT+Xnny;WkbN0KX{I`wpZ}v*d%PS*k+Es3vReqA*XR{a-@C@w6D&hcd#VFC4TywTGl0lE6V6l3(O5zGIUBQ; zg&XUoXB8YF>?y&>*w0>-S?d#@`}>RgKm2x(GyU9+Ucr+FqYa3LXS~W2GUtawWTwZI zY&u^0_xboPSoCHAHAc%`byXQ^m!u;x`&fkFEg&8JPw(`s0Uh}+#<8ExGEl|+my%^{_@%3M%JY5&He@iLUw1h zRNys5Nv=$Ujz|E+RhocRZa$0)diio3zzttsrJg`g0^R_zMf@6O$4Z`1RKMLpMhpY8 zEa8ZVi10dY3W2;a^JtSYqO>)~x~Fqz0JfEc&+|p^wUJ`g6xhnSJ_(@v(=F>)->|yM z$7Tr`b&$aR6?C^{$k!7h1BROl0OxnkaCZwEMKX>qWfGcZ$CLnZY=Ud;+>!gJEcSwZZrkd zS)T(skxn&s3om=$Q+HhfBO@z!huI{NQXp}dw2q*}0reHVdh)i@4IQ26-u}A8x}nWVJ0@7`WSbO!zIfhq7A=vncPn-7J>}Hj$*cdjBuy zV2}dH1I&g*Ri<^F%TBttw-Nn?-rV?OZ3p?EOPlQFxnv)^RM~ds6`FHKqCUvQkHcJcV!`X#*h)0r5B(?Hy_IO*X` z#Hdj(PcwL8f%lrPUKHPNwT180jqtHi9h9Z7xi)ZGXomvnc~9U26vh|)$XknNE`nHD zgY^|n@wb|Yj-a_rO^=O<#2DtdtY25-6(GYN#RBjvEFphd8+ha^)_XLZPXur_ckxSo z8O_&hvhz(!)xqcTI_xQC%5)BRgTZeA5w9CS%XsyI&~#W|$3V!_d-LF0^5lkLc+?{@ z;!93;iU_Qk2#Dvq`rNT_4M2Ub3Zv<~t#*4%_@5(R{^lYri=i}li-)uDLY4Cxe$GTb zIZW+xy8oJu%K18Ih6mr)yBGF##DzH3_iui&KHrfem*-TtNHM8*#6V$so5@71c-*I9 z8BjUfr(X1WX%*`5$1Dcz3Ip|1i8i4Bc}5Y2k98`n7F6cBS|hV)*t-Cz8{+^&ZgiTq zoVzXG5egOH;CY@`RBy@y_{L7rx!lt}w>MU%nroc^^N;X}nN5MOJ(u-dIHZ!e+M(u3 zy7LfoZQcG}L)Jt8^{4=E(*MPi718fB~thZXW1y>1BU;%hI*7)Czh{PImxV-fM8{T%&@wzN>3vcYxH* z<`DL(%f%l|#=cd4To7p4LQPLg%Qc{Vn2xmdmeXr*-x@~sb|=ffx9xgcF$RurP;4PP z!k;?!zl%`hQCufyV6p5*c<*#nM2fD9)w^SLS@;P7?$O>abTt{fD zU>{`eS~Rp4#B+`m-wy|BCY{~G=@Iyv0n{#F55-mY5t)f8Q8oI5OQi?@=sDy;%2iAn)AOLi6Y zI-62xD}3o7QkNQD)`!X;!|sIE>(&y-^8LvxN+la6%dYyi19A%QEwjhOlZTxQCL{5R zJ|M>M=$2h<`!8qRk~_W_Y{|7<|DlK#IT6V&!Q+$Y){wZg*b0=ZZGiHY4`qy*dqzwT zJoopa)MVlfOi_KR4MEOh6T4GEc=jG!JL{VoxowWf?(3loXs`z!a)cNKsCmr-$y;{o z0gDOuqi+z&Qv`PZuQBV$#`{yUzs3Y}EFc3>zX8C);f-g1`GX{1Z>6i1{Nc|)%9$_T z66R20c6>Q3uC^~5l9he)&FPv{H#K;~DyFs)s168X?japy+@`Mhf!K0Dj1h7ljKasq zR)q_B^!;59T)N<$GVU5(_OZTslqI~tKKZ#Os?g%S=VCX1q_mqmAa)(&dcx26m6a)I zscRnSkW;gdE^6-r4Lt1;V7j=f+k6Llc*nq1in>muCwuTeC8~cHPIkp;{GH?s~%i?$N>dPP!J3+|Gt!xa}{`jrR@`Dn9eAyYN7&=ZE4_o8ge^%6@p=Bs9-s>u9=>? zXoXI@`?hj2Q2s%E3Trtx1e%1CTm%srv&mYDxi7|>AkB47BWwN5wxzu7*OQeu+A`}K z_H?!<>NM6TO>pySt_zbeYyqJLIUUAT2g5uL6DXr&V^X2k($jmvBoWQ43}lX$GM|7T zDAa*_h4nn=wSieC+9%_%zLADJ(Vq#Z#r_6mrh7>Ngi#rT>D2YqVZMa0n`Ko!lYs7Q z)H}?Zr_%sqaUSG1KBn6Doda6O6{!J* zDQ+>GPjMg+B$1}ug;LAb=eOmb)>pEN8r{T~bK!f51jxk0W?D~tf^`1-MkPew?BEt` z{JCae;ChtT&9B#g$t?wqu(bgSBLvw*6!A4l479#pn!I2xV1_p{kj~Y@nM&hylg~J5 zrC(hJf@*!seD-nAnSU)HT*gz$?LKA>%|MzgMb&6bQpF6GXh4$2yUvqrt0t2AEHw)o z$S^dQR>Uy@=k-h5QU193g~zNqv4EvL8yz}vxu2^Cc4h~tHkYDTqULVI3ARi1DBN!d zC`4*4Y0Dy?8vulhSvcc^D!1T}8@Xx(G^ya!3vm8a?HKB*8jU`z!DCvvo2c`Q_PZ z0Bg|(FllvnZ{TSQXsv?h(XI`f&_lVU%m?!!-^Gn)qz`J6*^DMQtUHp+bA0Vg7iBvAN1cr?C^GNriPP}@d zl5O^f0!t@Y<`4XUZlyA3%~**|BvbQJ_0ZOslCcN89^=%;9d9`Rt1n+<*)$MU)P-S| zu_{H^k;{RAmTxTO+;E|VDB$vYi)#d(eZA?b76WzH!BTYY<&h{8r%1m?vMxETfN-D! zi;c2V{9?TYNTqRDokc6Z`B#Kp$DWh0i9!F>kz$`X4HQtCz>b^y%3>M_Rq05Foagmc zj(p$e;&cfQ%OG4h3jt9z^pSJ+nMf`B-*gUI0{!kX{sR`q@Ph+RHxDXrza4T*tdFOS zBpiN^iYBzYQ#@q>l+X#~>5JygW}FNCL`w=hx|V=fZ)jM2YftThuj%($fhSnTuPjVB zm5afWSK#jg2}_HQ!Xkqe$Ck>y2ecuha(G2`)!$%U%f&0P;f`6Ta@t6IpH)UN0uj)- zT&ED<7_hw42W|q^c21x4RFA@xUl@e*KTJp3D<>5NV{$s8hBcOAg0C#bHC*N*A+Ltq z+pf;#mqf~xD{hht#ap_EhfeUB)Su#(vj4oFGb8fs&guk-k| z)EnV_1xZP6;LMVLQZJ6*&^+h|Q`p{lQE%svh$o(5q7YVwI>Eb6;!E{OcqujI%AuRe zT9?W=&To;BkcSEif7#Ew{6}zUQDh;l+^t!mA^$kBq226j;5B5(OCZUStlvpaptNXo zb;WG4^bPVCG3z2%bE9+EEhdy^dT^L^Z4xPlW1`-+`)x98Rt%%punWtFNQ^MMWN)!_ z7;L0A=PV?u&9cQAObIx-Mxl1FZ^aGGbjH1to8Aoz3+8UObC)BU#RnSh zU;O=chJ9lx+Ekc@lbSwJ8(lq}1m*T@9u${Cj=g)!)w}!}d)RYesL&G(AlxFQ?g2Q72kb>!rWisptz9rpa!?OenC-U#UA=N+YB03azlDL)@#E%j6>ZSNwO^)2586`+XIgd- zmFL~AES0ybiKcIP?2>3%TBDHZq=~)V>Na1yUSEn%wB+kYT5i5Yxoox`b~*vwFkpT8 z5sfWRf896}&7Y0(h8ES1uUTP+P}Ehy;jiZx$7lm|8QCb(X^Z^keW+*9BIRvP2DSnD zS1zgabMNF4joui~%E_sn%4MdOVVkS+(4mhpf|u=4Qb7$~o!Zu2;sZpAHL0eA{>%Hf zpWa$rw`j(7QuD2P4D4vsYdTffsHsSBYLAiY~Z@wAja?G5^cwoZe1qrdvZ5|C# zmW$i+w>~bxqv#_>Wx%~%sPS{ob4y6IU+Sf4zFK9{YLo$pUHXVV}Gn+s2CkKPX}DprYhgQNwYe-6D|ooE7+ z(x#kzYB1jAHz2RlCIXu^LbEPsl@_i-A20J7lV_j`G$AsuW^LD>_KA4c*BYOPcEIrw zn*ZWeS`A_uSJy2z z!W|_NUZ1jR;5z^XBJKPeB;8BT(ie5bO3lW#jRx{m+OpQ_9FbY5m{=RK5Ukk})km<) zuA1%m`q|3vQa4zVZ&E~d4a08|m5%uLa&J+(*5AjkKZ(bs-6OJxR7IoXaBUNt!S&}*Y2Bb3eRbjz2kMvybBKj~p8?-n% z8c4nVI2{@4l|W?Wv7xkF zIO?XtjuK=d*(cs~y#;;EetvjsJGE!}DeWV#YVrfT{41V3ORL6XEPMBanSZ$_1o^W9 z+U`ZG9AodLm*Niw%F&pd7-bBk+_fPnM-fIAD!16d_7}{uOdTm3O;s+uY5I$3*_A6- zTw&YrlfACIL>wALxW;j32+p~8p?LEiZD)Yz!ofDK!}-6n`!*RwYmf2QHZZWZX>nhC{{T5-C~0*-}9o@*lDxbwzm*?+9^ z+E}GBW~p}>i8j1vz`EE`%2AQUq}IoTi9)L>rRV_hFl=a# zRX9A^245Y3EvOtL(Wwr9|2BcGwC4O3A@U>U6F*kwddb-~t7!&N*Pm%Xr4&idfPMhW) znf+>wlwJ2>6Ab3b;Wr!$?e}98Z7Wd?IVJjKfu#2QrKnqqY!oI1($4k8(AvgR`8~NXBS0k zsKKRr?>_`?f1u#SkmuT|UB%3$tpS*8-S;nEn_-F5R1X?$s;dh#-7)jF6xeyNSXftc z1nrl?yaq0$HB_aK1qX3Zb?+CZb~b+m3r}k-zv}Ad z@_Nphyo!WvNwT*G}zNLDok0+y^Y59_17t7Jz>k?6c;1 zJH!Eay#o%`f|)Z-o#dX?hkol_OI0R+LF5#Rg78c`=pdpkLiPc-y5>zt9iesC&bm-O z5h3^?$<1^%d_H;DNqMVP|qJXvq? zHA)VI_+^tjT}-zn6)hgGR+?2p??JD&gS;JXy$PDW%%py^hqFIhmsb+vJHF}_Blt{0 z@Cd(MYCweo`RD9}$42S8c#cJF#WPOnj;@NBEW3k} zDhDJF99;$s)|EH2yN-zJ72i`k2MTu(<;!=W7b7?v8_6y<&;`H9E^T2+i03@G0lzG< z>4a^NSj9}sVnG>j3tWA7OPh5XzJKAm7xv@m06Zok<#C;NSv05|L@xJzPGpBRQH!*U zC&WqK|1ttZxOJ-hOcCH-pO8qHW()u7G+Ofhte_waD{fwOOU_GU2VMlyc>Gw})bl_u zq`QA3bFtm(YnMD4I&d)jyj8uqQK9*{1;)b!SF_5L6bZ%f!m16}=M%Q8mk88Gcuk*!AqomQPVSkm)mXvf7+@M?caA6yb$*l}Tj@T(}8;%H!qv zD>vId*F*89o9r%j)gJTt)ri2V<*7|c-!*ed)kmXF21P?(pK_2jzV_ZFNT=<1sbRa8 zy>ZAKzXT*>rnl1S?(DW0r)8%Ca+ zZ~5Ea`EUK0*mYyIsP#E9;G|s>uq?R@ziPW^Rs;_ym<%9d2vRDz#(#4Fln}6!TIJb!?6k%Y!?e;dRSV;y07QB@%ZLE0&{IPp#O2l zwI0_hqNCKi^n}>h02arAtSG0ac8*Ox{eYIN5kXvzmJ>id<9hQh%if6mzf4kh#aOVSrc@AGhEyoCX?IKOmy3Wwa`nj%2tH!q0kmTGVdD zCH}s04=Ns4;i5$CxK&LD%dE*AW|uo`9FDMj=Oh9AH_Z;*PaaBAoYze*3uG_$7=9 zQ#0M|UN#{leJ#6)hUuhJ@14lNySJOAZAXOqE~ErPYmO}wxhuyN9YLwyl{WzYJn_|< zqTgtASNX;O!P#fQq22HYxmz)G@(-T-%;sQV+u>6EizcML zyJ_Mzbx2Zm6$a4PvYr3xX13AQJ;;ojTy>eP@Qw+w=D!jx1eMmbHartbP0n~Zp?+C@$RbI(g#qX8W?_#Nq=pQG~tlz z@Yh#13@5Z{a>#joaEaNX^=n&s9(I=Aq+P*XRo902u#B9~oc9i!TQ0hgmEuxLuU};{ z3L8v+fLB<#z$UjFMOFm)w5}z&=V8$dDX1v|XyK9QSdm=W1`qskXV5b#`B>Bj_p>Z=ZPdNA^hHw za6nJzhb4IE7;SiTKT6-I2NYp6P?kpF(H_k|_mtbLTymG^zf^dFGBE!}v!Xk8?~V66 zx}8R>D)XcuJ46&aRIY#Xc>AS0*WY<^m`nUL?g(}Vv?L*J8SnWcZkE3QK4KfFnYVgx1O1^MBdXV|IvqcJwzW@)EhrnULT;Rt6Y2EI|Fc*at4jk& z%g>IXue%9nyG^bRt9ngx_AEnI%9(NB=P0AKte5i^C^56Cgn;+`mcmAXfW;c>P$!wY+1RWBSX8iAnz=&-HP6;@3-_iEk_yzb8~L zrfevpHJ{QZeKZBlHu$U2< zO`%hvN4+Pl+j96nPpqv%D6a!!!go{cRr$KoF4k2R{TO!>nTg4S3c01 z<*a8$W#3!h2lQ_}k(>LxrL)P&u&!!pP!{3Q9T1xHO%@gSfiu|B_jdP|Wb3K>fK@-z zP~}H!u>h)ES-BdyR>oph5+G)EOLWYB(x2vq@VdO?dbj~91>vfR+Kg)uXRVFaJ8{JD z;0+`9udZn2T)h{$cS6CNQ)-?hDkB2l5%n6xDGBUoB35%VVFjjX^R_A_*u2kH3t=S4 zlZRMCWUT@d`heQdcKZ!p!=ale%8rSSEp2=PwOmJw8ZUQ?#{w3Y6C=o_Hvl~$Zg-=n zC+mGR^ew)I#W=o?DyQ4svQF2L1Y;S3e}8u)ZcjdKK^cA)8zwol$Xy_$FjtYGecNxH z$?U>kI+H`M^Ua=cF_6wm3tUznBZH6CZsf(tEGtLuiL|D@{VGxHs31GK9{xqK{_~Kt ze|e&@6+-H|twGs2a|Z~4?T-tRbtjDy!2J+YyH%zHpf>H~QZuGqM3n0dwM4#mvlVZ0 zJ+#N8AE&(AW?2WNk}n0ih8`YLKcC8s8peJ%bi~W6`h?`(Y#380kzYb&Y-t1t&$WJYEPY1T`1IZ4xN*+y zp|Dk2D-z!!-3Ja8@AqT~~6|q()U^Jmo zshd*)2R5qR%%L*$QSA*)b&9{!XAAP^(3;$s2aqL26~P)AR?)Ga_w|O7l9>I9NnYr$ zMV@bguVfbuN&iY4M+)-*(C6R20nv9{a5@Le0@z0){ zuB=|#2`-+7@p|)V4^XzbDDAzu&h{7JHoUM=^c=`eD=w4ON!1DHr!r$7y5qaebPx+W z+&Y`4-#1A2b9*lNeFwMM#=rEt9v2U)E3}WRzO4mZ!YTAL!sTx z5&?_r?Mj&99H*n@S_+H4lL3{9gQO!4L(5l-v|L2clRim>CBzJb>(ymr>>cM9cY zFw{M`SV!Ir^MhlyxoKS>*St*7Zu|||oxz+_fpv9`0diUMxp)=>GV-jXeddwW!ZS2i zOVGRpRyh2tlV$V`75&~hud3p}Y_@m{D)oT*tV(WKghe@`N14pFH+;c``>vGZa;`VS zC6BQvf>o%-Jv8+NQ;yR5*$T{yH0|3D*R}C~EoC2P2BqwD26;b@vNu2G2eq@4+zD*P z<+7Pt#3^Oj#iM2CP8A6ej{UJi`C@2-#nVfWM{8i4E7~d$r8V^!=$e30nZ|$3XBSYi z!}!R1uaw;wa`C#aW7PvDM9>g=YxCIyhO1avi^OBDYqXe! zDjQc&mVVjkpx(V&Fvoz(uJb*gNgOzU036_5j+5-b!NLLh`HwEWj93%LB+p#~iW zhR&CimyQX#f7f~>$bh-jTg`$c-CYE_)I*FQM{-!xHOXJz<$@t2#+qbq$!+puZc#R&3<(}Cx?=sVx& z&J#BQtg@E5oG^)?obt~1CN4?JU|Um5#P#zNxY1-``HU`plf}@i^FRI4F@Y$1M)C!_ z&%rk0*vVGM;Sr_5naSI@QVPR5{2Lt`N;rF`9=6HJ*d$MZ^0D6sGzXOcTr_XrKE=XW z81OCpgy`*z$2%gHbyf0#97~Z0{#cT~1vT-xjob}4>5Y00#L6ryz*L)*I}YUoyb#;C zMmZ?wnz-FZb)gm~_*U-$sUF|)yPInmba3zE0FYjCPYnqXS3SQJ*doR{-uu){aQEzo z5(kx`gHGs*0-6(gO{M3T7QWPYEzbl_MkF4EWdtB+o{FBY;y;zhN$r*o@EB~=UgxW} zP9+u|C6O*!n`#fp#@%b|QX|T@02rhL z4qZvii&5lxI2AMuaw?2auP<2wT-9qe*z+Gw-IGA#Ukv4&NSVaF8z>{Q>MHcveodIJ z$HNo4Da`V#)_b~ZX&&L8y>cNR3)`4kz4{uVFND+#NK;KVm<)K|v6l2gI^t39(lm%>-O^IT_nbuUj- zSGtlFc9xfU0RGMqz(ynF3xVS|b88+BPAuxq16hON1_Wg!w*tR+oPL%$^6X~9g+^%g zJR4)K$Y%@ew2aE3?%>!+8vcunA_Ady)f;;{bfSO*dHE!9)Q*>EIsw88u|wyoP}PN` z)$Z!oj8Jk7Dz-bhFcH8IP26V3m3~egH2Y{B1YbXtE0?e!#O&v8u}G*HsCQl_Y*s!? z>xkRvpQOT1q&FO-K5$fi_Lb(PG^XfG~VfuA?P3nDV*!c4#etQe@IJewkVqcrSM769{FuP0}~%3}wcv z3L!|!Qq3W%1A*mhw|54Ra9^U*2kf==jT&*h(g#wXlm37=awR~$h>~lVXKNC!oCWZ5 zBh%r$Ytc8>cec%9Cz|modw1|k-RaPcdppyc0@1)J+#EOhS&d*B@>?Fti{BX)U`%$R zY{>r8L3|?%arw!Zzzo(*<73fa=*^72A1HCcB9!W zn(0f#Qoauh_hHD;@L=*pUeDDD;ZbsUOsM-G8Emkxg%zk&h-+)>UEA=W9;=_NNvA@s z1baecl50{@J(RmwA3o*w{o2qFE9mraopc{ZVu6JFJ5o24MV*pV_<3LdM_L5S=#nH5 zvu!5`u?`#>dvNuQ%b&jN!PTi@GgoQM%U;%5-sWFS^}LNsOAyeh3#d|6C_ua4<*JB83P&Ak4u>!o^AB{3~HI`t*KZ}JdI z+ZE?IsDkBHc=*wi7a#$VT+~iYluv2*jV^0I@ZR^8hSF?~?>+>mvRMUxc&P00%l-Es zKAeALeE!3Wxu)}hHHD?%I#>1Ri8)9v8d=2Q7L}l2H+%kCoXE#CV%pAHtwbk0 z;i@;ofu#V=Al}fs$Dub*1+Scy@tD(qZ_UTgT58o;9v{^E00lawYl~VUs@!o@>M_a6*Lx%026z%aw7fxA~1|)SFZN$rlq~6x&X7%lo7_i_ZD`}z)CCpOuY}F)z26sx6`7UEVj|_sGe<) z9<#IzQgzW+4u8Qkii8dZYE1}{2xZC)87rk>1VfdK2daaqk*4uVLQ7INa#ao}(M;es zR1S=^r1Lcpw~6Y>zEPso?SE;m3AIY=rF9wO^?vLvi^V(le5zd!uxEJ|&_eRa4dd2T zY}Zj(OL*CNr0m9x=EJ{ir;6N1Q0v@_AtGO?G1OHnhij(aGeF+(>>^f0)6zxcMlly| zf2N_KYl3iimNevk%}MlDiDwb#OQZZW@=jc(#V8nUvS7UQb^y4&mO;Axb>Ft(ch!m# z1Mios(L$qg7bUd~O}uXATE@k#Tn?N(?%&U(k2#L&QV5OlY8D+z^VzmBIUrFUucdP8 zxMiRFa?)~5tgg>uQCf;C;FN4OeRXy>t>ZK}M$0*+9a}I@2pgqvgO3`h@(IYwZ~=Ds zxy8=z+jx-LmLRAiP=_?xYn_bKPt!CTocoZ*BnM$ArpCxr1E$y7>d~HW-=Xc`pnElO z9}h$IydFPXvxW~W_!dM?)Lu8t3ATv9_C$h7_jFPsvcV(_r7t3*H$2-Io?79BKG+D*flA0mC^@@zhsolucQOsP4-$Anm3Pd-t&zqDV7#C>%-x+|Vd{@Q z869nV2-33+!ai$0DtZY|8xgk2N4>bq*OlO=p|{$5KR1wViyF3~k>7{q-8(mzd@8to zG_X|;5xRObE`!RIVM%N7nQf`fT?%=fGM+UkQLE{U)uNosBqMi?vk0NMKbnmZq}vX%}IrUY>Mnl=QIZXV#K zr9RRo0@{=F==G0Wu|~5BA67|hj}tZxv*sp1NnA6DQl^Gyr8_Z7ll?};yyqB)c~JlBx1j(bpcFe;u(A&i^2mS=*#~> zb2gksX}g7oi}JF-yu3rV<3|-L1wQgd1*IoHnES@YGM7FlSY|S?R(2$AAV9Y~c{hbT zYL{BA-Ro@-s8t&H$AS%VF`NQu?T=ipb&^KzrQo0`E}fIDTo*tw+9L8B zl?gS2f3ILC4@F9)VVqRw_Pi?@GP&?I*$zRj9(P>-7&4So8Y2C{s%K?5C)u&@4KzBvp}Mk{$KDIyK}G*2Wu)~l zp8SwAmMT=nK8{xiAcg`zl<53nw?8j6|HG>^d(g8%pL{)7hX1hoFFhOov4wYr`XWym zn4^FhpEN$j8z;)%NZt=acLmq2-)#jtpyP^$=TOH4G^>h0$Cg>~z0dcorU}n}T`9jV z@V~eZ@P~JMo%I(%<-N)J`2R5AUl#Zuf92BwQ~e|aD8+=_-rr;Y7IYb`bAIOkgU1G! zz1e?0_SRbM`Z$zrE`UWo5bU$H-#iqPt z81n~F9TdX&qduG)G!)FF^m`lJ`D^U_?-zr0C+HS?ybFFVocz`I{HN!90;oG!XTZ<@ z}B6B?#Idzvpli9% z&|eh9wqHx$4f1Ch`}wisI&Z-7324wMUAD45vS^uJLfF$2qNc#*=7R>N;@BuE$aa6) zN2Y`Ooz!mX9|HE77Pqbl?7r`~u>E78DgAX4&VyV&tmL3E4pGL?8TcC}eB0PX=dGen zP0&S!i;n!%l!4(l{C8GS9p?Mp0@s2RSjMQ+k28tq&!|en4u?DA$1D4o9qRa)0w;F^ zx32T*^<`4V#&(jcbn88|FT2fVpLiKCF=p$``=93b&(+cvb)}xx<@hc7aF?c8rMekj z&(e*p;%Ae*ire2?aE}j)DlNSj5sd30k$+z2&8Ju1_M^FrkaB3Q_%+1&A9l(=zagmZ zSQ`<9$0ADBv#kM71Po&ZikQVA*zY?F@!I39Znr*%8~dXRHkXL)>oF`NOVwXUnS`E7 zjOk8?&;DFpP?Jcks|r`p&tA={JYnT7WwuLIE!NsI8!c&?GaCi&3W2=%ljI-#iQmc! ziV@DN`!kC$1J%~CvZK#fKK#6*J#)WGTP0+$ULJgxZ9AKU24^szQ93zED9 zaT%MtKFedAe`h+y81%M7<#hjp=Sg#8oZD0k2U*jwIbSY@N>=!vz_wdYXnt&~7G-N} z_Qj_~vCka+w-ye{5Qs$)PaPUNUVshB{Nu5oKE9%(j4!lAj)6QR#H_;kO@T%2Fvm+V zv*EoYp0wlO#~<^ZwGPxSPg~|2RsP)s9O64-!k0}vrB_e|jx#8mN}|Eln|}r%BaT$J zmGL5%r2y_rf9F96rPr*~R@(_Q%x*14xa8Q!2{(EE`vv|q?8+dVc{zG`@;;a}ou^xW zPBI7klOO5E{E495djyPAe=U{Ln@0=k9Tgzv6<|W|B@o(vO(6V>of*onyo58~X6~Kz z1c8BCq|7fLeFA*6FJX1G;^FrhXJRK}X)_9(tMel0pNr(@X;JZ0|Iye-=2KK(o+0d6 z{90cI)1Qk#ou)rv$pQ&0*G`lX!zpdCAnVg}r^@X6nmXbo)`hA;NbG(};g1RWmjNHS zlGb+UUG3tL%_}5Dx?q{xpY8wTnu?VS^5TUpb|*UlB!FhEGFi3A^+TFA=vXcQsqMfQ z@U!-;t&Obz!P3vJ)Btm^4E}Bo!)HFfn1fY=nC`nWm{Z|{8!OwHRmN|JF^ui46F`-* z{QtwSmAB^NG`%t52j+a3aLZsB4rKx7f3MygboJct!w&(s4#TIv8k-#$J09>W=+bjt`(vzs z1~~tCm3E8a_mz+amRPK5B{VsTL+Xpy89M-#bJqf#8JMw3S66O1uM068sI((Wd%d~1 zNQwH7po`oLG!`>XAN|<*&k4R|@DFS08+2c4{R_hD&lLb(T_OMejow%#EZ0Fk3pg#XJ^)f~ z8pETwI;gK3g`1E@ncoL=7bWFT%oyN#;7IH~L=}3&8f-kDc7gai0C$30$tx1SS=(Lz z`;GbWKSs*hbnpKo@4p|Z{{R1R{Lw%W8l(tKvox&iB$TrEIEa*W4zjXCQp$*sE!)Ad zj&+Vv%Fd2s9V4$KA!JC;QL!Y)aji2{dT*K%k^@(T>n>_rb7Cn zK~F!wI86o)3Sgqso!=}z<)BP&6bW`6Irs<<9JoY?z?o}D6+=tE(qoaGjMNNb)O$AM zgLx_s+`j3EC$X<*V4dbEvI}Il4B-}Gg1-ao9iCX`wA3m)6Cg5c-S8liuMX~QT;fl& zJ@`cF+Mf^dTGI)a|M4It8SXkZpPSracopxT{b+F_H4Yaq|Fb@Hh9r62Ug^C$X)~gW z2k(*(=#D$5)x;8ErqeB;uBj@_!#v!{0_F%p_=%LL>C(lfeBcySIl#Wsw_fk|pS@=E z^$^3sC{d@p&?~wE3oLH%)*U{RF?4}U`mtlb)02^(rh9ZKrJO&%X-*S^%ReuIxg|-z z_f6e@f78Txe_TM1Jpn;w(!$1ts}x9-@y`QE-r;)O-U!u?Qvj45km6;i^h{%a1 zN48~#b?==apF6*=gwM#Gyr};;RsYdzTAFy;t)5Ak?bo30f#w3N6-vss>bV7stB-7g z^w~15Y?Y@CmcT^ADeeW&m{ZH5Khuc8m+nsk1=hZS1(O;Y3=BZA`ZgnH*jvDt z#W^iKlC+7za<;ETz+=a?_n|MdWeu|<7SMu=h$pz$5HIsolI6O=re!XYN4M}>`Nkx7 zhSEnbUa)i0>*LbM)<=SJKcC;CQww-@S;~nr8l}(Xiv@<*!8w7?ezm~x^L|}$TS(W< zjB)JmM)LM44C6Z8;o%n#8{q8H-2i*Xm_cvWC$MPl;=b8a1EbuMY-%O}EpUGs-s-?W zZqddGw>h=gq^rEaaar_W)4}MZE?Zz$neYj&Rwl&V6owLvpfryEq1i)7cKJ6wU@(+QmRq6|gR`4^#_s@47( z$RF2V1j-KYY)v|6z^{P}w*?T2T}`H-T7-pxN}0ah5wzA%Lb9zOh_Ty+?ffS;9_@vl zT9@CEaimPh;(x>@j^DBALy>t)wPqenSeZIAwV!}ZMN#s7kD`;3N8_(KFw@f`X6X9Y z2EA#YGHcx{%mUMeC|tHq=`))?OCJhU*|G-1`9saWJR`yGp||$k1>^j!C3pf7$yJC^lSdOEZlg)o9P->kGHz0xwDV#Nu;Epw*k_GyU)^8 zQv;}W`OMlbigvqiFKfCCdQwb-H$YQfHYM5e+`xda-T2X>Z-DhZlzMsOI0$?L#TsSL3#5X%|_J|EvYmtin5ezw$kY5bVQ4ft66LOnO)*+qftr<6}k zqBAh{$LobaIY1QWf}OI{S}t%7zP#y%FaoX*l%Yph#rpuT>$pkc2jFK4z}WyLw0n_# z^Mv?Z_CZhF{i|i)$<(%RORzcZ)U{6vFp(D2CiFtMn5{$%Ik@Xdo@Lf`@Rq2+_4mVY zv^Ztq84SDf^*qdzEUZBvmwU@UW!+dQ+{&taJ%#wR;R;5Cdlxs}m7BOcMNpJKy_Xml zw0_@Arz1_1|07c-{LYlqS;w*WG9U4J>@-W-`^|VWZ8J@W8=TZx+@+hrByQC?0b|dI zUU&=JCr$#Vc%qY-b}6r{8P<}hMf>R}qeQot+Ee2FSY6}UfU449>gKGrOs5_b0hlG# z9W!RiMm=~S?)GM^Zd#Jm^jbccxNaKwBpMddI3Jc{lXM)}Z&Pg*KbX`|9`9TBSo#Y7g&uk5)ji zpIzI|E9vehiKIa@6p*EgI6py_wyjjfLQQ#e22}PABkyE!Jm2}`B_jZN(@dQ0vgdgu z=(b@eC|{E?7~B-X>e^B*vPpTfTsWwwPFZ0xPyQiYcUoIO-*)`+%k0zg%@aE>n(-@A z=Pn?1YtZOxL$)O2H5mAe-S#}AeyWW>RdU}c_4lpuCiK+}s9$4(+AT8Yc!(cD0dsBC zPLioWwe}|lKl}9aAu-LgTOFcwJ*~gS69aKA-Y&tTx;Hc9QzpaY z=(YJcOcUy_Ta_(`xnQhz!ObcQJOpM-ychrl%ZK57jhLoSESQS4_-|Sb*91D&q+znQ z;%D6zgnrU7BnXXuFt!B#n|l~laaw{uxsTaw@i2|%=Ndt!s&fX(cRn9s9hqOW#fjN_ zCSii;wAySoc+%~50>n2=8Ey$dBtej!tMDIi-)w~Rd~JJ-=8FCB zMpzUntfKX7C(~1_JJXdyxVp#BuN+rVm&oE|u?cu#T?>R3c z_MUoOir)GH%0m;QrO?7Q89`N`YHHjPFNvy8Q%;(GpHGjPne+vZCQEtbR8C>{(m zi1SceX0*>prj*%v#(%W}HW}hy2M(d75@iDe$g(SI;wgnruq%9PLumfM{a!y5B>3l5 zVS3W}Z!y8&ugdS@Z2k$KX$U%4{$iC`S(?^+k<6GbZQh%!g5y{43W1xWt~eTm)T^m7dt!fyL1e(TFU%qOvm&5rQhAn^6JkwWE~;` z(g=>!8P`iupb-0R-vGSqGckiAdr#UmumGa^XCD`x8&4Am}Yx$X+FEqCFkJLWO5)WUZ5kH$? zE`T;a!SY=`?6w4@U1J1qjeS+p@JdZAqJ`~@%HeF)nk8shxUM)(xfJM`N9=QKPO)sEt^F(M8QaLI;xJ$gI4z#cF zfN2KJdyw?m&Ybki0tJJbWK^H!9K_!@>Uqix_wqPStJ$h_Nu6V&Hm-h~OLXXM^v`(1 zuD&)eg|ppUXt+wTuW%AmLff-6MQFBjyGSE$YTIX1(+$ek<4@SBdqx~QDgk&J6AO`y zl74ft#E%cnGeV(mrSb>bwZ)&fG|^5Rfu(Wkf#zUwX7GN`)zj1UIqL*ATZ#xDbHr=mE7q2=AVIQCp%T?`9|%b53IG)cbVa50_9O}*zG&$TWT<@ z?{a_3EYdj(-ScIl-g=JG+9@NdZQkI^rXjsEW}%ZO)2#-|Uq{){dyvzzOygcrHZKh& zgZI@39MVsCM7Bkyx2bXGj?i4hk)AU^dMtcYcbs8GHS`?97MgRvRub0|lSd70?cobh z7ktv7-+KU!8e(FWXZ{&Jy!|KAQg^qd+L4(abM_sP293J|RY?}9apG^NEv-C?C0P^s zgZ-=8C6eWy-*hmKX$ayEX(DwQSOaR~PS&G_mG?8imbSIY%jg>ke<=QlpUwNOu8IcT z1M`!-czIM&>h{8B9#{qTfO2rWl7*U)FNfK&@46ZPd7t+nI7Cu5alATVUz-hocZI#) zsadV%G08@;o-_4k^}7qQIv{=-z6-(89L8hVD3I(0yd-Ut|D-_zu)^aTHAMI=|3}ce z{b$gE-^n)FMEBLf=bS08)50SraNHbL{iE8EI<$!w0d?yD)bJ#Xv{)TVdIJ=b^S66{ zT$CF;4{OdyzBeGLkiFm8(J>hxb;CXo3*DV4EZ1{zso2@bSX5z9q6|x#qLdq_bP-+r z#@l3Yj>{)K;mA5Ywr=m;0W*Q}G-qGpxxOro1kc;9l;b|WkLcgn@va2l=do!dDP2ia zh{`uz;8!w>agqmQPxcE5*)z;IoV3|;ANKpjFbcfA<;n1DB$s`fFyLOaf(*vyl;3EYBrks^*5`{}Oh@)^<17_HodGC(DS46aoj2klL61n(2vuWGn> zM(RS}UBPp31zM8GfMh83a{2EZ?orFoXe7C*^*W8k5TBCtNWe58P3}iy!3=j%16UJX z!ud?Ej~CaGu zoq;Qx!O5NR?qU`_kDgfU#69jzd+2@JNpC&3{i>pCBi-F8>mT#8_Q9;ZhB0sz{sV7; z&Oq|`UTiCezV1SSSv%WQYof0kI0c#Mj9L~}(o#x}bi~)QLXYhjs*6?dp@6e&!mWwn z8!!p?Is=LbJJO=T$!+8gN|=qOyWEx&`;+PXzq|mTvg;a)^N4*yk9>+3n|ZUM+K|e~D2TE|%Ozow zwgwMe*l_|b5n}u?Fw6ksXA~>}!&h+B3SVbihcP($Q{0~~wa~FunxSMd)rQ#xfSWA9 z@ExH2q7YQjsM#-r8`7q#CDVNSW<>{GgYsFcj2n{~(~(-ahO_Pk4ZZhMXCLv`hkq+XDm>xQDe3odomA%v zZI?ES172?LT;aWt0Y_V38r-*){tOepuqgHnsv&=mU8H)3+Pxly3QdlKxrk+Rjl4&* z&AYEtV@)>7W}a`a7VJ`&@)c%f(POpq9kR0Ya@)+mcZnBXefvnpu-cJ#W^zjAtNT@j z!VY5OZVkCX{{R4x;g$~XBEx3+JMqnbL!051;Oc{sXoOjzsubE^f-u0B8OU)XgK5_Hu4UXEDLZog{Eoick zfH^eh71Q>RP>%r7h1$!DZc5Tb!F8VJ-^bx&@8D`%_!`N* zn&766##B@XFk3*qnGODv3K)^(UwMqpb)=Na>b~|dy_UJ+Z+2>20ADz}Y}Od|7~7alZyMp+g4a)v z*l-W;EwQ>4`#WT_HK#4QN)N@$6aA7iHGG04PgPph^-!-&p{WZ6)Fx9N1r?W!1_?Vj zW#~8+vW8j_&n#&7I|hpCjun=kC+0}ZWZGJOdD+;pt9E*1!{X)R`)wt?>nL|L)0&lH zq-7D&DSLT)&Zl#<#XBFN>A>rIgb4+lzAWl#$JfkV<`r7)aNE%f~nGT1Ar$F-D?l3)0dk%`l+?ZJIuZd_O^ix$(!aR~M+`v|N?}n+H1cOwE$S7brzMp%&L{+G} ze{Fsk`8`dU=X>H=S&+)+O-EMplZ*wTFrQv|U3l%iqq+*g#bFe(8Yh}?ms-b(_UFpeI-(z$xp)+rm)Z-;cIwuIak|GhAX zOz}5vMm86{E=Ea#WDzd>7?ZDSFVP@|A?DNxSMb%uMwDC@*luihEWE&^?kCnfQ(IJ# zT`+3=SSz`$3a%cCemLC4rOic>V>Gt-^)Rc`C%Q^Sfy+C~f+E=jkNm9nAD@5IY%lNr z5ig%NW6{$|*<&~Ty#xFW0c!7fUFSQ2u1}b}%(&!Ixl6uM;I`7k+YrX$v0&z6RLP5S zUXBlLlUf~!NtRcR3>wJJO?Xt5`?v7_sqh@>1*nmcCSZPsc#;SPeHPYg7D6?3^7Dnu zH+}5@^}ummBPIU+G8cB@_3iMSY&ly1(7W6>w>Jlh?=ct}748RNIt~H;D%~2F>mA6x z?bR3@M}K$RoJUhRClr#v`rc>9s@2?Lxpws=9X{9GM6PQt9GmlFQkCnW7K7TSh=m68 zsJv$dSG4n6b-rJIB1`r$dLh}bra*6Zl}%)4f^}xOn>*80iEFG(VfSS?lNwJ<@*A{7 zCkor_<@RBvmyugH;X^^DdOuB??q@IMmqE|xj7EdJX|TfUZ+}3%u%+<)fzGk9DYQuTVA^5A4(I3Y2IR*!CRWaX}SDcH8wX_b^#?6BBES zrSQMJSUQ2{Yvh|=pHo3jPzAewBSh>(q-s?XTAfRGaTKqUJjlw@Mvdz%k6M>%iJ5n` zP^yTXX|o%9KX!LYlVDb0-f5lDk!SEA!rbHFn9i6(O|}0IfmDlIpA&rExF5!qXH9k* zxcFvve0sXTNX2T^SH0tu$I%rQFg7>1y)4lfsWaoDpIFzkK`Bd@!Mo_l@4WK@oeXxya`wGYW=lSJry7@&tT?k-9OAyFP|2jm~ zbZ&jtA7ookm_-~O;EX31rl8=oUIfehnD@KP(RL5n9v@R8JEwkJrO0fO(tl5l7jON$ zm`fRqC8S9*F-sCOM|-{uT(+mM?T{=$g0YAsmAsODBujQvzT!#D(}!mW<8fB?m3mlB zYJ4J6Oz@}wSv}jn_I%6jfgz3EfFf!yA*+MxwtS+?#2a{{h1*dDmc$C`ozoddUpQ8u zA%0RAD9{OW>iuz$jMjOnw2OJ8K$E(#ZqCEds(c&OX3js*9Brbh=TwkoP$ACQagL&h z23?j}u)8_^CTWp>zT|Kq&fNP8rtEY1+5)#oYC}Y)Q4w*vJ|o*URAAey+=7iY?cR}{ zwFw>4Mu!4URY6Dg(QwTm8KMR=Ff&JZPd%>9naa~^@Mq%3PGMMrmsa`J#ma_fHy2A?<)@B+)Lwh0AG;PQw%zwevgpgM!_+h(@mg~b zH+glXFrnYtHbCE4-l4w^RWd(tE81W#scw#e^~(^|C)HNmThGMWIS%Wpk2xr3UApd%6Eyt9nB**W1I2=O<0>Yc(!hLaxMl zL~xCn9`YONs_e%&9*P~hm=Akj*5MBuDEG!BADe_Es7_bfR)JwYY8bX_;7WrMJJXf1@Wm9(_hRQJ%{d8M>B~Kf8S-;@(hN8|< zwdQoBh$i=mDE_TP1Iu5VZ~7L`QOq8t8vV*>X?%f_G1@^xlYvrb_Jf0i`zl5u-bHCh z#xuBV)!a;q0ud%{@=a=Z+9#ZiEz5bBDel>%HcxH*A97Jrv@0QSEKG;l?Zl_-rk>T` z+cBGN9q3Y|$0~mbbD2hIlG96kmkuOXe?K8&sMI3gV#Ral*VkeS+6&Awi;+! zYvN%Q{U)|d@3fhVgRZW#{CZ-GW#5(Q+PH#M4=b|#lF4c zryil&(Hkc6CgqVU@-3GXk)SFMh%1#B>lYk-s9M0VZ8PkX${J`l9p}0cfeQ&GP{-!6^34^go02oq?&?y}wJIE`@;+~sZXVX&jc zB?-4R=UJOxI-@{Ef&8vT3^H@~zlbn!Tbwx(#XrR^f+N1uU^|p$s#Nsgf=vHoVHRrR zIXpM!Ozvn-5Ya#R*5s&KJrf0=-}ApO`{VmE*16PzkOR5?4~IP>tSlA_t5b zxbz%$q}}w?S$ra5JtnX7_x8~<6N>W(nf~H%{R^lV$=-vpi(ue|Ry$^vD#u9@E$?3M z1}(L!J-vGI!&;Ah#H2NnjW{|OnjmXxJeSLF*76f9M$V&`&% z4!&!#jB?tLZ1Hb=rHity5gF|lG1~Y1NvuaJ3yWaC4-?x#b<~!>2W<#JGU`O2L^aNF z=7%Qh>iAw%8-Ka;qK1Xii!b>{nCj1C>StT66~=gH-iIh!53irb9(MeaJo|BDwX6%- z?xA~1jcTGBpY7tT+`O2H=>39-zxSDqnt*Uip6T2g81#)Q_V-}AVOdPY1hV%gx(|Lg zIKF)cynui;Xz_VBCw}=1R%rV>O^TuFkNBV1Qm%_)i(fC~cJBy3m}YxGt+r2QQGH07 zKJw+3)nefnNhUHE7G@WZUy9d$8cn^uabp-C;m{rb5i=3$P2MB!GILt@G8pZDmMnVQ zULG-9DdRk|_B_%ccfWqBqd0+C)2ORSWc*p>K7oqqVMS3BMbYI*B3n~|Z@GSC^3%q!gGjsQ{&O)XTQ5`+O_o7xznDcY&5XXVbx`BRJUf-+{R@e} z^Evq0a~5-6-iUBNGAo?QXpV0LMXTXtr>s>q3U;X5a~(le;cYJc?E z3gc19u0?7?CPh^?>iaeT&g<4tl(Rcbq30ayh+%Fo&$2j9(qooBT28fDdY8r(Lc+gKLL{h34_RfvhU zcIAr@g{hI-SHqWPO=Ph`7X<|21vL?y9Ek{KhgwO8iAxMsoeV6euP-=k4t@zl6zNRL zG|=uW7t6jOddc1N-Wusj#KqzU?L7rtKaEQ@C)Q{2eQTiJFpY zHT7%69ck*G(qCWV1b(zv@u=ln&XDWkAFB2_7cE1)IT+7_+@hZM=$aW;+-|)>h1UV*O)c|PxobYc(q(otl3tzX(0af@y@jd2g|-%8KP^MMM#`vlr=$W zCw%@Zv+AV>)K_$;S?myYK1^}*#MPCGbDH>TK5S_^wUQJpN7eKuP7#oS7N!1fc+Nwv zrK|_Vk8^)}RC9FphecP=Zg=bz-Qv-q_{KNQZxwNVagUpG#kY6IMu|^{tqIHFm~)8x z?spwf+fG+B3p3MouTu{Zy5bu)x_35bhBe>)R93fPlXoBJcOE0g@BemO_oUigM1^}9 z6@IDKuZd3N1D4FYAEor;%d?e+U^I3K6EM6{k! z+HA%|;kSnwn{QVg{2KyTOR-0@L$&R0r)vF@W!-h0OlxTS_nZ2|)AjdUNWOf*svuYQ}yRN^+`PXes9Lg1D0bvv=+ ze^y%qVgROc z9jQx=E2ycK_!+PO9hA;{ISH$BvAWsfP4S|)bLDpxU0YE}p2kL{(F|`dQXt zF)Qke;Y5?gPr1-FwXG~$U3i-1Fq8Q1cjFZE`;11}HSNM(+D{(MICGPDQBVEv zd;T9|m_P5(g6dhKm~UF|ipK#GY4~ppZ4zl%K{`P2eMr1NS3~sDv?7WL;h2pw4m2CD z_ARZb#cYo=2$s9}=Lz5t2SnmgK3(O}>p#x87*(?h(ez9&wm7a-{oqH5J(<>NM2Thw z@Tchs7xp_lx((mH+3O55=%MkHVy^n>F4IM!*XOo*7rGe?a9rFJ%w6?9Vq05YbXcL0 z!OqSKMXL%6n?N@Ty@wJzd?IOb3sxW4tQQ zHmLYlL5VWk&0a$`mY!sAab<1$o3_B9M^px3?YVZISuR=L>DP=THz6PGrn&x(0MV^$ z+z6bSWn=k%dHsV(tjd6YyLM`vIc3fzrhfrvJcht>Wi^tFG8DQJck>Ygb{<($U3Tz4 zEDV27;R(Of5zGHfN9HYT97e_+GHxc^I~%=T2{%^cR}nA>vcl}oyRT&bc$9T2(>&t% zifmjX0{_DC6UF1FJ@#tp#|(5@?!Ra5k54FbdmQqMi&&hE$-hE@EdOw$<0W-PtJ5P* zGvhlg$Yu)3A~DK8M8$TFF`R9^O~z^3j;(8QSfnNt8{gY<80{9b1TGK6cM6@|at3^N zdwDF%JG)0uatzapD%@C}WaD{!Ap4a0fSUwwjUI{dO!cJA}@X?^5gY4 z*055_)QETYv~noBx=UNUg}x_)dZf_uH`_jJ>{yIN4c2O^y4~%~acqR3hv)Jv@24!Z z!O>G9e1`&jDAYYCpgKgU=#wEg5CUE9AC?nmist$S))sb#8mp?aOLo{crx!VA89NK6 zeM@0;puNq1Z(#l}I`rT9{df8e-^Vv*p1lKbjYQAteL~6difL{P(POECNQ-pr<TM-)GoafzomA7^l%JH!3s&go9Fy4XBP zL3Ku9!R*Jw0Tv_G+eMo0db2C{nu~tMH~#eYjlfBw^~)l~>~<>zTgyT`qIn%-0dZ{T zYp1$8e$0;7_63usrubx=Y=yP>;*0$^wYj~c?R3}~0&cF1Cr*2@5VyFD1Iu+&tqUT$ zzO~#%Gi|!#R)$)06SGuWOcbB3ZA4iiTUr|TMO!lnRb16J8jGzc+26#;9%DFWC&XL& zfyCJtcEo=o;|EK{G~odBh-tC&IDKbc)vQg!OQ~b9ohY1oePHwtX}!cVqS}SiiXwOy z#iFm&1e$`~>7L6J_ZebRcAVRfnP~d_%&zFf+wN?CW9|Dq;L$vzk@497)Sa8Awq55a zx|72#X>z_Y9=w2X(HpN62Gx8%d$ri9s1BG+6uPccW~k*ROfl9wCev92J-R5@GU^>D zo_nmQZ!}E7A;2y4BLCeZJtHgpqj>*zi?Mm%IY-aDU$flN4xK_{C4^5v-L(o|ojVaV zW8nB2QL;|13^;wE^9UoY#ebSQ?hQS4x%LJP%O?Pskrw$YBYM82+8f)l4X0jQAP*r! zYLKg2h;Nz{xRslR%Ewl;v5|iai_dw>RCrah@}xmurQdGU>)eyHO*z>fx>KVbZ6*x8 z6$(y*nCDH$6t@f)!?GQl!Q`-SXWh!7u9vE>bhiL)LSWXZ0luRND$?9zyR44uJr~N> znZIbJ0ZHS@@yK@4R-#)cwEOT&B)@6C(NDQ4y1qMvmgM#c2OZy#zGrAFqKm#|#r6um zBTKb+w#3+$K|Ew&w*__DK2tx^tydv0UF;@q~37;veY= zO}!y(z0zXMw(a!OC96BR4sC~P$Pjun2h*W?}HI7SC#=Xd+u?>EO69(Xdugah{3geu$SVR)&`WM8o~@P?2^3so@~;gxqtfoLB9qx)ZBV4jqFH#)R(xLSkEK-`aaJ{CWIR2)4~{ zt`@-f5|0^%E`3sK`I1i+ISu2a{^AYiHBT21TsLNO&q$%X1oVc3jsJgzI)8XR*wbv; zvw~75G~xe>lzz{bL*`YFJ9)$8&w+|l({=^bfw&Z$A^;c}nLi?@MY5(;{c( zp4hdxDbK`jCXfUVshF{nYp+BoB$osI=(!?slM|Z*R59D$v=Zjc6>EM>gsUn1-u35! z5|Afi#r&`rsYzVm0;|a9`^6aPqPyv$Eqq>Y1!aoFl3YZZ%YNlqB)Iirob4Gpe>HGE zTO3>Xsf`P0+t0AdY-&5!=-9wDq73wrv$r%ZpS-Oyo=B+Leh_NA6+g+*lU?vxluVe9 zV=M8O@=a4^@VjO(SNfxpHKd0nXSaN%!ZY05E{b_X=uwyb%3?Fs@DaIio*A42rJ~xe zsXj~$k)I`Y)>~kQ_L4Be4Z^wxhYaGhS&L9dL9AB6=*uYCZdq0jM&0DXte?xyzZ$su z5`zL?a*&A6Eiwd8at|>c+WlISd1%QYZ@>ie6 zVmu&_w)H2Q=@hh04J5{f$1+FH1lsZ4vviSN(1Ewn4P z&AV45<5QmIluK;R4l&pS1}Yes6WN<=LoK%6mU+cDG9aQNC_B&aJ`5|n{=_HlCyV;f z4 zS#|YQg;1Hzzzab=NwCci+dgf#Z9hATsX(zhCGwlE zSrMFuOw^@EdzerHJ_eQE+28F34$wy6KB&CPYWzr16KOdCCo2?%pVHSX+hc|z>bI?K z8T2Nbb*|Q^Wy@B$7EiWAA6{bnnSa*)+20slo?9pPXgw>3|1sv|sSBhTe#06Ny1pe_ zWZ9SbX=JOU-`zY$cPQ7aA}jYajH)*zm!l3$YUCW3+t}jGq~Ypv#hDgdq2(IEnkm(B zg>%k6ng1ZWf5Rg{y5h2fL5ElU4a(yeHTG$jIr}$8h!6x&TOuC}2DsGG?`3tHag06& zCwDiZ_|5V{rfzUqyjkPy*){N9q4G9APwnkSDmY!eEo0Ml>PpwC`WzSq&FKhYYR|5d z-B8;nTM?a+@o}bTfaiWPeSxOwZN$db%I5JWTB%JmLOpT61d2j!)aA6ddaVjohh^Sj zxLL8B+IcU;Hb)WzCZI$iO%uH*rGIAWw~%Rnmu#3Q<013VKc&XGJzRauVhjr$up%gC!s_)?yIM}!S z55?OH>i;xU`oBasC62u@hO^Q?<53U2|L;HePmUa&+}?lALif*oUf0>bzt4Yth>yx% z&rTuz|2Q0fgVFZz?^_>#3wI=s{r~q*SAW$Dq?9IDe{GCA2Gc8a@da3ajVrJk=qC}e zcZ^X( z2nfs#pM&{+t8d~5e>1UC24i?v4*mUD|9M3`y*Tz-2^f0$8AW-Wo4nm?j)&^77k2Xy zhrrgM6--LiIXK9VoH7J8oPObEPlo2zDKH%@MEX^J1IlhcNqaa&$c`g1Y!zwK!QpHL zREW4`^KD&=XRr#J#9bhH*SdgUp{Ns;gZSOAEc_{=b*lU(_t%yGtCjiJ7v@;lyMAO~ zX`s$!x(Y(bF3?;H;l|9U{4TffQs8tHq_ zW6WCsZK;}WWWsc550S|)Wz|77> zqK~QbZGa`9B{1eYlkS}$IdITl)$em&nKm+xkU^tn*Ujl`@Jw-7N1qZkYE?LL=i{8z7(hBC6M@}1oh&>;y=Lw2U3&qdo zjYw8>`6%#&rV6+u0BG#%iPG_nCXC;^{vf+1I$>^u@=_8S;l}x1z0guyP_Z{s!lS%* z6&%?wq3R=C;rMGL%21CbEJhJ?fSc?{W4H5tS(`-Z1=+zphWQ$0yaQ6R`aV(8%wzOh zgmGjFW-ypJ4pT)U;UlbYkKy(H?95)wB8cx9VcpvKv)$iq-lzMwqw?1ois$(4vT=%3 zJyG@m^I)>W;(?@RTe4iqbD5HbpMCz$#ObT1Qtlx4;v*@TGr`Qu>1i$H3`x9U-w;}S zn~VdDpu@CsMnEuQ?-??^|H|YKSr5^Lq$37sb z7gDBPdoi!}*#?Sj{rY0F_$Ypvb1)&wt#0N1x%Z&W>;WzpKX=`9dC;?{)? zhCYJ7>1^?Kl-jd?*sJj%^zrd+w9tS+7@qa=*@wev(u^cIOhu{_}>{-S=xE-z-;C9zI?t*vG`g&Q8uw8q6&$TMP`S&faX@`i6=3*Z%@*04{m# zY(axW+t_Q@{FwEgF?0txmLgBtlFDj_yZPCv4o!oC22dL1dAylS>~P1X zhXkkxPDE1mjJvh_-F2Q3UXE~Yijx=!P~IeYpSOXHI6i7e0lf%>@|jiW6b_=hOj{m& zk(y;y>h)yZi>%$}2bV$9!lv8B>(&wy8x=lb{IzW#jhOS}%hbMqr?mcyH}L4zr>Pk4 z0V&+-*MmscS0(X{k|)q4NBPuexZwa1%U5?Qe94jECVdWg;Kiupn)9SL<>h@A-~bbc!|*~HK6VJeP0@8OV)zUYj3IKpsHyInD=FM z&)F9WQi*R0LrJO#GwHKs6rjWl1)ch8t#*Jr7TMdmLv8v&`hZ*y9Ex!Mpry9^SIJV= z+sulvI{p@nZ(Dx_x|_FO3(&DREA!>b=Z+@=0HR6V>&XVSb3(gN$>y)cW{Cy}?a5Ii zz=6(J74N<}>I<*XF^eu~m59LW>k6tW-}N9Yxm#4l4U$sH)D{rdUXd4@?!B;9`d`kV zn>az-99p$Jh}@EErTr_k{?#P>j=pDg_Uq4`*$VKE_c!2dZze<1MEvpUB?X^SzSV$x z_oLea4Vqh*I5{aER0aA4Yo)xUyQ+Wr*Lex%)Y=8i{84P{V13vX-6YvS7J*-bK0)-7 zOw?+wP-_%!$o*RP`oh5&u$Q_=;h}YrU*juH_#824&e=0mvAdlO+S~ROYU-ZiAYY9< z(h_(i>#Ee3JI>pTT&=bxw-l^fM!{btgv5wO?2p@BZ}u30BCT-1JEQRqthZCU4@tG) zT*5?qD#d=8+2<~+vjy$qX1^}pn?G@S*y;ka=;l(H}pDdmf;u|N8m_lC{i3IAw4Y zqbwx?a!@D35In`leOv^|Y{lku`3!b5`g4RsJvR@FlbW*O3wt+ZbghpeJAV`#-x$`5 zeulWw`;XO{k>0HVAB(#wAdvCwzOQG>CMM;$snlBSt7F=d^7im|Q>F9WY6n^;Tm?`) zm!~?df+~F|?|btq@Y4$)cRR!Hg8wSjQtfj=?FaaAgh6T>`tXNzj*7-XBp4E1VeC0X zfSSZ8BT5gXR0;c-kiu2(G;~@yL+#9ytsCVv>Ca%n^CK|pd*XJ%hFnbmb6|Ie{JrEM z$U4pqC|a7HrMUqEtoZ}eb}l|0q>Qe0K`3nLQ-~4nPDd|oV1L{%9^KCa=lS_tftY@| z)sB?*OJ={m@-w*Jd+^}MK|{MJs-71Z$4!!UZ2=s9y0bUDzHdv76ix{XR)aoR{HWz* zUrBxp<_dP>UGE%dR6>ECIr?E37w@l;fBKr?^C_0K?=BguTD@?&!p*sOyae{KorJ>D zbNKwNmeJyzCmTsXJCU#5_pf5}Z^t}O3+(bvdT$7wk&OB-2dzg_Fj`F5Bt+w8>n&dk zD2DUeDLOES-YiPj$I>k_UqprF)rv=9i&H3lR$)S;&lMJz>FXjU%EjAuI&4|5PMpEE zPQ2pl`k?~^EriFX2hu6>+!smAP#y{jq`t?ty%4N`nBHh%<>^ZtVuk&zZ|Jb|w$zZ5 zUyDLfA<&hukAV>FWNpvP>_{p$u__-sUO|{h-D*>kHw8sB_UT)VpuS`(|3= zt3e^mt#i7HpJC$=4Yn9L+wOD0&Omcnx~Qa{jkM*c4>~4{3tExkc)EH<*!VL$OOSb# z&+tC`HF(P>QcWb{Du~y@$*4|(>#XVB5m5f*Aij`Ec?BweyzO&~K4LIl-qa^_(5(-v z`}y-nYsskh@9E6Ie}}jXs>VXqJ7laiSDK@RRI!x-g&+YscTN8N%ZDT`FJWr_4L$ec z)V8Pe9$r#cdg@M33i(0}yh^nLTOZ$X^}nF%IXFNe78X7RrBcA*9#JTiR(1{sN{1ir zdExhq8BWV9=6%_|`Y8c^F)mei|M3(ZePy!uxM~zys|vTv2xUq9WbZY6TZ8Ud-~CGF*oKBA7zZYLDU>~zbqgQh9A?b3rBaRBI3u>O za2_-|S|^2vA~Sv^z>H>6PPZ5&l!S@YLKKlJP;}wdINgJxNUBdG4dKn?W_odhll&Ox zCU9!vfOV=d(Xcyp0d!F~%nC0wSI&lxWo8H|wC9=iANwI_R8HiOI4G}>q-WwKkn6U4 z>fh6nf2H-maFSdo3z|O9-2^#t=#6c?7B&+PKhuH`QK!XP*!uYs94SGb4X$R(EJ zYPW_WW1j%3?ZCxG9coHd#A9a=BV)EYO9WDpa7|R~eUgQGvi(%&N4(EA%NguzIxZk4 zhUmGk!`^Sm9j_IplCG$tR-0aZVgJB5CD2wbe4UJ5#hukMhC`CSx`C}inumvBPA_e;{hTmCsb2aGL zKZ9RKseUI|@GShDV8KD@3N(+wu1<@7~k9!rpZlLVWT9fY3wU7}7Q zrQd`Od#HMBzG0;y#)Oa-Zq70YCx^at=i5qDl>&+Q&WHJ)nA`3LDUfK*Y#xx*AD%du zFce8EzV-I5M?RlU)U0gO2Pxa7kfG>dG^D zL!AW%bezC@{3p(x|=HVZ;0aJWgy57Ei`4(=#|F~0Sdzs94s z__tKP6LU*Ys~Gn2 z(j`#K7FrGP47e`(Q!5ofp_3!dE6F5y>BGw@nLrlg&I%QIK*N3#etK(#>X{hH%4o;s z({FF8{~8c$5AU65{lo_TXuDdz3XzyJxc!geET|+|D|15sqn7312Zf^O<9ka$UYg3v z18(|dW@FP27kMcN6Yu%Xexx@C)vQ%UHEhG?I~vxS?#DMc=ye4en_!aXmO^{dSjQ)y zesAcodyc-=h-pn}zX>lwEnP*L??saQ0XpIBaB_V;Dw>sIdsvGOd(^Xaj>)dJ+ZI3f z-w_{wuR3ID7m0?Vzl*v4rHftk20rQIF{DnGw3H~R>SsLoR2%~A$(S2*6&CGiKAjGk z<{6!&cz+Z@Dd?qx-cioJ0^gV6eKyOskY^IwpOvhD@yI>6h(y9C(z#yx|JeJ>xGLAS zdlX(Gpr9a%h|-eMQj-!XQ5vLEM8Zjg3*8h2y z>we#F`?vSLzxi`5WX|h6uOr4W#yBvSc7__(w{E+f;+9O>64!>>X|nwerJXKDNC2l& z`)!x40_i|RI((&m1d;4z17iyO6#CJ)Q8e}_huUQNh6^0mdkNFeHiJt}M zk27wxLmWI^aUqfg>2gRrqO9wkAh1PA>E|tl3(H<(tD)kc@ZL}H^q=1LZQ~|X24MQQ z3Ko2WfB2m#o3Y1xhw?^1$i|O~NBJt(&0~<4>55a3$hQ+TfsN&51Tt~o_J*T5-nd&4 zEFM>fWN6fyGYC%?Y)nGHZA`NY%03a1+q+0RvdR`kQeuyGs#e~VG8v>cV4rwYCL57s zDb<~(By4=+J0>Ej;K+v{OH$S^9Say-x_Jr!$5i_clQ3?>ivwMET^PFMQ(xd(d{Tab zvQ(^-?JjiOFr5Vmcc#z{f%kcRrd>Re+vGyu1k(UWn`t^qZKgju7JqP9zNdXxvf9(b zQ%OlFQ+ru^jRsc#96Y5`|IzXY@Bmo!BaE| zxr`Ti@tPtP7#Q@-^4X;`W)%gEq`7S_kFt|oY`6Br4qF#kgRNI{WbvY;SsxQ`XQ*Z6 zbvwx4+@3hAYxYyBfXP?wL}RRQ^~}nC-)y*@G(FzXjIE{?`ScS6PrF%Pu7PJvRTjJ= zvsIMNbvajgDy_8kB~NNfcwby8XWl=0l{v4XJ9)yA1;9}M5oy(OaR2fGK#xy8;?Sb* zAv=~RX|+;HEHEWzVzbM)>78XG{rAsoi+gk@z`E8sdB#)Z zBGv;sBubQ94?^6?xyHgkAGLybv?nbA9{K~fmz;?{`S1VYFDNMBDd3_Cssu_5u#A(J z4@KD+aaBQT4Ga&z{579aC`2tcLg-l$U|n}iyWU>~S#SW9Ta=3*FQ5;!p9THMqpbe$ z{M!TiufqTMnNxY5KKl3({|g?VnnQp41ZNq(tN*+qe-70iF&>2{iSrPiB!vHJGhE-J zGsx>5*6(irxL$w$@aZqfFM0(}RTE1q!#nC+ z{{l3;%Fso``_T*X|G|k*2YqgL|NF&{5upE`_T3;#Ah|EoVgK2v|Yqj34|HL7c(+_zuoy9)b_ z3x$}~GOwX(gIx7Zdnsw@K(HZh0F$=lN8_~}S=zj5V5}fC3sT4l=&!F(h=2_w9R~+T z%`T-Mc}~d>+1=#lwQ zc(>0cf{p1Ze((}rEJ5wScxGru> zx=sdNj8HM7UrfVfM4i}Q<;g!PuxWH5GP$(BFGc_4QT?*~x**FKQ-AZ}z60T2AM+sW zZBI)2_ISr6^{Z@K?JzT*Hs&dTp&gCw=U~t|2@a3BqRDL>ATN=*_k2Zyw4&XjcT;4X#U1XW~7@$_JN;b*x>5dQc!Pt5(73^+%#na3)O^PuC0^gBe{d%Hrb5hEq*C zQ__0OK0JhtyPU9SS!I6XjfX-D*qFA@Mi2GD-U*t-+dcv*IoYSP>DSjg6`CZ7bq#wr zW;^RVw8R{wB_%)9!E`J`$L1Rk!i#X=PPJK^#4Fxx69U*vO_A@)R4gyNK@tnL`6jRd z`lsnOV30}RqqsRx?yzj>;u#baq`WcPlNAMhT+L2KrH8{yZRlZ*KE61CpuJe}&Iny$ zax$Uo!^FIWzt?X3RaG7bzK^e==Vk$z}1=JAa9-Tv;@ z;F^glu?2}^yQ1%rMOBGO9t^*m4wk|!NNTTbNVTD&ZTK%`9JhT90JOxJ9Zl!?>8g~2rDUM3-ZalSZSBpl)9o?Qk z-tN3lL}VE!6@d*OG4Z>05n0#)xM05z=r+lhyQKTE*dFVYI9aCS1E_7@sWhF7THo$u ztnPtZuw}kb3Plv`bA*>$MC~*h*TFUN{SQkKT8`Qe7#;ZNrNueNhnP2?6)BRghqv?r z8aWF8cf@b)q{%UNAlqtr@EVbPDS)5Zr!(p1DC-WxxS{9`ww-O``!)o!jcOa15evTx z^W*_XH76!t26OBCuQ(iifKg*~-vtKfz9fxLVf=?-(9W0)CWZ*XtT4-7|2D7lG!vQm zEgdkNEnRD&V?!qgY7`?_i;H%#h3BewuH>;gcCVlTHzN zfEgAZTes13D<+WxqLuoqqbFI0xO5r3KJs=~0I0=IS=|AK4aRqh;uwYF7x9=8K$E_b z-x@l6%CJ3D=<&U;Vu8C!zpn7oNI(QES`?x(b65zg4%(85uP9A^{{4nhuH?-F`n(Gf z2EVITq6vbGN=rDED$f`$uKqq7L@R1lN{LK@?Aw2kke?a)o0 znfT80r9I&FaD~&*D+Z%p)$-9`$8K8ZDHISlJG>ZvFqaWx&K>t7QcbfImZBuVfWuOC zjEfm=-Bi0t!e<`5-e&M~#+Kl|o?rnf7R5OcqziWLH3{od5a%~)3~pCVizFQfLnsEw z=lO&9WPDWLqIiqzPG^m*0bQvHCd1@>xBK&q7IOy+%^0x!RAe8MR=z}N$<@XvFW)Um zF=$6^tEoqMA&0$sh4_x4B2XD7-$xyk5Jp3v!bMwN~q_24!q)+8=#z+b$UGA5@fo3@|2RfSHk!HhjlPV zVq}y8wj-T@dw|;Ib`crW{+SZHNLu0&NxQ2zt0!7xN7am1`h~t(?rtp?ce46W2x-BT zk7New8KfANB*H_xa&tdIgvm=SFR3e6p0o!twQ`dRqo<(H?{Jkb0-jT~1 zloewsgMe7VcveTb3C8;}^s?dpjdC^DNm}ln>xBZF9@2iUp03?xyyX&He!b@_?l@*4 zw!@3lAf|?m@AuAUNsdQi8=;tiD97)NFU&|nvTW~*1&>a3GA2Ptw_rmisy?&LjA!LT zCK7ph6SGqcNSq!Z6aS2R1O>|CqLUD<_1Pr~Hp6j`r=rPX^ybRqxYIO>W3s=R`7s2y z$b;_~XNRb}2x$d$=?*h~U2TYXjg$9DGlDK#a2QnB(|sJ}V_9bv|n-5$1IgG$ z^R*Nnbjv`kP?{mpsl4r%I{geRcPzZ7nz>qo)%Bcs+IVe6PYR*z-J$59R}^L7yF3B% z!2N;?eq|`X*LY9AU&B}y)Qey)NKH<91c>F`Mc-4z4@ysQD-I&_xr*HDs&r9p`s+8! z-&WYR=PDa`Y&Q8WHx(^~lvio7mdam=%Wv`P|-TbTRKIyj-toL}>UCi)dm97c1HJbNitJ zg`)zoirGptH*E@|Lze34PAGkS-A;(gqeS)x%tkphEk; zW^2BF4K}Io>x;GREvL>=6m$y7!Lq0&Qh}Jj3>L7mRDB9BN3u~X6jP^}R)|jXoN8{^(eIi_tyqxRYnz(jFr{i+|n4 z^ee05x1Y|;7oI=&TrTFv>h};;8p~chl3OKab49htyHYB$8PO_H+#QtX?(0EKP0pOr+p1Hjyo9(K7eK5YI>kU-uLlVuwQ^$rD($Ti9=uQm2p<2ZcN-Xi<(J$uYs-qFu0vO;NH zSzAAUZEwjg*;L@OvVzNDab{mpE4FU-`vCjC$^OGZDiXf(p>?xZtWV)$><3KcvUcwT zNrOYx2gtH3=CZ?%tAt~y`OgJG zo8l&|-+KVl<_XvwBC~8cJ4b1GJPeheQkq zPdqJ5J|}q*I3uBN*vjhJ?(F2kJ|9%7Uz|GJn-*4r>7s~wOk@VU@teC~@6OC#xgJQq z2Dyn&fx?AdZ|I_mzzEQiMkvg{gz+)7*8@f|jdM`P;YBMG7f`p*h3P!#o$XSDqU=ff zVn7wBVQ6a{kAmAc;Nd`#oO&`6lPS2xPHNwzN*LO7XE8&%<}ntHhec!5A5GEoW>OnJ z?xZf9<@H{Cc1}81zuJ8;*i`pC7gqP?sTRpXwk&oS`0BBZvV}e03me{WzeF?{Z*$?K zXTQr&e-^m`=I-Y3d@k#b!}99M2CH5fQ9{%05+|OBeB;!L>khBnny+8HtUe=_bzyrl zrYT)A$lG0vH+j2q@|28(_)U|-OZ30Es>FE+s~Td|io*wroTr^hyV6x?t&052Y8%Nr zc4~|stm-F3Bt__&Hf$S5a$B51EC#&mR3Ds8D2f<0^AU?NPkCLo@m6VSD>D=C&g`;A zDh~547vVx4t`Kiy`!ti?0U`=vZ@hiEq9~ILZo{>wsir2IZ2aa`=EKiK2Gm%Y^mKHE zzEwFR0BT9RMTxE@|HmzH%|uUvZlKWluO`*tBG28uE(*@D{y?T5Rg;tDIhcv zH$CJNZF@8yNQXtcsUq-@Q-*q<5c8^4>9kt~l33nH%aqAVIfL%}# z@JfbJwECw9+tU_>m-nk+oIeW=fUp@_0)!)UT4}e%Z)j;wed8Uyh?j*_rRrTLLya_{ z1L;>4kPDJ8zc@6+t!}9cYt|;AyS33SB(eN)40pmn&D24T+jCNSW#QwL?4pNUAU)0Nxa=o3(8^4_pukhzR9LnNvM8co&ZsgCBtnMO8Bvyl-p$#4Lhx?*~?r}arKhUG=(BnJNF)V$k@lqUNxooW;)qzuL zG-X#f(M2PQ-^<(a5JhX8os#0@w07TZv^wQfpC=`c$oaK!u0l`9@+9?VveL~pO84A?tf+s{@ty{WnC z$2O4CZ7z1`w^`oG#7d*3UNl%2X;P8BZSJnyvs*kn(y1&bWW?*X4RzaD+>HMb8jj1n z$4Thfp&ZN(RiZaL$K2Hn9%aG40nYm${~(=cBk(8Y>mxD!9B`@!XOVzAgM;E#9zYOM0STmpUh@WRvd?oT4IH2LhEGplbyPX zfzFUH-S)>fHypyDY*z)mn!Vl8!=g_SZM%T1pc<@Cy>Wu3r|-NHg4<}O<^B*V$)yaW zz5FX7R4Ix_g@p*m!keBc&>+Eh+^JEj=&v@pU8^#U1IB|n_-^^O(isU7e*1^BLqPw2 z_N~VATp0ALo)j;a(JfArHo9~ylQJ;&jP+H?+pbf|!?F0J9~I`(ZCyMlk%*E ziSTs9M2lS@_w{)1O!EMyfePEZbhA(GBfL_j`LC`1$}C*1NUMNuA&5I}A~hLRkkEVgAtVsHQy?`cJ0QK4gt~C)hpDvsp(* z12N`YYZDS&7{BBlc5;|)gg~=J$wj9$qrnrM7-Ga7oY*Na`_M7UL#^PY?8aPovWRQ_ zp{Ot&-B%A=gw=?-I1l8Pd?I9rK&)D*Nqd4jUhEJAo(|wmc@6UzCZ3?qYE({=Jl{TU z=FgCo(rp6Qnr3@#I!sxfpH6Xu!In}eWwTTG3EsraMb#xg;R5zibVKDucT54bE#C8^ z%kuXTl(z1x&05=yhyb&mZo$cp+$KYHZ>ckwg?aS%S9IQZcUY`Sm)j5SKa_0W^JM#kp&{J2l6u;FAje-VR#B&ytDysFBR zREooJ%hWMB>!t=1m-^ya+X#!4*|LwA>J^ddkkQz0Oz=t}I?ZBq5u(m>Y7E_1H=;?* z+ZR7&A**y&C%btjD!kKTJrB#B!wR_edBbOO#G=%eOMBd&-qv%LPM33TT?xVI)wyXI z;dYkJIRV zDQ(!pKX@n_C{(%GyRTEe@kVvEXODGr-oU4+G0vE1D8(yQ^Gd^b`Ejh5*yDQ+suVMkThdA6?b3aO>XZ2xW{n)TWvhF8#s+)k&MT~hZXR2hj*R>Am6A2c zI>h{C&eRi3iz;p+bGH3oIUm<=kYqC&r;KUl8^q#`%rrR>SFhj>6mayGbg7JLJTe@h zt$cR@3*YmzP1Mh|*y7%%4sWuPRlC|dPUSbluYbr?eOff+P&VO^Y>%Ps%ZAi=KN96q zzeIB)k>X)!XaF(gyTBP_jzQQSro}4$yN4M&w%NMyy!Cjj{T*Bs0<}{z3sOil)6JP` zk)4dGU7D4LW+_Uh8cRP_QlFh83;Yr`)wJp4naD`@Hcc(O{oq+M!omS@jWwr$UtnoH z+F;ImvBO}_wBNr%*t%MQgUCRqyvkYXinZv|EuPNUo$|Yjk|Hu0tC`gd8(rF;82a*d zUo>k~ir++Ziu>pm@DLc{WZhgJ$cdVix4|2*i{aOx=C^_dA1Km%DCweuUoSCY0 z&z?K~19n3-z+*>)2s4-B7)aV)WCsP(0e<)k?p)26W73g;I*A7ve zzudfED0WKCYi>t8MOm)Sk!UB{`{&d2k~TgOS?q8#GAx>zQe;hYod9V0vYVo&3h>_E!(m6 z9>cCLraXS^{?Aqty49w&l$|?TqNI!c&zqG9r}%WbQyf>G=PmdqDqp~&WPj4nj9g2? zIYbtcTjUfAX<7;<2J80Bx_jdb>CC1C<52C}%jgOUg;_>dKPu)X*+|9Hz*O+LNJhU? zt1{G{mY}1ZZ&3Yq*Cu1=xfUa-Z^ytHJszn8dT%F7@ zypFGh?6tXcdx+K5{hm-{@vYmz^2tSwPqKB~%Toe@m$_rQb(FW0S7wA4AK5n2XW>qC z>wr`U*L`9%s}nzqo2!~e%jueJg+RB~elfm++29wIs~wERI@vNc^1M+ZAw^LN%#2og zT6EWGiQm7z2m=Bi=8M5rWnH*?2Xmz@9LjmKd{}VHlS!5~IlME^!YAZ;jQiH1r@*gcwX>BE zbjaNOeY}B$-EpCVphfu(Q}FX*dd(J>L+hEV>&exEx6{6_(V4WK*yZVYiLiVdvHjd| zO6%$OYSP841%dSxT$LeeAyOGY4pm!-F!{_rV80+lbw>8`58*RKm??W{cW+d)R3_dV zQ#@IHsJ+v|ujBgA4aZ@~NiE_dLib6ttZ-5%fr++3%I$Pyie$$@S?q15qKH4|^< zKRC0+yT`uihr!Ceh1%21;;#@sazBl-w@G_9i_@BwdsJp{EFV_oYdG_qV9GMhU;C8! zoz6iw-o?hU65GW7MxO}ojF@87F*uU_G)_O^tcfZIk{P9b|0kg2h8kB9IOiDjUMS%2 zapO5{s4)gxNBx1_&C`8w68r22A`7Lgi8IGI?JsC7K@&IrW~IbITA|)}$Bt(*GY=<% z#0I)0z1CD`377S@Rzwb!U$k~l_LBijz8x|gXW9sp&>?PxJI~$>ZGL5XYIAU@oQVP3 z;$BR#rsH$FCj(b2CGl<{uTy7Dy+oL7v`aI_I%Lx)6Z(3v4>>#j5;_CO-);amhBjQM zg2^zB3Uya9R`jfP)2dqDsM9!e3u?q~>!O|6-=5dsmH?XY@;x;POM${9hOQ05Lx$zU zTvhI0xyu1uHJdKZOW3m;-vr88;ZZxvYtzs;^OJeBeXPs&ByqDleQ)+NOBowqkb&_= zZk9Wa=yP&<%)5)-?s*ReZw@jjmDIQkyktIyr9Rvq!*kj;2Iu>Y!HR@n>3R#lX=lTA zvUVW!^D$Rei1aKCS$XaaZxr52)oqk5|CMOOx#%LeaP?*Cob-G+8?B9m&x2JIgkcvF zSToh6rks1NAVJQOOJX2En*z}{wUkWpe0Fi;Rw`E~0EM&nQ=DLh<1dbG$Nh7fWp+6# z%%KVgWu4C=xt@vrHa|qS9RZ?0Py?^ub10>HaSp9?^9nfF4~nDG2~BwL`ek{qMsaaz zHq^$@(1=EOs4rg33eFprmARPhRDjIT+1)-|NQu5&z;Cr4>zej%E~1h4OpOXX zjvb8tzr1{EDBjwM5k(rF_R^V48Oy}W_<+@JQiY30$(mUogY+=`qX!Bi>D5c!nzKmR ze!SQ;IXGE0Yi9TwN3$fQuB2H1%9WnE8QZKYLU*`dAsnJ`#c1T{u3Bulza7oKu{y59 z1*3Ca#?8TxXPDixCi0EzoYU57DFe-wuAwgFO0d{$bL1Tf&%K+U-H z9dPpl+WfBI13oZ!C_nb-mooqK+*njTv7(zqG>fZbVV~1?1XQ+P-2C#XD@h6Y|myhcXZv&QedRk(^aNfcr>)1Wt2X?XOa%>@Bi`M{t3Ji z{5%5H3abY}z9#kaZ*ZQ#20ev*uoT*VV*dj|b3OSm=3(f0r|&MabuJC^ykUxM{xT+X zq+D5wufDj&6-MYaOSVm+0ARmw0ykJyI-F8vaJY)vF5M_p$~yWKZ*^Lf2cE@l653?*`9r{l7CI6Sk z-sy&v$||M%pPjOKmDx?`h_j-D*?Xn(wgPID?-{|{dv;)E_`hkeNgfY2=RZsC? zxpv@Q>REG#UYHvMsS#v+JX76xZ>{`Uz&3fTy~VHV@?*DHewTHq?jPYz64bzw@^=0^ zG2J~DgKcR4n0J%#JfJ5xBMNh17rZgqRBRSFd4aG32Y(P*Z|s57AN`%C`TKm5XbdON z(eHc9wJ&F|LDqK)f`7%voF!;6)QXe z6Q1~KSyhrOdBQY{VH=U9>nD8t4)++^CiS2d;rhmeS(RGo56MKF;On>L&lGDBqe%|j zA15$q+4me0Z*baV39WY$hlbU)3JUP3XidKEFzC+)$5{9=Zrk<%Sl1p}Bbs^%hSUztqw*mMo~h~`Ho_baD`zS@db(8> zO?18^yQ6xYhgr@=Hr_1v4fgG*E{~FDHQC+S4j>YZIy0(AZPUCQQ{+B8FJ0M@mWum^ z8$Tz`r!l8;SA|iJ&ki{=34?B-PJH#SjXUSAvczowoN5}i;SEcwakhHhesxucgy-JB}6v+28+mI&m*OQeX!mIsd z0%j1lhhfeGv|AAbUPbskZyFfLGy0A8?@lFe=RMsz0c&fcT7<3? zRkY`-I2pyqV8~=#^f6Ia&F0=3EG!h$^EtgO>5{`o;!S?B8Cf#&b>&HCk0OWP#&uhjo9y*NC`MCB?K=68Dc zOqBc8rrP#CsuHTz1MFZ}Tgc-iCo?f`s4swZ%Hp#*erCt@n$0*x548~!V|~zsRyQE?icjC+>P0m$tN;l(zIE zyM|mTRkZ_G4AAU}9GA_~Zr9e&#$^dG4na+EPR>`Lm^5XF4K&2{ri2A;DauMQnwvjW z^z+r0gL^31hY{Y#&9s;PKQsS&TE)jJ22UI-OclTB0pB>(*|(i_4B#z=B$M;#n(IsU-^y zdg~h~iTyvP>XN83P+V&l+lmHBnE8qGF9L*!>~T|*Hb`{&Ew+V@wzVNiM0vFqD<%6# zRr2aadW=#Jrq{vJQ>{K-m+RecBP)u(Sa$x=^J8!h zYsZ39`Oz%5dbMSrlk9a#=0qLU)LZv)^U_i<6#UXMCS3+M8@^wbAG=-@_>EAmsYzTv zr9rxtf9U)u*Y|5#m&P%K%MMrwZMXX|-ShJIEu5DvdG$%NhQ^CS>SMLc<1hT^5q7lH)C?@RbCat(>E$bfo#Ng2v`9j-blipJBjM&>(eKaq z>^v$--RfHm@5Z$7y{eD(_fch{serFT1VbFjfUs07p_k|4q{~XG@n{~hWlmZ;r_Ch3 z@>lv|ZXQ)W&cUK^#=rxpLDO0uNw)A1NjFB#TIZF|+TP?>-nv_y_cF9zQeQpT5Ag(MhSjDak=dmS&RT@mLwl{hbtEHDc?wT%nl1+H5=H>pkx3 z={5tCjo|Gl`zC6_s&pOhSUg1uGw%cxSTvH~n;hB0yuM@0q8^@>z#XS_6}MU;ep+F^ ze86OqJSJ3DT%%C>lE2c_=pWVJuq<9O4@i>vKyy|1SEebe57)>N*5UpY!&^=I-H z=|aagsNdt)E_|c&YG{C#Evv?N?Wb z)!0~wW0X{I!1BuF_s&&ev2vWojFou(f)fziza}#vflp0OGLkXGtNI>QddHyqojE8{~`Z`>y8y$ z;D+E<)3{t?L(Md;@$NR?iNDU}?_2%xHRu+B(u?t5#TWX}|34;m6U@edl~ZA`;FDF? z;2La-EkL%50r52&)@l6N5ayz-cj)bxh-m(?=Ju~-MiqLbuOJ5`1GIyJmKZQh3vG!J zd^ocQ1G|uWm5x$C6X7fn7Ci1DKdzwV+BVOZ&prHY8G4i{sqUf2(D+Ahp2H9(*iR78 z!X|GWASHCbHs{tysM$Vh4Q59F%qmRkCiMSKG}?F%v^uiLbeS|$7I;k-T`6{ zjmsB~ZOq3?(7Bc0ve<+0$SdKuT?v6Ynp_3U!)hf4k!skrSr3Mniy=Tqz3Y9E@dBax z;!6a|)ebeHd}n~WG+Oc021S;5z-i89H>Yw1)-w-*R6mVr^TtM(GN(xgEy{!C>=n*0 zYmVZAv~+a+CPkrax=g6Kshb<7pi?MC4ouGDhqrx?UQ`j;W9jGYVBOe1L(`up;C1E5 z!{L-P)PG$#ZC0Sr0O3z;AM;{gZemxOG6Q|K03Tn_NSx1RZ(8aD4)a8Vjz%7oUk1Rb zr!u)n3Zy_33vP$vH^KJrW3Cu6w>db?+;0HR-VA*e`Uw#P9rv}XMI6_D8*7g~-~)M7 zv>ZKw(%6T*+AWnvfVW#z({Tr_M-)Bo8cyz43uyjW+jclk@HLpF+N1j}@*m9T*2pEH@`cZ>c z)w zmKi?h%cfVQgD~%-qPhLnAE>U$1EH#VMdtm~E_*AULOP%rK}pIM;=A<@)l01P+nL0& zOXKA7jlV5$D}e7>Ab2zk#3{ljP68Xr1pSEhBA8tc&heLxf;5Q<)>$YlU!CzoU%$VT zxV6~7ANh}?1UdQ!)xI;G+O!EVpE^7!Ul^%WM|osONkvVrcgnw+kCT&@_8zk9)lG1X zl3auZfg#|&d21j#egjl<{@^0kiv9HEIrwBosP`tOmhnmDnJ#XN0Tr;|1P_9qVw29> zB*6P;ulV_rjL(`1h>8WA3Se5JoVB*Y2`~E*9le;n>X#TS(wr?kbLtjw?cTDq6*Jp!*3D zeT6Lr!)@n-?T4iD9U`)@dV2yiJjFHPyjJh<8jx6#p!t(>$0fq3v2l$=@uTkerDEV9 zG5+{NW!234f}OBVMe+sgNkqn;n6S<~0*}p0?bab`tza^%r8V4t ztT<^tE;A#vzl!{aU|@m{1`2)ogF$nX`t%{}sxV6RdaTT9 zbO%s!`!cYDwV;cN_ZpdI+CW~d!mQ2>X> zXiE@j*#piMNO8fkA3*;j6ndBx8XQbp9px>NQ?cre{7P;CG@TluL?NB;nCpbl~&6Gt~nx;SF&gmiHr)iaR%O!@JOSGt#eOE7EmNcizlf-R$T=) zaneAxYb5v*A-VrZ$w@ zK;wyhYSp}k7zV$}vL}GfsYsGU0{2;JtpzC&#hhIthEmAwq8>hTGs<99ev#Xt_Ut1U z70dg7N>y^KsUV28QU@LZI~Ao4WBy@G(Z6L4I>Ii;`5DY%g&x=7@fw=4 z^q(&%1s@{`i^5XIbg@%upQtS0_Jx6=&VUg>RPs2<%Hr;3AWI7Zp6ZDFHqXPBXlvbD zhe^d2gY>XPB^ZR5jiBeE67Yot+0G;gZxn7hCG$TR6_@{5-Yg4R?LsF;t}dQ))f6++NqDHv2*yXi=-2VYL340tM=7fui8 zIBj(2b-0D0ER6bmraV2&Ac`7QJ7QV1Ahz_u*U7S1C05UABV>JXus7T0YOD(R=jYof zsbwvxRe?52Dpk7Cqg}K9fCznya*xeCik65I|3itThAy#qQKiVEA+VH0ITz0}!5SQ9 zC`*C`?B;&W#SX`ORxNm)9Oskq7j1his)iYfVrHYfAZsWTde4yybg89ogSFvjkgw!{ z#Z^M}DPVeqTow0loBu3;4)YJBkFU)z8}{!Qg6N)Dr1=PU60}AYXg^9~qXbNWzgd-? zfNW1t%6%ZgsFdWDbI?D`2tH07F0AnUF`nWfZFAo^5ygw4y!pHYj4S!N z<82+;g*=_-3PG32(7h?C2Ws32uv;T81oQI@Bpn6G@i`vbZ1gNsjsJGwhc0OmMuL?Vj^BF7aeoO^>-0wWknrT4xV#t!MsHxH;duIP$;NZE_Xo zqbfQ8C7+k59;YV&AGiB)tlCBO(B%MO4dX|8JEm3dBshn*Iq&EKx0>fp#t_OLOegH4 zK+HYq)E;TD9{@q}fJsutCeB}&76(0gf?R8Px#mBFo7?DcgZT3)u_0|hG$I4CMou1l zrz@$ddheVzHGv!_k>VTD9|Kw{tBkheS}m}@CRZ5!Qt(4%h{`^`6^l9-|2=DJ!n*@m z6X(dIXY>(aTjO>0dryaJe$zstekaPyc9m^GQa4k)Onojd^<~oHT z>I%%E%(EI$v|$JEs^6Uit&+@g{BdRc5eIGhH0Ab-XN>x{da0w2P+xFVR5DPZCtHTD zB0=gQKZU6phy%NxF1t_D0-_PMb zIxTTA}1YK6ZMEnf|jy@|YwxcUodF}rP%=RxQTLMfyuz5=O zcNp^j-wx)#UmTMA-;>w>p7?LBtk?hBulmQ+C}a&3tj4S@eB);!&||Tkrt+`Bgnbk= zuqz|KD@RWc?66~MvVEIG|8Ui~*jMh5Q?WCb@pz`~Dy)dmPJ$XRmru6VO(X>~MK*#O z+%*FrcMTpI&E1dadkSK(Re%7bavyx1fLgTWOF$oyE1?3F+JSGr(mNNzJf$Fms|34f z0Pe(58u~k_|BciJmhgQC9SSOE=YfTaCYX|d9iRv-tzm#BDFAf;GN5|<@k8LUp)D4w zy61Y>5)4*_1EWzVPvQ5CM&S}M)ngIsPyz07?kuu7oP+cEFYDb(=y5rbZE+uqo@j^P zc$#NES~ZNXeW(Uoc?ec6pxk~SjOPt1fa?iA2n(n;jZR{$Q2zus=|+&v)3n}LdmHUI zm*%Q346xtkRwX!ra2nS8e{{S=aQc$h`Yz#+=j23{DS() zt9Ry@X9tUOXd$;uzi6iL+fStVaQ_p=Hkh(3Hb@6wy9ypJ8+Jbq54NgTp}Fs`0yHQT zx|7jfXIosb>~Y9EWK}qfY6exaA((Y2!8$@lfQF-;cVnJ7UMEq+?kdlp6tigb@2!=vD znO`37!rr{zp>+N^(s6N-!;|eEc%-yeBNdy%Lq>*OJCsrPo-OiR5prDTIQ+!;>j@af z1Vf`=_l}tX%K}`6855d zNynFiMTfaADF6?MO0dBK-P>HZ&803VFz}XM=p+E2+N~iypLitStKRC+7NzZ2R?wPW z9k|3ye{a0md(m-uV^SU#&iL`8lmQH=$GPZ;_t|6Krdj?`o|t$g3OFHO1h?j7_*(W6 zadOc^9|`Y=_ir!z_nz57uDmM{frm{PKPE}JbU z8$%OJ2kAsRuuib^>vqsxyFx2@@zzU>Fa@cX)Ly5lsRKi(=m`|_E?}O$Ce_A#?K#zV zb^Um%{y)x~7uCRhkEzdCzqb**aIl#+dviFowOQYIsk}E5{@hJ8B3+(7GEf+|&r-=b zV$i$>&`$CeLB>^n=>Zx=RliR=NkQ_sP=FaFPy3t07L1NRzT;eB-rq+S;0&)vOTW0i zf)%=k7Fg#78#C$3Uqy1gJEz!1AX zcDjqPl6v6m4VhZ=7cP6_lr=YZ7nC)oW-i^8eZ|E=d*$%-2brb!iN4Z;pR6iYYTpsA z!`tL>5}%KX97}a;MVdM5B3s!^!h|_BA#jmud9gExf>{x7kjm=P>&`c*t(!UOXwB3# zvRp-ssS|vza+Imp=MqGtj6My8%x%RpHpvr+R`-`(st4{iM5V7P{{XdQ?n|lh)5W%@ zMI#ORN4BcA+{N+v4a3=CkHT^d?1+eBk(1+oFx|vnO?J&jqthU_{Zihof-7og*T?L{ z?sE^ur(^AiGT3on>OK|Yk$aIMNpwfC5g)U$Jun*CX=r}97JFDx;~40L*q@eH6*`zx zuO?wDod~@6hno*iuMU@HZoEsPULEy$wIr&xfgkG{v&(nN{l1)twJst`W%klfhTA7ox-7x?tkN2;k=% zy}bmU_Nn~Xee<#BPYLbCohN80ajc#;X?I|*Kz|cS|AvuELne=WnlJ)+@)DW$U3*zi zFNB(sZOnNBf_CHUrDyM=3g&0JuMuP>KbIV;1zDI-Nr4mtRP}u!{y~628n2pK#I*y1j+a&xPsUu=$#`W~Cx7f46Q7?pWm8om5f?k-82C|99C9$S3SE8Tgk7 z6z61ZUe$m_efW>YrBndXQiScZC&iw)y~)h2CDBibFqVEqm34z5d#rruaT6Wy0p&6T z(&=?CYj7Ux`oSZZe@WN2{f9$8p1z`*Y!8H8!>O_bB(A;Pd0tWx-m3%tqt)BrtUkwr z3f%1wHUTJU)t9I1>id6QDjE0X-u?v!LiC;U_dg7nW+cbBTv9K8;2p^cdd*V%M$E}q zk0qW*NjlpGJJrA<*2ildZpa$nlFfrfYhf>+uYP+84fz+=)5-#nXm$;CaGZh-EbSQS9on zNg}bveb;p_L{y%LQyh65IVVT;3Z+AE{*cw@b)&kf4fRHIffi!o}vOM`<1>m@I zV4!r*5$mRr6VbM;;H{f15FGTuC_T$uVdXszA~+HDeKG4iU-`6(%~w|TwJgctk8ISM4@e~ zeR-uW*SAZiF~G@8Kd$$~&)4_dRHL9K7`;d5VsdJRuwPf#;Rfv;$(O8?l>5or+xhG3 zk?ax^rk0M3i4!O7>J8>!BQ!kX6izW;XKLduA6lm<+afn`>MrpA;H1+ zpn8P?-GSH}=N?UC=>~1Sx*_h6yv&v%9GWvDp>}Gfx1IO=975k$<;kTw=bf{Scmm`v z*>t*)THLmEX#N`zhFP|SW2$C*o1*UrrJ!`o9_ zxl~fbx?EW#PVQPpIl(hd(1>N!+jzGhqjHyJcvCCv`F4thLB&^%(?c1n8M6tFL5SK9 zo09?xgw?ZpjKnFieGWbJ@vWU8i(Jd49aZ*aWWO)18(*E1Pr>EIX)|b1?EVU0!0Q^l z89f9Q?J@?-u2VtI8`ygsZx93mAG}|-`Ei9Z6RxvMiku#&$c(e68CXv^Gr8Sckh8U7 zK47(Dg{*03xTY{Bv%Mm~=!DcPO|?iB=7)@Kx^tEAFY8+a4%U}VR= zqPlpx>fXkH-V1h(cKpuX_^=5(?8*~+kp(z%^U8!mbp{`uf{JRZOtd%Kd=_Wkb0**& zDEso05cR{jBGB&BI?ZmcjG#sArqak@O8e&y)ze*9MMxX@d~Wtn?JQ_*Ww}_5)+hMf zk=XhlxxoO#RUldYRuo5oT+TDvqJHD30)kt&!oN(uUB2fgq2-%(|G_olmhgwfe&-by zDjCSE*9n5o%c@MQLZaj)bDW8veY;AiaD&4o<`VDE(Mtu^WBbmByQ8s}E;MDn`EZi# z4VzJr0eIq=2`IgO{Z@yn;Q7iMy@l}gFFuRw27#~hm-w??anf|sn{Bvezi4i~TQ?l# zO#7N`mw(!zRY-sGymXY7>l%&T)0GL7fH@YB!RT&SQ5Xr#+VYDF9paW@X zBn2sv76D=4=5xuIsnMgmyT04+d7tBW{)5GRU)Op5vUAq(p(Su7RA)f6 zm`~pju-M2J;6*)g1fsJD&TkBt!m1I{QJ>6ZlXmWYKNeMO%$mbmuXOb5)Z%8>HD?ue z-VJm-Pg%J6!XUM}Urr=@ofgCMGvBa-$(hsta#O{to^Ehu|MHKu4l40wCT-PO(2+e5 zh7@Gubv@IbT4mS(d;@Sy_Sz3zXw;7$Nw8$!XW+8s02B1j9~T$iOxZ;|%Az)KoHlK5 z{6TAGG>Y>(I~>>advjT_`(@ANBRPd`La&Qb?8vG(R}u&TE7-fxK7-P zO6$McBI0Vf+?Vj$w_-Y%fO0(r(|qgJZ8NcJ9f7NjY{bRX`AHQ^>Ng4JnVI=7k)cJo z`3df5Hp1}hLShDzUQ5qG<6^2?6k1%W zJ_HO>CsK*m9W0{J;G4%EEJbl`_Lvb)zK(!!!n#ruxDRk2;+z)oCuYbXGjGIk{GC7N znAB2De*U zkU{g9#O$8#T!F9Zkrw?)DR0fUDH>i!7uK5(&76??E9m(jEN?67xDOl9RqHrwz$C`5 z{(cy$s682-nBs@^>w~iJjjZZ7^Wm!>ZPLS<}OSkt?rx3KDXt>dID5n@e#KhQ-N5ZtU3aTZ*3AO zjMSp^-o6MT0oIK!atw!eWx>#8HZfVo>YW@j`T>9Wzm)-GZW#tTR>nT1%8A1>fLaI7 zEd85!#tiHzFfDct{3|g`5V-RdZoeF{Whin{cct9u&hsSoc6jo)8i4O^Fp7y`7p0uD zl_7jWT?M+e&;l!K;odCH0f^%iy%Nz8M~u%Lx0zaAgn8A73>DdwggL{lQfIdi3+l%) z-}D@ZXDlT+5#P%ZuBBsCDR9{t9HT5)pgoH`zx-8@WX6apXG@khp9u)|A~Mky;67Y! z4l{2@M-e;hq}=qaa8IQ;vu|&a;JMG;1Vv%9wkf38ZnjK%2w~A>0AT^;a#)*~Y>(r; zR!%2d?oN%DAWqd310t?Mc*;14KE(|+8cMO{py&_g{LWp@$-QvK2dbLdibli;Xl=?A zlQr2$SKo83(N<#`gmcuZsLJdK?HSne zR1|y?)eN_uvNu4Nkx;Qx1^3QJ4bPo7Fg7f#gH{r3Eig9BvnS@43oTinM`y5cAfPehbNZT^k~U1eh@{xXJc z@fyEGhWT#!Y0=8_6$1a8S7Kv+7iCH=`?-+HZ%5n2vefUjpJkSg03H*0FBzKe)}{J2 zuf?tk6f~P#eUGFPPxx?*DmV6ejWxj*lGcO4(57mhHFBe9!sbs0Pkp%GQ3vC7vl%tD zAN8OK^iK-Dybs;)v0+D#7?5c7ky1(jEMhh_BFGwuirhdM!b}sJTXAw0l|-K5Hnom^ zm7*$_6sy2z)h;~T4XDfK%#?lms+EM4sfIU8sjQypPWSHDrn>7UKL^J~yi9!Nu6Tl! zSCu2k30V0&Uf$=ijS;F(D&FUCV6v1UV#7006DCw9W2NfY{YM?6CR#;eE_%py*cBc- znFO8m##lA5+~n;0kgtL>?IRC;iQrum4oO z3DBRhK+ohg)+jM9$@`0gu(l?slP`RzsH%7=qH%oS;o={_fmv$NceS)^Bu?e{ot^2W zUH~-5HliWi#e)&+#b!D3*L;XIBqmJqy$@w5C|1NvC|)dBh=ha_?$oXwk%wl+@)v)E z0hjpl;$^cW(h@G7c!yrOjJlOZ5KAiEp$Vet@68qx#T>&y+>$r)U4$6?v)?2~?nel_ zLblQwXvtqA_Ln1yG6ml9lRB;7cS4*bqo>|CA`rg{W|P+8N14uMw>F;+C_-cEB;jy4 z&iUDFDg69UHPxFs%O+H6JK`K(+1*IfcN+mRmxPaSUqb%e5OzM=h_ESOVTOOV!#M|k zLDKM&Mlw7Ljj50vx$0GA!Xw*9`<8gbm%>Sq&fVu5kHmo9$e>|jG}bVYN5Lgk2rFcv z3%3Ogu|~J`sJ?nGO!`NiuoE)eDa5^&B%k_#ZT=8)h`@>^{le5o&>m7B+VKcM%8wvi z=rnm5+ERb`V1HM)bj67ay$oT21$jIp4-WbrQynOriO;woatC+%dYINN$|;8*oga%k zD&@jJYk{Zqdjw6}%OeRt-TdiS&!keR**`X=aHF3W^9g_C zb~w{#ls@H9gd&n9;gw<@vXnn=Iv-uO4b}d%8XOxpk$3L!b5+uYSLA04AEzIM-^cdL z@v7``G%v2?!s<>uH=3QW(3~?2ExiU@$g*hC==m{%E8Az}7{Ft%j!LTC*b-AYhto6F zW$#>7gIX9ipEvc-)EK4LJ_gfnB`4HwsCEQ3w{-`6^O%vDx_C(IN!qXMgqKMFaE8J5Slt# z(Qu{ypEmnhxtVSJ_o*kDcrKYXNKdM{%#an&E62xaI{?V{@_N>o$_dxn#z4;&5>Z;Lr8L&+X>M`;6z$ep#4M z_$8-D-hE__Z#l_i7L6QkEuk3!s+cZUrRTp_|JyzwyO3px{_9!_YyG_KAN`6<@5$hY z^`X*VnNG3$@Hg|^NA7fW{#+ZiLBqaDy2;)y>28^EHf>3`?;n>(UiOGQcXzV34Z{27>emN8~NxkE!V-&R4bMs zglL2OVHwtSNM7EZ4Bu=(R_DrJspyx_U9xgiHip-%3E4ux>1_UFj>z} zTs<1Ae1i>cFD~uSYl#n&(yrj8ED?-~S_`5l=rSkETS;J4J9=EH&dDzI(Zz(bCr8W5>b?1^U})@W<;{t!uR#Y3 zezp&;E6!>qd$>OBmW*QWj9GibOq_6~D4y|8@}kG44wOzBCNA3wt<_eC5tl@GV_fFT z`EmKs%eHeC3pFR`W-!ho|lbA<8XyL8)_y=RJWU zyTKudzizntyIAAUF_+V}msWt;?pvKVMO%DyF51cc!G8K>ho_V0R8g~bK15b`@zIUp z;^LR5#!Qcz|D4**>ZEyhpga4%q#Wr_5?p?}5s}hD%O_q6U^$JvRPcGLjI6k*E>YMR zGc|?@A09b$^)bLtjh&Ag6QEs3Tr3VtPDmQHoSB;3__a!##G-Qd#jXD2&dHvgy1~~Q zyy~(@O8KVNZ`FstF7d&26w$G4qv7T;UY0FI_Vn|*ckeY_cenrC-+Uamsif>gMY^lw z3RX28o3!VryB0btyCvWq!_FXBPhvc`cn;5{U^n@|i{gG;RbHz(F6|aU+jK%6b;Yh{ zdi5OkbpIG$6Od4Y3)@ytOCPH)d016#Is}3}&Axf(7CY2W#B98DHmZDo-hXtju{sy@ z`uk~-FxXWvn*msQqRJ>g+{$Pzsz{|!{$f({w$Ik)-Xt5Ep$^UC56aSM%t1y5n zOXsIMX|g-|9B@~dauR_ z@Gca1|ImM##Da!Ub3U-GojrQ7m-ceSRxkKYm)$!yL}?|n;WC6mMPL!4snA#+GqCNp zlXu+KQKgiM9@M4jxjh3L4n&%}HXbafyfoqHXzN7DCQT`O&0dBGs2~q5UW?r@F)pAY z6y~pyi!2>v_v_@~8)XZX$``s6EKhaW85Nn=m9FSfD_H6J4py}Lf?4<-WaV_tBP(9f zVv3DP&I;h1826563UL>`qO->{Tz@q@w9bTCP>X?3GOyhsW_^$8;xWpkS0-lEIm|7= z3Oa}AiqAak3C=k(#DvX%$YHieiTBO_xuW^8Zlt`X8L}?F>=MC>LkymNd0+f4Y?dVQ zhH|ZgJyo?dB~*z*ix_5$k#J6~VEPxNqR*|sZ;Cf@#xc=W>^V(fyoC^H7gMpS*uNQP zUcbb~keo&rIW3&cqYP~xVIm%awZMBtVC7_gi&LZ(J(d-Fs{48MB_xvbo%PM$iGD?e zw01`1n%CSf01i2>ydxF6jre+{#Ra^P9%R}Q;sc$IH^-tw3JO8{RY&{Vo?`}!{0{93 za~L1SwbR|(#I_9L67S-<8b7+CRupu!VgK$>_xs%pH^`r$KgOJ!>t)6B&NZ`cVj^`T zvm*w&N&UU5YhB>y4Mx`1yIZF+W&IzUNxW=W2b!0^uKs!_c5c1f{IU`15g12%MN+o^ zQTs2b9}|a^8Gr#&<3ei8HP^Uq^DehfA&ly=#JM<+6}-;U&TBG`tWC4zDUU5)BVL;# zuGR*x$jUIor1X5tKQim{A8uAu_I&yYsCS=UHLvG2pIc(pgHD*=9ebU4!i!A=q>dF5bHL- zNG~tTsk2)Aq*+t5{3Sbx3NK4C1zFO4CZfeH%U>mEGzrwjm`ypC7ILEOns;+s4g|s5 zc6EsXhGLPvRCruAAk;*@ph!MUSMt+Lyod@i(=$r*t~g9r^gU;}3^2qA?cTm<;9}da zwM^-% zIYfSWr9x>OB$#!$*w`abu4LvG`Lp}TYL-!4FBr2dHbUUrQvfQSsZ|-1W1>@L3J_S7 zU#IAPI3nlFD)#R+q{D!Frw$4N-6AdsJ{3fjiixm*L0!m&%{QCEeSqbkJp3mR&hQ*t zc-Qq91J27tZ8yNfTA4Zrk=F=k9CUJz1ZoC2=|2uqob3W-LXxx3Gt%w4+?hght_4EK z(Z(7}G@+%*d-6>|GST9nLY;vD2@PL?P^8#ArL!dQALH5m&3pi37 z4*=>NH)|#w|1oCDtD{26fUP6ALEEp);Lc;Z=~pNG+Zg97tC1ibAmac`V@DlBWa)sM``l4N(gl_7v}r~%WV6H%b(r4!*FFF<9CCJ;Od{4D)nCW+yE9NS zo~EtM8vxXG-#38JB~XaT%~xu6zTa(zQJ(HX1gYz((HTybkAa}ju^aj|GiN4iQoDIMzK+5k zx8o?z?drlkwaX6W=bR&Jp*wHs47++-h8g!usAFVQwuv`w^a>xpKALq z5qNYYW)-IoBWMYQ55$A<#x~ywCIu+X;N%61D2VA_o56vtA_a@8|4e(rygk)m2%TLVac!LB{ird@1i5&4~70LEVEonLKq2k zSbpq7D}+&i+9Za+W@y(HP{jtxp>Qvq+vn8>8Q}EnfJ|fQy8>rLx3sGZcQ7v~(&j1c z#qY;z7aLB1UCE7@+*(G><_E$1gnv|zv9OhZ3|b->YnHTnHF}b;`6QPs*R#-ScDjgD ziVkc&BbuAw$@eiIH`+OBbZrJgGiyJlME_Asai76Optu$tx+(hco}5dT6TKKgRn5q;?rAamcc^2z2QS+`TI9w_%)Ts6nN)MKv65p2{rWE!zPYPaYW)MSwz^^FYJL zoaO2m%A%`x?XLvxwsRYgm1bUjbgqBmBlr)h*=nvi&+890HwoSlv?ek{`{U9vmzPH1 zk-z%;qS&$dU^57nBg{q;;?Y*aQXB5-T)is;VQtWUMZ_M~ZAHUgt|v z?9jZ|9G(y5!~bxFl$oUVDvY<88O0}{%ej`P7KihFM4qw4Ik!1vw?v2^!7S~u(Zc54 zNdi1R4`R=Ap>Xe%msv`py(V{WKbMDCsE8iKh+lSucvynMZoVAGOOthQy}ZDUJK?=M zj^P#N%Thwxl4NPf+iAK5sJ5*Lq2{6Thctrs0qm#&Rugxvhhmr@6(RCA>fv%WlB~mRJCcp_C zYn49?nWicO@b|@XIDvK1_m4RV?8w#>Zmoc{K;XijQ`m}J6D|FnU%UDiklPQ{1(!EeQ+QpaoSN3t+JM+W?#Sh6Z`&z zhzI)DBT%tIl+e8}i{a$~2Sf=+bzTK5nAG0i84M+o7Iqn*)gXqMV-9aBYW+y(`!{xIS70L!myrw3DJiPS2ejA%4 zm=)gX#&i-0u<9!$Q10Q<;k#_|WYM)=B`CpQ2o&a!S$|WsrH(pFiIPaXXHl8{+zhnb zW1|GR6p-yXc;Edwu6V0oVQA{TF*JG1^xVMHwWK?K$W+VTpbMv%mA<)!wFpsL0U*){ zb9rdTvc@4Zain>^4qj;d$FbU2SHfP3rtyxpW0-F@rjvuf6||OWByXWQ4>o;lC#Z2O zox?|CkaQv_HaT9MW~~bl{LvQ*|AR|g+DRiVLKA1hDX~;v8rsjhEqFv99G1OeJ*jCC zfoSTP#^I_Ujk1zEZ}Qqex6O~l)dnw@q2F-qm21cStPKMolS}Yof zQ&JVhPHYqz#nUgP!QiVTrmqa1N1ZWZH#IxW#+9^(9!)GLZQAXY?2J<&M==ZE6NN50 zr{%>41@r)3dxU2n^Mdmr0~?skwgOi--Q?E4*SZ4)>vMc{El)W+)25OBcmsQmeS2ic zj}kcG-WWZ96MQd&FvsleIUxl%;;Z1*%=~&e@9E>epF}FF<^4iZs3R+s*su`1KQfm{ z)Y%s?8IUL^%`)^zFHYXkMhAm`!)TsF>MrfJlmT@>bK9+3Vl)zb5?HKT;)g)JTA)jzR89%NBA(nn!7?qswHNSqc{O(iz6W|~X^1sa zt-UW#^y8KZOzcHhhHy-TVU1vm!4d=~;0INTVZ%{egX6i~=Vo)koZv4rH$T7b-`Lr7 z4z*Pk5f|w+nx+3paTY5=X>N(E`Z|`ejs!kZs2Y%_!j^XflptJL=-vZUDXIl)Fm02g zx(w2SibnqoWtONsTLKwc9z_W-((%}6f$6Qvxyeu4`fTuTbCI^rE{upX_Z zaXOB1YWBRiOen0^KAjCxpD>tm>lzFzurn$SHI;$>axHjL2J_egri)omR5Ach4Q<*p zq7rGOg>~}%1m^yGv>MA{Tm$MeiLQw1Gu4?(Y( zU(`KK4*UC{!dqUH`OZq#Qn;md`R7Bb0rX?|Z`6|p2N-!6ZE+jaOf~X**9tB|@kK-w zwH5lsLP@(XX3S{^C^s~KMov6F!hP6JjJ-|!8BPYWO0pIF8+p`1;#kprQU(0aZ9pWN1aM3jJT-hw?wPbL@;Aq|vA5Osmrg76tBKYAwTw4` zjq5CNE`w6^hcXut0_x;D4VA5>{C|2E35r?ItNUYZlT}<(j(Qdeooab3g_;L19*vN) z-hwbd)WAGNMbEJJ-z)$?hlQ*E;2HDK6+`M+BzKaGm>P@c=p1d!O3QIKyURA0=XW1& zyW{;6A4S!q6GlKAtbhTPsO#wYRz)QYFsczc9j`>5rY+#?rJMVaVcNd~wfyMfvzKIk zMm)-c0|-2RaU{62SwwnsOld~n9!v*Yvx`>{1zf-t#*M$(Qru7bb1d`s#DzVs5bX7L zi8))iS^DbgOg56Ido4kA1qf=n!$Ian#3_k;(7+?`k145`$hY5R%Wh2w{NdCl=*qjU zhShmm4(*9}w{y>>XABS%L9Qqd?z%|e!%gvr#QkEd4jTLm`Fi96X zoHA-mg|TEQi6wGln-T<8Q;&jEY7_4>=VM`l54Q`imX2Gu+>_>ggmiyXvu1^J2wzJJ z($enrZ!r&TkE;KA(N|+S`k$$%G4z8EftiC(_9{KQBWT}DW9F;N6y8Wz%*bsX8v?IG z=tQGq`w>)jtOWKN@@M-Utex>j|N7}SQ~e+phOzd8d}S;B{-MZAn_{n@N0XrHk+@

?rfB9uGZcP|zs(Q_S~{COLRmn4BP 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 literal 0 HcmV?d00001 diff --git a/33/images/add-app-user-interactive.png b/33/images/add-app-user-interactive.png new file mode 100644 index 0000000000000000000000000000000000000000..be3bd6dd95ec35a23df8e023e67a0412cf6e1b39 GIT binary patch literal 267623 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%0Dc-&tKv+)%k({gE=r_wW{jym!m5{X!!>d1IL? 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