diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000000..e69de29bb2 diff --git a/404.html b/404.html new file mode 100644 index 0000000000..b7605d395b --- /dev/null +++ b/404.html @@ -0,0 +1,895 @@ + + + + + + Page Not Found :: Quarkiverse Documentation + + + + + + + + +
+ +
+ +
+
+

Page Not Found

+
+

The page you’re looking for does not exist. It may have been moved. + You can return to the start page, or browse the extensions in the navigation bar on the left.

+
+
+

If you arrived on this page by clicking on a link, please notify the owner of the site that the link is broken. +If you typed the URL of this page manually, please double check that you entered the address correctly.

+
+
+
+
+
+ + + + + + + diff --git a/CNAME b/CNAME new file mode 100644 index 0000000000..fb2368ac30 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +docs.quarkiverse.io \ No newline at end of file diff --git a/_/css/site.css b/_/css/site.css new file mode 100644 index 0000000000..08c2a0ca28 --- /dev/null +++ b/_/css/site.css @@ -0,0 +1,3 @@ +@font-face{font-family:Open Sans;font-style:normal;font-weight:400;src:url(../font/open-sans-latin-400-normal.woff2) format("woff2"),url(../font/open-sans-latin-400-normal.woff) format("woff");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Open Sans;font-style:italic;font-weight:400;src:url(../font/open-sans-latin-400-italic.woff2) format("woff2"),url(../font/open-sans-latin-400-italic.woff) format("woff");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Open Sans;font-style:normal;font-weight:500;src:url(../font/open-sans-latin-500-normal.woff2) format("woff2"),url(../font/open-sans-latin-500-normal.woff) format("woff");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Open Sans;font-style:italic;font-weight:500;src:url(../font/open-sans-latin-500-italic.woff2) format("woff2"),url(../font/open-sans-latin-500-italic.woff) format("woff");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Roboto Mono;font-style:normal;font-weight:400;src:url(../font/roboto-mono-latin-400-normal.woff2) format("woff2"),url(../font/roboto-mono-latin-400-normal.woff) format("woff");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Roboto Mono;font-style:normal;font-weight:500;src:url(../font/roboto-mono-latin-500-normal.woff2) format("woff2"),url(../font/roboto-mono-latin-500-normal.woff) format("woff");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}*,::after,::before{-webkit-box-sizing:inherit;box-sizing:inherit}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-size:1.0625em;height:100%;scroll-behavior:smooth}@media screen and (min-width:1024px){html{font-size:1.125em}}body{background:#fff;color:#000;font-family:Open Sans,sans-serif;line-height:1.15;margin:0;word-wrap:anywhere}a{text-decoration:none}a:hover{text-decoration:underline}a:active{background-color:none}code,kbd,pre{font-family:Roboto Mono,monospace}b,dt,strong,th{font-weight:500}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}em em{font-style:normal}strong strong{font-weight:400}button{cursor:pointer;font-family:inherit;font-size:1em;line-height:1.15;margin:0}button::-moz-focus-inner{border:none;padding:0}summary{cursor:pointer;-webkit-tap-highlight-color:transparent;outline:none}table{border-collapse:collapse;word-wrap:normal}object[type="image/svg+xml"]:not([width]){width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}::-webkit-input-placeholder{opacity:.5}::-moz-placeholder{opacity:.5}:-ms-input-placeholder{opacity:.5}::-ms-input-placeholder{opacity:.5}::placeholder{opacity:.5}@media (pointer:fine){@supports (scrollbar-width:thin){html{scrollbar-color:#aaa #555}body *{scrollbar-width:thin;scrollbar-color:#aaa transparent}}html::-webkit-scrollbar{background-color:#555;height:12px;width:12px}body ::-webkit-scrollbar{height:6px;width:6px}::-webkit-scrollbar-thumb{background-clip:padding-box;background-color:#aaa;border:3px solid transparent;border-radius:12px}body ::-webkit-scrollbar-thumb{border-width:1.75px;border-radius:6px}::-webkit-scrollbar-thumb:hover{background-color:#555}}@media screen and (min-width:1024px){.body{display:-webkit-box;display:-ms-flexbox;display:flex}}.nav-container{position:fixed;top:3.5rem;left:0;width:100%;font-size:.94444rem;z-index:1;visibility:hidden}@media screen and (min-width:769px){.nav-container{width:15rem}}@media screen and (min-width:1024px){.nav-container{font-size:.86111rem;-webkit-box-flex:0;-ms-flex:none;flex:none;position:static;top:0;visibility:visible}}.nav-container.is-active{visibility:visible}.nav{background:#fff;position:relative;top:2.5rem;height:calc(100vh - 6rem)}@media screen and (min-width:769px){.nav{-webkit-box-shadow:.5px 0 3px #aaa;box-shadow:.5px 0 3px #aaa}}@media screen and (min-width:1024px){.nav{top:3.5rem;-webkit-box-shadow:none;box-shadow:none;position:sticky;height:calc(100vh - 3.5rem)}}.nav a{color:inherit}.nav .panels{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:inherit}html.is-clipped--nav{overflow-y:hidden}.nav-panel-menu{overflow-y:scroll;-ms-scroll-chaining:none;overscroll-behavior:none;height:calc(100% - 2.5rem)}.nav-panel-menu:not(.is-active) .nav-menu{opacity:.75}.nav-panel-menu:not(.is-active)::after{content:"";background:rgba(0,0,0,.5);display:block;position:absolute;top:0;right:0;bottom:0;left:0}.nav-menu{min-height:100%;padding:.5rem .75rem;line-height:1.35;position:relative}.nav-menu h3.title{color:#000;font-size:inherit;font-weight:500;margin:0;padding:.25em 0 .125em}.nav-list{list-style:none;margin:0 0 0 .75rem;padding:0}.nav-menu>.nav-list+.nav-list{margin-top:.5rem}.nav-item{margin-top:.5em}.nav-item-toggle~.nav-list{padding-bottom:.125rem}.nav-item[data-depth="0"]>.nav-list:first-child{display:block;margin:0}.nav-item:not(.is-active)>.nav-list{display:none}.nav-item-toggle{background:transparent url(../img/caret.svg) no-repeat 50%/50%;border:none;outline:none;line-height:inherit;padding:0;position:absolute;height:1.35em;width:1.35em;margin-top:-.05em;margin-left:-1.35em}.nav-item.is-active>.nav-item-toggle{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.is-current-page>.nav-link,.is-current-page>.nav-text{font-weight:500}.nav-panel-explore{background:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;position:absolute;top:0;right:0;bottom:0;left:0}.nav-panel-explore:not(:first-child){top:auto;max-height:calc(50% + 2.5rem)}.nav-panel-explore .context{font-size:.83333rem;-ms-flex-negative:0;flex-shrink:0;color:#222;-webkit-box-shadow:0 -1px 0 #efefef;box-shadow:0 -1px 0 #efefef;padding:0 .5rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;line-height:1;height:2.5rem}.nav-panel-explore:not(:first-child) .context{cursor:pointer}.nav-panel-explore .context .version{-ms-flex-negative:0;flex-shrink:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:inherit;-ms-flex-align:inherit;align-items:inherit}.nav-panel-explore .context .version::after{content:"";background:url(../img/chevron-5d5d5d.svg) no-repeat 100%/auto 100%;width:1.25em;height:.75em}.nav-panel-explore .components{line-height:1.6;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-shadow:inset 0 1px 5px #efefef;box-shadow:inset 0 1px 5px #efefef;background:#fff;padding:.5rem .75rem 0;margin:0;overflow-y:scroll;max-height:100%;display:block}.nav-panel-explore:not(.is-active) .components{display:none}.nav-panel-explore .component{display:block}.nav-panel-explore .component+.component{margin-top:.5rem}.nav-panel-explore .component:last-child{margin-bottom:.75rem}.nav-panel-explore .component .title{font-weight:500}.nav-panel-explore .versions{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-top:-.25rem;line-height:1;list-style:none}.nav-panel-explore .component .version{margin:.375rem .375rem 0 0}.nav-panel-explore .component .version a{border:1px solid #aaa;border-radius:.25rem;opacity:.75;white-space:nowrap;padding:.125em .25em;display:inherit}.nav-panel-explore .component .is-current a{border-color:currentColor;opacity:.9;font-weight:500}@media screen and (max-width:1023.5px){aside.toc.sidebar{display:none}main>.content{overflow-x:auto}}@media screen and (min-width:1024px){main{-webkit-box-flex:1;-ms-flex:auto;flex:auto;min-width:0}main>.content{display:-webkit-box;display:-ms-flexbox;display:flex}aside.toc.embedded{display:none}aside.toc.sidebar{-webkit-box-flex:0;-ms-flex:0 0 9rem;flex:0 0 9rem;-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}}@media screen and (min-width:1216px){aside.toc.sidebar{-ms-flex-preferred-size:12rem;flex-basis:12rem}}.toolbar{color:#fff;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#4695eb;-webkit-box-shadow:0 1px 0 #4695eb;box-shadow:0 1px 0 #4695eb;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.83333rem;height:2.5rem;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;position:sticky;top:3.5rem;z-index:2}.toolbar a{color:inherit}.nav-toggle{background:url(../img/menu.svg) no-repeat 50% 47.5%;background-size:49%;border:none;outline:none;line-height:inherit;padding:0;height:2.5rem;width:2.5rem;margin-right:-.25rem}@media screen and (min-width:1024px){.nav-toggle{display:none}}.toolbar-padder{-ms-flex-negative:0;flex-shrink:0}.nav-toggle.is-active{background-image:url(../img/back.svg);background-size:41.5%}.home-link{display:block;background:url(../img/home-o.svg) no-repeat 50%;height:1.25rem;width:1.25rem;margin:.625rem}.home-link.is-current,.home-link:hover{background-image:url(../img/home.svg)}.edit-this-page{display:none;padding-right:.5rem}@media screen and (min-width:1024px){.edit-this-page{display:block}}.toolbar .edit-this-page a{color:#efefef}.breadcrumbs{display:none;-webkit-box-flex:1;-ms-flex:1 1;flex:1 1;padding:0 .5rem 0 .75rem;line-height:1.35}@media screen and (min-width:1024px){.breadcrumbs{display:block}}a+.breadcrumbs{padding-left:.05rem}.breadcrumbs ul{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:0;padding:0;list-style:none}.breadcrumbs li{display:inline;margin:0}.breadcrumbs li::after{content:"/";padding:0 .5rem}.breadcrumbs li:last-of-type::after{content:none}.page-versions{margin:0 .2rem 0 auto;position:relative;line-height:1}@media screen and (min-width:1024px){.page-versions{margin-right:.7rem}}.page-versions .version-menu-toggle{color:inherit;background:url(../img/chevron-fff.svg) no-repeat;background-position:right .5rem top 50%;background-size:auto .75em;border:none;outline:none;line-height:inherit;padding:.5rem 1.5rem .5rem .5rem;position:relative;z-index:3}.page-versions .version-menu{display:-webkit-box;display:-ms-flexbox;display:flex;min-width:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;background:-webkit-gradient(linear,left top,left bottom,from(#4695eb),to(#4695eb)) no-repeat;background:linear-gradient(180deg,#4695eb 0,#4695eb) no-repeat;padding:1.375rem 1.5rem .5rem .5rem;position:absolute;top:0;right:0;white-space:nowrap}.page-versions:not(.is-active) .version-menu{display:none}.page-versions .version{display:block;padding-top:.5rem}.page-versions .version.is-current{display:none}.page-versions .version.is-missing{color:#efefef;font-style:italic;text-decoration:none}.toc-menu{color:#222}.toc.sidebar .toc-menu{margin-right:.75rem;position:sticky;top:6rem}.toc .toc-menu h3{color:#000;font-size:.88889rem;font-weight:500;line-height:1.3;margin:0 -.5px;padding-bottom:.25rem}.toc.sidebar .toc-menu h3{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:2.5rem;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.toc .toc-menu ul{font-size:.83333rem;line-height:1.2;list-style:none;margin:0;padding:0}.toc.sidebar .toc-menu ul{max-height:calc(100vh - 8.5rem);overflow-y:auto;-ms-scroll-chaining:none;overscroll-behavior:none}@supports (scrollbar-width:none){.toc.sidebar .toc-menu ul{scrollbar-width:none}}.toc .toc-menu ul::-webkit-scrollbar{width:0;height:0}@media screen and (min-width:1024px){.toc .toc-menu h3{font-size:.83333rem}.toc .toc-menu ul{font-size:.75rem}}.toc .toc-menu li{margin:0}.toc .toc-menu li[data-level="2"] a{padding-left:1.25rem}.toc .toc-menu li[data-level="3"] a{padding-left:2rem}.toc .toc-menu a{color:inherit;border-left:2px solid #333;display:inline-block;padding:.25rem 0 .25rem .5rem;text-decoration:none}.sidebar.toc .toc-menu a{display:block;outline:none}.toc .toc-menu a:hover{color:#1259a5}.toc .toc-menu a.is-active{border-left-color:#1259a5;color:#000}.sidebar.toc .toc-menu a:focus{background:#fff}.toc .toc-menu .is-hidden-toc{display:none!important}.doc{color:#000;font-size:inherit;-webkit-hyphens:auto;-ms-hyphens:auto;hyphens:auto;line-height:1.6;margin:0 auto;max-width:40rem;padding:0 1rem 4rem}@media screen and (min-width:1024px){.doc{-webkit-box-flex:1;-ms-flex:auto;flex:auto;font-size:.94444rem;margin:0 2rem;max-width:46rem;min-width:0}}.doc h1,.doc h2,.doc h3,.doc h4,.doc h5,.doc h6{color:#000;font-weight:400;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none;line-height:1.3;margin:1rem 0 0}.doc>h1.page:first-child{font-size:2rem;margin:1.5rem 0}@media screen and (min-width:769px){.doc>h1.page:first-child{margin-top:2.5rem}}.doc>h1.page:first-child+aside.toc.embedded{margin-top:-.5rem}.doc>h2#name+.sectionbody{margin-top:1rem}#preamble+.sect1,.doc .sect1+.sect1{margin-top:2rem}.doc h1.sect0{background:#000;font-size:1.8em;margin:1.5rem -1rem 0;padding:.5rem 1rem}.doc h2:not(.discrete){border-bottom:1px solid #333;margin-left:-1rem;margin-right:-1rem;padding:.4rem 1rem .1rem}.doc h3:not(.discrete),.doc h4:not(.discrete){font-weight:500}.doc h1 .anchor,.doc h2 .anchor,.doc h3 .anchor,.doc h4 .anchor,.doc h5 .anchor,.doc h6 .anchor{position:absolute;text-decoration:none;width:1.75ex;margin-left:-1.5ex;visibility:hidden;font-size:.8em;font-weight:400;padding-top:.05em}.doc h1 .anchor::before,.doc h2 .anchor::before,.doc h3 .anchor::before,.doc h4 .anchor::before,.doc h5 .anchor::before,.doc h6 .anchor::before{content:"\00a7"}.doc h1:hover .anchor,.doc h2:hover .anchor,.doc h3:hover .anchor,.doc h4:hover .anchor,.doc h5:hover .anchor,.doc h6:hover .anchor{visibility:visible}.doc dl,.doc p{margin:0}.doc a{color:#1259a5}.doc a:hover{color:#ff004a}.doc a.bare{-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}.doc a.unresolved{color:#c00}.doc i.fa{-webkit-hyphens:none;-ms-hyphens:none;hyphens:none;display:inline-block;width:1em}.doc .colist>table code,.doc p code,.doc thead code{color:#222;background:#efefef;border-radius:.25em;font-size:.95em;padding:.125em .25em}.doc code,.doc pre{-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}.doc pre{font-size:.88889rem;line-height:1.5;margin:0}.doc blockquote{margin:0}.doc .paragraph.lead>p{font-size:1rem}.doc .right{float:right}.doc .left{float:left}.doc .float-gap.right{margin:0 1rem 1rem 0}.doc .float-gap.left{margin:0 0 1rem 1rem}.doc .float-group::after{content:"";display:table;clear:both}.doc .stretch{width:100%}.doc .underline{text-decoration:underline}.doc .line-through{text-decoration:line-through}.doc .dlist,.doc .exampleblock,.doc .hdlist,.doc .imageblock,.doc .listingblock,.doc .literalblock,.doc .olist,.doc .paragraph,.doc .partintro,.doc .quoteblock,.doc .sidebarblock,.doc .ulist,.doc .verseblock,.doc .videoblock,.doc details,.doc hr{margin:1rem 0 0}.doc table.tableblock{font-size:.83333rem;margin:1.5rem 0 0;word-break:break-word}.doc table.tableblock+*{margin-top:1.5rem}.doc p.tableblock+p.tableblock{margin-top:.5rem}.doc td.tableblock>.content>:first-child{margin-top:0}.doc table.tableblock td,.doc table.tableblock th{padding:.5rem}.doc table.tableblock,.doc table.tableblock>*>tr>*{border:0 solid #aaa}.doc table.grid-all>*>tr>*{border-width:1px}.doc table.grid-cols>*>tr>*{border-width:0 1px}.doc table.grid-rows>*>tr>*{border-width:1px 0}.doc table.frame-all{border-width:1px}.doc table.frame-ends{border-width:1px 0}.doc table.frame-sides{border-width:0 1px}.doc table.frame-none>colgroup+*>:first-child>*,.doc table.frame-sides>colgroup+*>:first-child>*{border-top-width:0}.doc table.frame-sides>:last-child>:last-child>*{border-bottom-width:0}.doc table.frame-ends>*>tr>:first-child,.doc table.frame-none>*>tr>:first-child{border-left-width:0}.doc table.frame-ends>*>tr>:last-child,.doc table.frame-none>*>tr>:last-child{border-right-width:0}.doc table.stripes-all>tbody>tr,.doc table.stripes-even>tbody>tr:nth-of-type(2n),.doc table.stripes-hover>tbody>tr:hover,.doc table.stripes-odd>tbody>tr:nth-of-type(odd){background:#efefef}.doc table.tableblock>tfoot{background:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#fff));background:linear-gradient(180deg,#aaa 0,#fff)}.doc .halign-left{text-align:left}.doc .halign-right{text-align:right}.doc .halign-center{text-align:center}.doc .valign-top{vertical-align:top}.doc .valign-bottom{vertical-align:bottom}.doc .valign-middle{vertical-align:middle}.doc .admonitionblock{margin:1.4rem 0 0}.doc .admonitionblock p,.doc .admonitionblock td.content{font-size:.88889rem}.doc .admonitionblock td.content>.title+*,.doc .admonitionblock td.content>:not(.title):first-child{margin-top:0}.doc .admonitionblock pre{font-size:.83333rem}.doc .admonitionblock>table{table-layout:fixed;position:relative;width:100%}.doc .admonitionblock td.content{padding:1rem 1rem .75rem;background:#fafafa;width:100%;word-wrap:anywhere}.doc .admonitionblock td.icon{position:absolute;top:0;left:0;font-size:.83333rem;padding:0 .5rem;height:1.25rem;line-height:1;font-weight:500;text-transform:uppercase;border-radius:.45rem;-webkit-transform:translate(-.5rem,-50%);transform:translate(-.5rem,-50%)}.doc .admonitionblock td.icon i{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:auto;height:100%}.doc .admonitionblock td.icon .svga,.doc .admonitionblock td.icon i:empty::before{content:"";height:inherit;width:1.5rem;margin:0 .25rem 0 -.5rem;border-radius:.45rem 0 0 .45rem;padding:.2em .2em .3em .3em;background-color:rgba(0,0,0,.2)}.doc .admonitionblock.caution td.icon{background-color:#e37b40;color:#fff}.doc .admonitionblock.important td.icon{background-color:#c00;color:#fff}.doc .admonitionblock.note td.icon{background-color:#4695eb;color:#fff}.doc .admonitionblock.tip td.icon{background-color:#205894;color:#fff}.doc .admonitionblock.warning .icon{background-color:#ff004a;color:#fff}.doc .admonitionblock .icon i{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:100%}.doc .admonitionblock .icon i::after{content:attr(title)}.doc .imageblock,.doc .videoblock{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.doc .imageblock.text-left,.doc .videoblock.text-left{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.doc .imageblock.text-right,.doc .videoblock.text-right{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.doc .image>img,.doc .image>object,.doc .image>svg,.doc .imageblock img,.doc .imageblock object,.doc .imageblock svg{display:inline-block;height:auto;max-width:100%;vertical-align:middle}.doc .image:not(.left):not(.right)>img{margin-top:-.2em}.doc .videoblock iframe{max-width:100%;vertical-align:middle}#preamble .abstract blockquote{background:#000;border-left:5px solid #333;color:#000;font-size:.88889rem;padding:.75em 1em}.doc .quoteblock,.doc .verseblock{background:#fff;border-left:5px solid #222;color:#222}.doc .quoteblock{padding:.25rem 2rem 1.25rem}.doc .quoteblock .attribution{color:#333;font-size:.83333rem;margin-top:.75rem}.doc .quoteblock blockquote{margin-top:1rem}.doc .quoteblock .paragraph{font-style:italic}.doc .quoteblock cite{padding-left:1em}.doc .verseblock{font-size:1.15em;padding:1rem 2rem}.doc .verseblock pre{font-family:inherit;font-size:inherit}.doc ol,.doc ul{margin:0;padding:0 0 0 2rem}.doc ol.none,.doc ol.unnumbered,.doc ol.unstyled,.doc ul.checklist,.doc ul.no-bullet,.doc ul.none,.doc ul.unstyled{list-style-type:none}.doc ol.unnumbered,.doc ul.no-bullet{padding-left:1.25rem}.doc ol.unstyled,.doc ul.unstyled{padding-left:0}.doc ul.circle,.doc ul.disc,.doc ul.square{list-style-type:square}.doc ol.arabic{list-style-type:decimal}.doc ol.decimal{list-style-type:decimal-leading-zero}.doc ol.loweralpha{list-style-type:lower-alpha}.doc ol.upperalpha{list-style-type:upper-alpha}.doc ol.lowerroman{list-style-type:lower-roman}.doc ol.upperroman{list-style-type:upper-roman}.doc ol.lowergreek{list-style-type:lower-greek}.doc ul.checklist{padding-left:.5rem}.doc ul.checklist p>.fa-check-square-o:first-child,.doc ul.checklist p>.fa-square-o:first-child,.doc ul.checklist p>:first-child .svga.fa-check-square,.doc ul.checklist p>:first-child .svga.fa-square{display:inline-block;width:1.25rem}.doc .dlist .dlist,.doc .dlist .olist,.doc .dlist .ulist,.doc .olist .dlist,.doc .olist .olist,.doc .olist .ulist,.doc .olist li+li,.doc .ulist .dlist,.doc .ulist .olist,.doc .ulist .ulist,.doc .ulist li+li{margin-top:.5rem}.doc .admonitionblock .listingblock,.doc .olist .listingblock,.doc .ulist .listingblock{padding:0}.doc .admonitionblock .title,.doc .exampleblock .title,.doc .imageblock .title,.doc .listingblock .title,.doc .literalblock .title,.doc .openblock .title,.doc .tableblock caption,.doc .videoblock .title{color:#333;font-size:.88889rem;font-weight:500;font-style:italic;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none;letter-spacing:.01em;padding-bottom:.075rem;text-align:left}.doc .imageblock .title{margin-top:.5rem;padding-bottom:0}.doc details{margin-left:1rem}.doc details>summary{display:block;position:relative;line-height:1.6;margin-bottom:.5rem}.doc details>summary::-webkit-details-marker{display:none}.doc details>summary::before{content:"";border:solid transparent;border-left:solid;border-width:.3em 0 .3em .5em;position:absolute;top:.5em;left:-1rem;-webkit-transform:translateX(15%);transform:translateX(15%)}.doc details[open]>summary::before{border-color:currentColor transparent transparent;border-width:.5rem .3rem 0;-webkit-transform:translateY(15%);transform:translateY(15%)}.doc details>summary::after{content:"";width:1rem;height:1em;position:absolute;top:.3em;left:-1rem}.doc details.result{margin-top:.25rem}.doc details.result>summary{color:#333;font-style:italic;margin-bottom:0}.doc details.result>.content{margin-left:-1rem}.doc .exampleblock>.content,.doc details.result>.content{background:#fff;border:.25rem solid #222;border-radius:.5rem;padding:.75rem}.doc .exampleblock>.content::after,.doc details.result>.content::after{content:"";display:table;clear:both}.doc .exampleblock>.content>:first-child,.doc details>.content>:first-child{margin-top:0}.doc .sidebarblock{background:#efefef;border-radius:.75rem;padding:.75rem 1.5rem}.doc .sidebarblock>.content>.title{font-size:1.25rem;font-weight:500;line-height:1.3;margin-bottom:-.3em;text-align:center}.doc .sidebarblock>.content>:not(.title):first-child{margin-top:0}.doc .listingblock.wrap pre,.doc .tableblock pre{white-space:pre-wrap}.doc .listingblock pre:not(.highlight),.doc .literalblock pre,.doc pre.highlight code{background:#efefef;-webkit-box-shadow:inset 0 0 1.75px #333;box-shadow:inset 0 0 1.75px #333;display:block;overflow-x:auto;padding:.75rem}.doc pre.highlight{position:relative}.doc .source-toolbox{display:-webkit-box;display:-ms-flexbox;display:flex;visibility:hidden;position:absolute;top:.25rem;right:.5rem;color:#333;font-family:Open Sans,sans-serif;font-size:.75rem;line-height:1}.doc .listingblock:hover .source-toolbox{visibility:visible}.doc .source-toolbox .source-lang{text-transform:uppercase;letter-spacing:.075em;font-size:.96em;line-height:1.0425}.doc .source-toolbox>:not(:last-child)::after{content:"|";letter-spacing:0;padding:0 1ch}.doc .source-toolbox .copy-button{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:transparent;border:none;color:inherit;outline:none;padding:0;font-size:inherit;line-height:inherit;width:1em;height:1em}.doc .source-toolbox .copy-icon{-webkit-box-flex:0;-ms-flex:none;flex:none;width:inherit;height:inherit}.doc .source-toolbox img.copy-icon{-webkit-filter:invert(50.2%);filter:invert(50.2%)}.doc .source-toolbox svg.copy-icon{fill:currentColor}.doc .source-toolbox .copy-toast{-webkit-box-flex:0;-ms-flex:none;flex:none;position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-top:1em;background-color:#000;border-radius:.25em;padding:.5em;color:#fff;cursor:auto;opacity:0;-webkit-transition:opacity .5s ease .75s;transition:opacity .5s ease .75s}.doc .source-toolbox .copy-toast::after{content:"";position:absolute;top:0;width:1em;height:1em;border:.55em solid transparent;border-left-color:#000;-webkit-transform:rotate(-90deg) translateX(50%) translateY(50%);transform:rotate(-90deg) translateX(50%) translateY(50%);-webkit-transform-origin:left;transform-origin:left}.doc .source-toolbox .copy-button.clicked .copy-toast{opacity:1;-webkit-transition:none;transition:none}.doc .language-console .hljs-meta{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.doc .dlist dt{font-style:italic}.doc .dlist dd{margin:0 0 .25rem 1.5rem}.doc .dlist dd:last-of-type{margin-bottom:0}.doc td.hdlist1,.doc td.hdlist2{padding:.5rem 0 0;vertical-align:top}.doc tr:first-child>.hdlist1,.doc tr:first-child>.hdlist2{padding-top:0}.doc td.hdlist1{font-weight:500;padding-right:.25rem}.doc td.hdlist2{padding-left:.25rem}.doc .colist{font-size:.88889rem;margin:.25rem 0 -.25rem}.doc .colist>table>tbody>tr>:first-child,.doc .colist>table>tr>:first-child{padding:.25em .5rem 0;vertical-align:top}.doc .colist>table>tbody>tr>:last-child,.doc .colist>table>tr>:last-child{padding:.25rem 0}.doc .conum[data-value]{border:1px solid;border-radius:100%;display:inline-block;font-family:Open Sans,sans-serif;font-size:.75rem;font-style:normal;line-height:1.2;text-align:center;width:1.25em;height:1.25em;letter-spacing:-.25ex;text-indent:-.25ex}.doc .conum[data-value]::after{content:attr(data-value)}.doc .conum[data-value]+b{display:none}.doc hr{border:solid #333;border-width:2px 0 0;height:0}.doc b.button{white-space:nowrap}.doc b.button::before{content:"[";padding-right:.25em}.doc b.button::after{content:"]";padding-left:.25em}.doc kbd{display:inline-block;font-size:.66667rem;background:#fff;border:1px solid #aaa;border-radius:.25em;-webkit-box-shadow:0 1px 0 #aaa,0 0 0 .1em #fff inset;box-shadow:0 1px 0 #aaa,inset 0 0 0 .1em #fff;padding:.25em .5em;vertical-align:text-bottom;white-space:nowrap}.doc .keyseq,.doc kbd{line-height:1}.doc .keyseq{font-size:.88889rem}.doc .keyseq kbd{margin:0 .125em}.doc .keyseq kbd:first-child{margin-left:0}.doc .keyseq kbd:last-child{margin-right:0}.doc .menuseq,.doc .path{-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}.doc .menuseq .caret{display:inline-block;width:.5em}.doc :not(pre).nowrap{white-space:nowrap}.doc .nobreak{-webkit-hyphens:none;-ms-hyphens:none;hyphens:none;word-wrap:normal}#footnotes{font-size:.85em;line-height:1.5;margin:2rem -.5rem 0}.doc td.tableblock>.content #footnotes{margin:2rem 0 0}#footnotes hr{border-top-width:1px;margin-top:0;width:20%}#footnotes .footnote{margin:.5em 0 0 1em}#footnotes .footnote+.footnote{margin-top:.25em}#footnotes .footnote>a:first-of-type{display:inline-block;margin-left:-2em;text-align:right;width:1.5em}nav.pagination{border-top:1px solid #4695eb;line-height:1;margin:2rem -1rem -1rem;padding:.75rem 1rem 0}nav.pagination,nav.pagination span{display:-webkit-box;display:-ms-flexbox;display:flex}nav.pagination span{-webkit-box-flex:50%;-ms-flex:50%;flex:50%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}nav.pagination .prev{padding-right:.5rem}nav.pagination .next{margin-left:auto;padding-left:.5rem;text-align:right}nav.pagination span::before{color:#333;font-size:.75em;padding-bottom:.1em}nav.pagination .prev::before{content:"Prev"}nav.pagination .next::before{content:"Next"}nav.pagination a{font-weight:500;line-height:1.3;position:relative}nav.pagination a::after,nav.pagination a::before{color:#333;font-weight:400;font-size:1.5em;line-height:.75;position:absolute;top:0;width:1rem}nav.pagination .prev a::before{content:"\2039";-webkit-transform:translateX(-100%);transform:translateX(-100%)}nav.pagination .next a::after{content:"\203a"}html.is-clipped--navbar{overflow-y:hidden}body{padding-top:3.5rem}.navbar{background:#000;color:#fff;font-size:.88889rem;height:3.5rem;position:fixed;top:0;width:100%;z-index:4}.navbar a{text-decoration:none;color:#fff}.navbar-brand{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:auto;flex:auto;padding-left:1rem;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.navbar-brand .navbar-item{color:#fff}.navbar-brand .navbar-item:first-child{-ms-flex-item-align:center;align-self:center;padding:0;font-size:1.22222rem;-ms-flex-wrap:wrap;flex-wrap:wrap;line-height:1}.navbar-brand .navbar-item:first-child a{color:inherit;word-wrap:normal}.navbar-brand .navbar-item:first-child :not(:last-child){padding-right:.375rem}.navbar-brand .navbar-item.search{-webkit-box-flex:1;-ms-flex:auto;flex:auto;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}#search-input{color:#333;font-family:inherit;font-size:.95rem;width:150px;border:1px solid #dbdbdb;border-radius:.1em;line-height:1.5;padding:0 .25em}#search-input:disabled{background-color:#dbdbdb;cursor:not-allowed;pointer-events:all!important}#search-input:disabled::-webkit-input-placeholder{color:#4c4c4c}#search-input:disabled::-moz-placeholder{color:#4c4c4c}#search-input:disabled:-ms-input-placeholder{color:#4c4c4c}#search-input:disabled::-ms-input-placeholder{color:#4c4c4c}#search-input:disabled::placeholder{color:#4c4c4c}.navbar-burger{background:none;border:none;outline:none;line-height:1;position:relative;width:3rem;padding:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-left:auto;min-width:0}.navbar-burger span{background-color:#fff;height:1.5px;width:1rem}.navbar-burger:not(.is-active) span{-webkit-transition:opacity 0s .25s,margin-top .25s ease-out .25s,-webkit-transform .25s ease-out;transition:opacity 0s .25s,margin-top .25s ease-out .25s,-webkit-transform .25s ease-out;transition:transform .25s ease-out,opacity 0s .25s,margin-top .25s ease-out .25s;transition:transform .25s ease-out,opacity 0s .25s,margin-top .25s ease-out .25s,-webkit-transform .25s ease-out}.navbar-burger span+span{margin-top:.25rem}.navbar-burger.is-active span+span{margin-top:-1.5px}.navbar-burger.is-active span:first-child{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.navbar-burger.is-active span:nth-child(2){opacity:0}.navbar-burger.is-active span:nth-child(3){-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.navbar-item,.navbar-link{color:#fff;display:block;line-height:1.6;padding:.5rem 1rem}.navbar-item.has-dropdown{padding:0}.navbar-item .icon,.navbar-item .icon .svga{width:1.25rem;height:1.25rem;display:inline-block}.navbar-item .icon img,.navbar-item .icon svg{fill:currentColor;width:inherit;height:inherit}.navbar-link{padding-right:2.5em}.navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}.navbar-divider{background-color:#333;border:none;height:1px;margin:.25rem 0}.navbar .button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#fff;border:1px solid #333;border-radius:.15rem;height:1.75rem;color:#000;padding:0 .75em;white-space:nowrap}@media screen and (max-width:768.5px){.navbar-brand .navbar-item.search{padding-left:0;padding-right:0}}@media screen and (min-width:769px){#search-input{width:200px}}@media screen and (max-width:1023.5px){.navbar-brand{height:inherit}.navbar-brand .navbar-item{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex}.navbar-menu{background:#333;-webkit-box-shadow:0 8px 16px rgba(10,10,10,.1);box-shadow:0 8px 16px rgba(10,10,10,.1);max-height:calc(100vh - 3.5rem);overflow-y:auto;-ms-scroll-chaining:none;overscroll-behavior:none;padding:.5rem 0}.navbar-menu:not(.is-active){display:none}.navbar-menu .navbar-link:hover,.navbar-menu a.navbar-item:hover{background:#4695eb}}@media screen and (min-width:1024px){.navbar-burger{display:none}.navbar,.navbar-end,.navbar-item,.navbar-link,.navbar-menu{display:-webkit-box;display:-ms-flexbox;display:flex}.navbar-item,.navbar-link{position:relative;-webkit-box-flex:0;-ms-flex:none;flex:none;font-size:1.2rem;font-weight:400;text-transform:uppercase}.navbar-item:not(.has-dropdown),.navbar-link{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar-link::after{border-width:0 0 1px 1px;border-style:solid;content:"";display:block;height:.5em;pointer-events:none;position:absolute;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);width:.5em;margin-top:-.375em;right:1.125em;top:50%}.navbar-end .navbar-link,.navbar-end>.navbar-item{color:#fff}.navbar-end .navbar-item.has-dropdown:hover .navbar-link,.navbar-end .navbar-link:hover,.navbar-end>a.navbar-item:hover{background:#000;color:#fff}.navbar-end .navbar-link::after{border-color:currentColor}.navbar-dropdown{background:#333;border:1px solid #333;border-top:none;display:none;top:100%;left:0;min-width:100%;position:absolute}.navbar-dropdown>.navbar-item{border-bottom:1px solid #555;text-align:right;width:100%}.navbar-dropdown .navbar-item{padding:.5rem 3rem .5rem 1rem;white-space:nowrap}.navbar-item{line-height:1.6rem;font-size:1rem}.navbar-dropdown .navbar-item:last-child{border-radius:inherit}.navbar-dropdown.is-right{left:auto;right:0}.navbar-dropdown a.navbar-item:hover{background:#4695eb}}footer.footer{background-color:#000;color:#fff;font-size:.83333rem;line-height:1.6;padding:1.5rem}.footer p{margin:.5rem 0}.footer a{color:#fff} + +/*! Adapted from the GitHub style by Vasily Polovnyov */.hljs-comment,.hljs-quote{color:#998;font-style:italic}.hljs-keyword,.hljs-selector-tag,.hljs-subst{color:#333;font-weight:500}.hljs-literal,.hljs-number,.hljs-tag .hljs-attr,.hljs-template-variable,.hljs-variable{color:teal}.hljs-doctag,.hljs-string{color:#d14}.hljs-section,.hljs-selector-id,.hljs-title{color:#900;font-weight:500}.hljs-subst{font-weight:400}.hljs-class .hljs-title,.hljs-type{color:#458;font-weight:500}.hljs-attribute,.hljs-name,.hljs-tag{color:navy;font-weight:400}.hljs-link,.hljs-regexp{color:#009926}.hljs-bullet,.hljs-symbol{color:#990073}.hljs-built_in,.hljs-builtin-name{color:#0086b3}.hljs-meta{color:#999;font-weight:500}.hljs-deletion{background:#fdd}.hljs-addition{background:#dfd}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:500}@page{margin:.5in}@media print{.hide-for-print{display:none!important}html{font-size:.9375em}a{color:inherit!important;text-decoration:underline}a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none}img,object,svg,tr{page-break-inside:avoid}thead{display:table-header-group}pre{-webkit-hyphens:none;-ms-hyphens:none;hyphens:none;white-space:pre-wrap}body{padding-top:2rem}.navbar{background:none;color:inherit;position:absolute}.navbar *{color:inherit!important}.nav-container,.navbar>:not(.navbar-brand),.toolbar,aside.toc,nav.pagination{display:none}.doc{color:inherit;margin:auto;max-width:none;padding-bottom:2rem}.doc .admonitionblock td.icon{-webkit-print-color-adjust:exact;color-adjust:exact}.doc .listingblock code[data-lang]::before{display:block}footer.footer{background:none;border-top:1px solid #333;color:#333;padding:.25rem .5rem 0}.footer *{color:inherit}}.doc{max-width:75rem}i.fa{-webkit-hyphens:none;-ms-hyphens:none;hyphens:none;font-style:normal}.github-project{display:none;padding-right:.5rem}@media screen and (min-width:1024px){.github-project{display:block}} \ No newline at end of file diff --git a/_/font/open-sans-latin-400-italic.woff b/_/font/open-sans-latin-400-italic.woff new file mode 100644 index 0000000000..013750d0d7 Binary files /dev/null and b/_/font/open-sans-latin-400-italic.woff differ diff --git a/_/font/open-sans-latin-400-italic.woff2 b/_/font/open-sans-latin-400-italic.woff2 new file mode 100644 index 0000000000..7c16fd6485 Binary files /dev/null and b/_/font/open-sans-latin-400-italic.woff2 differ diff --git a/_/font/open-sans-latin-400-normal.woff b/_/font/open-sans-latin-400-normal.woff new file mode 100644 index 0000000000..3443cc1513 Binary files /dev/null and b/_/font/open-sans-latin-400-normal.woff differ diff --git a/_/font/open-sans-latin-400-normal.woff2 b/_/font/open-sans-latin-400-normal.woff2 new file mode 100644 index 0000000000..510ca891ab Binary files /dev/null and b/_/font/open-sans-latin-400-normal.woff2 differ diff --git a/_/font/open-sans-latin-500-italic.woff b/_/font/open-sans-latin-500-italic.woff new file mode 100644 index 0000000000..c1e090e01b Binary files /dev/null and b/_/font/open-sans-latin-500-italic.woff differ diff --git a/_/font/open-sans-latin-500-italic.woff2 b/_/font/open-sans-latin-500-italic.woff2 new file mode 100644 index 0000000000..c056e4f6ad Binary files /dev/null and b/_/font/open-sans-latin-500-italic.woff2 differ diff --git a/_/font/open-sans-latin-500-normal.woff b/_/font/open-sans-latin-500-normal.woff new file mode 100644 index 0000000000..870bea009f Binary files /dev/null and b/_/font/open-sans-latin-500-normal.woff differ diff --git a/_/font/open-sans-latin-500-normal.woff2 b/_/font/open-sans-latin-500-normal.woff2 new file mode 100644 index 0000000000..77dde50237 Binary files /dev/null and b/_/font/open-sans-latin-500-normal.woff2 differ diff --git a/_/font/roboto-mono-latin-400-normal.woff b/_/font/roboto-mono-latin-400-normal.woff new file mode 100644 index 0000000000..60cf13bab7 Binary files /dev/null and b/_/font/roboto-mono-latin-400-normal.woff differ diff --git a/_/font/roboto-mono-latin-400-normal.woff2 b/_/font/roboto-mono-latin-400-normal.woff2 new file mode 100644 index 0000000000..f8894bab50 Binary files /dev/null and b/_/font/roboto-mono-latin-400-normal.woff2 differ diff --git a/_/font/roboto-mono-latin-500-normal.woff b/_/font/roboto-mono-latin-500-normal.woff new file mode 100644 index 0000000000..5aeed3679d Binary files /dev/null and b/_/font/roboto-mono-latin-500-normal.woff differ diff --git a/_/font/roboto-mono-latin-500-normal.woff2 b/_/font/roboto-mono-latin-500-normal.woff2 new file mode 100644 index 0000000000..b4f2bf8c22 Binary files /dev/null and b/_/font/roboto-mono-latin-500-normal.woff2 differ diff --git a/_/img/back.svg b/_/img/back.svg new file mode 100644 index 0000000000..bf7d30e9ac --- /dev/null +++ b/_/img/back.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/_/img/caret.svg b/_/img/caret.svg new file mode 100644 index 0000000000..1af41bc6ef --- /dev/null +++ b/_/img/caret.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/_/img/chevron-5d5d5d.svg b/_/img/chevron-5d5d5d.svg new file mode 100644 index 0000000000..40e962aff3 --- /dev/null +++ b/_/img/chevron-5d5d5d.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/_/img/chevron-fff.svg b/_/img/chevron-fff.svg new file mode 100644 index 0000000000..f7193867ec --- /dev/null +++ b/_/img/chevron-fff.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/_/img/favicon-32x32.png b/_/img/favicon-32x32.png new file mode 100644 index 0000000000..68b237ecb5 Binary files /dev/null and b/_/img/favicon-32x32.png differ diff --git a/_/img/home-o.svg b/_/img/home-o.svg new file mode 100644 index 0000000000..13874e1dc1 --- /dev/null +++ b/_/img/home-o.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/_/img/home.svg b/_/img/home.svg new file mode 100644 index 0000000000..584d26c456 --- /dev/null +++ b/_/img/home.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/_/img/menu.svg b/_/img/menu.svg new file mode 100644 index 0000000000..8b43b2e009 --- /dev/null +++ b/_/img/menu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/_/img/octicons-16.svg b/_/img/octicons-16.svg new file mode 100644 index 0000000000..e3b4e20220 --- /dev/null +++ b/_/img/octicons-16.svg @@ -0,0 +1 @@ +Octicons v11.2.0 by GitHub - https://primer.style/octicons/ - License: MIT \ No newline at end of file diff --git a/_/img/quarkiverse_logo_horizontal_reverse.svg b/_/img/quarkiverse_logo_horizontal_reverse.svg new file mode 100644 index 0000000000..a1e5de0d7b --- /dev/null +++ b/_/img/quarkiverse_logo_horizontal_reverse.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/_/js/site.js b/_/js/site.js new file mode 100644 index 0000000000..0d47c2615a --- /dev/null +++ b/_/js/site.js @@ -0,0 +1,6 @@ +!function(){"use strict";var e,o,r,s=/^sect(\d)$/,i=document.querySelector(".nav-container"),a=document.querySelector(".nav-toggle"),c=i.querySelector(".nav"),l=(a.addEventListener("click",function(e){if(a.classList.contains("is-active"))return u(e);v(e);var e=document.documentElement,t=(e.classList.add("is-clipped--nav"),a.classList.add("is-active"),i.classList.add("is-active"),c.getBoundingClientRect()),n=window.innerHeight-Math.round(t.top);Math.round(t.height)!==n&&(c.style.height=n+"px");e.addEventListener("click",u)}),i.addEventListener("click",v),i.querySelector("[data-panel=menu]"));function t(){var e,t,n=window.location.hash;if(n&&(n.indexOf("%")&&(n=decodeURIComponent(n)),!(e=l.querySelector('.nav-link[href="'+n+'"]')))){n=document.getElementById(n.slice(1));if(n)for(var i=n,a=document.querySelector("article.doc");(i=i.parentNode)&&i!==a;){var c=i.id;if((c=c||(c=s.test(i.className))&&(i.firstElementChild||{}).id)&&(e=l.querySelector('.nav-link[href="#'+c+'"]')))break}}if(e)t=e.parentNode;else{if(!r)return;e=(t=r).querySelector(".nav-link")}t!==o&&(h(l,".nav-item.is-active").forEach(function(e){e.classList.remove("is-active","is-current-path","is-current-page")}),t.classList.add("is-current-page"),d(o=t),p(l,e))}function d(e){for(var t,n=e.parentNode;!(t=n.classList).contains("nav-menu");)"LI"===n.tagName&&t.contains("nav-item")&&t.add("is-active","is-current-path"),n=n.parentNode;e.classList.add("is-active")}function n(){var e,t,n,i;this.classList.toggle("is-active")&&(e=parseFloat(window.getComputedStyle(this).marginTop),t=this.getBoundingClientRect(),n=l.getBoundingClientRect(),0<(i=(t.bottom-n.top-n.height+e).toFixed()))&&(l.scrollTop+=Math.min((t.top-n.top-e).toFixed(),i))}function u(e){v(e);e=document.documentElement;e.classList.remove("is-clipped--nav"),a.classList.remove("is-active"),i.classList.remove("is-active"),e.removeEventListener("click",u)}function v(e){e.stopPropagation()}function p(e,t){var n=e.getBoundingClientRect(),i=n.height,a=window.getComputedStyle(c);"sticky"===a.position&&(i-=n.top-parseFloat(a.top)),e.scrollTop=Math.max(0,.5*(t.getBoundingClientRect().height-i)+t.offsetTop)}function h(e,t){return[].slice.call(e.querySelectorAll(t))}l&&(e=i.querySelector("[data-panel=explore]"),o=l.querySelector(".is-current-page"),(r=o)?(d(o),p(l,o.querySelector(".nav-link"))):l.scrollTop=0,h(l,".nav-item-toggle").forEach(function(e){var t=e.parentElement,e=(e.addEventListener("click",n.bind(t)),function(e,t){e=e.nextElementSibling;return(!e||!t||e[e.matches?"matches":"msMatchesSelector"](t))&&e}(e,".nav-text"));e&&(e.style.cursor="pointer",e.addEventListener("click",n.bind(t)))}),e&&e.querySelector(".context").addEventListener("click",function(){h(c,"[data-panel]").forEach(function(e){e.classList.toggle("is-active")})}),l.addEventListener("mousedown",function(e){1":"")+".sect"+c);r.push("h"+(i+1)+"[id]")}else r.push("h1[id].sect0");n.push(r.join(">"))}m=n.join(","),f=d.parentNode;var a,s=[].slice.call((f||document).querySelectorAll(m));if(!s.length)return e.parentNode.removeChild(e);var l={},u=s.reduce(function(e,t){var o=document.createElement("a"),n=(o.textContent=t.textContent,l[o.href="#"+t.id]=o,document.createElement("li"));return n.dataset.level=parseInt(t.nodeName.slice(1),10)-1,n.appendChild(o),e.appendChild(n),e},document.createElement("ul")),f=e.querySelector(".toc-menu"),m=(f||((f=document.createElement("div")).className="toc-menu"),document.createElement("h3")),e=(m.textContent=e.dataset.title||"Contents",f.appendChild(m),f.appendChild(u),!document.getElementById("toc")&&d.querySelector("h1.page ~ :not(.is-before-toc)"));e&&((m=document.createElement("aside")).className="toc embedded",m.appendChild(f.cloneNode(!0)),e.parentNode.insertBefore(m,e)),window.addEventListener("load",function(){p(),window.addEventListener("scroll",p)})}}function p(){var n,i,t,e=window.pageYOffset,o=1.15*h(document.documentElement,"fontSize"),r=d.offsetTop;e&&window.innerHeight+e+2>=document.documentElement.scrollHeight?(a=Array.isArray(a)?a:Array(a||0),n=[],i=s.length-1,s.forEach(function(e,t){var o="#"+e.id;t===i||e.getBoundingClientRect().top+h(e,"paddingTop")>r?(n.push(o),a.indexOf(o)<0&&l[o].classList.add("is-active")):~a.indexOf(o)&&l[a.shift()].classList.remove("is-active")}),u.scrollTop=u.scrollHeight-u.offsetHeight,a=1r)return!0;t="#"+e.id}),t?t!==a&&(a&&l[a].classList.remove("is-active"),(e=l[t]).classList.add("is-active"),u.scrollHeight>u.offsetHeight&&(u.scrollTop=Math.max(0,e.offsetTop+e.offsetHeight-u.offsetHeight)),a=t):a&&(l[a].classList.remove("is-active"),a=void 0))}function h(e,t){return parseFloat(window.getComputedStyle(e)[t])}}(); +!function(){"use strict";var o=document.querySelector("article.doc"),t=document.querySelector(".toolbar");function i(e){return e&&(~e.indexOf("%")?decodeURIComponent(e):e).slice(1)}function r(e){if(e){if(e.altKey||e.ctrlKey)return;window.location.hash="#"+this.id,e.preventDefault()}window.scrollTo(0,function e(t,n){return o.contains(t)?e(t.offsetParent,t.offsetTop+n):n}(this,0)-t.getBoundingClientRect().bottom)}window.addEventListener("load",function e(t){var n;(n=i(window.location.hash))&&(n=document.getElementById(n))&&(r.bind(n)(),setTimeout(r.bind(n),0)),window.removeEventListener("load",e)}),Array.prototype.slice.call(document.querySelectorAll('a[href^="#"]')).forEach(function(e){var t;(t=i(e.hash))&&(t=document.getElementById(t))&&e.addEventListener("click",r.bind(t))})}(); +!function(){"use strict";var t,e=document.querySelector(".page-versions .version-menu-toggle");e&&(t=document.querySelector(".page-versions"),e.addEventListener("click",function(e){t.classList.toggle("is-active"),e.stopPropagation()}),document.documentElement.addEventListener("click",function(){t.classList.remove("is-active")}))}(); +!function(){"use strict";var t=document.querySelector(".navbar-burger");t&&t.addEventListener("click",function(t){t.stopPropagation(),document.documentElement.classList.toggle("is-clipped--navbar"),this.classList.toggle("is-active");t=document.getElementById(this.dataset.target);{var e;t.classList.toggle("is-active")&&(t.style.maxHeight="",e=window.innerHeight-Math.round(t.getBoundingClientRect().top),parseInt(window.getComputedStyle(t).maxHeight,10)!==e)&&(t.style.maxHeight=e+"px")}}.bind(t))}(); +!function(){"use strict";var o=/^\$ (\S[^\\\n]*(\\\n(?!\$ )[^\\\n]*)*)(?=\n|$)/gm,s=/( ) *\\\n *|\\\n( ?) */g,l=/ +$/gm,d=(document.getElementById("site-script")||{dataset:{}}).dataset;[].slice.call(document.querySelectorAll(".doc pre.highlight, .doc .literalblock pre")).forEach(function(e){var t,n,c,i;if(e.classList.contains("highlight"))(a=(t=e.querySelector("code")).dataset.lang)&&"console"!==a&&((c=document.createElement("span")).className="source-lang",c.appendChild(document.createTextNode(a)));else{if(!e.innerText.startsWith("$ "))return;var a=e.parentNode.parentNode;a.classList.remove("literalblock"),a.classList.add("listingblock"),e.classList.add("highlightjs","highlight"),(t=document.createElement("code")).className="language-console hljs",t.dataset.lang="console",t.appendChild(e.firstChild),e.appendChild(t)}(a=document.createElement("div")).className="source-toolbox",c&&a.appendChild(c),window.navigator.clipboard&&((n=document.createElement("button")).className="copy-button",n.setAttribute("title","Copy to clipboard"),"svg"===d.svgAs?((c=document.createElementNS("http://www.w3.org/2000/svg","svg")).setAttribute("class","copy-icon"),(i=document.createElementNS("http://www.w3.org/2000/svg","use")).setAttribute("href",window.uiRootPath+"/img/octicons-16.svg#icon-clippy"),c.appendChild(i),n.appendChild(c)):((i=document.createElement("img")).src=window.uiRootPath+"/img/octicons-16.svg#view-clippy",i.alt="copy icon",i.className="copy-icon",n.appendChild(i)),(c=document.createElement("span")).className="copy-toast",c.appendChild(document.createTextNode("Copied!")),n.appendChild(c),a.appendChild(n)),e.appendChild(a),n&&n.addEventListener("click",function(e){var t=e.innerText.replace(l,"");"console"===e.dataset.lang&&t.startsWith("$ ")&&(t=function(e){var t,n=[];for(;t=o.exec(e);)n.push(t[1].replace(s,"$1$2"));return n.join(" && ")}(t));window.navigator.clipboard.writeText(t).then(function(){this.classList.add("clicked"),this.offsetHeight,this.classList.remove("clicked")}.bind(this),function(){})}.bind(n,t))})}(); \ No newline at end of file diff --git a/_/js/vendor/fontawesome-icon-defs.js b/_/js/vendor/fontawesome-icon-defs.js new file mode 100644 index 0000000000..81b0e77d03 --- /dev/null +++ b/_/js/vendor/fontawesome-icon-defs.js @@ -0,0 +1 @@ +window.FontAwesomeIconDefs=[{prefix:"fas",iconName:"fire",icon:[384,512,[],"f06d","M216 23.86c0-23.8-30.65-32.77-44.15-13.04C48 191.85 224 200 224 288c0 35.63-29.11 64.46-64.85 63.99-35.17-.45-63.15-29.77-63.15-64.94v-85.51c0-21.7-26.47-32.23-41.43-16.5C27.8 213.16 0 261.33 0 320c0 105.87 86.13 192 192 192s192-86.13 192-192c0-170.29-168-193-168-296.14z"]},{prefix:"fas",iconName:"exclamation-circle",icon:[512,512,[],"f06a","M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"]},{prefix:"fas",iconName:"info-circle",icon:[512,512,[],"f05a","M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z"]},{prefix:"fas",iconName:"lightbulb",icon:[352,512,[],"f0eb","M96.06 454.35c.01 6.29 1.87 12.45 5.36 17.69l17.09 25.69a31.99 31.99 0 0 0 26.64 14.28h61.71a31.99 31.99 0 0 0 26.64-14.28l17.09-25.69a31.989 31.989 0 0 0 5.36-17.69l.04-38.35H96.01l.05 38.35zM0 176c0 44.37 16.45 84.85 43.56 115.78 16.52 18.85 42.36 58.23 52.21 91.45.04.26.07.52.11.78h160.24c.04-.26.07-.51.11-.78 9.85-33.22 35.69-72.6 52.21-91.45C335.55 260.85 352 220.37 352 176 352 78.61 272.91-.3 175.45 0 73.44.31 0 82.97 0 176zm176-80c-44.11 0-80 35.89-80 80 0 8.84-7.16 16-16 16s-16-7.16-16-16c0-61.76 50.24-112 112-112 8.84 0 16 7.16 16 16s-7.16 16-16 16z"]},{prefix:"fas",iconName:"exclamation-triangle",icon:[576,512,[],"f071","M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"]},{prefix:"fas",iconName:"angle-right",icon:[256,512,[],"f105","M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z"]},{prefix:"far",iconName:"copy",icon:[448,512,[],"f0c5","M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"]},{prefix:"far",iconName:"check-square",icon:[448,512,[],"f14a","M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zm0 400H48V80h352v352zm-35.864-241.724L191.547 361.48c-4.705 4.667-12.303 4.637-16.97-.068l-90.781-91.516c-4.667-4.705-4.637-12.303.069-16.971l22.719-22.536c4.705-4.667 12.303-4.637 16.97.069l59.792 60.277 141.352-140.216c4.705-4.667 12.303-4.637 16.97.068l22.536 22.718c4.667 4.706 4.637 12.304-.068 16.971z"]},{prefix:"fab",iconName:"github",icon:[496,512,[],"f09b","M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"]},{prefix:"fab",iconName:"gitlab",icon:[512,512,[],"f296","M105.2 24.9c-3.1-8.9-15.7-8.9-18.9 0L29.8 199.7h132c-.1 0-56.6-174.8-56.6-174.8zM.9 287.7c-2.6 8 .3 16.9 7.1 22l247.9 184-226.2-294zm160.8-88l94.3 294 94.3-294zm349.4 88l-28.8-88-226.3 294 247.9-184c6.9-5.1 9.7-14 7.2-22zM425.7 24.9c-3.1-8.9-15.7-8.9-18.9 0l-56.6 174.8h132z"]},{prefix:"far",iconName:"square",icon:[448,512,[],"f0c8","M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-6 400H54c-3.3 0-6-2.7-6-6V86c0-3.3 2.7-6 6-6h340c3.3 0 6 2.7 6 6v340c0 3.3-2.7 6-6 6z"]},{prefix:"fab",iconName:"twitter",icon:[512,512,[],"f099","M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"]},{prefix:"fab",iconName:"redhat",icon:[512,512,[],"f7bc","M341.52 285.56c33.65 0 82.34-6.94 82.34-47 .22-6.74.86-1.82-20.88-96.24-4.62-19.15-8.68-27.84-42.31-44.65-26.09-13.34-82.92-35.37-99.73-35.37-15.66 0-20.2 20.17-38.87 20.17-18 0-31.31-15.06-48.12-15.06-16.14 0-26.66 11-34.78 33.62-27.5 77.55-26.28 74.27-26.12 78.27 0 24.8 97.64 106.11 228.47 106.11M429 254.84c4.65 22 4.65 24.35 4.65 27.25 0 37.66-42.33 58.56-98 58.56-125.74.08-235.91-73.65-235.91-122.33a49.55 49.55 0 0 1 4.06-19.72C58.56 200.86 0 208.93 0 260.63c0 84.67 200.63 189 359.49 189 121.79 0 152.51-55.08 152.51-98.58 0-34.21-29.59-73.05-82.93-96.24"]},{prefix:"fab",iconName:"aws",icon:[640,512,[],"f375","M180.41 203.01c-.72 22.65 10.6 32.68 10.88 39.05a8.164 8.164 0 0 1-4.1 6.27l-12.8 8.96a10.66 10.66 0 0 1-5.63 1.92c-.43-.02-8.19 1.83-20.48-25.61a78.608 78.608 0 0 1-62.61 29.45c-16.28.89-60.4-9.24-58.13-56.21-1.59-38.28 34.06-62.06 70.93-60.05 7.1.02 21.6.37 46.99 6.27v-15.62c2.69-26.46-14.7-46.99-44.81-43.91-2.4.01-19.4-.5-45.84 10.11-7.36 3.38-8.3 2.82-10.75 2.82-7.41 0-4.36-21.48-2.94-24.2 5.21-6.4 35.86-18.35 65.94-18.18a76.857 76.857 0 0 1 55.69 17.28 70.285 70.285 0 0 1 17.67 52.36l-.01 69.29zM93.99 235.4c32.43-.47 46.16-19.97 49.29-30.47 2.46-10.05 2.05-16.41 2.05-27.4-9.67-2.32-23.59-4.85-39.56-4.87-15.15-1.14-42.82 5.63-41.74 32.26-1.24 16.79 11.12 31.4 29.96 30.48zm170.92 23.05c-7.86.72-11.52-4.86-12.68-10.37l-49.8-164.65c-.97-2.78-1.61-5.65-1.92-8.58a4.61 4.61 0 0 1 3.86-5.25c.24-.04-2.13 0 22.25 0 8.78-.88 11.64 6.03 12.55 10.37l35.72 140.83 33.16-140.83c.53-3.22 2.94-11.07 12.8-10.24h17.16c2.17-.18 11.11-.5 12.68 10.37l33.42 142.63L420.98 80.1c.48-2.18 2.72-11.37 12.68-10.37h19.72c.85-.13 6.15-.81 5.25 8.58-.43 1.85 3.41-10.66-52.75 169.9-1.15 5.51-4.82 11.09-12.68 10.37h-18.69c-10.94 1.15-12.51-9.66-12.68-10.75L328.67 110.7l-32.78 136.99c-.16 1.09-1.73 11.9-12.68 10.75h-18.3zm273.48 5.63c-5.88.01-33.92-.3-57.36-12.29a12.802 12.802 0 0 1-7.81-11.91v-10.75c0-8.45 6.2-6.9 8.83-5.89 10.04 4.06 16.48 7.14 28.81 9.6 36.65 7.53 52.77-2.3 56.72-4.48 13.15-7.81 14.19-25.68 5.25-34.95-10.48-8.79-15.48-9.12-53.13-21-4.64-1.29-43.7-13.61-43.79-52.36-.61-28.24 25.05-56.18 69.52-55.95 12.67-.01 46.43 4.13 55.57 15.62 1.35 2.09 2.02 4.55 1.92 7.04v10.11c0 4.44-1.62 6.66-4.87 6.66-7.71-.86-21.39-11.17-49.16-10.75-6.89-.36-39.89.91-38.41 24.97-.43 18.96 26.61 26.07 29.7 26.89 36.46 10.97 48.65 12.79 63.12 29.58 17.14 22.25 7.9 48.3 4.35 55.44-19.08 37.49-68.42 34.44-69.26 34.42zm40.2 104.86c-70.03 51.72-171.69 79.25-258.49 79.25A469.127 469.127 0 0 1 2.83 327.46c-6.53-5.89-.77-13.96 7.17-9.47a637.37 637.37 0 0 0 316.88 84.12 630.22 630.22 0 0 0 241.59-49.55c11.78-5 21.77 7.8 10.12 16.38zm29.19-33.29c-8.96-11.52-59.28-5.38-81.81-2.69-6.79.77-7.94-5.12-1.79-9.47 40.07-28.17 105.88-20.1 113.44-10.63 7.55 9.47-2.05 75.41-39.56 106.91-5.76 4.87-11.27 2.3-8.71-4.1 8.44-21.25 27.39-68.49 18.43-80.02z"]},{prefix:"fab",iconName:"amazon",icon:[448,512,[],"f270","M257.2 162.7c-48.7 1.8-169.5 15.5-169.5 117.5 0 109.5 138.3 114 183.5 43.2 6.5 10.2 35.4 37.5 45.3 46.8l56.8-56S341 288.9 341 261.4V114.3C341 89 316.5 32 228.7 32 140.7 32 94 87 94 136.3l73.5 6.8c16.3-49.5 54.2-49.5 54.2-49.5 40.7-.1 35.5 29.8 35.5 69.1zm0 86.8c0 80-84.2 68-84.2 17.2 0-47.2 50.5-56.7 84.2-57.8v40.6zm136 163.5c-7.7 10-70 67-174.5 67S34.2 408.5 9.7 379c-6.8-7.7 1-11.3 5.5-8.3C88.5 415.2 203 488.5 387.7 401c7.5-3.7 13.3 2 5.5 12zm39.8 2.2c-6.5 15.8-16 26.8-21.2 31-5.5 4.5-9.5 2.7-6.5-3.8s19.3-46.5 12.7-55c-6.5-8.3-37-4.3-48-3.2-10.8 1-13 2-14-.3-2.3-5.7 21.7-15.5 37.5-17.5 15.7-1.8 41-.8 46 5.7 3.7 5.1 0 27.1-6.5 43.1z"]},{prefix:"fab",iconName:"microsoft",icon:[448,512,[],"f3ca","M0 32h214.6v214.6H0V32zm233.4 0H448v214.6H233.4V32zM0 265.4h214.6V480H0V265.4zm233.4 0H448V480H233.4V265.4z"]},{prefix:"fab",iconName:"google",icon:[488,512,[],"f1a0","M488 261.8C488 403.3 391.1 504 248 504 110.8 504 0 393.2 0 256S110.8 8 248 8c66.8 0 123 24.5 166.3 64.9l-67.5 64.9C258.5 52.6 94.3 116.6 94.3 256c0 86.5 69.1 156.6 153.7 156.6 98.2 0 135-70.4 140.8-106.9H248v-85.3h236.1c2.3 12.7 3.9 24.9 3.9 41.4z"]},{prefix:"fab",iconName:"vaadin",icon:[448,512,[],"f408","M224.5 140.7c1.5-17.6 4.9-52.7 49.8-52.7h98.6c20.7 0 32.1-7.8 32.1-21.6V54.1c0-12.2 9.3-22.1 21.5-22.1S448 41.9 448 54.1v36.5c0 42.9-21.5 62-66.8 62H280.7c-30.1 0-33 14.7-33 27.1 0 1.3-.1 2.5-.2 3.7-.7 12.3-10.9 22.2-23.4 22.2s-22.7-9.8-23.4-22.2c-.1-1.2-.2-2.4-.2-3.7 0-12.3-3-27.1-33-27.1H66.8c-45.3 0-66.8-19.1-66.8-62V54.1C0 41.9 9.4 32 21.6 32s21.5 9.9 21.5 22.1v12.3C43.1 80.2 54.5 88 75.2 88h98.6c44.8 0 48.3 35.1 49.8 52.7h.9zM224 456c11.5 0 21.4-7 25.7-16.3 1.1-1.8 97.1-169.6 98.2-171.4 11.9-19.6-3.2-44.3-27.2-44.3-13.9 0-23.3 6.4-29.8 20.3L224 362l-66.9-117.7c-6.4-13.9-15.9-20.3-29.8-20.3-24 0-39.1 24.6-27.2 44.3 1.1 1.9 97.1 169.6 98.2 171.4 4.3 9.3 14.2 16.3 25.7 16.3z"]},{prefix:"fab",iconName:"free-code-camp",icon:[576,512,[],"f2c5","M97.22,96.21c10.36-10.65,16-17.12,16-21.9,0-2.76-1.92-5.51-3.83-7.42A14.81,14.81,0,0,0,101,64.05c-8.48,0-20.92,8.79-35.84,25.69C23.68,137,2.51,182.81,3.37,250.34s17.47,117,54.06,161.87C76.22,435.86,90.62,448,100.9,448a13.55,13.55,0,0,0,8.37-3.84c1.91-2.76,3.81-5.63,3.81-8.38,0-5.63-3.86-12.2-13.2-20.55-44.45-42.33-67.32-97-67.48-165C32.25,188.8,54,137.83,97.22,96.21ZM239.47,420.07c.58.37.91.55.91.55Zm93.79.55.17-.13C333.24,420.62,333.17,420.67,333.26,420.62Zm3.13-158.18c-16.24-4.15,50.41-82.89-68.05-177.17,0,0,15.54,49.38-62.83,159.57-74.27,104.35,23.46,168.73,34,175.23-6.73-4.35-47.4-35.7,9.55-128.64,11-18.3,25.53-34.87,43.5-72.16,0,0,15.91,22.45,7.6,71.13C287.7,364,354,342.91,355,343.94c22.75,26.78-17.72,73.51-21.58,76.55,5.49-3.65,117.71-78,33-188.1C360.43,238.4,352.62,266.59,336.39,262.44ZM510.88,89.69C496,72.79,483.52,64,475,64a14.81,14.81,0,0,0-8.39,2.84c-1.91,1.91-3.83,4.66-3.83,7.42,0,4.78,5.6,11.26,16,21.9,43.23,41.61,65,92.59,64.82,154.06-.16,68-23,122.63-67.48,165-9.34,8.35-13.18,14.92-13.2,20.55,0,2.75,1.9,5.62,3.81,8.38A13.61,13.61,0,0,0,475.1,448c10.28,0,24.68-12.13,43.47-35.79,36.59-44.85,53.14-94.38,54.06-161.87S552.32,137,510.88,89.69Z"]},{prefix:"fab",iconName:"react",icon:[512,512,[],"f41b","M418.2 177.2c-5.4-1.8-10.8-3.5-16.2-5.1.9-3.7 1.7-7.4 2.5-11.1 12.3-59.6 4.2-107.5-23.1-123.3-26.3-15.1-69.2.6-112.6 38.4-4.3 3.7-8.5 7.6-12.5 11.5-2.7-2.6-5.5-5.2-8.3-7.7-45.5-40.4-91.1-57.4-118.4-41.5-26.2 15.2-34 60.3-23 116.7 1.1 5.6 2.3 11.1 3.7 16.7-6.4 1.8-12.7 3.8-18.6 5.9C38.3 196.2 0 225.4 0 255.6c0 31.2 40.8 62.5 96.3 81.5 4.5 1.5 9 3 13.6 4.3-1.5 6-2.8 11.9-4 18-10.5 55.5-2.3 99.5 23.9 114.6 27 15.6 72.4-.4 116.6-39.1 3.5-3.1 7-6.3 10.5-9.7 4.4 4.3 9 8.4 13.6 12.4 42.8 36.8 85.1 51.7 111.2 36.6 27-15.6 35.8-62.9 24.4-120.5-.9-4.4-1.9-8.9-3-13.5 3.2-.9 6.3-1.9 9.4-2.9 57.7-19.1 99.5-50 99.5-81.7 0-30.3-39.4-59.7-93.8-78.4zM282.9 92.3c37.2-32.4 71.9-45.1 87.7-36 16.9 9.7 23.4 48.9 12.8 100.4-.7 3.4-1.4 6.7-2.3 10-22.2-5-44.7-8.6-67.3-10.6-13-18.6-27.2-36.4-42.6-53.1 3.9-3.7 7.7-7.2 11.7-10.7zM167.2 307.5c5.1 8.7 10.3 17.4 15.8 25.9-15.6-1.7-31.1-4.2-46.4-7.5 4.4-14.4 9.9-29.3 16.3-44.5 4.6 8.8 9.3 17.5 14.3 26.1zm-30.3-120.3c14.4-3.2 29.7-5.8 45.6-7.8-5.3 8.3-10.5 16.8-15.4 25.4-4.9 8.5-9.7 17.2-14.2 26-6.3-14.9-11.6-29.5-16-43.6zm27.4 68.9c6.6-13.8 13.8-27.3 21.4-40.6s15.8-26.2 24.4-38.9c15-1.1 30.3-1.7 45.9-1.7s31 .6 45.9 1.7c8.5 12.6 16.6 25.5 24.3 38.7s14.9 26.7 21.7 40.4c-6.7 13.8-13.9 27.4-21.6 40.8-7.6 13.3-15.7 26.2-24.2 39-14.9 1.1-30.4 1.6-46.1 1.6s-30.9-.5-45.6-1.4c-8.7-12.7-16.9-25.7-24.6-39s-14.8-26.8-21.5-40.6zm180.6 51.2c5.1-8.8 9.9-17.7 14.6-26.7 6.4 14.5 12 29.2 16.9 44.3-15.5 3.5-31.2 6.2-47 8 5.4-8.4 10.5-17 15.5-25.6zm14.4-76.5c-4.7-8.8-9.5-17.6-14.5-26.2-4.9-8.5-10-16.9-15.3-25.2 16.1 2 31.5 4.7 45.9 8-4.6 14.8-10 29.2-16.1 43.4zM256.2 118.3c10.5 11.4 20.4 23.4 29.6 35.8-19.8-.9-39.7-.9-59.5 0 9.8-12.9 19.9-24.9 29.9-35.8zM140.2 57c16.8-9.8 54.1 4.2 93.4 39 2.5 2.2 5 4.6 7.6 7-15.5 16.7-29.8 34.5-42.9 53.1-22.6 2-45 5.5-67.2 10.4-1.3-5.1-2.4-10.3-3.5-15.5-9.4-48.4-3.2-84.9 12.6-94zm-24.5 263.6c-4.2-1.2-8.3-2.5-12.4-3.9-21.3-6.7-45.5-17.3-63-31.2-10.1-7-16.9-17.8-18.8-29.9 0-18.3 31.6-41.7 77.2-57.6 5.7-2 11.5-3.8 17.3-5.5 6.8 21.7 15 43 24.5 63.6-9.6 20.9-17.9 42.5-24.8 64.5zm116.6 98c-16.5 15.1-35.6 27.1-56.4 35.3-11.1 5.3-23.9 5.8-35.3 1.3-15.9-9.2-22.5-44.5-13.5-92 1.1-5.6 2.3-11.2 3.7-16.7 22.4 4.8 45 8.1 67.9 9.8 13.2 18.7 27.7 36.6 43.2 53.4-3.2 3.1-6.4 6.1-9.6 8.9zm24.5-24.3c-10.2-11-20.4-23.2-30.3-36.3 9.6.4 19.5.6 29.5.6 10.3 0 20.4-.2 30.4-.7-9.2 12.7-19.1 24.8-29.6 36.4zm130.7 30c-.9 12.2-6.9 23.6-16.5 31.3-15.9 9.2-49.8-2.8-86.4-34.2-4.2-3.6-8.4-7.5-12.7-11.5 15.3-16.9 29.4-34.8 42.2-53.6 22.9-1.9 45.7-5.4 68.2-10.5 1 4.1 1.9 8.2 2.7 12.2 4.9 21.6 5.7 44.1 2.5 66.3zm18.2-107.5c-2.8.9-5.6 1.8-8.5 2.6-7-21.8-15.6-43.1-25.5-63.8 9.6-20.4 17.7-41.4 24.5-62.9 5.2 1.5 10.2 3.1 15 4.7 46.6 16 79.3 39.8 79.3 58 0 19.6-34.9 44.9-84.8 61.4zm-149.7-15c25.3 0 45.8-20.5 45.8-45.8s-20.5-45.8-45.8-45.8c-25.3 0-45.8 20.5-45.8 45.8s20.5 45.8 45.8 45.8z"]},{prefix:"fab",iconName:"java",icon:[384,512,[],"f4e4","M277.74 312.9c9.8-6.7 23.4-12.5 23.4-12.5s-38.7 7-77.2 10.2c-47.1 3.9-97.7 4.7-123.1 1.3-60.1-8 33-30.1 33-30.1s-36.1-2.4-80.6 19c-52.5 25.4 130 37 224.5 12.1zm-85.4-32.1c-19-42.7-83.1-80.2 0-145.8C296 53.2 242.84 0 242.84 0c21.5 84.5-75.6 110.1-110.7 162.6-23.9 35.9 11.7 74.4 60.2 118.2zm114.6-176.2c.1 0-175.2 43.8-91.5 140.2 24.7 28.4-6.5 54-6.5 54s62.7-32.4 33.9-72.9c-26.9-37.8-47.5-56.6 64.1-121.3zm-6.1 270.5a12.19 12.19 0 0 1-2 2.6c128.3-33.7 81.1-118.9 19.8-97.3a17.33 17.33 0 0 0-8.2 6.3 70.45 70.45 0 0 1 11-3c31-6.5 75.5 41.5-20.6 91.4zM348 437.4s14.5 11.9-15.9 21.2c-57.9 17.5-240.8 22.8-291.6.7-18.3-7.9 16-19 26.8-21.3 11.2-2.4 17.7-2 17.7-2-20.3-14.3-131.3 28.1-56.4 40.2C232.84 509.4 401 461.3 348 437.4zM124.44 396c-78.7 22 47.9 67.4 148.1 24.5a185.89 185.89 0 0 1-28.2-13.8c-44.7 8.5-65.4 9.1-106 4.5-33.5-3.8-13.9-15.2-13.9-15.2zm179.8 97.2c-78.7 14.8-175.8 13.1-233.3 3.6 0-.1 11.8 9.7 72.4 13.6 92.2 5.9 233.8-3.3 237.1-46.9 0 0-6.4 16.5-76.2 29.7zM260.64 353c-59.2 11.4-93.5 11.1-136.8 6.6-33.5-3.5-11.6-19.7-11.6-19.7-86.8 28.8 48.2 61.4 169.5 25.9a60.37 60.37 0 0 1-21.1-12.8z"]},{prefix:"fas",iconName:"lock",icon:[448,512,[],"f023","M400 224h-24v-72C376 68.2 307.8 0 224 0S72 68.2 72 152v72H48c-26.5 0-48 21.5-48 48v192c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V272c0-26.5-21.5-48-48-48zm-104 0H152v-72c0-39.7 32.3-72 72-72s72 32.3 72 72v72z"]},{prefix:"fas",iconName:"heart",icon:[512,512,[],"f004","M462.3 62.6C407.5 15.9 326 24.3 275.7 76.2L256 96.5l-19.7-20.3C186.1 24.3 104.5 15.9 49.7 62.6c-62.8 53.6-66.1 149.8-9.9 207.9l193.5 199.8c12.5 12.9 32.8 12.9 45.3 0l193.5-199.8c56.3-58.1 53-154.3-9.8-207.9z"]},{prefix:"fas",iconName:"question-circle",icon:[512,512,[],"f059","M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zM262.655 90c-54.497 0-89.255 22.957-116.549 63.758-3.536 5.286-2.353 12.415 2.715 16.258l34.699 26.31c5.205 3.947 12.621 3.008 16.665-2.122 17.864-22.658 30.113-35.797 57.303-35.797 20.429 0 45.698 13.148 45.698 32.958 0 14.976-12.363 22.667-32.534 33.976C247.128 238.528 216 254.941 216 296v4c0 6.627 5.373 12 12 12h56c6.627 0 12-5.373 12-12v-1.333c0-28.462 83.186-29.647 83.186-106.667 0-58.002-60.165-102-116.531-102zM256 338c-25.365 0-46 20.635-46 46 0 25.364 20.635 46 46 46s46-20.636 46-46c0-25.365-20.635-46-46-46z"]}],window.FontAwesomeIconDefs.admonitionIcons={caution:"fas fa-fire",important:"fas fa-exclamation-circle",note:"fas fa-info-circle",tip:"fas fa-lightbulb",warning:"fas fa-exclamation-triangle"}; \ No newline at end of file diff --git a/_/js/vendor/fontawesome.js b/_/js/vendor/fontawesome.js new file mode 100644 index 0000000000..62a9fab06c --- /dev/null +++ b/_/js/vendor/fontawesome.js @@ -0,0 +1 @@ +!function(){var e,n,t={exports:{}},a=(e=this,n=function(){"use strict";var e={},n={};try{"undefined"!=typeof window&&(e=window),"undefined"!=typeof document&&(n=document)}catch(e){}var t=(e.navigator||{}).userAgent,t=void 0===t?"":t,n=(e.document,!n.documentElement||!n.head||"function"!=typeof n.addEventListener||n.createElement,~t.indexOf("MSIE")||t.indexOf("Trident/"),"___FONT_AWESOME___"),t=function(){try{return"production"===process.env.NODE_ENV}catch(e){return!1}}();var e=e||{},a=(e[n]||(e[n]={}),e[n].styles||(e[n].styles={}),e[n].hooks||(e[n].hooks={}),e[n].shims||(e[n].shims=[]),e[n]),r=[["glass",null,"glass-martini"],["meetup","fab",null],["star-o","far","star"],["remove",null,"times"],["close",null,"times"],["gear",null,"cog"],["trash-o","far","trash-alt"],["file-o","far","file"],["clock-o","far","clock"],["arrow-circle-o-down","far","arrow-alt-circle-down"],["arrow-circle-o-up","far","arrow-alt-circle-up"],["play-circle-o","far","play-circle"],["repeat",null,"redo"],["rotate-right",null,"redo"],["refresh",null,"sync"],["list-alt","far",null],["dedent",null,"outdent"],["video-camera",null,"video"],["picture-o","far","image"],["photo","far","image"],["image","far","image"],["pencil",null,"pencil-alt"],["map-marker",null,"map-marker-alt"],["pencil-square-o","far","edit"],["share-square-o","far","share-square"],["check-square-o","far","check-square"],["arrows",null,"arrows-alt"],["times-circle-o","far","times-circle"],["check-circle-o","far","check-circle"],["mail-forward",null,"share"],["expand",null,"expand-alt"],["compress",null,"compress-alt"],["eye","far",null],["eye-slash","far",null],["warning",null,"exclamation-triangle"],["calendar",null,"calendar-alt"],["arrows-v",null,"arrows-alt-v"],["arrows-h",null,"arrows-alt-h"],["bar-chart","far","chart-bar"],["bar-chart-o","far","chart-bar"],["twitter-square","fab",null],["facebook-square","fab",null],["gears",null,"cogs"],["thumbs-o-up","far","thumbs-up"],["thumbs-o-down","far","thumbs-down"],["heart-o","far","heart"],["sign-out",null,"sign-out-alt"],["linkedin-square","fab","linkedin"],["thumb-tack",null,"thumbtack"],["external-link",null,"external-link-alt"],["sign-in",null,"sign-in-alt"],["github-square","fab",null],["lemon-o","far","lemon"],["square-o","far","square"],["bookmark-o","far","bookmark"],["twitter","fab",null],["facebook","fab","facebook-f"],["facebook-f","fab","facebook-f"],["github","fab",null],["credit-card","far",null],["feed",null,"rss"],["hdd-o","far","hdd"],["hand-o-right","far","hand-point-right"],["hand-o-left","far","hand-point-left"],["hand-o-up","far","hand-point-up"],["hand-o-down","far","hand-point-down"],["arrows-alt",null,"expand-arrows-alt"],["group",null,"users"],["chain",null,"link"],["scissors",null,"cut"],["files-o","far","copy"],["floppy-o","far","save"],["navicon",null,"bars"],["reorder",null,"bars"],["pinterest","fab",null],["pinterest-square","fab",null],["google-plus-square","fab",null],["google-plus","fab","google-plus-g"],["money","far","money-bill-alt"],["unsorted",null,"sort"],["sort-desc",null,"sort-down"],["sort-asc",null,"sort-up"],["linkedin","fab","linkedin-in"],["rotate-left",null,"undo"],["legal",null,"gavel"],["tachometer",null,"tachometer-alt"],["dashboard",null,"tachometer-alt"],["comment-o","far","comment"],["comments-o","far","comments"],["flash",null,"bolt"],["clipboard","far",null],["paste","far","clipboard"],["lightbulb-o","far","lightbulb"],["exchange",null,"exchange-alt"],["cloud-download",null,"cloud-download-alt"],["cloud-upload",null,"cloud-upload-alt"],["bell-o","far","bell"],["cutlery",null,"utensils"],["file-text-o","far","file-alt"],["building-o","far","building"],["hospital-o","far","hospital"],["tablet",null,"tablet-alt"],["mobile",null,"mobile-alt"],["mobile-phone",null,"mobile-alt"],["circle-o","far","circle"],["mail-reply",null,"reply"],["github-alt","fab",null],["folder-o","far","folder"],["folder-open-o","far","folder-open"],["smile-o","far","smile"],["frown-o","far","frown"],["meh-o","far","meh"],["keyboard-o","far","keyboard"],["flag-o","far","flag"],["mail-reply-all",null,"reply-all"],["star-half-o","far","star-half"],["star-half-empty","far","star-half"],["star-half-full","far","star-half"],["code-fork",null,"code-branch"],["chain-broken",null,"unlink"],["shield",null,"shield-alt"],["calendar-o","far","calendar"],["maxcdn","fab",null],["html5","fab",null],["css3","fab",null],["ticket",null,"ticket-alt"],["minus-square-o","far","minus-square"],["level-up",null,"level-up-alt"],["level-down",null,"level-down-alt"],["pencil-square",null,"pen-square"],["external-link-square",null,"external-link-square-alt"],["compass","far",null],["caret-square-o-down","far","caret-square-down"],["toggle-down","far","caret-square-down"],["caret-square-o-up","far","caret-square-up"],["toggle-up","far","caret-square-up"],["caret-square-o-right","far","caret-square-right"],["toggle-right","far","caret-square-right"],["eur",null,"euro-sign"],["euro",null,"euro-sign"],["gbp",null,"pound-sign"],["usd",null,"dollar-sign"],["dollar",null,"dollar-sign"],["inr",null,"rupee-sign"],["rupee",null,"rupee-sign"],["jpy",null,"yen-sign"],["cny",null,"yen-sign"],["rmb",null,"yen-sign"],["yen",null,"yen-sign"],["rub",null,"ruble-sign"],["ruble",null,"ruble-sign"],["rouble",null,"ruble-sign"],["krw",null,"won-sign"],["won",null,"won-sign"],["btc","fab",null],["bitcoin","fab","btc"],["file-text",null,"file-alt"],["sort-alpha-asc",null,"sort-alpha-down"],["sort-alpha-desc",null,"sort-alpha-down-alt"],["sort-amount-asc",null,"sort-amount-down"],["sort-amount-desc",null,"sort-amount-down-alt"],["sort-numeric-asc",null,"sort-numeric-down"],["sort-numeric-desc",null,"sort-numeric-down-alt"],["youtube-square","fab",null],["youtube","fab",null],["xing","fab",null],["xing-square","fab",null],["youtube-play","fab","youtube"],["dropbox","fab",null],["stack-overflow","fab",null],["instagram","fab",null],["flickr","fab",null],["adn","fab",null],["bitbucket","fab",null],["bitbucket-square","fab","bitbucket"],["tumblr","fab",null],["tumblr-square","fab",null],["long-arrow-down",null,"long-arrow-alt-down"],["long-arrow-up",null,"long-arrow-alt-up"],["long-arrow-left",null,"long-arrow-alt-left"],["long-arrow-right",null,"long-arrow-alt-right"],["apple","fab",null],["windows","fab",null],["android","fab",null],["linux","fab",null],["dribbble","fab",null],["skype","fab",null],["foursquare","fab",null],["trello","fab",null],["gratipay","fab",null],["gittip","fab","gratipay"],["sun-o","far","sun"],["moon-o","far","moon"],["vk","fab",null],["weibo","fab",null],["renren","fab",null],["pagelines","fab",null],["stack-exchange","fab",null],["arrow-circle-o-right","far","arrow-alt-circle-right"],["arrow-circle-o-left","far","arrow-alt-circle-left"],["caret-square-o-left","far","caret-square-left"],["toggle-left","far","caret-square-left"],["dot-circle-o","far","dot-circle"],["vimeo-square","fab",null],["try",null,"lira-sign"],["turkish-lira",null,"lira-sign"],["plus-square-o","far","plus-square"],["slack","fab",null],["wordpress","fab",null],["openid","fab",null],["institution",null,"university"],["bank",null,"university"],["mortar-board",null,"graduation-cap"],["yahoo","fab",null],["google","fab",null],["reddit","fab",null],["reddit-square","fab",null],["stumbleupon-circle","fab",null],["stumbleupon","fab",null],["delicious","fab",null],["digg","fab",null],["pied-piper-pp","fab",null],["pied-piper-alt","fab",null],["drupal","fab",null],["joomla","fab",null],["spoon",null,"utensil-spoon"],["behance","fab",null],["behance-square","fab",null],["steam","fab",null],["steam-square","fab",null],["automobile",null,"car"],["envelope-o","far","envelope"],["spotify","fab",null],["deviantart","fab",null],["soundcloud","fab",null],["file-pdf-o","far","file-pdf"],["file-word-o","far","file-word"],["file-excel-o","far","file-excel"],["file-powerpoint-o","far","file-powerpoint"],["file-image-o","far","file-image"],["file-photo-o","far","file-image"],["file-picture-o","far","file-image"],["file-archive-o","far","file-archive"],["file-zip-o","far","file-archive"],["file-audio-o","far","file-audio"],["file-sound-o","far","file-audio"],["file-video-o","far","file-video"],["file-movie-o","far","file-video"],["file-code-o","far","file-code"],["vine","fab",null],["codepen","fab",null],["jsfiddle","fab",null],["life-ring","far",null],["life-bouy","far","life-ring"],["life-buoy","far","life-ring"],["life-saver","far","life-ring"],["support","far","life-ring"],["circle-o-notch",null,"circle-notch"],["rebel","fab",null],["ra","fab","rebel"],["resistance","fab","rebel"],["empire","fab",null],["ge","fab","empire"],["git-square","fab",null],["git","fab",null],["hacker-news","fab",null],["y-combinator-square","fab","hacker-news"],["yc-square","fab","hacker-news"],["tencent-weibo","fab",null],["qq","fab",null],["weixin","fab",null],["wechat","fab","weixin"],["send",null,"paper-plane"],["paper-plane-o","far","paper-plane"],["send-o","far","paper-plane"],["circle-thin","far","circle"],["header",null,"heading"],["sliders",null,"sliders-h"],["futbol-o","far","futbol"],["soccer-ball-o","far","futbol"],["slideshare","fab",null],["twitch","fab",null],["yelp","fab",null],["newspaper-o","far","newspaper"],["paypal","fab",null],["google-wallet","fab",null],["cc-visa","fab",null],["cc-mastercard","fab",null],["cc-discover","fab",null],["cc-amex","fab",null],["cc-paypal","fab",null],["cc-stripe","fab",null],["bell-slash-o","far","bell-slash"],["trash",null,"trash-alt"],["copyright","far",null],["eyedropper",null,"eye-dropper"],["area-chart",null,"chart-area"],["pie-chart",null,"chart-pie"],["line-chart",null,"chart-line"],["lastfm","fab",null],["lastfm-square","fab",null],["ioxhost","fab",null],["angellist","fab",null],["cc","far","closed-captioning"],["ils",null,"shekel-sign"],["shekel",null,"shekel-sign"],["sheqel",null,"shekel-sign"],["meanpath","fab","font-awesome"],["buysellads","fab",null],["connectdevelop","fab",null],["dashcube","fab",null],["forumbee","fab",null],["leanpub","fab",null],["sellsy","fab",null],["shirtsinbulk","fab",null],["simplybuilt","fab",null],["skyatlas","fab",null],["diamond","far","gem"],["intersex",null,"transgender"],["facebook-official","fab","facebook"],["pinterest-p","fab",null],["whatsapp","fab",null],["hotel",null,"bed"],["viacoin","fab",null],["medium","fab",null],["y-combinator","fab",null],["yc","fab","y-combinator"],["optin-monster","fab",null],["opencart","fab",null],["expeditedssl","fab",null],["battery-4",null,"battery-full"],["battery",null,"battery-full"],["battery-3",null,"battery-three-quarters"],["battery-2",null,"battery-half"],["battery-1",null,"battery-quarter"],["battery-0",null,"battery-empty"],["object-group","far",null],["object-ungroup","far",null],["sticky-note-o","far","sticky-note"],["cc-jcb","fab",null],["cc-diners-club","fab",null],["clone","far",null],["hourglass-o","far","hourglass"],["hourglass-1",null,"hourglass-start"],["hourglass-2",null,"hourglass-half"],["hourglass-3",null,"hourglass-end"],["hand-rock-o","far","hand-rock"],["hand-grab-o","far","hand-rock"],["hand-paper-o","far","hand-paper"],["hand-stop-o","far","hand-paper"],["hand-scissors-o","far","hand-scissors"],["hand-lizard-o","far","hand-lizard"],["hand-spock-o","far","hand-spock"],["hand-pointer-o","far","hand-pointer"],["hand-peace-o","far","hand-peace"],["registered","far",null],["creative-commons","fab",null],["gg","fab",null],["gg-circle","fab",null],["tripadvisor","fab",null],["odnoklassniki","fab",null],["odnoklassniki-square","fab",null],["get-pocket","fab",null],["wikipedia-w","fab",null],["safari","fab",null],["chrome","fab",null],["firefox","fab",null],["opera","fab",null],["internet-explorer","fab",null],["television",null,"tv"],["contao","fab",null],["500px","fab",null],["amazon","fab",null],["calendar-plus-o","far","calendar-plus"],["calendar-minus-o","far","calendar-minus"],["calendar-times-o","far","calendar-times"],["calendar-check-o","far","calendar-check"],["map-o","far","map"],["commenting",null,"comment-dots"],["commenting-o","far","comment-dots"],["houzz","fab",null],["vimeo","fab","vimeo-v"],["black-tie","fab",null],["fonticons","fab",null],["reddit-alien","fab",null],["edge","fab",null],["credit-card-alt",null,"credit-card"],["codiepie","fab",null],["modx","fab",null],["fort-awesome","fab",null],["usb","fab",null],["product-hunt","fab",null],["mixcloud","fab",null],["scribd","fab",null],["pause-circle-o","far","pause-circle"],["stop-circle-o","far","stop-circle"],["bluetooth","fab",null],["bluetooth-b","fab",null],["gitlab","fab",null],["wpbeginner","fab",null],["wpforms","fab",null],["envira","fab",null],["wheelchair-alt","fab","accessible-icon"],["question-circle-o","far","question-circle"],["volume-control-phone",null,"phone-volume"],["asl-interpreting",null,"american-sign-language-interpreting"],["deafness",null,"deaf"],["hard-of-hearing",null,"deaf"],["glide","fab",null],["glide-g","fab",null],["signing",null,"sign-language"],["viadeo","fab",null],["viadeo-square","fab",null],["snapchat","fab",null],["snapchat-ghost","fab",null],["snapchat-square","fab",null],["pied-piper","fab",null],["first-order","fab",null],["yoast","fab",null],["themeisle","fab",null],["google-plus-official","fab","google-plus"],["google-plus-circle","fab","google-plus"],["font-awesome","fab",null],["fa","fab","font-awesome"],["handshake-o","far","handshake"],["envelope-open-o","far","envelope-open"],["linode","fab",null],["address-book-o","far","address-book"],["vcard",null,"address-card"],["address-card-o","far","address-card"],["vcard-o","far","address-card"],["user-circle-o","far","user-circle"],["user-o","far","user"],["id-badge","far",null],["drivers-license",null,"id-card"],["id-card-o","far","id-card"],["drivers-license-o","far","id-card"],["quora","fab",null],["free-code-camp","fab",null],["telegram","fab",null],["thermometer-4",null,"thermometer-full"],["thermometer",null,"thermometer-full"],["thermometer-3",null,"thermometer-three-quarters"],["thermometer-2",null,"thermometer-half"],["thermometer-1",null,"thermometer-quarter"],["thermometer-0",null,"thermometer-empty"],["bathtub",null,"bath"],["s15",null,"bath"],["window-maximize","far",null],["window-restore","far",null],["times-rectangle",null,"window-close"],["window-close-o","far","window-close"],["times-rectangle-o","far","window-close"],["bandcamp","fab",null],["grav","fab",null],["etsy","fab",null],["imdb","fab",null],["ravelry","fab",null],["eercast","fab","sellcast"],["snowflake-o","far","snowflake"],["superpowers","fab",null],["wpexplorer","fab",null],["cab",null,"taxi"]],e=function(){var e;"function"==typeof a.hooks.addShims?a.hooks.addShims(r):(e=a.shims).push.apply(e,r)};try{e()}catch(e){if(!t)throw e}return r},"object"==typeof t.exports?t.exports=n():"function"==typeof define&&define.amd?define(n):e["fontawesome-free-shims"]=n(),t=t.exports,{exports:{}});e=this,n=function(e){"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function L(e,n){for(var t=0;t>>0;t--;)n[t]=e[t];return n}function Ce(e){return e.classList?M(e.classList):(e.getAttribute("class")||"").split(" ").filter(function(e){return e})}function Me(e,n){var n=n.split("-"),t=n[0],n=n.slice(1).join("-");return t!==e||""===n||~ae.indexOf(n)?null:n}function Se(e){return"".concat(e).replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">")}function S(t){return Object.keys(t||{}).reduce(function(e,n){return e+"".concat(n,": ").concat(t[n],";")},"")}function Ne(e){return e.size!==q.size||e.x!==q.x||e.y!==q.y||e.rotate!==q.rotate||e.flipX||e.flipY}function Ee(e){var n=e.transform,t=e.containerWidth,e=e.iconWidth,t={transform:"translate(".concat(t/2," 256)")},a="translate(".concat(32*n.x,", ").concat(32*n.y,") "),r="scale(".concat(n.size/16*(n.flipX?-1:1),", ").concat(n.size/16*(n.flipY?-1:1),") "),n="rotate(".concat(n.rotate," 0 0)");return{outer:t,inner:{transform:"".concat(a," ").concat(r," ").concat(n)},path:{transform:"translate(".concat(e/2*-1," -256)")}}}var ze={x:0,y:0,width:"100%",height:"100%"};function Pe(e){return e.attributes&&(e.attributes.fill||(!(1").concat(r.map(E).join(""),"")}var $e=function(){};function en(e){return"string"==typeof(e.getAttribute?e.getAttribute(g):null)}var nn={replace:function(e){var n,t=e[0],e=e[1].map(E).join("\n");t.parentNode&&t.outerHTML?t.outerHTML=e+(k.keepOriginalSource&&"svg"!==t.tagName.toLowerCase()?"\x3c!-- ".concat(t.outerHTML," Font Awesome fontawesome.com --\x3e"):""):t.parentNode&&(n=document.createElement("span"),t.parentNode.replaceChild(n,t),n.outerHTML=e)},nest:function(e){var n=e[0],t=e[1];if(~Ce(n).indexOf(k.replacementClass))return nn.replace(e);var a=new RegExp("".concat(k.familyPrefix,"-.*")),e=(delete t[0].attributes.style,delete t[0].attributes.id,t[0].attributes.class.split(" ").reduce(function(e,n){return(n===k.replacementClass||n.match(a)?e.toSvg:e.toNode).push(n),e},{toNode:[],toSvg:[]})),t=(t[0].attributes.class=e.toSvg.join(" "),t.map(E).join("\n"));n.setAttribute("class",e.toNode.join(" ")),n.setAttribute(g,""),n.innerHTML=t}};function tn(e){e()}function an(t,e){var a="function"==typeof e?e:$e;0===t.length?a():(k.mutateApproach===G?p.requestAnimationFrame||tn:tn)(function(){var e=!0!==k.autoReplaceSvg&&nn[k.autoReplaceSvg]||nn.replace,n=De.begin("mutate");t.map(e),n(),a()})}var rn=!1;function ln(){rn=!1}var z=null;function on(e){var n=e.getAttribute("data-prefix"),t=e.getAttribute("data-icon"),a=void 0!==e.innerText?e.innerText.trim():"",r=Qe(Ce(e));return n&&t&&(r.prefix=n,r.iconName=t),r.prefix&&1 i.fa")).forEach(function(e){var n=e.className.substr(8);e.className=t[n]||"fas fa-"+n}),a.dom.i2svg(),delete window.___FONT_AWESOME___,delete window.FontAwesomeIconDefs}()}(); \ No newline at end of file diff --git a/_/js/vendor/highlight.js b/_/js/vendor/highlight.js new file mode 100644 index 0000000000..e72d841102 --- /dev/null +++ b/_/js/vendor/highlight.js @@ -0,0 +1 @@ +!function(){function e(e){return{aliases:["adoc"],contains:[e.COMMENT("^/{4,}\\n","\\n/{4,}$",{relevance:10}),e.COMMENT("^//","$",{relevance:0}),{className:"title",begin:"^\\.\\w.*$"},{begin:"^[=\\*]{4,}\\n",end:"\\n^[=\\*]{4,}$",relevance:10},{className:"section",relevance:10,variants:[{begin:"^(={1,5}) .+?( \\1)?$"},{begin:"^[^\\[\\]\\n]+?\\n[=\\-~\\^\\+]{2,}$"}]},{className:"meta",begin:"^:.+?:",end:"\\s",excludeEnd:!0,relevance:10},{className:"meta",begin:"^\\[.+?\\]$",relevance:0},{className:"quote",begin:"^_{4,}\\n",end:"\\n_{4,}$",relevance:10},{className:"code",begin:"^[\\-\\.]{4,}\\n",end:"\\n[\\-\\.]{4,}$",relevance:10},{begin:"^\\+{4,}\\n",end:"\\n\\+{4,}$",contains:[{begin:"<",end:">",subLanguage:"xml",relevance:0}],relevance:10},{className:"bullet",begin:"^(\\*+|\\-+|\\.+|[^\\n]+?::)\\s+"},{className:"symbol",begin:"^(NOTE|TIP|IMPORTANT|WARNING|CAUTION):\\s+",relevance:10},{className:"strong",begin:"\\B\\*(?![\\*\\s])",end:"(\\n{2}|\\*)",contains:[{begin:"\\\\*\\w",relevance:0}]},{className:"emphasis",begin:"\\B'(?!['\\s])",end:"(\\n{2}|')",contains:[{begin:"\\\\'\\w",relevance:0}],relevance:0},{className:"emphasis",begin:"_(?![_\\s])",end:"(\\n{2}|_)",relevance:0},{className:"string",variants:[{begin:"``.+?''"},{begin:"`.+?'"}]},{className:"code",begin:"(`.+?`|\\+.+?\\+)",relevance:0},{className:"code",begin:"^[ \\t]",end:"$",relevance:0},{begin:"^'{3,}[ \\t]*$",relevance:10},{begin:"(link:)?(http|https|ftp|file|irc|image:?):\\S+\\[.*?\\]",returnBegin:!0,contains:[{begin:"(link|image:?):",relevance:0},{className:"link",begin:"\\w",end:"[^\\[]+",relevance:0},{className:"string",begin:"\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0,relevance:0}],relevance:10}]}}function n(e){var n={className:"variable",variants:[{begin:/\$[\w\d#@][\w\d_]*/},{begin:/\$\{(.*?)}/}]},a={className:"string",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,n,{className:"variable",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]}]};return{aliases:["sh","zsh"],lexemes:/\b-?[a-z\._]+\b/,keywords:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},contains:[{className:"meta",begin:/^#![^\n]+sh\s*$/,relevance:10},{className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0},e.HASH_COMMENT_MODE,a,{className:"",begin:/\\"/},{className:"string",begin:/'/,end:/'/},n]}}function a(e){var n={begin:u="["+(u="a-zA-Z_\\-!.?+*=<>&#'")+"]["+u+"0-9/;:]*",relevance:0},a={className:"number",begin:"[-+]?\\d+(\\.\\d+)?",relevance:0},t=e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),i=e.COMMENT(";","$",{relevance:0}),s={className:"literal",begin:/\b(true|false|nil)\b/},r={begin:"[\\[\\{]",end:"[\\]\\}]"},l={className:"comment",begin:"\\^"+u},o=e.COMMENT("\\^\\{","\\}"),c={className:"symbol",begin:"[:]{1,2}"+u},d={begin:"\\(",end:"\\)"},g={endsWithParent:!0,relevance:0},u={keywords:{"builtin-name":"def defonce cond apply if-not if-let if not not= = < > <= >= == + / * - rem quot neg? pos? delay? symbol? keyword? true? false? integer? empty? coll? list? set? ifn? fn? associative? sequential? sorted? counted? reversible? number? decimal? class? distinct? isa? float? rational? reduced? ratio? odd? even? char? seq? vector? string? map? nil? contains? zero? instance? not-every? not-any? libspec? -> ->> .. . inc compare do dotimes mapcat take remove take-while drop letfn drop-last take-last drop-while while intern condp case reduced cycle split-at split-with repeat replicate iterate range merge zipmap declare line-seq sort comparator sort-by dorun doall nthnext nthrest partition eval doseq await await-for let agent atom send send-off release-pending-sends add-watch mapv filterv remove-watch agent-error restart-agent set-error-handler error-handler set-error-mode! error-mode shutdown-agents quote var fn loop recur throw try monitor-enter monitor-exit defmacro defn defn- macroexpand macroexpand-1 for dosync and or when when-not when-let comp juxt partial sequence memoize constantly complement identity assert peek pop doto proxy defstruct first rest cons defprotocol cast coll deftype defrecord last butlast sigs reify second ffirst fnext nfirst nnext defmulti defmethod meta with-meta ns in-ns create-ns import refer keys select-keys vals key val rseq name namespace promise into transient persistent! conj! assoc! dissoc! pop! disj! use class type num float double short byte boolean bigint biginteger bigdec print-method print-dup throw-if printf format load compile get-in update-in pr pr-on newline flush read slurp read-line subvec with-open memfn time re-find re-groups rand-int rand mod locking assert-valid-fdecl alias resolve ref deref refset swap! reset! set-validator! compare-and-set! alter-meta! reset-meta! commute get-validator alter ref-set ref-history-count ref-min-history ref-max-history ensure sync io! new next conj set! to-array future future-call into-array aset gen-class reduce map filter find empty hash-map hash-set sorted-map sorted-map-by sorted-set sorted-set-by vec vector seq flatten reverse assoc dissoc list disj get union difference intersection extend extend-type extend-protocol int nth delay count concat chunk chunk-buffer chunk-append chunk-first chunk-rest max min dec unchecked-inc-int unchecked-inc unchecked-dec-inc unchecked-dec unchecked-negate unchecked-add-int unchecked-add unchecked-subtract-int unchecked-subtract chunk-next chunk-cons chunked-seq? prn vary-meta lazy-seq spread list* str find-keyword keyword symbol gensym force rationalize"},lexemes:u,className:"name",begin:u,starts:g},n=[d,t,l,o,i,c,r,a,s,n];return d.contains=[e.COMMENT("comment",""),u,g],g.contains=n,r.contains=n,o.contains=[r],{aliases:["clj"],illegal:/\S/,contains:[d,t,l,o,i,c,r,a,s]}}function t(e){function n(e){return"(?:"+e+")?"}var a="decltype\\(auto\\)",t="[a-zA-Z_]\\w*::",i={className:"keyword",begin:"\\b[a-z\\d_]*_t\\b"},s={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",end:"'",illegal:"."},{begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\((?:.|\n)*?\)\1"/}]},r={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},l={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{"meta-keyword":"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},e.inherit(s,{className:"meta-string"}),{className:"meta-string",begin:/<.*?>/,end:/$/,illegal:"\\n"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},o={className:"title",begin:n(t)+e.IDENT_RE,relevance:0},t=n(t)+e.IDENT_RE+"\\s*\\(",c={keyword:"int float while private char char8_t char16_t char32_t catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid wchar_tshort reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignas alignof constexpr consteval constinit decltype concept co_await co_return co_yield requires noexcept static_assert thread_local restrict final override atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq",built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr _Bool complex _Complex imaginary _Imaginary",literal:"true false nullptr NULL"},d=[i,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,r,s],g={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:c,contains:d.concat([{begin:/\(/,end:/\)/,keywords:c,contains:d.concat(["self"]),relevance:0}]),relevance:0},a={className:"function",begin:"((decltype\\(auto\\)|(?:[a-zA-Z_]\\w*::)?[a-zA-Z_]\\w*(?:<.*?>)?)[\\*&\\s]+)+"+t,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:c,illegal:/[^\w\s\*&:<>]/,contains:[{begin:a,keywords:c,relevance:0},{begin:t,returnBegin:!0,contains:[o],relevance:0},{className:"params",begin:/\(/,end:/\)/,keywords:c,relevance:0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s,r,i,{begin:/\(/,end:/\)/,keywords:c,relevance:0,contains:["self",e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s,r,i]}]},i,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,l]};return{aliases:["c","cc","h","c++","h++","hpp","hh","hxx","cxx"],keywords:c,illegal:"",keywords:c,contains:["self",i]},{begin:e.IDENT_RE+"::",keywords:c},{className:"class",beginKeywords:"class struct",end:/[{;:]/,contains:[{begin://,contains:["self"]},e.TITLE_MODE]}]),exports:{preprocessor:l,strings:s,keywords:c}}}function i(e){var n={keyword:"abstract as base bool break byte case catch char checked const continue decimal default delegate do double enum event explicit extern finally fixed float for foreach goto if implicit in int interface internal is lock long object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this try typeof uint ulong unchecked unsafe ushort using virtual void volatile while add alias ascending async await by descending dynamic equals from get global group into join let nameof on orderby partial remove select set value var when where yield",literal:"null false true"},a={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},t={className:"string",begin:'@"',end:'"',contains:[{begin:'""'}]},i=e.inherit(t,{illegal:/\n/}),s={className:"subst",begin:"{",end:"}",keywords:n},r=e.inherit(s,{illegal:/\n/}),l={className:"string",begin:/\$"/,end:'"',illegal:/\n/,contains:[{begin:"{{"},{begin:"}}"},e.BACKSLASH_ESCAPE,r]},o={className:"string",begin:/\$@"/,end:'"',contains:[{begin:"{{"},{begin:"}}"},{begin:'""'},s]},c=e.inherit(o,{illegal:/\n/,contains:[{begin:"{{"},{begin:"}}"},{begin:'""'},r]}),s=(s.contains=[o,l,t,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.C_BLOCK_COMMENT_MODE],r.contains=[c,l,i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.inherit(e.C_BLOCK_COMMENT_MODE,{illegal:/\n/})],{variants:[o,l,t,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]}),r=e.IDENT_RE+"(<"+e.IDENT_RE+"(\\s*,\\s*"+e.IDENT_RE+")*>)?(\\[\\])?";return{aliases:["csharp","c#"],keywords:n,illegal:/::/,contains:[e.COMMENT("///","$",{returnBegin:!0,contains:[{className:"doctag",variants:[{begin:"///",relevance:0},{begin:"\x3c!--|--\x3e"},{begin:""}]}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":"if else elif endif define undef warning error line region endregion pragma checksum"}},s,a,{beginKeywords:"class interface",end:/[{;=]/,illegal:/[^\s:,]/,contains:[e.TITLE_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace",end:/[{;=]/,illegal:/[^\s:]/,contains:[e.inherit(e.TITLE_MODE,{begin:"[a-zA-Z](\\.?\\w)*"}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"meta",begin:"^\\s*\\[",excludeBegin:!0,end:"\\]",excludeEnd:!0,contains:[{className:"meta-string",begin:/"/,end:/"/}]},{beginKeywords:"new return throw await else",relevance:0},{className:"function",begin:"("+r+"\\s+)+"+e.IDENT_RE+"\\s*\\(",returnBegin:!0,end:/\s*[{;=]/,excludeEnd:!0,keywords:n,contains:[{begin:e.IDENT_RE+"\\s*\\(",returnBegin:!0,contains:[e.TITLE_MODE],relevance:0},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:n,relevance:0,contains:[s,a,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]}]}}function s(e){var n={className:"attribute",begin:/\S/,end:":",excludeEnd:!0,starts:{endsWithParent:!0,excludeEnd:!0,contains:[{begin:/[\w-]+\(/,returnBegin:!0,contains:[{className:"built_in",begin:/[\w-]+/},{begin:/\(/,end:/\)/,contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.CSS_NUMBER_MODE]}]},e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_BLOCK_COMMENT_MODE,{className:"number",begin:"#[0-9A-Fa-f]+"},{className:"meta",begin:"!important"}]}};return{case_insensitive:!0,illegal:/[=\/|'\$]/,contains:[e.C_BLOCK_COMMENT_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/},{className:"selector-class",begin:/\.[A-Za-z0-9_-]+/},{className:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},{className:"selector-pseudo",begin:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{begin:"@(page|font-face)",lexemes:"@[a-z-]+",keywords:"@page @font-face"},{begin:"@",end:"[{;]",illegal:/:/,returnBegin:!0,contains:[{className:"keyword",begin:/@\-?\w[\w]*(\-\w+)*/},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:"and or not only",contains:[{begin:/[a-z-]+:/,className:"attribute"},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.CSS_NUMBER_MODE]}]},{className:"selector-tag",begin:"[a-zA-Z-][a-zA-Z0-9_-]*",relevance:0},{begin:"{",end:"}",illegal:/\S/,contains:[e.C_BLOCK_COMMENT_MODE,{begin:/(?:[A-Z\_\.\-]+|--[a-zA-Z0-9_-]+)\s*:/,returnBegin:!0,end:";",endsWithParent:!0,contains:[n]}]}]}}function r(e){return{aliases:["patch"],contains:[{className:"meta",relevance:10,variants:[{begin:/^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/},{begin:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{begin:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{className:"comment",variants:[{begin:/Index: /,end:/$/},{begin:/={3,}/,end:/$/},{begin:/^\-{3}/,end:/$/},{begin:/^\*{3} /,end:/$/},{begin:/^\+{3}/,end:/$/},{begin:/^\*{15}$/}]},{className:"addition",begin:"^\\+",end:"$"},{className:"deletion",begin:"^\\-",end:"$"},{className:"addition",begin:"^\\!",end:"$"}]}}function l(e){return{aliases:["docker"],case_insensitive:!0,keywords:"from maintainer expose env arg user onbuild stopsignal",contains:[e.HASH_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.NUMBER_MODE,{beginKeywords:"run cmd entrypoint volume add copy workdir label healthcheck shell",starts:{end:/[^\\]$/,subLanguage:"bash"}}],illegal:"/}]}]}]},s={className:"string",begin:"~[A-Z](?="+s+")",contains:[{begin:/"/,end:/"/},{begin:/'/,end:/'/},{begin:/\//,end:/\//},{begin:/\|/,end:/\|/},{begin:/\(/,end:/\)/},{begin:/\[/,end:/\]/},{begin:/\{/,end:/\}/},{begin:/\/}]},r={className:"string",contains:[e.BACKSLASH_ESCAPE,t],variants:[{begin:/"""/,end:/"""/},{begin:/'''/,end:/'''/},{begin:/~S"""/,end:/"""/,contains:[]},{begin:/~S"/,end:/"/,contains:[]},{begin:/~S'''/,end:/'''/,contains:[]},{begin:/~S'/,end:/'/,contains:[]},{begin:/'/,end:/'/},{begin:/"/,end:/"/}]},l={className:"function",beginKeywords:"def defp defmacro",end:/\B\b/,contains:[e.inherit(e.TITLE_MODE,{begin:n,endsParent:!0})]},o=e.inherit(l,{className:"class",beginKeywords:"defimpl defmodule defprotocol defrecord",end:/\bdo\b|$|;/}),s=[r,s,i,e.HASH_COMMENT_MODE,o,l,{begin:"::"},{className:"symbol",begin:":(?![\\s:])",contains:[r,{begin:"[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?"}],relevance:0},{className:"symbol",begin:n+":(?!:)",relevance:0},{className:"number",begin:"(\\b0o[0-7_]+)|(\\b0b[01_]+)|(\\b0x[0-9a-fA-F_]+)|(-?\\b[1-9][0-9_]*(.[0-9_]+([eE][-+]?[0-9]+)?)?)",relevance:0},{className:"variable",begin:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{begin:"->"},{begin:"("+e.RE_STARTERS_RE+")\\s*",contains:[e.HASH_COMMENT_MODE,{className:"regexp",illegal:"\\n",contains:[e.BACKSLASH_ESCAPE,t],variants:[{begin:"/",end:"/[a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}]}],relevance:0}];return{lexemes:n,keywords:a,contains:t.contains=s}}function c(e){var n={keyword:"break default func interface select case map struct chan else goto package switch const fallthrough if range type continue for import return var go defer bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 int uint uintptr rune",literal:"true false iota nil",built_in:"append cap close complex copy imag len make new panic print println real recover delete"};return{aliases:["golang"],keywords:n,illegal:"|<-"}]}}function u(e){var n="false synchronized int abstract float private char boolean var static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports do",a={className:"number",begin:"\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",relevance:0};return{aliases:["jsp"],keywords:n,illegal:/<\/|#/,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"class",beginKeywords:"class interface",end:/[{;=]/,excludeEnd:!0,keywords:"class interface",illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"new throw return else",relevance:0},{className:"function",begin:"([À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(<[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(\\s*,\\s*[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*)*>)?\\s+)+"+e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:n,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"params",begin:/\(/,end:/\)/,keywords:n,relevance:0,contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},a,{className:"meta",begin:"@[A-Za-z]+"}]}}function _(e){var n="<>",a="",t=/<[A-Za-z0-9\\._:-]+/,i=/\/[A-Za-z0-9\\._:-]+>|\/>/,s="[A-Za-z$_][0-9A-Za-z$_]*",r={keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await static import from as",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},l={className:"number",variants:[{begin:"\\b(0[bB][01]+)n?"},{begin:"\\b(0[oO][0-7]+)n?"},{begin:e.C_NUMBER_RE+"n?"}],relevance:0},o={className:"subst",begin:"\\$\\{",end:"\\}",keywords:r,contains:[]},c={begin:"html`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,o],subLanguage:"xml"}},d={begin:"css`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,o],subLanguage:"css"}},g={className:"string",begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE,o]},o=(o.contains=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,c,d,g,l,e.REGEXP_MODE],o.contains.concat([e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE]));return{aliases:["js","jsx","mjs","cjs"],keywords:r,contains:[{className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},{className:"meta",begin:/^#!/,end:/$/},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,c,d,g,e.C_LINE_COMMENT_MODE,e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+",contains:[{className:"type",begin:"\\{",end:"\\}",relevance:0},{className:"variable",begin:s+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),e.C_BLOCK_COMMENT_MODE,l,{begin:/[{,\n]\s*/,relevance:0,contains:[{begin:s+"\\s*:",returnBegin:!0,relevance:0,contains:[{className:"attr",begin:s,relevance:0}]}]},{begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.REGEXP_MODE,{className:"function",begin:"(\\(.*?\\)|"+s+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:s},{begin:/\(\s*\)/},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:r,contains:o}]}]},{className:"",begin:/\s/,end:/\s*/,skip:!0},{variants:[{begin:n,end:a},{begin:t,end:i}],subLanguage:"xml",contains:[{begin:t,end:i,skip:!0,contains:["self"]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/\{/,excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:s}),{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:o}],illegal:/\[|%/},{begin:/\$[(.]/},e.METHOD_GUARD,{className:"class",beginKeywords:"class",end:/[{;=]/,excludeEnd:!0,illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"constructor get set",end:/\{/,excludeEnd:!0}],illegal:/#(?!!)/}}function m(e){var n={literal:"true false null"},a=[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE],t=[e.QUOTE_STRING_MODE,e.C_NUMBER_MODE],i={end:",",endsWithParent:!0,excludeEnd:!0,contains:t,keywords:n},s={begin:"{",end:"}",contains:[{className:"attr",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE],illegal:"\\n"},e.inherit(i,{begin:/:/})].concat(a),illegal:"\\S"},e={begin:"\\[",end:"\\]",contains:[e.inherit(i)],illegal:"\\S"};return t.push(s,e),a.forEach(function(e){t.push(e)}),{contains:t,keywords:n,illegal:"\\S"}}function b(e){var n={keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual trait volatile transient native default",built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing",literal:"true false null"},a={className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"@"},t={className:"subst",begin:"\\${",end:"}",contains:[e.C_NUMBER_MODE]},i={className:"string",variants:[{begin:'"""',end:'"""(?=[^"])',contains:[i={className:"variable",begin:"\\$"+e.UNDERSCORE_IDENT_RE},t]},{begin:"'",end:"'",illegal:/\n/,contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/,contains:[e.BACKSLASH_ESCAPE,i,t]}]},t=(t.contains.push(i),{className:"meta",begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+e.UNDERSCORE_IDENT_RE+")?"}),s={className:"meta",begin:"@"+e.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/,end:/\)/,contains:[e.inherit(i,{className:"meta-string"})]}]},r={className:"number",begin:"\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",relevance:0},l=e.COMMENT("/\\*","\\*/",{contains:[e.C_BLOCK_COMMENT_MODE]}),o={variants:[{className:"type",begin:e.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/,contains:[]}]},c=o;return c.variants[1].contains=[o],o.variants[1].contains=[c],{aliases:["kt"],keywords:n,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,l,{className:"keyword",begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol",begin:/@\w+/}]}},a,t,s,{className:"function",beginKeywords:"fun",end:"[(]|$",returnBegin:!0,excludeEnd:!0,keywords:n,illegal:/fun\s+(<.*>)?[^\s\(]+(\s+[^\s\(]+)\s*=/,relevance:5,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"type",begin://,keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:n,relevance:0,contains:[{begin:/:/,end:/[=,\/]/,endsWithParent:!0,contains:[o,e.C_LINE_COMMENT_MODE,l],relevance:0},e.C_LINE_COMMENT_MODE,l,t,s,i,e.C_NUMBER_MODE]},l]},{className:"class",beginKeywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0,illegal:"extends implements",contains:[{beginKeywords:"public protected internal private constructor"},e.UNDERSCORE_TITLE_MODE,{className:"type",begin://,excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,]|$/,excludeBegin:!0,returnEnd:!0},t,s]},i,{className:"meta",begin:"^#!/usr/bin/env",end:"$",illegal:"\n"},r]}}function p(e){var n="\\[=*\\[",a="\\]=*\\]",t={begin:n,end:a,contains:["self"]},i=[e.COMMENT("--(?!"+n+")","$"),e.COMMENT("--"+n,a,{contains:[t],relevance:10})];return{lexemes:e.UNDERSCORE_IDENT_RE,keywords:{literal:"true false nil",keyword:"and break do else elseif end for goto if in local not or repeat return then until while",built_in:"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstringmodule next pairs pcall print rawequal rawget rawset require select setfenvsetmetatable tonumber tostring type unpack xpcall arg selfcoroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove"},contains:i.concat([{className:"function",beginKeywords:"function",end:"\\)",contains:[e.inherit(e.TITLE_MODE,{begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{className:"params",begin:"\\(",endsWithParent:!0,contains:i}].concat(i)},e.C_NUMBER_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"string",begin:n,end:a,contains:[t],relevance:5}])}}function f(e){return{aliases:["md","mkdown","mkd"],contains:[{className:"section",variants:[{begin:"^#{1,6}",end:"$"},{begin:"^.+?\\n[=-]{2,}$"}]},{begin:"<",end:">",subLanguage:"xml",relevance:0},{className:"bullet",begin:"^\\s*([*+-]|(\\d+\\.))\\s+"},{className:"strong",begin:"[*_]{2}.+?[*_]{2}"},{className:"emphasis",variants:[{begin:"\\*.+?\\*"},{begin:"_.+?_",relevance:0}]},{className:"quote",begin:"^>\\s+",end:"$"},{className:"code",variants:[{begin:"^```\\w*\\s*$",end:"^```[ ]*$"},{begin:"`.+?`"},{begin:"^( {4}|\\t)",end:"$",relevance:0}]},{begin:"^[-\\*]{3,}",end:"$"},{begin:"\\[.+?\\][\\(\\[].*?[\\)\\]]",returnBegin:!0,contains:[{className:"string",begin:"\\[",end:"\\]",excludeBegin:!0,returnEnd:!0,relevance:0},{className:"link",begin:"\\]\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"symbol",begin:"\\]\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0}],relevance:10},{begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]}]}}function E(e){var n={keyword:"rec with let in inherit assert if else then",literal:"true false or and null",built_in:"import abort baseNameOf dirOf isNull builtins map removeAttrs throw toString derivation"},a={className:"subst",begin:/\$\{/,end:/}/,keywords:n},e=[e.NUMBER_MODE,e.HASH_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"string",contains:[a],variants:[{begin:"''",end:"''"},{begin:'"',end:'"'}]},{begin:/[a-zA-Z0-9-_]+(\s*=)/,returnBegin:!0,relevance:0,contains:[{className:"attr",begin:/\S+/}]}];return{aliases:["nixos"],keywords:n,contains:a.contains=e}}function N(e){return{disableAutodetect:!0}}function h(e){var n=/[a-zA-Z@][a-zA-Z0-9_]*/,a="@interface @class @protocol @implementation";return{aliases:["mm","objc","obj-c"],keywords:{keyword:"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required @encode @package @import @defs @compatibility_alias __bridge __bridge_transfer __bridge_retained __bridge_retain __covariant __contravariant __kindof _Nonnull _Nullable _Null_unspecified __FUNCTION__ __PRETTY_FUNCTION__ __attribute__ getter setter retain unsafe_unretained nonnull nullable null_unspecified null_resettable class instancetype NS_DESIGNATED_INITIALIZER NS_UNAVAILABLE NS_REQUIRES_SUPER NS_RETURNS_INNER_POINTER NS_INLINE NS_AVAILABLE NS_DEPRECATED NS_ENUM NS_OPTIONS NS_SWIFT_UNAVAILABLE NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_REFINED_FOR_SWIFT NS_SWIFT_NAME NS_SWIFT_NOTHROW NS_DURING NS_HANDLER NS_ENDHANDLER NS_VALUERETURN NS_VOIDRETURN",literal:"false true FALSE TRUE nil YES NO NULL",built_in:"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once"},lexemes:n,illegal:"/,end:/$/,illegal:"\\n"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"class",begin:"("+a.split(" ").join("|")+")\\b",end:"({|$)",excludeEnd:!0,keywords:a,lexemes:n,contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"\\."+e.UNDERSCORE_IDENT_RE,relevance:0}]}}function v(e){var n="getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when",a={className:"subst",begin:"[$@]\\{",end:"\\}",keywords:n},t={begin:"->{",end:"}"},i={variants:[{begin:/\$\d/},{begin:/[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/},{begin:/[\$%@][^\s\w{]/,relevance:0}]},s=[e.BACKSLASH_ESCAPE,a,i],i=[i,e.HASH_COMMENT_MODE,e.COMMENT("^\\=\\w","\\=cut",{endsWithParent:!0}),t,{className:"string",contains:s,variants:[{begin:"q[qwxr]?\\s*\\(",end:"\\)",relevance:5},{begin:"q[qwxr]?\\s*\\[",end:"\\]",relevance:5},{begin:"q[qwxr]?\\s*\\{",end:"\\}",relevance:5},{begin:"q[qwxr]?\\s*\\|",end:"\\|",relevance:5},{begin:"q[qwxr]?\\s*\\<",end:"\\>",relevance:5},{begin:"qw\\s+q",end:"q",relevance:5},{begin:"'",end:"'",contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"'},{begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE]},{begin:"{\\w+}",contains:[],relevance:0},{begin:"-?\\w+\\s*\\=\\>",contains:[],relevance:0}]},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{begin:"(\\/\\/|"+e.RE_STARTERS_RE+"|\\b(split|return|print|reverse|grep)\\b)\\s*",keywords:"split return print reverse grep",relevance:0,contains:[e.HASH_COMMENT_MODE,{className:"regexp",begin:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",relevance:10},{className:"regexp",begin:"(m|qr)?/",end:"/[a-z]*",contains:[e.BACKSLASH_ESCAPE],relevance:0}]},{className:"function",beginKeywords:"sub",end:"(\\s*\\(.*?\\))?[;{]",excludeEnd:!0,relevance:5,contains:[e.TITLE_MODE]},{begin:"-\\w\\b",relevance:0},{begin:"^__DATA__$",end:"^__END__$",subLanguage:"mojolicious",contains:[{begin:"^@@.*",end:"$",className:"comment"}]}];return a.contains=i,{aliases:["pl","pm"],lexemes:/[\w\.]+/,keywords:n,contains:t.contains=i}}function y(e){var n={begin:"\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*"},a={className:"meta",begin:/<\?(php)?|\?>/},t={className:"string",contains:[e.BACKSLASH_ESCAPE,a],variants:[{begin:'b"',end:'"'},{begin:"b'",end:"'"},e.inherit(e.APOS_STRING_MODE,{illegal:null}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null})]},i={variants:[e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE]};return{aliases:["php","php3","php4","php5","php6","php7"],case_insensitive:!0,keywords:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally",contains:[e.HASH_COMMENT_MODE,e.COMMENT("//","$",{contains:[a]}),e.COMMENT("/\\*","\\*/",{contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),e.COMMENT("__halt_compiler.+?;",!1,{endsWithParent:!0,keywords:"__halt_compiler",lexemes:e.UNDERSCORE_IDENT_RE}),{className:"string",begin:/<<<['"]?\w+['"]?$/,end:/^\w+;?$/,contains:[e.BACKSLASH_ESCAPE,{className:"subst",variants:[{begin:/\$\w+/},{begin:/\{\$/,end:/\}/}]}]},a,{className:"keyword",begin:/\$this\b/},n,{begin:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{className:"function",beginKeywords:"function",end:/[;{]/,excludeEnd:!0,illegal:"\\$|\\[|%",contains:[e.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)",contains:["self",n,e.C_BLOCK_COMMENT_MODE,t,i]}]},{className:"class",beginKeywords:"class interface",end:"{",excludeEnd:!0,illegal:/[:\(\$"]/,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"namespace",end:";",illegal:/[\.']/,contains:[e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"use",end:";",contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"=>"},t,i]}}function w(e){var n="[ \\t\\f]*",a="("+n+"[:=]"+n+"|[ \\t\\f]+)",t="([^\\\\\\W:= \\t\\f\\n]|\\\\.)+",i="([^\\\\:= \\t\\f\\n]|\\\\.)+",s={end:a,relevance:0,starts:{className:"string",end:/$/,relevance:0,contains:[{begin:"\\\\\\n"}]}};return{case_insensitive:!0,illegal:/\S/,contains:[e.COMMENT("^\\s*[!#]","$"),{begin:t+a,returnBegin:!0,contains:[{className:"attr",begin:t,endsParent:!0,relevance:0}],starts:s},{begin:i+a,returnBegin:!0,relevance:0,contains:[{className:"meta",begin:i,endsParent:!0,relevance:0}],starts:s},{className:"attr",relevance:0,begin:i+n+"$"}]}}function O(e){var n=e.COMMENT("#","$"),a="([A-Za-z_]|::)(\\w|::)*",t=e.inherit(e.TITLE_MODE,{begin:a}),a={className:"variable",begin:"\\$"+a},i={className:"string",contains:[e.BACKSLASH_ESCAPE,a],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/}]};return{aliases:["pp"],contains:[n,a,i,{beginKeywords:"class",end:"\\{|;",illegal:/=/,contains:[t,n]},{beginKeywords:"define",end:/\{/,contains:[{className:"section",begin:e.IDENT_RE,endsParent:!0}]},{begin:e.IDENT_RE+"\\s+\\{",returnBegin:!0,end:/\S/,contains:[{className:"keyword",begin:e.IDENT_RE},{begin:/\{/,end:/\}/,keywords:{keyword:"and case default else elsif false if in import enherits node or true undef unless main settings $string ",literal:"alias audit before loglevel noop require subscribe tag owner ensure group mode name|0 changes context force incl lens load_path onlyif provider returns root show_diff type_check en_address ip_address realname command environment hour monute month monthday special target weekday creates cwd ogoutput refresh refreshonly tries try_sleep umask backup checksum content ctime force ignore links mtime purge recurse recurselimit replace selinux_ignore_defaults selrange selrole seltype seluser source souirce_permissions sourceselect validate_cmd validate_replacement allowdupe attribute_membership auth_membership forcelocal gid ia_load_module members system host_aliases ip allowed_trunk_vlans description device_url duplex encapsulation etherchannel native_vlan speed principals allow_root auth_class auth_type authenticate_user k_of_n mechanisms rule session_owner shared options device fstype enable hasrestart directory present absent link atboot blockdevice device dump pass remounts poller_tag use message withpath adminfile allow_virtual allowcdrom category configfiles flavor install_options instance package_settings platform responsefile status uninstall_options vendor unless_system_user unless_uid binary control flags hasstatus manifest pattern restart running start stop allowdupe auths expiry gid groups home iterations key_membership keys managehome membership password password_max_age password_min_age profile_membership profiles project purge_ssh_keys role_membership roles salt shell uid baseurl cost descr enabled enablegroups exclude failovermethod gpgcheck gpgkey http_caching include includepkgs keepalive metadata_expire metalink mirrorlist priority protect proxy proxy_password proxy_username repo_gpgcheck s3_enabled skip_if_unavailable sslcacert sslclientcert sslclientkey sslverify mounted",built_in:"architecture augeasversion blockdevices boardmanufacturer boardproductname boardserialnumber cfkey dhcp_servers domain ec2_ ec2_userdata facterversion filesystems ldom fqdn gid hardwareisa hardwaremodel hostname id|0 interfaces ipaddress ipaddress_ ipaddress6 ipaddress6_ iphostnumber is_virtual kernel kernelmajversion kernelrelease kernelversion kernelrelease kernelversion lsbdistcodename lsbdistdescription lsbdistid lsbdistrelease lsbmajdistrelease lsbminordistrelease lsbrelease macaddress macaddress_ macosx_buildversion macosx_productname macosx_productversion macosx_productverson_major macosx_productversion_minor manufacturer memoryfree memorysize netmask metmask_ network_ operatingsystem operatingsystemmajrelease operatingsystemrelease osfamily partitions path physicalprocessorcount processor processorcount productname ps puppetversion rubysitedir rubyversion selinux selinux_config_mode selinux_config_policy selinux_current_mode selinux_current_mode selinux_enforced selinux_policyversion serialnumber sp_ sshdsakey sshecdsakey sshrsakey swapencrypted swapfree swapsize timezone type uniqueid uptime uptime_days uptime_hours uptime_seconds uuid virtual vlans xendomains zfs_version zonenae zones zpool_version"},relevance:0,contains:[i,n,{begin:"[a-zA-Z_]+\\s*=>",returnBegin:!0,end:"=>",contains:[{className:"attr",begin:e.IDENT_RE}]},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},a]}],relevance:0}]}}function M(e){var n={keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10",built_in:"Ellipsis NotImplemented",literal:"False None True"},a={className:"meta",begin:/^(>>>|\.\.\.) /},t={className:"subst",begin:/\{/,end:/\}/,keywords:n,illegal:/#/},i={begin:/\{\{/,relevance:0},i={className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:/(u|b)?r?'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,a],relevance:10},{begin:/(u|b)?r?"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,a],relevance:10},{begin:/(fr|rf|f)'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,a,i,t]},{begin:/(fr|rf|f)"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,a,i,t]},{begin:/(u|r|ur)'/,end:/'/,relevance:10},{begin:/(u|r|ur)"/,end:/"/,relevance:10},{begin:/(b|br)'/,end:/'/},{begin:/(b|br)"/,end:/"/},{begin:/(fr|rf|f)'/,end:/'/,contains:[e.BACKSLASH_ESCAPE,i,t]},{begin:/(fr|rf|f)"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,i,t]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},s={className:"number",relevance:0,variants:[{begin:e.BINARY_NUMBER_RE+"[lLjJ]?"},{begin:"\\b(0o[0-7]+)[lLjJ]?"},{begin:e.C_NUMBER_RE+"[lLjJ]?"}]},r={className:"params",begin:/\(/,end:/\)/,contains:["self",a,s,i,e.HASH_COMMENT_MODE]};return t.contains=[i,s,a],{aliases:["py","gyp","ipython"],keywords:n,illegal:/(<\/|->|\?)|=>/,contains:[a,s,{beginKeywords:"if",relevance:0},i,e.HASH_COMMENT_MODE,{variants:[{className:"function",beginKeywords:"def"},{className:"class",beginKeywords:"class"}],end:/:/,illegal:/[${=;\n,]/,contains:[e.UNDERSCORE_TITLE_MODE,r,{begin:/->/,endsWithParent:!0,keywords:"None"}]},{className:"meta",begin:/^[\t ]*@/,end:/$/},{begin:/\b(print|exec)\(/}]}}function x(e){var n="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",a={keyword:"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor",literal:"true false nil"},t={className:"doctag",begin:"@[A-Za-z]+"},i={begin:"#<",end:">"},t=[e.COMMENT("#","$",{contains:[t]}),e.COMMENT("^\\=begin","^\\=end",{contains:[t],relevance:10}),e.COMMENT("^__END__","\\n$")],s={className:"subst",begin:"#\\{",end:"}",keywords:a},r={className:"string",contains:[e.BACKSLASH_ESCAPE,s],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{begin:"%[qQwWx]?\\(",end:"\\)"},{begin:"%[qQwWx]?\\[",end:"\\]"},{begin:"%[qQwWx]?{",end:"}"},{begin:"%[qQwWx]?<",end:">"},{begin:"%[qQwWx]?/",end:"/"},{begin:"%[qQwWx]?%",end:"%"},{begin:"%[qQwWx]?-",end:"-"},{begin:"%[qQwWx]?\\|",end:"\\|"},{begin:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/},{begin:/<<[-~]?'?(\w+)(?:.|\n)*?\n\s*\1\b/,returnBegin:!0,contains:[{begin:/<<[-~]?'?/},{begin:/\w+/,endSameAsBegin:!0,contains:[e.BACKSLASH_ESCAPE,s]}]}]},l={className:"params",begin:"\\(",end:"\\)",endsParent:!0,keywords:a},r=[r,i,{className:"class",beginKeywords:"class module",end:"$|;",illegal:/=/,contains:[e.inherit(e.TITLE_MODE,{begin:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{begin:"<\\s*",contains:[{begin:"("+e.IDENT_RE+"::)?"+e.IDENT_RE}]}].concat(t)},{className:"function",beginKeywords:"def",end:"$|;",contains:[e.inherit(e.TITLE_MODE,{begin:n}),l].concat(t)},{begin:e.IDENT_RE+"::"},{className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"(\\!|\\?)?:",relevance:0},{className:"symbol",begin:":(?!\\s)",contains:[r,{begin:n}],relevance:0},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{begin:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{className:"params",begin:/\|/,end:/\|/,keywords:a},{begin:"("+e.RE_STARTERS_RE+"|unless)\\s*",keywords:"unless",contains:[i,{className:"regexp",contains:[e.BACKSLASH_ESCAPE,s],illegal:/\n/,variants:[{begin:"/",end:"/[a-z]*"},{begin:"%r{",end:"}[a-z]*"},{begin:"%r\\(",end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}]}].concat(t),relevance:0}].concat(t);return s.contains=r,{aliases:["rb","gemspec","podspec","thor","irb"],keywords:a,illegal:/\/\*/,contains:t.concat([{begin:/^\s*=>/,starts:{end:"$",contains:l.contains=r}},{className:"meta",begin:"^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+>|(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>)",starts:{end:"$",contains:r}}]).concat(r)}}function C(e){var n="([ui](8|16|32|64|128|size)|f(32|64))?",a="drop i8 i16 i32 i64 i128 isize u8 u16 u32 u64 u128 usize f32 f64 str char bool Box Option Result String Vec Copy Send Sized Sync Drop Fn FnMut FnOnce ToOwned Clone Debug PartialEq PartialOrd Eq Ord AsRef AsMut Into From Default Iterator Extend IntoIterator DoubleEndedIterator ExactSizeIterator SliceConcatExt ToString assert! assert_eq! bitflags! bytes! cfg! col! concat! concat_idents! debug_assert! debug_assert_eq! env! panic! file! format! format_args! include_bin! include_str! line! local_data_key! module_path! option_env! print! println! select! stringify! try! unimplemented! unreachable! vec! write! writeln! macro_rules! assert_ne! debug_assert_ne!";return{aliases:["rs"],keywords:{keyword:"abstract as async await become box break const continue crate do dyn else enum extern false final fn for if impl in let loop macro match mod move mut override priv pub ref return self Self static struct super trait true try type typeof unsafe unsized use virtual where while yield",literal:"true false Some None Ok Err",built_in:a},lexemes:e.IDENT_RE+"!?",illegal:""}]}}function S(e){var n={className:"subst",variants:[{begin:"\\$[A-Za-z0-9_]+"},{begin:"\\${",end:"}"}]},n={className:"string",variants:[{begin:'"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:'"""',end:'"""',relevance:10},{begin:'[a-z]+"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE,n]},{className:"string",begin:'[a-z]+"""',end:'"""',contains:[n],relevance:10}]},a={className:"type",begin:"\\b[A-Z][A-Za-z0-9_]*",relevance:0},t={className:"title",begin:/[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/,relevance:0};return{keywords:{literal:"true false null",keyword:"type yield lazy override def with val var sealed abstract private trait object if forSome for while throw finally protected extends import final return else break new catch super class case package default try this match continue throws implicit"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n,{className:"symbol",begin:"'\\w[\\w\\d_]*(?!')"},a,{className:"function",beginKeywords:"def",end:/[:={\[(\n;]/,excludeEnd:!0,contains:[t]},{className:"class",beginKeywords:"class object trait type",end:/[:={\[\n;]/,excludeEnd:!0,contains:[{beginKeywords:"extends with",relevance:10},{begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[a]},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[a]},t]},e.C_NUMBER_MODE,{className:"meta",begin:"@[A-Za-z]+"}]}}function T(e){return{aliases:["console"],contains:[{className:"meta",begin:"^\\s{0,3}[/\\w\\d\\[\\]()@-]*[>%$#]",starts:{end:"$",subLanguage:"bash"}}]}}function k(e){var n=e.COMMENT("--","$");return{case_insensitive:!0,illegal:/[<>{}*]/,contains:[{beginKeywords:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke comment values with",end:/;/,endsWithParent:!0,lexemes:/[\w\.]+/,keywords:{keyword:"as abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias all allocate allow alter always analyze ancillary and anti any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound bucket buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain explode export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force foreign form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour hours http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lateral lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minutes minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notnull notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second seconds section securefile security seed segment select self semi sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tablesample tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unnest unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace window with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek",literal:"true false null unknown",built_in:"array bigint binary bit blob bool boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text time timestamp tinyint varchar varchar2 varying void"},contains:[{className:"string",begin:"'",end:"'",contains:[{begin:"''"}]},{className:"string",begin:'"',end:'"',contains:[{begin:'""'}]},{className:"string",begin:"`",end:"`"},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,n,e.HASH_COMMENT_MODE]},e.C_BLOCK_COMMENT_MODE,n,e.HASH_COMMENT_MODE]}}function A(e){var n={keyword:"#available #colorLiteral #column #else #elseif #endif #file #fileLiteral #function #if #imageLiteral #line #selector #sourceLocation _ __COLUMN__ __FILE__ __FUNCTION__ __LINE__ Any as as! as? associatedtype associativity break case catch class continue convenience default defer deinit didSet do dynamic dynamicType else enum extension fallthrough false fileprivate final for func get guard if import in indirect infix init inout internal is lazy left let mutating nil none nonmutating open operator optional override postfix precedence prefix private protocol Protocol public repeat required rethrows return right self Self set static struct subscript super switch throw throws true try try! try? Type typealias unowned var weak where while willSet",literal:"true false nil",built_in:"abs advance alignof alignofValue anyGenerator assert assertionFailure bridgeFromObjectiveC bridgeFromObjectiveCUnconditional bridgeToObjectiveC bridgeToObjectiveCUnconditional c contains count countElements countLeadingZeros debugPrint debugPrintln distance dropFirst dropLast dump encodeBitsAsWords enumerate equal fatalError filter find getBridgedObjectiveCType getVaList indices insertionSort isBridgedToObjectiveC isBridgedVerbatimToObjectiveC isUniquelyReferenced isUniquelyReferencedNonObjC join lazy lexicographicalCompare map max maxElement min minElement numericCast overlaps partition posix precondition preconditionFailure print println quickSort readLine reduce reflect reinterpretCast reverse roundUpToAlignment sizeof sizeofValue sort split startsWith stride strideof strideofValue swap toString transcode underestimateCount unsafeAddressOf unsafeBitCast unsafeDowncast unsafeUnwrap unsafeReflect withExtendedLifetime withObjectAtPlusZero withUnsafePointer withUnsafePointerToObject withUnsafeMutablePointer withUnsafeMutablePointers withUnsafePointer withUnsafePointers withVaList zip"},a=e.COMMENT("/\\*","\\*/",{contains:["self"]}),t={className:"subst",begin:/\\\(/,end:"\\)",keywords:n,contains:[]},i={className:"string",contains:[e.BACKSLASH_ESCAPE,t],variants:[{begin:/"""/,end:/"""/},{begin:/"/,end:/"/}]},s={className:"number",begin:"\\b([\\d_]+(\\.[\\deE_]+)?|0x[a-fA-F0-9_]+(\\.[a-fA-F0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\b",relevance:0};return t.contains=[s],{keywords:n,contains:[i,e.C_LINE_COMMENT_MODE,a,{className:"type",begin:"\\b[A-Z][\\wÀ-ʸ']*[!?]"},{className:"type",begin:"\\b[A-Z][\\wÀ-ʸ']*",relevance:0},s,{className:"function",beginKeywords:"func",end:"{",excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/[A-Za-z$_][0-9A-Za-z$_]*/}),{begin://},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:n,contains:["self",s,i,e.C_BLOCK_COMMENT_MODE,{begin:":"}],illegal:/["']/}],illegal:/\[|%/},{className:"class",beginKeywords:"struct protocol class extension enum",keywords:n,end:"\\{",excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/[A-Za-z$_][\u00C0-\u02B80-9A-Za-z$_]*/})]},{className:"meta",begin:"(@discardableResult|@warn_unused_result|@exported|@lazy|@noescape|@NSCopying|@NSManaged|@objc|@objcMembers|@convention|@required|@noreturn|@IBAction|@IBDesignable|@IBInspectable|@IBOutlet|@infix|@prefix|@postfix|@autoclosure|@testable|@available|@nonobjc|@NSApplicationMain|@UIApplicationMain|@dynamicMemberLookup|@propertyWrapper)"},{beginKeywords:"import",end:/$/,contains:[e.C_LINE_COMMENT_MODE,a]}]}}function R(e){var n={className:"symbol",begin:"&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;"},a={begin:"\\s",contains:[{className:"meta-keyword",begin:"#?[a-z_][a-z1-9_-]+",illegal:"\\n"}]},t=e.inherit(a,{begin:"\\(",end:"\\)"}),i=e.inherit(e.APOS_STRING_MODE,{className:"meta-string"}),s=e.inherit(e.QUOTE_STRING_MODE,{className:"meta-string"}),r={endsWithParent:!0,illegal:/`]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,contains:[{className:"meta",begin:"",relevance:10,contains:[a,s,i,t,{begin:"\\[",end:"\\]",contains:[{className:"meta",begin:"",contains:[a,t,s,i]}]}]},e.COMMENT("\x3c!--","--\x3e",{relevance:10}),{begin:"<\\!\\[CDATA\\[",end:"\\]\\]>",relevance:10},n,{className:"meta",begin:/<\?xml/,end:/\?>/,relevance:10},{begin:/<\?(php)?/,end:/\?>/,subLanguage:"php",contains:[{begin:"/\\*",end:"\\*/",skip:!0},{begin:'b"',end:'"',skip:!0},{begin:"b'",end:"'",skip:!0},e.inherit(e.APOS_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0})]},{className:"tag",begin:")",end:">",keywords:{name:"style"},contains:[r],starts:{end:"",returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:")",end:">",keywords:{name:"script"},contains:[r],starts:{end:"<\/script>",returnEnd:!0,subLanguage:["actionscript","javascript","handlebars","xml"]}},{className:"tag",begin:"",contains:[{className:"name",begin:/[^\/><\s]+/,relevance:0},r]}]}}function B(e){var n="true false yes no null",a={className:"string",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/\S+/}],contains:[e.BACKSLASH_ESCAPE,{className:"template-variable",variants:[{begin:"{{",end:"}}"},{begin:"%{",end:"}"}]}]};return{case_insensitive:!0,aliases:["yml","YAML","yaml"],contains:[{className:"attr",variants:[{begin:"\\w[\\w :\\/.-]*:(?=[ \t]|$)"},{begin:'"\\w[\\w :\\/.-]*":(?=[ \t]|$)'},{begin:"'\\w[\\w :\\/.-]*':(?=[ \t]|$)"}]},{className:"meta",begin:"^---s*$",relevance:10},{className:"string",begin:"[\\|>]([0-9]?[+-])?[ ]*\\n( *)[\\S ]+\\n(\\2[\\S ]+\\n?)*"},{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:"!"+e.UNDERSCORE_IDENT_RE},{className:"type",begin:"!!"+e.UNDERSCORE_IDENT_RE},{className:"meta",begin:"&"+e.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+e.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"\\-(?=[ ]|$)",relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:n,keywords:{literal:n}},{className:"number",begin:e.C_NUMBER_RE+"\\b"},a]}}var D,L,I={};D=function(t){var a,g=[],s=Object.keys,w=Object.create(null),r=Object.create(null),O=!0,n=/^(no-?highlight|plain|text)$/i,l=/\blang(?:uage)?-([\w-]+)\b/i,i=/((^(<[^>]+>|\t|)+|(?:\n)))/gm,M="",x="Could not find the language '{}', did you forget to load/include a language module?",C={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0},o="of and for in not or if then".split(" ");function S(e){return e.replace(/&/g,"&").replace(//g,">")}function u(e){return e.nodeName.toLowerCase()}function c(e){return n.test(e)}function d(e){var n,a={},t=Array.prototype.slice.call(arguments,1);for(n in e)a[n]=e[n];return t.forEach(function(e){for(n in e)a[n]=e[n]}),a}function _(e){var i=[];return function e(n,a){for(var t=n.firstChild;t;t=t.nextSibling)3===t.nodeType?a+=t.nodeValue.length:1===t.nodeType&&(i.push({event:"start",offset:a,node:t}),a=e(t,a),u(t).match(/br|hr|img|input/)||i.push({event:"stop",offset:a,node:t}));return a}(e,0),i}function m(e,n,a){var t=0,i="",s=[];function r(){return e.length&&n.length?e[0].offset!==n[0].offset?e[0].offset"}function o(e){i+=""}function c(e){("start"===e.event?l:o)(e.node)}for(;e.length||n.length;){var d=r();if(i+=S(a.substring(t,d[0].offset)),t=d[0].offset,d===e){for(s.reverse().forEach(o);c(d.splice(0,1)[0]),(d=r())===e&&d.length&&d[0].offset===t;);s.reverse().forEach(l)}else"start"===d[0].event?s.push(d[0].node):s.pop(),c(d.splice(0,1)[0])}return i+S(a.substr(t))}function b(n){return n.variants&&!n.cached_variants&&(n.cached_variants=n.variants.map(function(e){return d(n,{variants:null},e)})),n.cached_variants||(function e(n){return!!n&&(n.endsWithParent||e(n.starts))}(n)?[d(n,{starts:n.starts?d(n.starts):null})]:Object.isFrozen(n)?[d(n)]:[n])}function p(e){if(a&&!e.langApiRestored){for(var n in e.langApiRestored=!0,a)e[n]&&(e[a[n]]=e[n]);(e.contains||[]).concat(e.variants||[]).forEach(p)}}function f(n,t){var i={};return"string"==typeof n?a("keyword",n):s(n).forEach(function(e){a(e,n[e])}),i;function a(a,e){(e=t?e.toLowerCase():e).split(" ").forEach(function(e){var n,e=e.split("|");i[e[0]]=[a,(n=e[0],(e=e[1])?Number(e):function(e){return-1!=o.indexOf(e.toLowerCase())}(n)?0:1)]})}}function T(t){function d(e){return e&&e.source||e}function g(e,n){return new RegExp(d(e),"m"+(t.case_insensitive?"i":"")+(n?"g":""))}function i(i){var s={},r=[],l={},a=1;function e(e,n){s[a]=e,r.push([e,n]),a+=new RegExp(n.toString()+"|").exec("").length-1+1}for(var n=0;n')+n+(a?"":M)):n:""}function r(){var e,n,a,t,i;if(!m.keywords)return S(E);for(a="",m.lexemesRe.lastIndex=e=0,n=m.lexemesRe.exec(E);n;)a+=S(E.substring(e,n.index)),t=m,i=n,i=_.case_insensitive?i[0].toLowerCase():i[0],(t=t.keywords.hasOwnProperty(i)&&t.keywords[i])?(N+=t[1],a+=s(t[0],S(n[0]))):a+=S(n[0]),e=m.lexemesRe.lastIndex,n=m.lexemesRe.exec(E);return a+S(E.substr(e))}function l(){var e,n;p+=null!=m.subLanguage?(n="string"==typeof m.subLanguage)&&!w[m.subLanguage]?S(E):(e=n?k(m.subLanguage,E,!0,b[m.subLanguage]):A(E,m.subLanguage.length?m.subLanguage:void 0),0")+'"');if("end"===n.type){e=d(n);if(null!=e)return e}return E+=a,a.length}var _=R(n);if(!_)throw console.error(x.replace("{}",n)),new Error('Unknown language: "'+n+'"');T(_);for(var m=a||_,b={},p="",f=m;f!==_;f=f.parent)f.className&&(p=s(f.className,"",!0)+p);var E="",N=0;try{for(var h,v,y=0;;){if(m.terminators.lastIndex=y,!(h=m.terminators.exec(i)))break;v=u(i.substring(y,h.index),h),y=h.index+v}for(u(i.substr(y)),f=m;f.parent;f=f.parent)f.className&&(p+=M);return{relevance:N,value:p,illegal:!1,language:n,top:m}}catch(e){if(e.message&&-1!==e.message.indexOf("Illegal"))return{illegal:!0,relevance:0,value:S(i)};if(O)return{relevance:0,value:S(i),language:n,top:m,errorRaised:e};throw e}}function A(a,e){e=e||C.languages||s(w);var t={relevance:0,value:S(a)},i=t;return e.filter(R).filter(y).forEach(function(e){var n=k(e,a,!1);n.language=e,n.relevance>i.relevance&&(i=n),n.relevance>t.relevance&&(i=t,t=n)}),i.language&&(t.second_best=i),t}function E(e){return C.tabReplace||C.useBR?e.replace(i,function(e,n){return C.useBR&&"\n"===e?"
":C.tabReplace?n.replace(/\t/g,C.tabReplace):""}):e}function N(e){var n,a,t,i,s=function(e){var n,a,t,i,s,r=e.className+" ";if(r+=e.parentNode?e.parentNode.className:"",a=l.exec(r))return(s=R(a[1]))||(console.warn(x.replace("{}",a[1])),console.warn("Falling back to no-highlight mode for this block.",e)),s?a[1]:"no-highlight";for(n=0,t=(r=r.split(/\s+/)).length;n/g,"\n"):a=e,i=a.textContent,n=s?k(s,i,!0):A(i),(a=_(a)).length&&((t=document.createElement("div")).innerHTML=n.value,n.value=m(a,_(t),i)),n.value=E(n.value),e.innerHTML=n.value,e.className=(a=e.className,t=s,i=n.language,t=t?r[t]:i,i=[a.trim()],a.match(/\bhljs\b/)||i.push("hljs"),-1===a.indexOf(t)&&i.push(t),i.join(" ").trim()),e.result={language:n.language,re:n.relevance},n.second_best&&(e.second_best={language:n.second_best.language,re:n.second_best.relevance}))}function h(){var e;h.called||(h.called=!0,e=document.querySelectorAll("pre code"),g.forEach.call(e,N))}var v={disableAutodetect:!0};function R(e){return e=(e||"").toLowerCase(),w[e]||w[r[e]]}function y(e){e=R(e);return e&&!e.disableAutodetect}return t.highlight=k,t.highlightAuto=A,t.fixMarkup=E,t.highlightBlock=N,t.configure=function(e){C=d(C,e)},t.initHighlighting=h,t.initHighlightingOnLoad=function(){window.addEventListener("DOMContentLoaded",h,!1),window.addEventListener("load",h,!1)},t.registerLanguage=function(n,e){var a;try{a=e(t)}catch(e){if(console.error("Language definition for '{}' could not be registered.".replace("{}",n)),!O)throw e;console.error(e),a=v}p(w[n]=a),a.rawDefinition=e.bind(null,t),a.aliases&&a.aliases.forEach(function(e){r[e]=n})},t.listLanguages=function(){return s(w)},t.getLanguage=R,t.requireLanguage=function(e){var n=R(e);if(n)return n;throw new Error("The '{}' language is required, but not loaded.".replace("{}",e))},t.autoDetection=y,t.inherit=d,t.debugMode=function(){O=!1},t.IDENT_RE="[a-zA-Z]\\w*",t.UNDERSCORE_IDENT_RE="[a-zA-Z_]\\w*",t.NUMBER_RE="\\b\\d+(\\.\\d+)?",t.C_NUMBER_RE="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",t.BINARY_NUMBER_RE="\\b(0b[01]+)",t.RE_STARTERS_RE="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",t.BACKSLASH_ESCAPE={begin:"\\\\[\\s\\S]",relevance:0},t.APOS_STRING_MODE={className:"string",begin:"'",end:"'",illegal:"\\n",contains:[t.BACKSLASH_ESCAPE]},t.QUOTE_STRING_MODE={className:"string",begin:'"',end:'"',illegal:"\\n",contains:[t.BACKSLASH_ESCAPE]},t.PHRASAL_WORDS_MODE={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},t.COMMENT=function(e,n,a){e=t.inherit({className:"comment",begin:e,end:n,contains:[]},a||{});return e.contains.push(t.PHRASAL_WORDS_MODE),e.contains.push({className:"doctag",begin:"(?:TODO|FIXME|NOTE|BUG|XXX):",relevance:0}),e},t.C_LINE_COMMENT_MODE=t.COMMENT("//","$"),t.C_BLOCK_COMMENT_MODE=t.COMMENT("/\\*","\\*/"),t.HASH_COMMENT_MODE=t.COMMENT("#","$"),t.NUMBER_MODE={className:"number",begin:t.NUMBER_RE,relevance:0},t.C_NUMBER_MODE={className:"number",begin:t.C_NUMBER_RE,relevance:0},t.BINARY_NUMBER_MODE={className:"number",begin:t.BINARY_NUMBER_RE,relevance:0},t.CSS_NUMBER_MODE={className:"number",begin:t.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},t.REGEXP_MODE={className:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[t.BACKSLASH_ESCAPE,{begin:/\[/,end:/\]/,relevance:0,contains:[t.BACKSLASH_ESCAPE]}]},t.TITLE_MODE={className:"title",begin:t.IDENT_RE,relevance:0},t.UNDERSCORE_TITLE_MODE={className:"title",begin:t.UNDERSCORE_IDENT_RE,relevance:0},t.METHOD_GUARD={begin:"\\.\\s*"+t.UNDERSCORE_IDENT_RE,relevance:0},[t.BACKSLASH_ESCAPE,t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,t.PHRASAL_WORDS_MODE,t.COMMENT,t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE,t.HASH_COMMENT_MODE,t.NUMBER_MODE,t.C_NUMBER_MODE,t.BINARY_NUMBER_MODE,t.CSS_NUMBER_MODE,t.REGEXP_MODE,t.TITLE_MODE,t.UNDERSCORE_TITLE_MODE,t.METHOD_GUARD].forEach(function(e){!function n(a){Object.freeze(a);var t="function"==typeof a;Object.getOwnPropertyNames(a).forEach(function(e){!a.hasOwnProperty(e)||null===a[e]||"object"!=typeof a[e]&&"function"!=typeof a[e]||t&&("caller"===e||"callee"===e||"arguments"===e)||Object.isFrozen(a[e])||n(a[e])});return a}(e)}),t},L="object"==typeof window&&window||"object"==typeof self&&self,void 0===I||I.nodeType?L&&(L.hljs=D({}),"function"==typeof define)&&define.amd&&define([],function(){return L.hljs}):D(I);!function(){"use strict";I.registerLanguage("asciidoc",e),I.registerLanguage("bash",n),I.registerLanguage("clojure",a),I.registerLanguage("cpp",t),I.registerLanguage("cs",i),I.registerLanguage("css",s),I.registerLanguage("diff",r),I.registerLanguage("dockerfile",l),I.registerLanguage("elixir",o),I.registerLanguage("go",c),I.registerLanguage("groovy",d),I.registerLanguage("haskell",g),I.registerLanguage("java",u),I.registerLanguage("javascript",_),I.registerLanguage("json",m),I.registerLanguage("kotlin",b),I.registerLanguage("lua",p),I.registerLanguage("markdown",f),I.registerLanguage("nix",E),I.registerLanguage("none",N),I.registerLanguage("objectivec",h),I.registerLanguage("perl",v),I.registerLanguage("php",y),I.registerLanguage("properties",w),I.registerLanguage("puppet",O),I.registerLanguage("python",M),I.registerLanguage("ruby",x),I.registerLanguage("rust",C),I.registerLanguage("scala",S),I.registerLanguage("shell",T),I.registerLanguage("sql",k),I.registerLanguage("swift",A),I.registerLanguage("xml",R),I.registerLanguage("yaml",B),[].slice.call(document.querySelectorAll("pre code.hljs")).forEach(function(e){I.highlightBlock(e)})}()}(); \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000000..e4a2b7047d --- /dev/null +++ b/index.html @@ -0,0 +1,9 @@ + + + + + + +Redirect Notice +

Redirect Notice

+

The page you requested has been relocated to https://docs.quarkiverse.io/index/explore/index.html.

diff --git a/index/explore/index.html b/index/explore/index.html new file mode 100644 index 0000000000..91593b196a --- /dev/null +++ b/index/explore/index.html @@ -0,0 +1,900 @@ + + + + + + Quarkiverse documentation :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkiverse documentation

+
+

Welcome to the Quarkiverse documentation site.

+
+
+

Pick the Quarkus extension you’re interested in from the navigation menu.

+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-alexa/dev/includes/attributes.html b/quarkus-amazon-alexa/dev/includes/attributes.html new file mode 100644 index 0000000000..fe74b2e035 --- /dev/null +++ b/quarkus-amazon-alexa/dev/includes/attributes.html @@ -0,0 +1,912 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-alexa/dev/index.html b/quarkus-amazon-alexa/dev/index.html new file mode 100644 index 0000000000..d2fc4b24f6 --- /dev/null +++ b/quarkus-amazon-alexa/dev/index.html @@ -0,0 +1,941 @@ + + + + + + Quarkus Amazon Alexa :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Amazon Alexa

+
+
+
+

This Quarkus extension aims at making the Amazon Alexa SDK work in native executables.

+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.amazonalexa:quarkus-amazon-alexa extension first. +In your pom.xml file, add:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.amazonalexa</groupId>
+    <artifactId>quarkus-amazon-alexa</artifactId>
+    <version>1.0.5</version>
+</dependency>
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/1.x/amazon-cognitouserpools.html b/quarkus-amazon-services/1.x/amazon-cognitouserpools.html new file mode 100644 index 0000000000..69b8231c3a --- /dev/null +++ b/quarkus-amazon-services/1.x/amazon-cognitouserpools.html @@ -0,0 +1,2994 @@ + + + + + + Amazon Cognito User Pools Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon Cognito User Pools Client

+
+
+
+

Service client for accessing Amazon Cognito user pools (Identity Provider).

+
+
+

Using the Amazon Cognito user pools API, you can create a user pool to manage directories and users. +You can authenticate a user to obtain tokens related to user identity and access policies.

+
+
+

For more information, see the Amazon Cognito user pools (AWS Java SDK 2.x docs).

+
+
+ + + + + +
+ + +The Cognito User Pools extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client.

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use Cognito User Pool locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 11+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    One of:

    +
    +
      +
    • +

      An AWS Account to access the Cognito service

      +
    • +
    • +

      Or Docker for your system to run Cognito locally for testing purposes

      +
    • +
    +
    +
  • +
+
+
+

Provision Cognito locally via Dev Services

+
+

The easiest way to start working with Cognito is to run a local instance using Dev Services.

+
+
+
+

Provision Cognito locally manually

+
+

You can also set up a local version of Cognito manually, first start a local instance as a container:

+
+
+
+
docker run --rm --name moto -p 5000:5000 -d motoserver/moto:3.0.2
+
+
+
+

This starts a Cognito mock instance that is accessible on port 5000.

+
+
+

Create an AWS profile for your local instance using AWS CLI:

+
+
+
+
$ aws configure --profile moto
+AWS Access Key ID [None]: test-key
+AWS Secret Access Key [None]: test-secret
+Default region name [None]: us-east-1
+Default output format [None]: test
+
+
+
+
+

Create a Cognito User Pool

+
+

Create a Cognito user pool using AWS CLI.

+
+
+
+
aws --profile moto --endpoint-url=http://localhost:5000 cognito-idp create-user-pool --pool-name quarkus-users-dev
+
+
+
+

Or, if you want to use your Cognito user pool on your AWS account create a user pool using your default profile

+
+
+
+
aws cognito-user-pools cognito-idp --pool-name quarkus-users-dev
+
+
+
+
+
+
+

Solution

+
+
+

The application built here shows the count of Cognito User Pools in the current region.

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step.

+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:2.16.9.Final:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-cognito-user-pools-quickstart \
+    -DclassName="org.acme.cognitouserpools.CognitoExampleResource" \
+    -Dpath="/cognito-example" \
+    -Dextensions="resteasy,resteasy-jackson,amazon-cognito-user-pools,resteasy-mutiny"
+cd amazon-cognito-user-pools-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy/JAX-RS, Mutiny and Amazon Cognito User Pool extensions. +After this, the amazon-cognito-user-pools extension has been added to your pom.xml as well as the Mutiny support for RESTEasy.

+
+
+
+
+

Creating JSON REST service

+
+
+

Edit a org.acme.cognitouserpools.CognitoExampleResource that will provide an API return count of Cognito User Pools using the synchronous client.

+
+
+
+
package org.acme.cognitouserpools;
+
+import javax.inject.Inject;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+
+import software.amazon.awssdk.services.cognitoidentityprovider.CognitoIdentityProviderClient;
+import software.amazon.awssdk.services.cognitoidentityprovider.model.ListUserPoolsRequest;
+import software.amazon.awssdk.services.cognitoidentityprovider.model.ListUserPoolsResponse;
+
+@Path("/cognito-example")
+public class CognitoExampleResource {
+    @Inject
+    CognitoIdentityProviderClient cognitoClient;
+
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public String hello() {
+        ListUserPoolsRequest request = ListUserPoolsRequest.builder().build();
+        ListUserPoolsResponse response = cognitoClient.listUserPools(request);
+        return String.format("You have %d user pools", response.userPools().size());
+    }
+}
+
+
+
+

And update test class:

+
+
+
+
package org.acme.cognitouserpools;
+
+import io.quarkus.test.junit.QuarkusTest;
+import org.junit.jupiter.api.Test;
+
+import static io.restassured.RestAssured.given;
+import static org.hamcrest.CoreMatchers.is;
+
+@QuarkusTest
+public class CognitoExampleResourceTest {
+
+    @Test
+    public void testHelloEndpoint() {
+        given()
+          .when().get("/cognito-example")
+          .then()
+             .statusCode(200)
+             .body(is("You have 1 user pools"));
+    }
+
+}
+
+
+
+
+
+

Configuring Cognito User Pools clients

+
+
+

Both Cognito clients (sync and async) are configurable via the application.properties file that +can be provided in the src/main/resources directory.

+
+
+

Additionally, you need to add to the classpath a proper implementation of the sync client. +By default the extension uses the URL connection HTTP client, so you need to add a URL connection +client dependency to the pom.xml file:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.cognito-user-pools.sync-client.type=apache
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

If you’re going to use a local Cognito mock instance, configure it as follows:

+
+
+
+
quarkus.cognito-user-pools.endpoint-override=http://localhost:5000
+
+quarkus.cognito-user-pools.aws.region=eu-west-1
+quarkus.cognito-user-pools.aws.credentials.type=static
+quarkus.cognito-user-pools.aws.credentials.static-provider.access-key-id=test-key
+quarkus.cognito-user-pools.aws.credentials.static-provider.secret-access-key=test-secret
+
+
+
+
    +
  • +

    quarkus.cognito-user-pools.aws.region - It’s required by the client, but since you’re using a local Cognito mock instance use us-east-1 as it’s a default region of moto.

    +
  • +
  • +

    quarkus.cognito-user-pools.aws.credentials - Set static credentials provider with any values for access-key-id and secret-access-key

    +
  • +
  • +

    quarkus.cognito-user-pools.endpoint-override - Override the Cognito User Pools client to use a local instance instead of an AWS service

    +
  • +
+
+
+

If you want to work with an AWS account, you can simply remove or comment out all Cognito User Pools +related properties. By default, the Cognito User Pools client extension will use the default +credentials provider chain that looks for credentials in this order:

+
+
+
    +
  • +

    Java System Properties - aws.accessKeyId and aws.secretAccessKey

    +
  • +
  • +

    Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

    +
  • +
  • +

    Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

    +
  • +
  • +

    Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

    +
  • +
  • +

    Instance profile credentials delivered through the Amazon EC2 metadata service

    +
  • +
+
+
+

And the region from your AWS CLI profile will be used.

+
+
+
+
+

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can be run with java -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

Create a org.acme.cognitouserpools.CognitoAsyncExampleResource REST resource that will be similar to our +CognitoExampleResource but using an asynchronous programming model.

+
+
+
+
package org.acme.cognitouserpools;
+
+import javax.inject.Inject;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+
+import io.smallrye.mutiny.Uni;
+import software.amazon.awssdk.services.cognitoidentityprovider.CognitoIdentityProviderAsyncClient;
+import software.amazon.awssdk.services.cognitoidentityprovider.model.ListUserPoolsRequest;
+
+@Path("/cognito-async-example")
+public class CognitoAsyncExampleResource {
+    @Inject
+    CognitoIdentityProviderAsyncClient cognitoAsyncClient;
+
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public Uni<String> hello() {
+        ListUserPoolsRequest request = ListUserPoolsRequest.builder().build();
+        return Uni
+            .createFrom()
+            .completionStage(cognitoAsyncClient.listUserPools(request))
+            .map(response -> {
+                return String.format("You have %d user pools", response.userPools().size());
+            });
+    }
+}
+
+
+
+

We create Uni instances from the CompletionStage objects returned by the asynchronous Cognito +Identity Provider client, and then transform the emitted item.

+
+
+

And we need to add the Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK. +The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TYPE

+
+
+
+

url, apache

+

url

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container. +The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property. +Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance. +This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate. +If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call. +This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc. +This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out. +This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain. +Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider. +If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed. +This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool. +Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously. +When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through. +Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

Netty HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests. +For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed. +Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown. +Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown. +Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle. +Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed. +When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client. +Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through. +Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group. +If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group. +The prefix will be appended with a number unique to the thread factory and a number unique to the thread. +If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request. +When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/1.x/amazon-credentials.html b/quarkus-amazon-services/1.x/amazon-credentials.html new file mode 100644 index 0000000000..91af0b0538 --- /dev/null +++ b/quarkus-amazon-services/1.x/amazon-credentials.html @@ -0,0 +1,975 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+
    +
  • +

    Java System Properties - aws.accessKeyId and aws.secretAccessKey

    +
  • +
  • +

    Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

    +
  • +
  • +

    Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

    +
  • +
  • +

    Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

    +
  • +
  • +

    Instance profile credentials delivered through the Amazon EC2 metadata service

    +
  • +
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/1.x/amazon-dynamodb.html b/quarkus-amazon-services/1.x/amazon-dynamodb.html new file mode 100644 index 0000000000..c4612145b9 --- /dev/null +++ b/quarkus-amazon-services/1.x/amazon-dynamodb.html @@ -0,0 +1,3376 @@ + + + + + + Amazon DynamoDB Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon DynamoDB Client

+
+
+
+

DynamoDB is a scalable AWS managed NoSQL database. +It supports both key-value and document data models, that enables to have a flexible schema for your data. +This extension provides functionality that allows the client to communicate with the service when running in Quarkus. +You can find more information about DynamoDB at the Amazon DynamoDB website.

+
+
+ + + + + +
+ + +The DynamoDB extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +Keep in mind it’s actively developed and does not support yet all the features available in SDK 1.x such as Document APIs +
+
+
+

The Quarkus extension supports the traditional DynamoDB client as well as the enhanced client.

+
+
+

It supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client.

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use the DynamoDB locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 11+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    An AWS Account to access the DynamoDB service

    +
  • +
  • +

    Optionally, Docker for your system to run DynamoDB locally for testing purposes

    +
  • +
+
+
+

Provision DynamoDB locally via Dev Services

+
+

The easiest way to start working with DynamoDB is to run a local instance using Dev Services.

+
+
+
+

Provision DynamoDB locally manually

+
+

You can also set up a local version of DynamoDB manually, first start a local instance as a container:

+
+
+
+
docker run --publish 4566:8000 amazon/dynamodb-local:1.19.0 -jar DynamoDBLocal.jar -inMemory -sharedDb
+
+
+
+

This starts a DynamoDB instance that is accessible on port 4566. +You can check if it’s working with aws dynamodb list-tables --endpoint-url http://localhost:4566.

+
+
+
+
{
+    "TableNames": []
+}
+
+
+
+

You should see the output above in your terminal. That’s it, DynamoDB runs locally.

+
+
+

Have a look at the Setting Up DynamoDB Local guide for other options to run DynamoDB.

+
+
+
+

Set up Dynamodb on AWS

+
+

Before you can use the AWS SDKs with DynamoDB, you must get an AWS access key ID and secret access key. +For more information, see Setting Up DynamoDB (Web Service).

+
+
+

We recommend to use the AWS CLI to provision the table:

+
+
+
+

Create the QuarkusFruits Table

+
+
+
aws dynamodb create-table --table-name QuarkusFruits \
+                          --attribute-definitions AttributeName=fruitName,AttributeType=S \
+                          --key-schema AttributeName=fruitName,KeyType=HASH \
+                          --provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1
+
+
+
+
+
+
+

Solution

+
+
+

The application built here allows to manage elements (fruits) stored in Amazon DynamoDB.

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step. +However, you can go right to the completed example.

+
+
+

Clone the Git repository: git clone https://github.com/quarkusio/quarkus-quickstarts.git, or download an archive.

+
+
+

The solution is located in the amazon-dynamodb-quickstart directory.

+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:2.16.9.Final:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-dynamodb-quickstart \
+    -DclassName="org.acme.dynamodb.FruitResource" \
+    -Dpath="/fruits" \
+    -Dextensions="resteasy-reactive-jackson,amazon-dynamodb"
+cd amazon-dynamodb-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy Reactive/JAX-RS and DynamoDB Client extensions. +After this, the amazon-dynamodb extension has been added to your pom.xml as well as the Mutiny support for RESTEasy.

+
+
+
+
+

Creating JSON REST service

+
+
+

In this example, we will create an application to manage a list of fruits. The example application will demonstrate the two programming models supported by the extension.

+
+
+

First, let’s create the Fruit bean as follows:

+
+
+
+
package org.acme.dynamodb;
+
+import java.util.Map;
+import java.util.Objects;
+
+import io.quarkus.runtime.annotations.RegisterForReflection;
+import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
+
+@RegisterForReflection
+public class Fruit {
+
+    private String name;
+    private String description;
+
+    public Fruit() {
+    }
+
+    public static Fruit from(Map<String, AttributeValue> item) {
+        Fruit fruit = new Fruit();
+        if (item != null && !item.isEmpty()) {
+            fruit.setName(item.get(AbstractService.FRUIT_NAME_COL).s());
+            fruit.setDescription(item.get(AbstractService.FRUIT_DESC_COL).s());
+        }
+        return fruit;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (!(obj instanceof Fruit)) {
+            return false;
+        }
+
+        Fruit other = (Fruit) obj;
+
+        return Objects.equals(other.name, this.name);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(this.name);
+    }
+}
+
+
+
+ + + + + +
+ + +The @RegisterForReflection annotation instructs Quarkus to keep the class and its members during the native compilation. More details about the @RegisterForReflection annotation can be found on the native application tips page. +
+
+
+

Nothing fancy. One important thing to note is that having a default constructor is required by the JSON serialization layer. The static from method creates a bean based on the Map +object provided by the DynamoDB client response.

+
+
+

Now create a org.acme.dynamodb.AbstractService that will consist of helper methods that prepare DynamoDB request objects for reading and adding items to the table.

+
+
+
+
package org.acme.dynamodb;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
+import software.amazon.awssdk.services.dynamodb.model.GetItemRequest;
+import software.amazon.awssdk.services.dynamodb.model.PutItemRequest;
+import software.amazon.awssdk.services.dynamodb.model.ScanRequest;
+
+public abstract class AbstractService {
+
+    public final static String FRUIT_NAME_COL = "fruitName";
+    public final static String FRUIT_DESC_COL = "fruitDescription";
+
+    public String getTableName() {
+        return "QuarkusFruits";
+    }
+
+    protected ScanRequest scanRequest() {
+        return ScanRequest.builder().tableName(getTableName())
+                .attributesToGet(FRUIT_NAME_COL, FRUIT_DESC_COL).build();
+    }
+
+    protected PutItemRequest putRequest(Fruit fruit) {
+        Map<String, AttributeValue> item = new HashMap<>();
+        item.put(FRUIT_NAME_COL, AttributeValue.builder().s(fruit.getName()).build());
+        item.put(FRUIT_DESC_COL, AttributeValue.builder().s(fruit.getDescription()).build());
+
+        return PutItemRequest.builder()
+                .tableName(getTableName())
+                .item(item)
+                .build();
+    }
+
+    protected GetItemRequest getRequest(String name) {
+        Map<String, AttributeValue> key = new HashMap<>();
+        key.put(FRUIT_NAME_COL, AttributeValue.builder().s(name).build());
+
+        return GetItemRequest.builder()
+                .tableName(getTableName())
+                .key(key)
+                .attributesToGet(FRUIT_NAME_COL, FRUIT_DESC_COL)
+                .build();
+    }
+}
+
+
+
+

Then, create a org.acme.dynamodb.FruitSyncService that will be the business layer of our application and stores/loads the fruits from DynamoDB using the synchronous client.

+
+
+
+
package org.acme.dynamodb;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+
+import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
+
+@ApplicationScoped
+public class FruitSyncService extends AbstractService {
+
+    @Inject
+    DynamoDbClient dynamoDB;
+
+    public List<Fruit> findAll() {
+        return dynamoDB.scanPaginator(scanRequest()).items().stream()
+                .map(Fruit::from)
+                .collect(Collectors.toList());
+    }
+
+    public List<Fruit> add(Fruit fruit) {
+        dynamoDB.putItem(putRequest(fruit));
+        return findAll();
+    }
+
+    public Fruit get(String name) {
+        return Fruit.from(dynamoDB.getItem(getRequest(name)).item());
+    }
+}
+
+
+
+

Now, edit the org.acme.dynamodb.FruitResource class as follows:

+
+
+
+
package org.acme.dynamodb;
+
+import java.util.List;
+
+import javax.inject.Inject;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.MediaType;
+
+@Path("/fruits")
+public class FruitResource {
+
+    @Inject
+    FruitSyncService service;
+
+    @GET
+    public List<Fruit> getAll() {
+        return service.findAll();
+    }
+
+    @GET
+    @Path("{name}")
+    public Fruit getSingle(String name) {
+        return service.get(name);
+    }
+
+    @POST
+    public List<Fruit> add(Fruit fruit) {
+        service.add(fruit);
+        return getAll();
+    }
+}
+
+
+
+

The implementation is pretty straightforward and you just need to define your endpoints using the JAX-RS annotations and use the FruitSyncService to list/add new fruits.

+
+
+
+
+

Configuring DynamoDB clients

+
+
+

DynamoDB clients (sync and async) are configurable via the application.properties file that can be provided in the src/main/resources directory. +Additionally, you need to add to the classpath a proper implementation of the sync client. By default the extension uses the java.net.URLConnection HTTP client, so +you need to add a URL connection client dependency to the pom.xml file:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.dynamodb.sync-client.type=apache
+
+
+
+

And add following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

If you’re going to use a local DynamoDB instance, configure it as follows:

+
+
+
+
quarkus.dynamodb.endpoint-override=http://localhost:4566
+
+quarkus.dynamodb.aws.region=eu-central-1
+quarkus.dynamodb.aws.credentials.type=static
+quarkus.dynamodb.aws.credentials.static-provider.access-key-id=test-key
+quarkus.dynamodb.aws.credentials.static-provider.secret-access-key=test-secret
+
+
+
+
    +
  • +

    quarkus.dynamodb.aws.region - It’s required by the client, but since you’re using a local DynamoDB instance you can pick any valid AWS region.

    +
  • +
  • +

    quarkus.dynamodb.aws.credentials.type - Set static credentials provider with any values for access-key-id and secret-access-key

    +
  • +
  • +

    quarkus.dynamodb.endpoint-override - Override the DynamoDB client to use a local instance instead of an AWS service

    +
  • +
+
+
+

If you want to work with an AWS account, you’d need to set it with:

+
+
+
+
quarkus.dynamodb.aws.region=<YOUR_REGION>
+quarkus.dynamodb.aws.credentials.type=default
+
+
+
+
    +
  • +

    quarkus.dynamodb.aws.region you should set it to the region where you provisioned the DynamoDB table,

    +
  • +
  • +

    quarkus.dynamodb.aws.credentials.type - use the default credentials provider chain that looks for credentials in this order:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

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

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can be run with java -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

Create a org.acme.dynamodb.FruitAsyncService that will be similar to our FruitSyncService but using an asynchronous programming model.

+
+
+
+
package org.acme.dynamodb;
+
+import java.util.List;
+import java.util.concurrent.CompletableFuture;
+import java.util.stream.Collectors;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+
+import io.smallrye.mutiny.Uni;
+import software.amazon.awssdk.services.dynamodb.DynamoDbAsyncClient;
+
+@ApplicationScoped
+public class FruitAsyncService extends AbstractService {
+
+    @Inject
+    DynamoDbAsyncClient dynamoDB;
+
+    public Uni<List<Fruit>> findAll() {
+        return Uni.createFrom().completionStage(() -> dynamoDB.scan(scanRequest()))
+                .onItem().transform(res -> res.items().stream().map(Fruit::from).collect(Collectors.toList()));
+    }
+
+    public Uni<List<Fruit>> add(Fruit fruit) {
+        return Uni.createFrom().completionStage(() -> dynamoDB.putItem(putRequest(fruit)))
+                .onItem().ignore().andSwitchTo(this::findAll);
+    }
+
+    public Uni<Fruit> get(String name) {
+        return Uni.createFrom().completionStage(() -> dynamoDB.getItem(getRequest(name)))
+                .onItem().transform(resp -> Fruit.from(resp.item()));
+    }
+}
+
+
+
+

In the previous code, we create Uni instances from the CompletionStage objects returned by the asynchronous DynamoDB client, and then transform the emitted item.

+
+
+

Then, create an asynchronous REST resource that consumes this async service:

+
+
+
+
package org.acme.dynamodb;
+
+import io.smallrye.mutiny.Uni;
+
+import javax.inject.Inject;
+import javax.ws.rs.*;
+import javax.ws.rs.core.MediaType;
+import java.util.List;
+
+@Path("/async-fruits")
+@Produces(MediaType.APPLICATION_JSON)
+@Consumes(MediaType.APPLICATION_JSON)
+public class FruitAsyncResource {
+
+    @Inject
+    FruitAsyncService service;
+
+    @GET
+    public Uni<List<Fruit>> getAll() {
+        return service.findAll();
+    }
+
+    @GET
+    @Path("{name}")
+    public Uni<Fruit> getSingle(String name) {
+        return service.get(name);
+    }
+
+    @POST
+    public Uni<List<Fruit>> add(Fruit fruit) {
+        return service.add(fruit)
+                .onItem().ignore().andSwitchTo(this::getAll);
+    }
+}
+
+
+
+

And add Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+
+
+
+

DynamoDB enhanced client

+
+
+

The DynamoDB enhanced client is part of the AWS SDK for Java version 2 and makes the mapping between DynamoDB Tables and Java beans very easy. +The Enhanced Client requires a TableSchema, which can be generated with a set of annotations or declared in code. +It has both a sync and an async variants.

+
+
+

To use the enhanced client, add the quarkus-amazon-dynamodb-enhanced extension to your pom.xml:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.amazonservices</groupId>
+    <artifactId>quarkus-amazon-dynamodb-enhanced</artifactId>
+</dependency>
+
+
+
+

The Fruit bean would look like this:

+
+
+
+
package org.acme.dynamodb;
+
+import io.quarkus.runtime.annotations.RegisterForReflection;
+import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbBean;
+import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbPartitionKey;
+
+@DynamoDbBean
+public class Fruit {
+
+    private String name;
+    private String description;
+
+    @DynamoDbPartitionKey
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+}
+
+
+
+

The FruitSyncService would need to use the DynamoDbEnhancedClient as well as create a TableSchema:

+
+
+
+
package org.acme.dynamodb;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+
+import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClient;
+import software.amazon.awssdk.enhanced.dynamodb.TableSchema;
+
+@ApplicationScoped
+public class FruitSyncService extends AbstractService {
+
+    private DynamoDbTable<Fruit> fruitTable;
+
+    @Inject
+    DynamoDbEnhancedClient dynamoEnhancedClient;
+
+    FruitSyncService() {
+        fruitTable = dynamoEnhancedClient.table(getTableName(),
+            TableSchema.fromClass(Fruit.class));
+    }
+
+    public List<Fruit> findAll() {
+        return exampleBlockingTable.scan().items().stream().collect(Collectors.toList());
+    }
+
+    public List<Fruit> add(Fruit fruit) {
+        fruitTable.putItem(fruit);
+        return findAll();
+    }
+
+    public Fruit get(String name) {
+        Key partitionKey = Key.builder().partitionValue(name).build();
+        return fruitTable.getItem(partitionKey);
+    }
+}
+
+
+
+

The FruitResource does not change.

+
+
+

You can find more information about the DynamoDB enhanced client in the AWS documentation:

+
+ +
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK. +The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface.

+
+
+

Environment variable: QUARKUS_DYNAMODB_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TYPE

+
+
+
+

url, apache

+

url

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_DYNAMODB_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container. +The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property. +Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_DYNAMODB_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance. +This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_DYNAMODB_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Enable DynamoDB service endpoint discovery.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ENABLE_ENDPOINT_DISCOVERY

+
+
+

boolean

false

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_DYNAMODB_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate. +If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call. +This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc. +This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_DYNAMODB_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out. +This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_DYNAMODB_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain. +Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider. +If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed. +This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool. +Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously. +When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through. +Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

Netty HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests. +For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed. +Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown. +Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown. +Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle. +Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed. +When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client. +Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through. +Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group. +If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group. +The prefix will be appended with a number unique to the thread factory and a number unique to the thread. +If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request. +When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of extensions to load with the enhanced client. +The list should consists of class names which implements software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClientExtension interface.

+
+
+

Environment variable: QUARKUS_DYNAMODBENHANCED_CLIENT_EXTENSIONS

+
+
+

list of string

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/1.x/amazon-iam.html b/quarkus-amazon-services/1.x/amazon-iam.html new file mode 100644 index 0000000000..d51a11fde3 --- /dev/null +++ b/quarkus-amazon-services/1.x/amazon-iam.html @@ -0,0 +1,2626 @@ + + + + + + Amazon IAM Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon IAM Client

+
+

Amazon Identity and Access Management (IAM) enables users to manage access to AWS services and resources securely.

+
+
+

You can find more information about IAM at the Amazon IAM website.

+
+
+ + + + + +
+ + +The IAM extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client.

    +
  • +
+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK. +The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface.

+
+
+

Environment variable: QUARKUS_IAM_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TYPE

+
+
+
+

url, apache

+

url

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_IAM_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container. +The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property. +Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_IAM_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance. +This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_IAM_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_IAM_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate. +If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_IAM_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call. +This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc. +This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_IAM_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out. +This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_IAM_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_IAM_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain. +Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider. +If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed. +This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool. +Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously. +When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through. +Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

Netty HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests. +For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed. +Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown. +Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown. +Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle. +Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed. +When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client. +Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through. +Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group. +If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group. +The prefix will be appended with a number unique to the thread factory and a number unique to the thread. +If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request. +When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/1.x/amazon-kms.html b/quarkus-amazon-services/1.x/amazon-kms.html new file mode 100644 index 0000000000..6c02d1a137 --- /dev/null +++ b/quarkus-amazon-services/1.x/amazon-kms.html @@ -0,0 +1,3007 @@ + + + + + + Amazon KMS Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon KMS Client

+
+
+
+

AWS Key Management Service (KMS) is a service that allows you to create and control the keys used to encrypt or digitally sign your data. +Using KMS, you can create and manage cryptographic keys and control their use across a wide range of AWS services and in your application.

+
+
+

You can find more information about KMS at the AWS KMS website.

+
+
+ + + + + +
+ + +The KMS extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client.

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use KMS locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 11+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    An AWS Account to access the KMS service

    +
  • +
  • +

    Docker for your system to run KMS locally for testing purposes

    +
  • +
+
+
+

Provision KMS locally via Dev Services

+
+

The easiest way to start working with KMS is to run a local instance using Dev Services.

+
+
+
+

Provision KMS locally manually

+
+

You can also set up a local version of KMS manually, first start a LocalStack container:

+
+
+
+
docker run --rm --name local-kms --publish 4566:4599 -e SERVICES=kms -e START_WEB=0 -d localstack/localstack:1.0.3
+
+
+
+

This starts a KMS instance that is accessible on port 4566.

+
+
+

Create an AWS profile for your local instance using AWS CLI:

+
+
+
+
$ aws configure --profile localstack
+AWS Access Key ID [None]: test-key
+AWS Secret Access Key [None]: test-secret
+Default region name [None]: us-east-1
+Default output format [None]: text
+
+
+
+
+

Create a KMS master key

+
+

Create a KMS master key queue using AWS CLI and store in MASTER_KEY_ARN environment variable.

+
+
+
+
MASTER_KEY_ARN=`aws kms create-key --profile localstack --endpoint-url=http://localhost:4566 | cut -f3`
+
+
+
+

Generate a key data as 256-bit symmetric key (AES 256)

+
+
+
+
aws kms generate-data-key --key-id $MASTER_KEY_ARN --key-spec AES_256 --profile localstack --endpoint-url=http://localhost:4566
+
+
+
+

Or, if you want to use your AWS account create a key using your default profile

+
+
+
+
MASTER_KEY_ARN=`aws kms create-key | cut -f3`
+aws kms generate-data-key --key-id $MASTER_KEY_ARN --key-spec AES_256
+
+
+
+
+
+
+

Solution

+
+
+

The application built here allows to encrypt and decrypt text messages using a master key created on AWS KMS.

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step. +However, you can go right to the completed example.

+
+
+

Clone the Git repository: git clone https://github.com/quarkusio/quarkus-quickstarts.git, or download an archive.

+
+
+

The solution is located in the amazon-kms-quickstart directory.

+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:2.16.9.Final:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-kms-quickstart \
+    -DclassName="org.acme.kms.QuarkusKmsSyncResource" \
+    -Dpath="/sync" \
+    -Dextensions="resteasy-reactive-jackson,amazon-kms"
+cd amazon-kms-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy Reactive/JAX-RS and Amazon KMS Client extensions. +After this, the amazon-kms extension has been added to your pom.xml as well as the Mutiny support for RESTEasy.

+
+
+
+
+

Creating JSON REST service

+
+
+

In this example, we will create an application that allows to encrypt and decrypt text message provided in the request. +The example application will demonstrate the two programming models supported by the extension.

+
+
+

Let’s create a org.acme.kms.QuarkusKmsSyncResource that will provide an API to encrypt and decrypt message using the synchronous client.

+
+
+
+
package org.acme.kms;
+
+import java.util.Base64;
+import javax.inject.Inject;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import software.amazon.awssdk.core.SdkBytes;
+import software.amazon.awssdk.services.kms.KmsClient;
+import software.amazon.awssdk.services.kms.model.DecryptResponse;
+
+@Path("/sync")
+@Produces(MediaType.TEXT_PLAIN)
+@Consumes(MediaType.TEXT_PLAIN)
+public class QuarkusKmsSyncResource {
+
+    @Inject
+    KmsClient kms;
+
+    @ConfigProperty(name = "key.arn")
+    String keyArn;
+
+    @POST
+    @Path("/encrypt")
+    public String encrypt(String data) {
+        SdkBytes encryptedBytes = kms.encrypt(req -> req.keyId(keyArn).plaintext(SdkBytes.fromUtf8String(data))).ciphertextBlob();
+
+        return Base64.getEncoder().encodeToString(encryptedBytes.asByteArray());
+    }
+
+    @POST
+    @Path("/decrypt")
+    public String decrypt(String data) {
+        SdkBytes encryptedData = SdkBytes.fromByteArray(Base64.getDecoder().decode(data.getBytes()));
+        DecryptResponse decrypted = kms.decrypt(req -> req.keyId(keyArn).ciphertextBlob(encryptedData));
+
+        return decrypted.plaintext().asUtf8String();
+    }
+}
+
+
+
+

An encrypted message is in the form of a bytes array. To return it to the user we need to encode it as Base64 string in the encrypt endpoint. +On the decrypt endpoint we need to decode from the Base64 string back to the bytes array before sending it out to the KMS client.

+
+
+
+
+

Configuring KMS clients

+
+
+

Both KMS clients (sync and async) are configurable via the application.properties file that can be provided in the src/main/resources directory. +Additionally, you need to add to the classpath a proper implementation of the sync client. By default the extension uses the URL connection HTTP client, so +you need to add a URL connection client dependency to the pom.xml file:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.kms.sync-client.type=apache
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

If you’re going to use a local KMS instance, configure it as follows:

+
+
+
+
quarkus.kms.endpoint-override=http://localhost:4566
+
+quarkus.kms.aws.region=us-east-1
+quarkus.kms.aws.credentials.type=static
+quarkus.kms.aws.credentials.static-provider.access-key-id=test-key
+quarkus.kms.aws.credentials.static-provider.secret-access-key=test-secret
+
+
+
+
    +
  • +

    quarkus.kms.aws.region - It’s required by the client, but since you’re using a local KMS instance use us-east-1 as it’s a default region of LocalStack’s KMS.

    +
  • +
  • +

    quarkus.kms.aws.credentials.type - Set static credentials provider with any values for access-key-id and secret-access-key

    +
  • +
  • +

    quarkus.kms.endpoint-override - Override the KMS client to use a local instance instead of an AWS service

    +
  • +
+
+
+

If you want to work with an AWS account, you can simply remove or comment out all Amazon KMS related properties. By default, the KMS client extension +will use the default credentials provider chain that looks for credentials in this order:

+
+
+
    +
  • +

    Java System Properties - aws.accessKeyId and aws.secretAccessKey

    +
  • +
  • +

    Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

    +
  • +
  • +

    Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

    +
  • +
  • +

    Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

    +
  • +
  • +

    Instance profile credentials delivered through the Amazon EC2 metadata service

    +
  • +
+
+
+

And the region from your AWS CLI profile will be used.

+
+
+
+
+

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can be run with java -Dkey.arn=$MASTER_KEY_ARN -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

Create a org.acme.kms.QuarkusKmsAsyncResource REST resource that will be similar to our QuarkusKmsSyncResource but using an asynchronous programming model.

+
+
+
+
package org.acme.kms;
+
+import java.util.Base64;
+import javax.inject.Inject;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import io.smallrye.mutiny.Uni;
+import software.amazon.awssdk.core.SdkBytes;
+import software.amazon.awssdk.services.kms.KmsAsyncClient;
+import software.amazon.awssdk.services.kms.model.DecryptResponse;
+import software.amazon.awssdk.services.kms.model.EncryptResponse;
+
+@Path("/async")
+@Produces(MediaType.TEXT_PLAIN)
+@Consumes(MediaType.TEXT_PLAIN)
+public class QuarkusKmsAsyncResource {
+
+    @Inject
+    KmsAsyncClient kms;
+
+    @ConfigProperty(name = "key.arn")
+    String keyArn;
+
+    @POST
+    @Path("/encrypt")
+    public Uni<String> encrypt(String data) {
+        return Uni.createFrom().completionStage(kms.encrypt(req -> req.keyId(keyArn).plaintext(SdkBytes.fromUtf8String(data))))
+            .onItem().transform(EncryptResponse::ciphertextBlob)
+            .onItem().transform(blob -> Base64.getEncoder().encodeToString(blob.asByteArray()));
+    }
+
+    @POST
+    @Path("/decrypt")
+    public Uni<String> decrypt(String data) {
+        return Uni.createFrom().item(SdkBytes.fromByteArray(Base64.getDecoder().decode(data.getBytes())))
+            .onItem().transformToUni(msg ->
+                        Uni.createFrom().completionStage(kms.decrypt(req -> req.keyId(keyArn).ciphertextBlob(msg)))
+            )
+            .onItem().transform(DecryptResponse::plaintext)
+            .onItem().transform(SdkBytes::asUtf8String);
+    }
+}
+
+
+
+

We create Uni instances from the CompletionStage objects returned by the asynchronous KMS client, and then transform the emitted item.

+
+
+

And we need to add the Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK. +The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface.

+
+
+

Environment variable: QUARKUS_KMS_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TYPE

+
+
+
+

url, apache

+

url

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_KMS_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container. +The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property. +Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_KMS_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance. +This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_KMS_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_KMS_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate. +If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_KMS_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call. +This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc. +This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_KMS_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out. +This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_KMS_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_KMS_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain. +Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider. +If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed. +This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool. +Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously. +When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through. +Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

Netty HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests. +For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed. +Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown. +Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown. +Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle. +Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed. +When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client. +Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through. +Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group. +If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group. +The prefix will be appended with a number unique to the thread factory and a number unique to the thread. +If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request. +When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/1.x/amazon-s3.html b/quarkus-amazon-services/1.x/amazon-s3.html new file mode 100644 index 0000000000..68ad12714d --- /dev/null +++ b/quarkus-amazon-services/1.x/amazon-s3.html @@ -0,0 +1,3405 @@ + + + + + + Amazon S3 Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon S3 Client

+
+
+
+

Amazon S3 is an object storage service. It can be employed to store any type of object which allows for uses like storage for Internet applications, +backup and recovery, disaster recovery, data archives, data lakes for analytics, any hybrid cloud storage. +This extension provides functionality that allows the client to communicate with the service when running in Quarkus. +You can find more information about S3 at the Amazon S3 website.

+
+
+ + + + + +
+ + +The S3 extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client.

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use S3 locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 11+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    AWS Command line interface

    +
  • +
  • +

    An AWS Account to access the S3 service. Before you can use the AWS SDKs with Amazon S3, you must get an AWS access key ID and secret access key.

    +
  • +
  • +

    Optionally, Docker for your system to run S3 locally for testing purposes

    +
  • +
+
+
+

Provision S3 locally via Dev Services

+
+

The easiest way to start working with S3 is to run a local instance using Dev Services.

+
+
+

You can optionally configure the buckets that are created on startup with the quarkus.s3.devservices.buckets config property.

+
+
+

Provision S3 locally manually

+
+

You can also setup a local version of S3 manually, first start a LocalStack container:

+
+
+
+
docker run -it --publish 4566:4566 -e SERVICES=s3 -e START_WEB=0 localstack/localstack:1.0.3
+
+
+
+

This starts a S3 instance that is accessible on port 4566.

+
+
+

Create an AWS profile for your local instance using AWS CLI:

+
+
+
+
$ aws configure --profile localstack
+AWS Access Key ID [None]: test-key
+AWS Secret Access Key [None]: test-secret
+Default region name [None]: us-east-1
+Default output format [None]:
+
+
+
+
+
+

Create a S3 bucket

+
+

Create a S3 bucket using AWS CLI

+
+
+
+
aws s3 mb s3://quarkus.s3.quickstart --profile localstack --endpoint-url=http://localhost:4566
+
+
+
+
+
+
+

Solution

+
+
+

The application built here allows to manage files stored in Amazon S3.

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step. +However, you can go right to the completed example.

+
+
+

Clone the Git repository: git clone https://github.com/quarkusio/quarkus-quickstarts.git, or download an archive.

+
+
+

The solution is located in the amazon-s3-quickstart directory.

+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:2.16.9.Final:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-s3-quickstart \
+    -DclassName="org.acme.s3.S3SyncClientResource" \
+    -Dpath="/s3" \
+    -Dextensions="resteasy-reactive-jackson,amazon-s3"
+cd amazon-s3-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy Reactive/JAX-RS and S3 Client extensions. +After this, the amazon-s3 extension has been added to your pom.xml.

+
+
+ + + + + +
+ + +The default setting for quarkus.http.limits.max-body-size is 10240K. This may limit your ability to upload multipart files larger than the default. If you want to upload larger files, you will need to set this limit explicitly. +
+
+
+
+
+

Setting up the model

+
+
+

In this example, we will create an application to manage a list of files. The example application will demonstrate the two programming models supported by the extension.

+
+
+

Because the primary goal of our application is to upload a file into the S3 bucket, we need to setup the model we will be using to define the multipart/form-data payload, +in the form of a @MultipartForm POJO.

+
+
+

Create a org.acme.s3.FormData class as follows:

+
+
+
+
package org.acme.s3;
+
+import java.io.File;
+import javax.ws.rs.core.MediaType;
+import org.jboss.resteasy.reactive.PartType;
+import org.jboss.resteasy.reactive.RestForm;
+
+public class FormData {
+
+    @RestForm("file")
+    public File data;
+
+    @RestForm
+    @PartType(MediaType.TEXT_PLAIN)
+    public String filename;
+
+    @RestForm
+    @PartType(MediaType.TEXT_PLAIN)
+    public String mimetype;
+
+}
+
+
+
+

The class defines three fields:

+
+
+
    +
  • +

    data that fill capture stream of uploaded bytes from the client

    +
  • +
  • +

    fileName that captures a filename as provided by the submited form

    +
  • +
  • +

    mimeType content type of the uploaded file

    +
  • +
+
+
+

In the second step let’s create a bean that will represent a file in a Amazon S3 bucket as follows:

+
+
+
+
package org.acme.s3;
+
+import software.amazon.awssdk.services.s3.model.S3Object;
+
+public class FileObject {
+    private String objectKey;
+
+    private Long size;
+
+    public FileObject() {
+    }
+
+    public static FileObject from(S3Object s3Object) {
+        FileObject file = new FileObject();
+        if (s3Object != null) {
+            file.setObjectKey(s3Object.key());
+            file.setSize(s3Object.size());
+        }
+        return file;
+    }
+
+    public String getObjectKey() {
+        return objectKey;
+    }
+
+    public Long getSize() {
+        return size;
+    }
+
+    public FileObject setObjectKey(String objectKey) {
+        this.objectKey = objectKey;
+        return this;
+    }
+
+    public FileObject setSize(Long size) {
+        this.size = size;
+        return this;
+    }
+}
+
+
+
+

Nothing fancy. One important thing to note is that having a default constructor is required by the JSON serialization layer. The static from method creates a bean based on the S3Object +object provided by the S3 client response when listing all the objects in a bucket.

+
+
+
+
+

Create JAX-RS resource

+
+
+

Now create a org.acme.s3.CommonResource that will consist of methods to prepare S3 request to get object from a S3 bucket, or to put file into a S3 bucket. +Note a configuration property bucket.name is defined here as the request method required name of the S3 bucket.

+
+
+
+
package org.acme.s3;
+
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+
+import software.amazon.awssdk.services.s3.model.GetObjectRequest;
+import software.amazon.awssdk.services.s3.model.PutObjectRequest;
+
+abstract public class CommonResource {
+
+    @ConfigProperty(name = "bucket.name")
+    String bucketName;
+
+    protected PutObjectRequest buildPutRequest(FormData formData) {
+        return PutObjectRequest.builder()
+                .bucket(bucketName)
+                .key(formData.filename)
+                .contentType(formData.mimetype)
+                .build();
+    }
+
+    protected GetObjectRequest buildGetRequest(String objectKey) {
+        return GetObjectRequest.builder()
+                .bucket(bucketName)
+                .key(objectKey)
+                .build();
+    }
+
+}
+
+
+
+

Then, create a org.acme.s3.S3SyncClientResource that will provides an API to upload/download files as well as to list all the files in a bucket.

+
+
+
+
package org.acme.s3;
+
+import java.util.Comparator;
+import java.util.List;
+import java.util.stream.Collectors;
+import javax.inject.Inject;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.ResponseBuilder;
+import javax.ws.rs.core.Response.Status;
+import org.jboss.resteasy.reactive.MultipartForm;
+import software.amazon.awssdk.core.ResponseBytes;
+import software.amazon.awssdk.core.sync.RequestBody;
+import software.amazon.awssdk.services.s3.S3Client;
+import software.amazon.awssdk.services.s3.model.GetObjectResponse;
+import software.amazon.awssdk.services.s3.model.ListObjectsRequest;
+import software.amazon.awssdk.services.s3.model.PutObjectResponse;
+
+
+@Path("/s3")
+public class S3SyncClientResource extends CommonResource {
+    @Inject
+    S3Client s3;
+
+    @POST
+    @Path("upload")
+    @Consumes(MediaType.MULTIPART_FORM_DATA)
+    public Response uploadFile(@MultipartForm FormData formData) throws Exception {
+
+        if (formData.filename == null || formData.filename.isEmpty()) {
+            return Response.status(Status.BAD_REQUEST).build();
+        }
+
+        if (formData.mimetype == null || formData.mimetype.isEmpty()) {
+            return Response.status(Status.BAD_REQUEST).build();
+        }
+
+        PutObjectResponse putResponse = s3.putObject(buildPutRequest(formData),
+                RequestBody.fromFile(formData.data));
+        if (putResponse != null) {
+            return Response.ok().status(Status.CREATED).build();
+        } else {
+            return Response.serverError().build();
+        }
+    }
+
+    @GET
+    @Path("download/{objectKey}")
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    public Response downloadFile(String objectKey) {
+        ResponseBytes<GetObjectResponse> objectBytes = s3.getObjectAsBytes(buildGetRequest(objectKey));
+        ResponseBuilder response = Response.ok(objectBytes.asUtf8String());
+        response.header("Content-Disposition", "attachment;filename=" + objectKey);
+        response.header("Content-Type", objectBytes.response().contentType());
+        return response.build();
+    }
+
+    @GET
+    @Produces(MediaType.APPLICATION_JSON)
+    public List<FileObject> listFiles() {
+        ListObjectsRequest listRequest = ListObjectsRequest.builder().bucket(bucketName).build();
+
+        //HEAD S3 objects to get metadata
+        return s3.listObjects(listRequest).contents().stream()
+                .map(FileObject::from)
+                .sorted(Comparator.comparing(FileObject::getObjectKey))
+                .collect(Collectors.toList());
+    }
+}
+
+
+
+
+
+

Configuring S3 clients

+
+
+

Both S3 clients (sync and async) are configurable via the application.properties file that can be provided in the src/main/resources directory.

+
+
+ + + + + +
+ + +You need to add to the classpath a proper implementation of the sync client. By default the extension uses the URL connection HTTP client, so +add a URL connection client dependency to the pom.xml file: +
+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.s3.sync-client.type=apache
+
+
+
+

And add following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

For asynchronous client refer to Going asynchronous for more information.

+
+
+

If you’re going to use a local S3 instance, configure it as follows:

+
+
+
+
quarkus.s3.endpoint-override=http://localhost:4566
+
+quarkus.s3.aws.region=us-east-1
+quarkus.s3.aws.credentials.type=static
+quarkus.s3.aws.credentials.static-provider.access-key-id=test-key
+quarkus.s3.aws.credentials.static-provider.secret-access-key=test-secret
+
+bucket.name=quarkus.s3.quickstart
+
+
+
+
    +
  • +

    quarkus.s3.aws.region - It’s required by the client, but since you’re using a local S3 instance you can pick any valid AWS region.

    +
  • +
  • +

    quarkus.s3.aws.credentials.type - Set static credentials provider with any values for access-key-id and secret-access-key

    +
  • +
  • +

    quarkus.s3.endpoint-override - Override the S3 client to use a local instance instead of an AWS service

    +
  • +
  • +

    bucket.name - Name of the S3 bucket

    +
  • +
+
+
+

If you want to work with an AWS account, you’d need to set it with:

+
+
+
+
bucket.name=<your-bucket-name>
+
+quarkus.s3.aws.region=<YOUR_REGION>
+quarkus.s3.aws.credentials.type=default
+
+
+
+
    +
  • +

    bucket.name - name of the S3 bucket on your AWS account.

    +
  • +
  • +

    quarkus.s3.aws.region you should set it to the region where your S3 bucket was created,

    +
  • +
  • +

    quarkus.s3.aws.credentials.type - use the default credentials provider chain that looks for credentials in this order:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

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

Creating a frontend

+
+
+

Now let’s add a simple web page to interact with our S3SyncClientResource. +Quarkus automatically serves static resources located under the META-INF/resources directory. +In the src/main/resources/META-INF/resources directory, add a s3.html file with the content from this s3.html file in it.

+
+
+

You can now interact with your REST service:

+
+
+
    +
  • +

    start Quarkus with ./mvnw compile quarkus:dev

    +
  • +
  • +

    open a browser to http://localhost:8080/s3.html

    +
  • +
  • +

    upload new file to the current S3 bucket via the form and see the list of files in the bucket

    +
  • +
+
+
+
+
+

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can be run with java -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

Create a org.acme.s3.S3AsyncClientResource that will be similar to our S3SyncClientResource but using an asynchronous programming model.

+
+
+
+
package org.acme.s3;
+
+import io.smallrye.mutiny.Uni;
+import java.util.Comparator;
+import java.util.List;
+import java.util.stream.Collectors;
+import javax.inject.Inject;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+import org.jboss.resteasy.reactive.MultipartForm;
+import software.amazon.awssdk.core.async.AsyncRequestBody;
+import software.amazon.awssdk.core.async.AsyncResponseTransformer;
+import software.amazon.awssdk.services.s3.S3AsyncClient;
+import software.amazon.awssdk.services.s3.model.ListObjectsRequest;
+import software.amazon.awssdk.services.s3.model.ListObjectsResponse;
+
+@Path("/async-s3")
+public class S3AsyncClientResource extends CommonResource {
+    @Inject
+    S3AsyncClient s3;
+
+    @POST
+    @Path("upload")
+    @Consumes(MediaType.MULTIPART_FORM_DATA)
+    public Uni<Response> uploadFile(@MultipartForm FormData formData) throws Exception {
+
+        if (formData.filename == null || formData.filename.isEmpty()) {
+            return Uni.createFrom().item(Response.status(Status.BAD_REQUEST).build());
+        }
+
+        if (formData.mimetype == null || formData.mimetype.isEmpty()) {
+            return Uni.createFrom().item(Response.status(Status.BAD_REQUEST).build());
+        }
+
+        return Uni.createFrom()
+                .completionStage(() -> {
+                    return s3.putObject(buildPutRequest(formData), AsyncRequestBody.fromFile(formData.data));
+                })
+                .onItem().ignore().andSwitchTo(Uni.createFrom().item(Response.created(null).build()))
+                .onFailure().recoverWithItem(th -> {
+                    th.printStackTrace();
+                    return Response.serverError().build();
+                });
+    }
+
+    @GET
+    @Path("download/{objectKey}")
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    public Uni<Response> downloadFile(String objectKey) {
+        return Uni.createFrom()
+                .completionStage(() -> s3.getObject(buildGetRequest(objectKey), AsyncResponseTransformer.toBytes()))
+                .onItem()
+                .transform(object -> Response.ok(object.asUtf8String())
+                        .header("Content-Disposition", "attachment;filename=" + objectKey)
+                        .header("Content-Type", object.response().contentType()).build());
+    }
+
+    @GET
+    @Produces(MediaType.APPLICATION_JSON)
+    public Uni<List<FileObject>> listFiles() {
+        ListObjectsRequest listRequest = ListObjectsRequest.builder()
+                .bucket(bucketName)
+                .build();
+
+        return Uni.createFrom().completionStage(() -> s3.listObjects(listRequest))
+                .onItem().transform(result -> toFileItems(result));
+    }
+
+    private List<FileObject> toFileItems(ListObjectsResponse objects) {
+        return objects.contents().stream()
+                .map(FileObject::from)
+                .sorted(Comparator.comparing(FileObject::getObjectKey))
+                .collect(Collectors.toList());
+    }
+}
+
+
+
+

And we need to add the Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK. +The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface.

+
+
+

Environment variable: QUARKUS_S3_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TYPE

+
+
+
+

url, apache

+

url

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_S3_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container. +The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property. +Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_S3_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance. +This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_S3_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

The buckets to create on startup.

+
+
+

Environment variable: QUARKUS_S3_DEVSERVICES_BUCKETS

+
+
+

list of string

default

+
+
+
+

Enable using the accelerate endpoint when accessing S3. +Accelerate endpoints allow faster transfer of objects by using Amazon CloudFront’s globally distributed edge locations.

+
+
+

Environment variable: QUARKUS_S3_ACCELERATE_MODE

+
+
+

boolean

false

+
+
+
+

Enable doing a validation of the checksum of an object stored in S3.

+
+
+

Environment variable: QUARKUS_S3_CHECKSUM_VALIDATION

+
+
+

boolean

true

+
+
+
+

Enable using chunked encoding when signing the request payload for software.amazon.awssdk.services.s3.model.PutObjectRequest and software.amazon.awssdk.services.s3.model.UploadPartRequest.

+
+
+

Environment variable: QUARKUS_S3_CHUNKED_ENCODING

+
+
+

boolean

true

+
+
+
+

Enable dualstack mode for accessing S3. If you want to use IPv6 when accessing S3, dualstack must be enabled.

+
+
+

Environment variable: QUARKUS_S3_DUALSTACK

+
+
+

boolean

false

+
+
+
+

Enable using path style access for accessing S3 objects instead of DNS style access. DNS style access is preferred as it will result in better load balancing when accessing S3.

+
+
+

Environment variable: QUARKUS_S3_PATH_STYLE_ACCESS

+
+
+

boolean

false

+
+
+
+

Enable cross-region call to the region specified in the S3 resource ARN different than the region the client was configured with. If this flag is not set to 'true', the cross-region call will throw an exception.

+
+
+

Environment variable: QUARKUS_S3_USE_ARN_REGION_ENABLED

+
+
+

boolean

false

+
+
+
+

Define the profile name that should be consulted to determine the default value of use-arn-region-enabled. This is not used, if the use-arn-region-enabled is configured to 'true'. +If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_S3_PROFILE_NAME

+
+
+

string

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_S3_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate. +If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_S3_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call. +This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc. +This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_S3_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out. +This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_S3_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_S3_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain. +Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider. +If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed. +This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool. +Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously. +When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through. +Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

Netty HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests. +For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed. +Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown. +Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown. +Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle. +Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed. +When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client. +Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through. +Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group. +If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group. +The prefix will be appended with a number unique to the thread factory and a number unique to the thread. +If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request. +When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/1.x/amazon-secretsmanager.html b/quarkus-amazon-services/1.x/amazon-secretsmanager.html new file mode 100644 index 0000000000..1982db850a --- /dev/null +++ b/quarkus-amazon-services/1.x/amazon-secretsmanager.html @@ -0,0 +1,3033 @@ + + + + + + Amazon Secrets Manager Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon Secrets Manager Client

+
+
+
+

AWS Secrets Manager enables you to replace hardcoded credentials in your code, including passwords, with an API call to Secrets Manager to retrieve the secret programmatically. +This helps ensure the secret can’t be compromised by someone examining your code, because the secret no longer exists in the code.

+
+
+

You can find more information about Secrets Manager at the AWS Secrets Manager website.

+
+
+ + + + + +
+ + +The Secrets Manager extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client.

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use Secrets Manager locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 11+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    An AWS Account to access the Secrets Manager service

    +
  • +
  • +

    Docker for your system to run Secrets Manager locally for testing purposes

    +
  • +
+
+
+

Provision Secrets Manager locally via Dev Services

+
+

The easiest way to start working with Secrets Manager is to run a local instance using Dev Services.

+
+
+
+

Provision Secrets Manager locally manually

+
+

You can also set up a local version of Secrets Manager manually, first start a LocalStack container:

+
+
+
+
docker run --rm --name local-secrets-manager --publish 4566:4584 -e SERVICES=secretsmanager -e START_WEB=0 -d localstack/localstack:1.0.3
+
+
+
+

This starts a Secrets Manager instance that is accessible on port 4566.

+
+
+

Create an AWS profile for your local instance using AWS CLI:

+
+
+
+
$ aws configure --profile localstack
+AWS Access Key ID [None]: test-key
+AWS Secret Access Key [None]: test-secret
+Default region name [None]: us-east-1
+Default output format [None]:
+
+
+
+
+
+
+

Solution

+
+
+

The application built here allows to store and retrieve credentials using Secrets Manager.

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step. +However, you can go right to the completed example.

+
+
+

Clone the Git repository: git clone https://github.com/quarkusio/quarkus-quickstarts.git, or download an archive.

+
+
+

The solution is located in the amazon-secretsmanager-quickstart directory.

+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:2.16.9.Final:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-secretsmanager-quickstart \
+    -DclassName="org.acme.secretsmanager.QuarkusSecretsManagerSyncResource" \
+    -Dpath="/sync" \
+    -Dextensions="resteasy,resteasy-jackson,amazon-secretsmanager,resteasy-mutiny"
+cd amazon-secretsmanager-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy/JAX-RS, Mutiny and Amazon Secrets Manager Client extensions. +After this, the amazon-secretsmanager extension has been added to your pom.xml as well as the Mutiny support for RESTEasy.

+
+
+
+
+

Creating JSON REST service

+
+
+

In this example, we will create an application that allows us to store and retrieve parameters to and from Secrets Manager store using a RESTful API. +The example application will demonstrate the two programming models supported by the extension.

+
+
+

Let’s start with an abstract org.acme.secretsmanager.QuarkusSecretsManagerResource class to provide the common functionality we will need for both the synchronous and asynchrounous exposures.

+
+
+
+
package org.acme.secretsmanager;
+
+import static java.lang.Boolean.TRUE;
+import static java.util.stream.Collectors.toMap;
+
+import java.util.Map;
+import java.util.stream.Collector;
+
+import javax.annotation.PostConstruct;
+
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+
+import software.amazon.awssdk.services.secretsmanager.model.CreateSecretRequest;
+import software.amazon.awssdk.services.secretsmanager.model.GetSecretValueRequest;
+
+public abstract class QuarkusSecretsManagerResource {
+    public static final String VERSION_STAGE = "AWSCURRENT";
+
+    @ConfigProperty(name = "secret.name") (1)
+    String secretName;
+
+    protected GetSecretValueRequest generateGetSecretValueRequest() {
+        return GetSecretValueRequest.builder() (2)
+                .secretId(secretName)
+                .versionStage(VERSION_STAGE)
+                .build();
+    }
+
+    protected CreateSecretRequest generateCreateSecretRequest(String name, String secret) {
+        return CreateSecretRequest.builder() (3)
+                .name(name)
+                .secretString(secret)
+                .build();
+    }
+
+}
+
+
+
+ + + + + + + + + + + + + +
1Inject a configured name under which is stored the secret
2Generate a request for the credentials with the configured name
3Generate a request to create a specific secret
+
+
+

Now, we can extend the class and create the synchronous implementation in the org.acme.secretsmanager.QuarkusSecretsManagerSyncResource class.

+
+
+
+
package org.acme.secretsmanager;
+
+import java.util.Map;
+
+import javax.inject.Inject;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DefaultValue;
+import javax.ws.rs.GET;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+
+import software.amazon.awssdk.services.secretsmanager.SecretsManagerClient;
+
+@Path("/sync")
+public class QuarkusSecretsManagerSyncResource extends QuarkusSecretsManagerResource {
+
+    @Inject (1)
+    SecretsManagerClient secretsManagerClient;
+
+    @GET
+    @Produces(MediaType.APPLICATION_JSON)
+    public String getSecret() {
+        return secretsManagerClient.getSecretValue(generateGetSecretValueRequest()).secretString();
+    }
+
+    @POST
+    @Path("/{name}")
+    @Consumes(MediaType.TEXT_PLAIN)
+    public void createSecret(String name, String value) {
+        secretsManagerClient.createSecret(generateCreateSecretRequest(name, secret));
+    }
+
+}
+
+
+
+ + + + + +
1Inject the client provided by the amazon-secretsmanager extension
+
+
+

Using the Amazon Secrets Manager SDK, we can easily store and retrieve secrets.

+
+
+
+
+

Configuring Secrets Manager clients

+
+
+

Both Secrets Manager clients (sync and async) are configurable via the application.properties file that can be provided in the src/main/resources directory. +Additionally, you need to add to the classpath a proper implementation of the sync client. By default the extension uses the URL connection HTTP client, so +you need to add a URL connection client dependency to the pom.xml file:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.secretsmanager.sync-client.type=apache
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

If you’re going to use a local Secrets Manager instance, configure it as follows:

+
+
+
+
quarkus.secretsmanager.endpoint-override=http://localhost:4566 (1)
+
+quarkus.secretsmanager.aws.region=us-east-1 (2)
+quarkus.secretsmanager.aws.credentials.type=static (3)
+quarkus.secretsmanager.aws.credentials.static-provider.access-key-id=test-key
+quarkus.secretsmanager.aws.credentials.static-provider.secret-access-key=test-secret
+
+
+
+ + + + + + + + + + + + + +
1Override the Secret Manager client to use LocalStack instead of the actual AWS service
2Localstack defaults to us-east-1
3The static credentials provider lets you set the access-key-id and secret-access-key directly
+
+
+

If you want to work with an AWS account, you can simply remove or comment out all Amazon Secrets Manager related properties. By default, the Secrets Manager client extension will use the default credentials provider chain that looks for credentials in this order:

+
+
+
    +
  • +

    Java System Properties - aws.accessKeyId and aws.secretAccessKey

    +
  • +
  • +

    Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

    +
  • +
  • +

    Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

    +
  • +
  • +

    Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

    +
  • +
  • +

    Instance profile credentials delivered through the Amazon EC2 metadata service

    +
  • +
+
+
+

And the region from your AWS CLI profile will be used.

+
+
+
+
+

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can then be run with java -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

Create a org.acme.secretsmanager.QuarkusSecretsManagerAsyncResource REST resource that will be similar to our QuarkusSecretsManagerSyncResource but using an asynchronous programming model.

+
+
+
+
package org.acme.secretsmanager;
+
+import java.util.Map;
+
+import javax.inject.Inject;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DefaultValue;
+import javax.ws.rs.GET;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+
+import io.smallrye.mutiny.Uni;
+import software.amazon.awssdk.services.secretsmanager.SecretsManagerAsyncClient;
+
+@Path("/async")
+public class QuarkusSecretsManagerAsyncResource extends QuarkusSecretsManagerResource {
+
+    @Inject
+    SecretsManagerAsyncClient secretsManagerAsyncClient;
+
+    @GET
+    @Produces(MediaType.APPLICATION_JSON)
+    public Uni<String> getSecret() {
+        return Uni.createFrom().completionStage(secretsManagerAsyncClient.getSecretValue(generateGetSecretValueRequest()))
+                .onItem().transform(r -> r.secretString());
+    }
+
+    @PUT
+    @Path("/{name}")
+    @Consumes(MediaType.TEXT_PLAIN)
+    public Uni<Void> createSecret(String name, String value) {
+
+        return Uni.createFrom().completionStage(secretsManagerAsyncClient.createSecret(generateCreateSecretRequest(name, secret)))
+                .onItem().transform(r -> null);
+    }
+
+}
+
+
+
+

Note that the SecretsManagerAsyncClient behaves just like the SecretsManagerClient, but returns CompletionStage objects which we use to create Uni instances, and then transform the emitted item.

+
+
+

To enable the asynchronous client, we also need to add the Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK. +The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TYPE

+
+
+
+

url, apache

+

url

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container. +The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property. +Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance. +This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate. +If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call. +This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc. +This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out. +This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain. +Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider. +If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed. +This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool. +Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously. +When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through. +Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

Netty HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests. +For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed. +Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown. +Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown. +Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle. +Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed. +When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client. +Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through. +Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group. +If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group. +The prefix will be appended with a number unique to the thread factory and a number unique to the thread. +If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request. +When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/1.x/amazon-ses.html b/quarkus-amazon-services/1.x/amazon-ses.html new file mode 100644 index 0000000000..c8f96d5ea6 --- /dev/null +++ b/quarkus-amazon-services/1.x/amazon-ses.html @@ -0,0 +1,2987 @@ + + + + + + Amazon SES Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon SES Client

+
+
+
+

Amazon Simple Email Service (SES) is a flexible and highly-scalable email sending and receiving service. +Using SES, you can send emails with any type of correspondence. You can find more information about SES at the Amazon SES website.

+
+
+ + + + + +
+ + +The SES extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client.

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use SES locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 11+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    An AWS Account to access the SES service

    +
  • +
  • +

    Docker for your system to run SES locally for testing purposes

    +
  • +
+
+
+

Provision SES locally via Dev Services

+
+

The easiest way to start working with SES is to run a local instance using Dev Services. +However, local instance of SES is only mocks the SES APIs without the actual email sending capabilities. You can still use it for this guide to verify an API communication or integration test purposes.

+
+
+
+

Provision SES locally manually

+
+

You can also set up a local version of SES manually, first start a LocalStack container:

+
+
+
+
docker run --rm --name local-ses -p 4566:4579 -e SERVICES=ses -e START_WEB=0 -d localstack/localstack:1.0.3
+
+
+
+

This starts a SES instance that is accessible on port 4566.

+
+
+

Create an AWS profile for your local instance using AWS CLI:

+
+
+
+
$ aws configure --profile localstack
+AWS Access Key ID [None]: test-key
+AWS Secret Access Key [None]: test-secret
+Default region name [None]: us-east-1
+Default output format [None]: text
+
+
+
+
+
+
+

Using SES on your AWS account

+
+
+

Amazon applies certain restrictions to new Amazon SES accounts, mainly to prevent fraud and abuse. All new accounts are in the Amazon SES sandbox. +All the features of the Amazon SES are still available while in sandbox, but a following restrictions applies: +- You can send mail to verified email addresses and domains or to the Amazon SES mailbox simulator +- You can only send mail from verified email addresses and domains +- You can send a maximum of 1 message per second.

+
+
+

Going production, you’d need to get your account of the sandbox following the Amazon procedure.

+
+
+

Set up AWS SES

+
+

We assume you are going to use AWS SES sandbox for the sake of this guide. But before sending any email, you must verify sender and recipient email addresses using AWS CLI. +You can use your personal email or any temporary email service available if you wish.

+
+
+
+
aws ses verify-email-identity --email-address <sender@email.address>
+aws ses verify-email-identity --email-address <recipient@email.address>
+
+
+
+

Now, you need to open a mailboxes of those email addresses in order to follow confirmation procedure. Once email is approved you can use it in your application.

+
+
+

If you are using local SES you still need to verify email addresses, otherwise your send email in order to let local SES accepting your request. +However, no emails to be send as it only mocks the service APIs.

+
+
+
+
aws ses verify-email-identity --email-address <sender@email.address> --profile localstack --endpoint-url=http://localhost:4566
+aws ses verify-email-identity --email-address <recipient@email.address> --profile localstack --endpoint-url=http://localhost:4566
+
+
+
+
+
+
+

Solution

+
+
+

The application built here allows sending text emails to the recipients that are verified on AWS SES.

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step. +However, you can go right to the completed example.

+
+
+

Clone the Git repository: git clone https://github.com/quarkusio/quarkus-quickstarts.git, or download an archive.

+
+
+

The solution is located in the amazon-ses-quickstart directory.

+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:2.16.9.Final:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-ses-quickstart \
+    -DclassName="org.acme.ses.QuarkusSesSyncResource" \
+    -Dpath="/sync" \
+    -Dextensions="resteasy-reactive-jackson,amazon-ses"
+cd amazon-ses-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy Reactive/JAX-RS and Amazon SES Client extensions. +After this, the amazon-ses extension has been added to your pom.xml as well as the Mutiny support for RESTEasy.

+
+
+
+
+

Creating JSON REST service

+
+
+

Lets create a org.acme.ses.QuarkusSesSyncResource that will provide an API to send emails using the synchronous client.

+
+
+
+
package org.acme.ses;
+
+import javax.inject.Inject;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import org.acme.ses.model.Email;
+import software.amazon.awssdk.services.ses.SesClient;
+
+@Path("/sync")
+@Produces(MediaType.TEXT_PLAIN)
+@Consumes(MediaType.APPLICATION_JSON)
+public class QuarkusSesSyncResource {
+
+    @Inject
+    SesClient ses;
+
+    @POST
+    @Path("/email")
+    public String encrypt(Email data) {
+        return ses.sendEmail(req -> req
+            .source(data.getFrom())
+            .destination(d -> d.toAddresses(data.getTo()))
+            .message(msg -> msg
+                .subject(sub -> sub.data(data.getSubject()))
+                .body(b -> b.text(txt -> txt.data(data.getBody()))))).messageId();
+    }
+}
+
+
+
+
+
+

Configuring SES clients

+
+
+

Both SES clients (sync and async) are configurable via the application.properties file that can be provided in the src/main/resources directory. +Additionally, you need to add to the classpath a proper implementation of the sync client. By default the extension uses the URL connection HTTP client, so +you need to add a URL connection client dependency to the pom.xml file:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.ses.sync-client.type=apache
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

If you’re going to use a local SES instance, configure it as follows:

+
+
+
+
quarkus.ses.endpoint-override=http://localhost:4566
+
+quarkus.ses.aws.region=us-east-1
+quarkus.ses.aws.credentials.type=static
+quarkus.ses.aws.credentials.static-provider.access-key-id=test-key
+quarkus.ses.aws.credentials.static-provider.secret-access-key=test-secret
+
+
+
+
    +
  • +

    quarkus.ses.aws.region - It’s required by the client, but since you’re using a local SES instance use us-east-1 as it’s a default region of LocalStack’s SES.

    +
  • +
  • +

    quarkus.ses.aws.credentials.type - Set static credentials provider with any values for access-key-id and secret-access-key

    +
  • +
  • +

    quarkus.ses.endpoint-override - Override the SES client to use a local instance instead of an AWS service

    +
  • +
+
+
+

If you want to work with an AWS account, you can simply remove or comment out all Amazon SES related properties. By default, the SES client extension +will use the default credentials provider chain that looks for credentials in this order:

+
+
+
    +
  • +

    Java System Properties - aws.accessKeyId and aws.secretAccessKey

    +
  • +
  • +

    Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

    +
  • +
  • +

    Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

    +
  • +
  • +

    Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

    +
  • +
  • +

    Instance profile credentials delivered through the Amazon EC2 metadata service

    +
  • +
+
+
+

And the region from your AWS CLI profile will be used.

+
+
+
+
+

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can be run with java -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

Create a org.acme.ses.QuarkusSesAsyncResource REST resource that will be similar to our QuarkusSesSyncResource but using an asynchronous programming model.

+
+
+
+
package org.acme.ses;
+
+import io.smallrye.mutiny.Uni;
+import javax.inject.Inject;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import org.acme.ses.model.Email;
+import software.amazon.awssdk.services.ses.SesAsyncClient;
+import software.amazon.awssdk.services.ses.model.SendEmailResponse;
+
+@Path("/async")
+@Produces(MediaType.TEXT_PLAIN)
+@Consumes(MediaType.APPLICATION_JSON)
+public class QuarkusSesAsyncResource {
+
+    @Inject
+    SesAsyncClient ses;
+
+    @POST
+    @Path("/email")
+    public Uni<String> encrypt(Email data) {
+        return Uni.createFrom()
+            .completionStage(
+                ses.sendEmail(req -> req
+                    .source(data.getFrom())
+                    .destination(d -> d.toAddresses(data.getTo()))
+                    .message(msg -> msg
+                        .subject(sub -> sub.data(data.getSubject()))
+                        .body(b -> b.text(txt -> txt.data(data.getBody()))))))
+            .onItem().apply(SendEmailResponse::messageId);
+    }
+}
+
+
+
+

We create Uni instances from the CompletionStage objects returned by the asynchronous SES client, and then transform the emitted item.

+
+
+

And we need to add the Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK. +The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface.

+
+
+

Environment variable: QUARKUS_SES_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TYPE

+
+
+
+

url, apache

+

url

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_SES_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container. +The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property. +Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_SES_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance. +This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_SES_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_SES_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate. +If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_SES_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call. +This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc. +This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SES_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out. +This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SES_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_SES_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain. +Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider. +If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed. +This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool. +Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously. +When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through. +Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

Netty HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests. +For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed. +Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown. +Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown. +Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle. +Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed. +When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client. +Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through. +Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group. +If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group. +The prefix will be appended with a number unique to the thread factory and a number unique to the thread. +If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request. +When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/1.x/amazon-sns.html b/quarkus-amazon-services/1.x/amazon-sns.html new file mode 100644 index 0000000000..e5a5fa4218 --- /dev/null +++ b/quarkus-amazon-services/1.x/amazon-sns.html @@ -0,0 +1,3635 @@ + + + + + + Amazon SNS Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon SNS Client

+
+
+
+

Amazon Simple Notification Service (SNS) is a highly available and fully managed pub/sub messaging service. +It provides topics for high-throughput, push-based, many-to-many messaging. Messages can fan out to a large number of subscriber endpoints for +parallel processing, including Amazon SQS queues, AWS Lambda functions, and HTTP/S webhooks. Additionally, SNS can be used +to fan out notifications to end users using mobile push, SMS and email.

+
+
+

You can find more information about SNS at the Amazon SNS website.

+
+
+ + + + + +
+ + +The SNS extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client.

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use SNS locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 11+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    An AWS Account to access the SNS service

    +
  • +
  • +

    Optionally, Docker for your system to run SNS locally for testing purposes

    +
  • +
+
+
+

Provision SNS locally via Dev Services

+
+

The easiest way to start working with SNS is to run a local instance using Dev Services.

+
+
+
+

Provision SNS locally manually

+
+

You can also set up a local version of SNS manually, first start a LocalStack container:

+
+
+
+
docker run -it --publish 4566:4575 -e SERVICES=sns -e START_WEB=0 localstack/localstack:1.0.3
+
+
+
+

This starts a SNS instance that is accessible on port 4566.

+
+
+

Create an AWS profile for your local instance using AWS CLI:

+
+
+
+
$ aws configure --profile localstack
+AWS Access Key ID [None]: test-key
+AWS Secret Access Key [None]: test-secret
+Default region name [None]: us-east-1
+Default output format [None]: text
+
+
+
+
+

Create a SNS topic

+
+

Create a SNS topic using AWS CLI and store in TOPIC_ARN environment variable

+
+
+
+
TOPIC_ARN=`aws sns create-topic --name=QuarksCollider --profile localstack --endpoint-url=http://localhost:4566`
+
+
+
+ + + + + +
+ + +
+

If you are using LocalStack, some additional configuration is needed:

+
+
+
    +
  • +

    Set the quarkus.shield.base.url configuration property in your application.properties to your IP address instead of localhost.

    +
  • +
  • +

    Set the quarkus.http.host configuration property in your application.properties to 0.0.0.0. +Be aware that Quarkus will then listen to all interfaces, which might be a security hazard depending on your network configuration.

    +
  • +
+
+
+

Otherwise your service will not receive the notifications.

+
+
+
+
+

If you want to run the demo using SNS on your AWS account, you can create a topic using AWS default profile

+
+
+
+
TOPIC_ARN=`aws sns create-topic --name=QuarksCollider`
+
+
+
+
+
+
+

Solution

+
+
+

The application built here allows to shoot elementary particles (quarks) into a QuarksCollider topic of the AWS SNS. +Additionally, we create a resource that allows to subscribe to the QuarksCollider topic in order to receive published quarks.

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step. +However, you can go right to the completed example.

+
+
+

Clone the Git repository: git clone https://github.com/quarkusio/quarkus-quickstarts.git, or download an archive.

+
+
+

The solution is located in the amazon-sns-quickstart directory.

+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:2.16.9.Final:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-sns-quickstart \
+    -DclassName="org.acme.sns.QuarksCannonSyncResource" \
+    -Dpath="/sync-cannon" \
+    -Dextensions="resteasy-reactive-jackson,amazon-sns"
+cd amazon-sns-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy Reactive/JAX-RS and Amazon SNS Client extensions. +After this, the amazon-sns extension has been added to your pom.xml as well as the Mutiny support for RESTEasy.

+
+
+
+
+

Creating JSON REST service

+
+
+

In this example, we will create an application that allows to publish quarks. The example application will demonstrate the two programming models supported by the extension.

+
+
+

First, let’s create the Quark bean as follows:

+
+
+
+
package org.acme.sns.model;
+
+import io.quarkus.runtime.annotations.RegisterForReflection;
+import java.util.Objects;
+
+@RegisterForReflection
+public class Quark {
+
+    private String flavor;
+    private String spin;
+
+    public Quark() {
+    }
+
+    public String getFlavor() {
+        return flavor;
+    }
+
+    public void setFlavor(String flavor) {
+        this.flavor = flavor;
+    }
+
+    public String getSpin() {
+        return spin;
+    }
+
+    public void setSpin(String spin) {
+        this.spin = spin;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (!(obj instanceof Quark)) {
+            return false;
+        }
+
+        Quark other = (Quark) obj;
+
+        return Objects.equals(other.flavor, this.flavor);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(this.flavor);
+    }
+}
+
+
+
+

Then, create a org.acme.sns.QuarksCannonSyncResource that will provide an API to shoot quarks into the SNS topic via the SNS synchronous client.

+
+
+ + + + + +
+ + +The @RegisterForReflection annotation instructs Quarkus to keep the class and its members during the native compilation. More details about the @RegisterForReflection annotation can be found on the native application tips page. +
+
+
+
+
package org.acme.sns;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectWriter;
+import javax.inject.Inject;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import org.acme.sns.model.Quark;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import org.jboss.logging.Logger;
+import software.amazon.awssdk.services.sns.SnsClient;
+import software.amazon.awssdk.services.sns.model.PublishResponse;
+
+@Path("/sync/cannon")
+@Produces(MediaType.TEXT_PLAIN)
+public class QuarksCannonSyncResource {
+
+    private static final Logger LOGGER = Logger.getLogger(QuarksCannonSyncResource.class);
+
+    @Inject
+    SnsClient sns;
+
+    @ConfigProperty(name = "topic.arn")
+    String topicArn;
+
+    static ObjectWriter QUARK_WRITER = new ObjectMapper().writerFor(Quark.class);
+
+    @POST
+    @Path("/shoot")
+    @Consumes(MediaType.APPLICATION_JSON)
+    public Response publish(Quark quark) throws Exception {
+        String message = QUARK_WRITER.writeValueAsString(quark);
+        PublishResponse response = sns.publish(p -> p.topicArn(topicArn).message(message));
+        LOGGER.infov("Fired Quark[{0}, {1}}]", quark.getFlavor(), quark.getSpin());
+        return Response.ok().entity(response.messageId()).build();
+    }
+}
+
+
+
+

Because of the fact that messages published must be simply a String we’re using Jackson’s ObjectWriter in order to serialize our Quark objects into a String.

+
+
+

The missing piece is the subscriber that will receive the messages published to our topic. Before implementing subscribers, we need to define POJO classes representing messages posted by the AWS SNS.

+
+
+

Let’s create two classes that represent SNS Notification and SNS Subscription Confirmation messages based on the AWS SNS Message and JSON formats

+
+
+

Create org.acme.sns.model.SnsNotification class

+
+
+
+
package org.acme.sns.model;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class SnsNotification {
+
+    @JsonProperty("Message")
+    private String message;
+
+    @JsonProperty("MessageId")
+    private String messageId;
+
+    @JsonProperty("Signature")
+    private String signature;
+
+    @JsonProperty("SignatureVersion")
+    private String signatureVersion;
+
+    @JsonProperty("SigningCertURL")
+    private String signinCertUrl;
+
+    @JsonProperty("Subject")
+    private String subject;
+
+    @JsonProperty("Timestamp")
+    private String timestamp;
+
+    @JsonProperty("TopicArn")
+    private String topicArn;
+
+    @JsonProperty("Type")
+    private String type;
+
+    @JsonProperty("UnsubscribeURL")
+    private String unsubscribeURL;
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
+    public String getMessageId() {
+        return messageId;
+    }
+
+    public void setMessageId(String messageId) {
+        this.messageId = messageId;
+    }
+
+    public String getSignature() {
+        return signature;
+    }
+
+    public void setSignature(String signature) {
+        this.signature = signature;
+    }
+
+    public String getSignatureVersion() {
+        return signatureVersion;
+    }
+
+    public void setSignatureVersion(String signatureVersion) {
+        this.signatureVersion = signatureVersion;
+    }
+
+    public String getSigninCertUrl() {
+        return signinCertUrl;
+    }
+
+    public void setSigninCertUrl(String signinCertUrl) {
+        this.signinCertUrl = signinCertUrl;
+    }
+
+    public String getSubject() {
+        return subject;
+    }
+
+    public void setSubject(String subject) {
+        this.subject = subject;
+    }
+
+    public String getTimestamp() {
+        return timestamp;
+    }
+
+    public void setTimestamp(String timestamp) {
+        this.timestamp = timestamp;
+    }
+
+    public String getTopicArn() {
+        return topicArn;
+    }
+
+    public void setTopicArn(String topicArn) {
+        this.topicArn = topicArn;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getUnsubscribeURL() {
+        return unsubscribeURL;
+    }
+
+    public void setUnsubscribeURL(String unsubscribeURL) {
+        this.unsubscribeURL = unsubscribeURL;
+    }
+}
+
+
+
+

Then, create org.acme.sns.SnsSubscriptionConfirmation

+
+
+
+
package org.acme.sns.model;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class SnsSubscriptionConfirmation {
+
+    @JsonProperty("Message")
+    private String message;
+
+    @JsonProperty("MessageId")
+    private String messageId;
+
+    @JsonProperty("Signature")
+    private String signature;
+
+    @JsonProperty("SignatureVersion")
+    private String signatureVersion;
+
+    @JsonProperty("SigningCertURL")
+    private String signingCertUrl;
+
+    @JsonProperty("SubscribeURL")
+    private String subscribeUrl;
+
+    @JsonProperty("Timestamp")
+    private String timestamp;
+
+    @JsonProperty("Token")
+    private String token;
+
+    @JsonProperty("TopicArn")
+    private String topicArn;
+
+    @JsonProperty("Type")
+    private String type;
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
+    public String getMessageId() {
+        return messageId;
+    }
+
+    public void setMessageId(String messageId) {
+        this.messageId = messageId;
+    }
+
+    public String getSignature() {
+        return signature;
+    }
+
+    public void setSignature(String signature) {
+        this.signature = signature;
+    }
+
+    public String getSignatureVersion() {
+        return signatureVersion;
+    }
+
+    public void setSignatureVersion(String signatureVersion) {
+        this.signatureVersion = signatureVersion;
+    }
+
+    public String getSigningCertUrl() {
+        return signingCertUrl;
+    }
+
+    public void setSigningCertUrl(String signingCertUrl) {
+        this.signingCertUrl = signingCertUrl;
+    }
+
+    public String getSubscribeUrl() {
+        return subscribeUrl;
+    }
+
+    public void setSubscribeUrl(String subscribeUrl) {
+        this.subscribeUrl = subscribeUrl;
+    }
+
+    public String getTimestamp() {
+        return timestamp;
+    }
+
+    public void setTimestamp(String timestamp) {
+        this.timestamp = timestamp;
+    }
+
+    public String getToken() {
+        return token;
+    }
+
+    public void setToken(String token) {
+        this.token = token;
+    }
+
+    public String getTopicArn() {
+        return topicArn;
+    }
+
+    public void setTopicArn(String topicArn) {
+        this.topicArn = topicArn;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+}
+
+
+
+

Now, create org.acme.QuarksShieldSyncResource REST resources that: +- Allows to subscribe itself to our SNS topic +- Unsubscribe from the SNS topic +- Receive notifications from the subscribed SNS topic

+
+
+ + + + + +
+ + +Keep in mind that AWS SNS supports multiple types of subscribers (that is web servers, email addresses, AWS SQS queues, AWS Lambda functions, and many more), but for the sake of the +quickstart we will show how to subscribe an HTTP endpoint served by our application. +
+
+
+
+
package org.acme.sns;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectReader;
+import java.util.HashMap;
+import java.util.Map;
+import javax.inject.Inject;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.HeaderParam;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import org.acme.sns.model.Quark;
+import org.acme.sns.model.SnsNotification;
+import org.acme.sns.model.SnsSubscriptionConfirmation;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import org.jboss.logging.Logger;
+import software.amazon.awssdk.services.sns.SnsClient;
+import software.amazon.awssdk.services.sns.model.SubscribeResponse;
+
+@Path("/sync/shield")
+public class QuarksShieldSyncResource {
+
+    private static final Logger LOGGER = Logger.getLogger(QuarksShieldSyncResource.class);
+
+    private static final String NOTIFICATION_TYPE = "Notification";
+    private static final String SUBSCRIPTION_CONFIRMATION_TYPE = "SubscriptionConfirmation";
+    private static final String UNSUBSCRIPTION_CONFIRMATION_TYPE = "UnsubscribeConfirmation";
+
+    @Inject
+    SnsClient sns;
+
+    @ConfigProperty(name = "topic.arn")
+    String topicArn;
+
+    @ConfigProperty(name = "quarks.shield.base.url")
+    String quarksShieldBaseUrl;
+
+    private volatile String subscriptionArn;
+
+    static Map<Class<?>, ObjectReader> READERS = new HashMap<>();
+
+    static {
+        READERS.put(SnsNotification.class, new ObjectMapper().readerFor(SnsNotification.class));
+        READERS.put(SnsSubscriptionConfirmation.class, new ObjectMapper().readerFor(SnsSubscriptionConfirmation.class));
+        READERS.put(Quark.class, new ObjectMapper().readerFor(Quark.class));
+    }
+
+    @POST
+    @Consumes({MediaType.TEXT_PLAIN})
+    public Response notificationEndpoint(@HeaderParam("x-amz-sns-message-type") String messageType, String message) throws JsonProcessingException {
+        if (messageType == null) {
+            return Response.status(400).build();
+        }
+
+        if (messageType.equals(NOTIFICATION_TYPE)) {
+            SnsNotification notification = readObject(SnsNotification.class, message);
+            Quark quark = readObject(Quark.class, notification.getMessage());
+            LOGGER.infov("Quark[{0}, {1}] collision with the shield.", quark.getFlavor(), quark.getSpin());
+        } else if (messageType.equals(SUBSCRIPTION_CONFIRMATION_TYPE)) {
+            SnsSubscriptionConfirmation subConf = readObject(SnsSubscriptionConfirmation.class, message);
+            sns.confirmSubscription(cs -> cs.topicArn(topicArn).token(subConf.getToken()));
+            LOGGER.info("Subscription confirmed. Ready for quarks collisions.");
+        } else if (messageType.equals(UNSUBSCRIPTION_CONFIRMATION_TYPE)) {
+            LOGGER.info("We are unsubscribed");
+        } else {
+            return Response.status(400).entity("Unknown messageType").build();
+        }
+
+        return Response.ok().build();
+    }
+
+    @POST
+    @Path("/subscribe")
+    public Response subscribe() {
+        String notificationEndpoint = notificationEndpoint();
+        SubscribeResponse response = sns.subscribe(s -> s.topicArn(topicArn).protocol("http").endpoint(notificationEndpoint));
+        subscriptionArn = response.subscriptionArn();
+        LOGGER.infov("Subscribed Quarks shield <{0}> : {1} ", notificationEndpoint, response.subscriptionArn());
+        return Response.ok().entity(response.subscriptionArn()).build();
+    }
+
+    @POST
+    @Path("/unsubscribe")
+    public Response unsubscribe() {
+        if (subscriptionArn != null) {
+            sns.unsubscribe(s -> s.subscriptionArn(subscriptionArn));
+            LOGGER.infov("Unsubscribed quarks shield for id = {0}", subscriptionArn);
+            return Response.ok().build();
+        } else {
+            LOGGER.info("Not subscribed yet");
+            return Response.status(400).entity("Not subscribed yet").build();
+        }
+    }
+
+    private String notificationEndpoint() {
+        return quarksShieldBaseUrl + "/sync/shield";
+    }
+
+    private <T> T readObject(Class<T> clazz, String message) {
+        T object = null;
+        try {
+            object = READERS.get(clazz).readValue(message);
+        } catch (JsonProcessingException e) {
+            LOGGER.errorv("Unable to deserialize message <{0}> to Class <{1}>", message, clazz.getSimpleName());
+            throw new RuntimeException(e);
+        }
+        return object;
+    }
+}
+
+
+
+
    +
  1. +

    subscribe() endpoint subscribes to our topic by providing the URL to the POST endpoint receiving SNS notification requests.

    +
  2. +
  3. +

    unsubscribe() simply removes our subscription, so any messages published to the topic will not be routed to our endpoint anymore

    +
  4. +
  5. +

    notificationEndpoint() is called by SNS on new message if endpoint is subscribed. +See Amazon SNS message and JSON formats for details about the format of the messages SNS can submit.

    +
  6. +
+
+
+
+
+

Configuring SNS clients

+
+
+

Both SNS clients (sync and async) are configurable via the application.properties file that can be provided in the src/main/resources directory. +Additionally, you need to add to the classpath a proper implementation of the sync client. By default the extension uses URL connection HTTP client, so +you need to add a URL connection client dependency to the pom.xml file:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.sns.sync-client.type=apache
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

If you’re going to use a local SNS instance, configure it as follows:

+
+
+
+
quarkus.sns.endpoint-override=http://localhost:4566
+
+quarkus.sns.aws.region=us-east-1
+quarkus.sns.aws.credentials.type=static
+quarkus.sns.aws.credentials.static-provider.access-key-id=test-key
+quarkus.sns.aws.credentials.static-provider.secret-access-key=test-secret
+
+
+
+
    +
  • +

    quarkus.sns.aws.region - It’s required by the client, but since you’re using a local SNS instance you can pick any valid AWS region.

    +
  • +
  • +

    quarkus.sns.aws.credentials.type - Set static credentials provider with any values for access-key-id and secret-access-key

    +
  • +
  • +

    quarkus.sns.endpoint-override - Override the SNS client to use a local instance instead of an AWS service

    +
  • +
+
+
+

If you want to work with an AWS account, you’d need to set it with:

+
+
+
+
quarkus.sns.aws.region=<YOUR_REGION>
+quarkus.sns.aws.credentials.type=default
+
+
+
+
    +
  • +

    quarkus.sns.aws.region you should set it to the region where you provisioned the SNS table,

    +
  • +
  • +

    quarkus.sns.aws.credentials.type - use the default credentials provider chain that looks for credentials in this order:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

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

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can be run with java -Dtopic.arn=$TOPIC_ARN -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

Create a org.acme.sns.QuarksCannonAsyncResource REST resource that will be similar to our QuarksCannonSyncResource but using an asynchronous programming model.

+
+
+
+
package org.acme.sns;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectWriter;
+import io.smallrye.mutiny.Uni;
+import javax.inject.Inject;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import org.acme.sns.model.Quark;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import org.jboss.logging.Logger;
+import software.amazon.awssdk.services.sns.SnsAsyncClient;
+import software.amazon.awssdk.services.sns.model.PublishResponse;
+
+@Path("/async/cannon")
+@Produces(MediaType.APPLICATION_JSON)
+@Consumes(MediaType.APPLICATION_JSON)
+public class QuarksCannonAsyncResource {
+
+    private static final Logger LOGGER = Logger.getLogger(QuarksCannonAsyncResource.class);
+
+    @Inject
+    SnsAsyncClient sns;
+
+    @ConfigProperty(name = "topic.arn")
+    String topicArn;
+
+    static ObjectWriter QUARK_WRITER = new ObjectMapper().writerFor(Quark.class);
+
+    @POST
+    @Path("/shoot")
+    @Consumes(MediaType.APPLICATION_JSON)
+    public Uni<Response> publish(Quark quark) throws Exception {
+        String message = QUARK_WRITER.writeValueAsString(quark);
+        return Uni.createFrom()
+            .completionStage(sns.publish(p -> p.topicArn(topicArn).message(message)))
+            .onItem().invoke(item -> LOGGER.infov("Fired Quark[{0}, {1}}]", quark.getFlavor(), quark.getSpin()))
+            .onItem().transform(PublishResponse::messageId)
+            .onItem().transform(id -> Response.ok().entity(id).build());
+    }
+}
+
+
+
+

We create Uni instances from the CompletionStage objects returned by the asynchronous SNS client, and then transform the emitted item.

+
+
+

And corresponding async subscriber org.acme.sns.QuarksShieldAsyncResource

+
+
+
+
package org.acme.sns;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectReader;
+import io.smallrye.mutiny.Uni;
+import java.util.HashMap;
+import java.util.Map;
+import javax.inject.Inject;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.HeaderParam;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import org.acme.sns.model.Quark;
+import org.acme.sns.model.SnsNotification;
+import org.acme.sns.model.SnsSubscriptionConfirmation;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import org.jboss.logging.Logger;
+import software.amazon.awssdk.services.sns.SnsAsyncClient;
+import software.amazon.awssdk.services.sns.model.SubscribeResponse;
+
+@Path("/async/shield")
+public class QuarksShieldAsyncResource {
+
+    private static final Logger LOGGER = Logger.getLogger(QuarksShieldAsyncResource.class);
+
+    private static final String NOTIFICATION_TYPE = "Notification";
+    private static final String SUBSCRIPTION_CONFIRMATION_TYPE = "SubscriptionConfirmation";
+    private static final String UNSUBSCRIPTION_CONFIRMATION_TYPE = "UnsubscribeConfirmation";
+
+    @Inject
+    SnsAsyncClient sns;
+
+    @ConfigProperty(name = "topic.arn")
+    String topicArn;
+
+    @ConfigProperty(name = "quarks.shield.base.url")
+    String quarksShieldBaseUrl;
+
+    private volatile String subscriptionArn;
+
+    static Map<Class<?>, ObjectReader> READERS = new HashMap<>();
+
+    static {
+        READERS.put(SnsNotification.class, new ObjectMapper().readerFor(SnsNotification.class));
+        READERS.put(SnsSubscriptionConfirmation.class, new ObjectMapper().readerFor(SnsSubscriptionConfirmation.class));
+        READERS.put(Quark.class, new ObjectMapper().readerFor(Quark.class));
+    }
+
+    @POST
+    @Consumes({MediaType.TEXT_PLAIN})
+    public Uni<Response> notificationEndpoint(@HeaderParam("x-amz-sns-message-type") String messageType, String message) {
+        if (messageType == null) {
+            return Uni.createFrom().item(Response.status(400).build());
+        }
+
+        if (messageType.equals(NOTIFICATION_TYPE)) {
+            return Uni.createFrom().item(readObject(SnsNotification.class, message))
+                .onItem().transform(notification -> readObject(Quark.class, notification.getMessage()))
+                .onItem().invoke(quark -> LOGGER.infov("Quark[{0}, {1}] collision with the shield.", quark.getFlavor(), quark.getSpin()))
+                .onItem().transform(quark -> Response.ok().build());
+        } else if (messageType.equals(SUBSCRIPTION_CONFIRMATION_TYPE)) {
+            return Uni.createFrom().item(readObject(SnsSubscriptionConfirmation.class, message))
+                .onItem().transformToUni(msg ->
+                    Uni.createFrom().completionStage(
+                        sns.confirmSubscription(confirm -> confirm.topicArn(topicArn).token(msg.getToken())))
+                )
+                .onItem().invoke(resp -> LOGGER.info("Subscription confirmed. Ready for quarks collisions."))
+                .onItem().transform(resp -> Response.ok().build());
+        } else if (messageType.equals(UNSUBSCRIPTION_CONFIRMATION_TYPE)) {
+            LOGGER.info("We are unsubscribed");
+            return Uni.createFrom().item(Response.ok().build());
+        }
+
+        return Uni.createFrom().item(Response.status(400).entity("Unknown messageType").build());
+    }
+
+    @POST
+    @Path("/subscribe")
+    public Uni<Response> subscribe() {
+        return Uni.createFrom()
+            .completionStage(sns.subscribe(s -> s.topicArn(topicArn).protocol("http").endpoint(notificationEndpoint())))
+            .onItem().transform(SubscribeResponse::subscriptionArn)
+            .onItem().invoke(this::setSubscriptionArn)
+            .onItem().invoke(arn -> LOGGER.infov("Subscribed Quarks shield with id = {0} ", arn))
+            .onItem().transform(arn -> Response.ok().entity(arn).build());
+    }
+
+    @POST
+    @Path("/unsubscribe")
+    public Uni<Response> unsubscribe() {
+        if (subscriptionArn != null) {
+            return Uni.createFrom()
+                .completionStage(sns.unsubscribe(s -> s.subscriptionArn(subscriptionArn)))
+                .onItem().invoke(arn -> LOGGER.infov("Unsubscribed quarks shield for id = {0}", subscriptionArn))
+                .onItem().invoke(arn -> subscriptionArn = null)
+                .onItem().transform(arn -> Response.ok().build());
+        } else {
+            return Uni.createFrom().item(Response.status(400).entity("Not subscribed yet").build());
+        }
+    }
+
+    private String notificationEndpoint() {
+        return quarksShieldBaseUrl + "/async/shield";
+    }
+
+    private void setSubscriptionArn(String arn) {
+        this.subscriptionArn = arn;
+    }
+
+    private <T> T readObject(Class<T> clazz, String message) {
+        T object = null;
+        try {
+            object = READERS.get(clazz).readValue(message);
+        } catch (JsonProcessingException e) {
+            LOGGER.errorv("Unable to deserialize message <{0}> to Class <{1}>", message, clazz.getSimpleName());
+            throw new RuntimeException(e);
+        }
+        return object;
+    }
+}
+
+
+
+

And we need to add Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK. +The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface.

+
+
+

Environment variable: QUARKUS_SNS_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TYPE

+
+
+
+

url, apache

+

url

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_SNS_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container. +The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property. +Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_SNS_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance. +This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_SNS_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_SNS_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate. +If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_SNS_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call. +This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc. +This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SNS_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out. +This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SNS_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_SNS_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain. +Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider. +If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed. +This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool. +Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously. +When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through. +Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

Netty HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests. +For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed. +Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown. +Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown. +Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle. +Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed. +When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client. +Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through. +Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group. +If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group. +The prefix will be appended with a number unique to the thread factory and a number unique to the thread. +If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request. +When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/1.x/amazon-sqs.html b/quarkus-amazon-services/1.x/amazon-sqs.html new file mode 100644 index 0000000000..291ae269f7 --- /dev/null +++ b/quarkus-amazon-services/1.x/amazon-sqs.html @@ -0,0 +1,3204 @@ + + + + + + Amazon SQS Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon SQS Client

+
+
+
+

Amazon Simple Queue Service (SQS) is a fully managed message queuing service. +Using SQS, you can send, store, and receive messages between software components at any volume, without losing messages or requiring other +services to be available. +SQS offers two types of message queues. Standard queues offer maximum throughput, best-effort ordering and at-least-once delivery. +SQS FIFO queues are designed to guarantee that messages are processes exactly once, on the exact order that they were sent.

+
+
+

You can find more information about SQS at the Amazon SQS website.

+
+
+ + + + + +
+ + +The SQS extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client.

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use SQS locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 11+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    An AWS Account to access the SQS service

    +
  • +
  • +

    Docker for your system to run SQS locally for testing purposes

    +
  • +
+
+
+

Provision SQS locally via Dev Services

+
+

The easiest way to start working with SQS is to run a local instance using Dev Services.

+
+
+

You can optionally configure the queues that are created on startup with the quarkus.sqs.devservices.queues config property.

+
+
+
+

Provision SQS locally manually

+
+

You can also set up a local version of SQS manually, first start a LocalStack container:

+
+
+
+
docker run --rm --name local-sqs -p 4566:4576 -e SERVICES=sqs -e START_WEB=0 -d localstack/localstack:1.0.3
+
+
+
+

This starts a SQS instance that is accessible on port 4566.

+
+
+

Create an AWS profile for your local instance using AWS CLI:

+
+
+
+
$ aws configure --profile localstack
+AWS Access Key ID [None]: test-key
+AWS Secret Access Key [None]: test-secret
+Default region name [None]: us-east-1
+Default output format [None]: text
+
+
+
+
+

Create a SQS queue

+
+

Create a SQS queue using AWS CLI and store in QUEUE_URL environment variable.

+
+
+
+
QUEUE_URL=`aws sqs create-queue --queue-name=ColliderQueue --profile localstack --endpoint-url=http://localhost:4566`
+
+
+
+

Or, if you want to use your SQS queue on your AWS account create a queue using your default profile

+
+
+
+
QUEUE_URL=`aws sqs create-queue --queue-name=ColliderQueue`
+
+
+
+
+
+
+

Solution

+
+
+

The application built here allows shooting an elementary particles (quarks) into a ColliderQueue queue of the AWS SQS. +Additionally, we create a resource that allows receiving those quarks from the ColliderQueue queue in the order they were sent.

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step. +However, you can go right to the completed example.

+
+
+

Clone the Git repository: git clone https://github.com/quarkusio/quarkus-quickstarts.git, or download an archive.

+
+
+

The solution is located in the amazon-sqs-quickstart directory.

+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:2.16.9.Final:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-sqs-quickstart \
+    -DclassName="org.acme.sqs.QuarksCannonSyncResource" \
+    -Dpath="/sync-cannon" \
+    -Dextensions="resteasy-reactive-jackson,amazon-sqs"
+cd amazon-sqs-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy Reactive and Amazon SQS Client extensions. +After this, the amazon-sqs extension has been added to your pom.xml as well as the Mutiny support for RESTEasy.

+
+
+
+
+

Creating JSON REST service

+
+
+

In this example, we will create an application that sends quarks via the queue. The example application will demonstrate the two programming models supported by the extension.

+
+
+

First, let’s create the Quark bean as follows:

+
+
+
+
package org.acme.sqs.model;
+
+import io.quarkus.runtime.annotations.RegisterForReflection;
+import java.util.Objects;
+
+@RegisterForReflection
+public class Quark {
+
+    private String flavor;
+    private String spin;
+
+    public Quark() {
+    }
+
+    public String getFlavor() {
+        return flavor;
+    }
+
+    public void setFlavor(String flavor) {
+        this.flavor = flavor;
+    }
+
+    public String getSpin() {
+        return spin;
+    }
+
+    public void setSpin(String spin) {
+        this.spin = spin;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (!(obj instanceof Quark)) {
+            return false;
+        }
+
+        Quark other = (Quark) obj;
+
+        return Objects.equals(other.flavor, this.flavor);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(this.flavor);
+    }
+}
+
+
+
+

Then, create a org.acme.sqs.QuarksCannonSyncResource that will provide an API to shoot quarks into the SQS queue using the synchronous client.

+
+
+ + + + + +
+ + +The @RegisterForReflection annotation instructs Quarkus to keep the class and its members during the native compilation. More details about the @RegisterForReflection annotation can be found on the native application tips page. +
+
+
+
+
package org.acme.sqs;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectWriter;
+import javax.inject.Inject;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import org.acme.sqs.model.Quark;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import org.jboss.logging.Logger;
+import software.amazon.awssdk.services.sqs.SqsClient;
+import software.amazon.awssdk.services.sqs.model.SendMessageResponse;
+
+@Path("/sync/cannon")
+@Produces(MediaType.TEXT_PLAIN)
+public class QuarksCannonSyncResource {
+
+    private static final Logger LOGGER = Logger.getLogger(QuarksCannonSyncResource.class);
+
+    @Inject
+    SqsClient sqs;
+
+    @ConfigProperty(name = "queue.url")
+    String queueUrl;
+
+    static ObjectWriter QUARK_WRITER = new ObjectMapper().writerFor(Quark.class);
+
+    @POST
+    @Path("/shoot")
+    @Consumes(MediaType.APPLICATION_JSON)
+    public Response sendMessage(Quark quark) throws Exception {
+        String message = QUARK_WRITER.writeValueAsString(quark);
+        SendMessageResponse response = sqs.sendMessage(m -> m.queueUrl(queueUrl).messageBody(message));
+        LOGGER.infov("Fired Quark[{0}, {1}}]", quark.getFlavor(), quark.getSpin());
+        return Response.ok().entity(response.messageId()).build();
+    }
+}
+
+
+
+

Because of the fact messages sent to the queue must be a String, we’re using Jackson’s ObjectWriter in order to serialize our Quark objects into a String.

+
+
+

Now, create the org.acme.QuarksShieldSyncResource REST resources that provides an endpoint to read the messages from the ColliderQueue queue.

+
+
+
+
package org.acme.sqs;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectReader;
+import java.util.List;
+import java.util.stream.Collectors;
+import javax.inject.Inject;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import org.acme.sqs.model.Quark;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import org.jboss.logging.Logger;
+import software.amazon.awssdk.services.sqs.SqsClient;
+import software.amazon.awssdk.services.sqs.model.Message;
+
+@Path("/sync/shield")
+public class QuarksShieldSyncResource {
+
+    private static final Logger LOGGER = Logger.getLogger(QuarksShieldSyncResource.class);
+
+    @Inject
+    SqsClient sqs;
+
+    @ConfigProperty(name = "queue.url")
+    String queueUrl;
+
+    static ObjectReader QUARK_READER = new ObjectMapper().readerFor(Quark.class);
+
+    @GET
+    public List<Quark> receive() {
+        List<Message> messages = sqs.receiveMessage(m -> m.maxNumberOfMessages(10).queueUrl(queueUrl)).messages();
+
+        return messages.stream()
+            .map(Message::body)
+            .map(this::toQuark)
+            .collect(Collectors.toList());
+    }
+
+    private Quark toQuark(String message) {
+        Quark quark = null;
+        try {
+            quark = QUARK_READER.readValue(message);
+        } catch (Exception e) {
+            LOGGER.error("Error decoding message", e);
+            throw new RuntimeException(e);
+        }
+        return quark;
+    }
+}
+
+
+
+

We are using here a Jackson’s ObjectReader in order to deserialize queue messages into our Quark POJOs.

+
+
+
+
+

Configuring SQS clients

+
+
+

Both SQS clients (sync and async) are configurable via the application.properties file that can be provided in the src/main/resources directory. +Additionally, you need to add to the classpath a proper implementation of the sync client. By default the extension uses the URL connection HTTP client, so +you need to add a URL connection client dependency to the pom.xml file:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.sqs.sync-client.type=apache
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

If you’re going to use a local SQS instance, configure it as follows:

+
+
+
+
quarkus.sqs.endpoint-override=http://localhost:4566
+
+quarkus.sqs.aws.region=us-east-1
+quarkus.sqs.aws.credentials.type=static
+quarkus.sqs.aws.credentials.static-provider.access-key-id=test-key
+quarkus.sqs.aws.credentials.static-provider.secret-access-key=test-secret
+
+
+
+
    +
  • +

    quarkus.sqs.aws.region - It’s required by the client, but since you’re using a local SQS instance use us-east-1 as it’s a default region of LocalStack’s SQS.

    +
  • +
  • +

    quarkus.sqs.aws.credentials.type - Set static credentials provider with any values for access-key-id and secret-access-key

    +
  • +
  • +

    quarkus.sqs.endpoint-override - Override the SQS client to use a local instance instead of an AWS service

    +
  • +
+
+
+

If you want to work with an AWS account, you can simply remove or comment out all SQS related properties. By default, the SQS client extension +will use the default credentials provider chain that looks for credentials in this order:

+
+
+
    +
  • +

    Java System Properties - aws.accessKeyId and aws.secretAccessKey

    +
  • +
  • +

    Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

    +
  • +
  • +

    Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

    +
  • +
  • +

    Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

    +
  • +
  • +

    Instance profile credentials delivered through the Amazon EC2 metadata service

    +
  • +
+
+
+

And the region from your AWS CLI profile will be used.

+
+
+
+
+

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can be run with java -Dqueue.url=$QUEUE_URL -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

Create a org.acme.sqs.QuarksCannonAsyncResource REST resource that will be similar to our QuarksCannonSyncResource but using an asynchronous programming model.

+
+
+
+
package org.acme.sqs;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectWriter;
+import io.smallrye.mutiny.Uni;
+import javax.inject.Inject;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import org.acme.sqs.model.Quark;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import org.jboss.logging.Logger;
+import software.amazon.awssdk.services.sqs.SqsAsyncClient;
+import software.amazon.awssdk.services.sqs.model.SendMessageResponse;
+
+@Path("/async/cannon")
+@Produces(MediaType.APPLICATION_JSON)
+@Consumes(MediaType.APPLICATION_JSON)
+public class QuarksCannonAsyncResource {
+
+    private static final Logger LOGGER = Logger.getLogger(QuarksCannonAsyncResource.class);
+
+    @Inject
+    SqsAsyncClient sqs;
+
+    @ConfigProperty(name = "queue.url")
+    String queueUrl;
+
+    static ObjectWriter QUARK_WRITER = new ObjectMapper().writerFor(Quark.class);
+
+    @POST
+    @Path("/shoot")
+    @Consumes(MediaType.APPLICATION_JSON)
+    public Uni<Response> sendMessage(Quark quark) throws Exception {
+        String message = QUARK_WRITER.writeValueAsString(quark);
+        return Uni.createFrom()
+            .completionStage(sqs.sendMessage(m -> m.queueUrl(queueUrl).messageBody(message)))
+            .onItem().invoke(item -> LOGGER.infov("Fired Quark[{0}, {1}}]", quark.getFlavor(), quark.getSpin()))
+            .onItem().transform(SendMessageResponse::messageId)
+            .onItem().transform(id -> Response.ok().entity(id).build());
+    }
+}
+
+
+
+

We create Uni instances from the CompletionStage objects returned by the asynchronous SQS client, and then transform the emitted item.

+
+
+

And the corresponding async receiver of the queue messages org.acme.sqs.QuarksShieldAsyncResource

+
+
+
+
package org.acme.sqs;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectReader;
+import io.smallrye.mutiny.Uni;
+import java.util.List;
+import java.util.stream.Collectors;
+import javax.inject.Inject;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import org.acme.sqs.model.Quark;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import org.jboss.logging.Logger;
+import software.amazon.awssdk.services.sqs.SqsAsyncClient;
+import software.amazon.awssdk.services.sqs.model.Message;
+import software.amazon.awssdk.services.sqs.model.ReceiveMessageResponse;
+
+@Path("/async/shield")
+public class QuarksShieldAsyncResource {
+
+    private static final Logger LOGGER = Logger.getLogger(QuarksShieldAsyncResource.class);
+
+    @Inject
+    SqsAsyncClient sqs;
+
+    @ConfigProperty(name = "queue.url")
+    String queueUrl;
+
+    static ObjectReader QUARK_READER = new ObjectMapper().readerFor(Quark.class);
+
+    @GET
+    public Uni<List<Quark>> receive() {
+        return Uni.createFrom()
+            .completionStage(sqs.receiveMessage(m -> m.maxNumberOfMessages(10).queueUrl(queueUrl)))
+            .onItem().transform(ReceiveMessageResponse::messages)
+            .onItem().transform(m -> m.stream().map(Message::body).map(this::toQuark).collect(Collectors.toList()));
+    }
+
+    private Quark toQuark(String message) {
+        Quark quark = null;
+        try {
+            quark = QUARK_READER.readValue(message);
+        } catch (Exception e) {
+            LOGGER.error("Error decoding message", e);
+            throw new RuntimeException(e);
+        }
+        return quark;
+    }
+}
+
+
+
+

And we need to add the Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK. +The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface.

+
+
+

Environment variable: QUARKUS_SQS_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TYPE

+
+
+
+

url, apache

+

url

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_SQS_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container. +The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property. +Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_SQS_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance. +This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_SQS_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

The queues to create on startup.

+
+
+

Environment variable: QUARKUS_SQS_DEVSERVICES_QUEUES

+
+
+

list of string

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_SQS_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate. +If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_SQS_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call. +This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc. +This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SQS_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out. +This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SQS_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_SQS_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain. +Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider. +If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed. +This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool. +Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously. +When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through. +Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

Netty HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests. +For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed. +Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown. +Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown. +Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle. +Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed. +When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client. +Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through. +Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group. +If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group. +The prefix will be appended with a number unique to the thread factory and a number unique to the thread. +If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request. +When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/1.x/amazon-ssm.html b/quarkus-amazon-services/1.x/amazon-ssm.html new file mode 100644 index 0000000000..3b670ac4f3 --- /dev/null +++ b/quarkus-amazon-services/1.x/amazon-ssm.html @@ -0,0 +1,3092 @@ + + + + + + Amazon SSM Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon SSM Client

+
+
+
+

AWS Systems Manager (formerly Amazon Simple Systems Manager, or SSM) is a service that you can use to view and control your infrastructure on AWS. +One of the most useful features of SSM for microservices is the Parameter Store, which provides secure, hierarchical storage for configuration data management and secrets management..

+
+
+

You can find more information about SSM at the AWS Systems Manager website.

+
+
+ + + + + +
+ + +The SSM extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client.

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use SSM locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 11+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    An AWS Account to access the SSM service

    +
  • +
  • +

    Docker for your system to run SSM locally for testing purposes

    +
  • +
+
+
+

Provision SSM locally via Dev Services

+
+

The easiest way to start working with SSM is to run a local instance using Dev Services.

+
+
+
+

Provision SSM locally manually

+
+

You can also set up a local version of SSM manually, first start a LocalStack container:

+
+
+
+
docker run --rm --name local-ssm --publish 4566:4583 -e SERVICES=ssm -e START_WEB=0 -d localstack/localstack:1.0.3
+
+
+
+

This starts a SSM instance that is accessible on port 4566.

+
+
+

Create an AWS profile for your local instance using AWS CLI:

+
+
+
+
$ aws configure --profile localstack
+AWS Access Key ID [None]: test-key
+AWS Secret Access Key [None]: test-secret
+Default region name [None]: us-east-1
+Default output format [None]:
+
+
+
+
+
+
+

Solution

+
+
+

The application built here allows to store and retrieve parameters using the SSM parameter store.

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step. +However, you can go right to the completed example.

+
+
+

Clone the Git repository: git clone https://github.com/quarkusio/quarkus-quickstarts.git, or download an archive.

+
+
+

The solution is located in the amazon-ssm-quickstart directory.

+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:2.16.9.Final:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-ssm-quickstart \
+    -DclassName="org.acme.ssm.QuarkusSsmSyncResource" \
+    -Dpath="/sync" \
+    -Dextensions="resteasy-reactive-jackson,amazon-ssm"
+cd amazon-ssm-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy Reactive/JAX-RS and Amazon SSM Client extensions. +After this, the amazon-ssm extension has been added to your pom.xml as well as the Mutiny support for RESTEasy.

+
+
+
+
+

Creating JSON REST service

+
+
+

In this example, we will create an application that allows us to store and retrieve parameters to and from SSM parameter store using a RESTful API. +The example application will demonstrate the two programming models supported by the extension.

+
+
+

Let’s start with an abstract org.acme.ssm.QuarkusSsmResource class to provide the common functionality we will need for both the synchronous and asynchrounous exposures.

+
+
+
+
package org.acme.ssm;
+
+import static java.lang.Boolean.TRUE;
+import static java.util.stream.Collectors.toMap;
+
+import java.util.Map;
+import java.util.stream.Collector;
+
+import javax.annotation.PostConstruct;
+
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+
+import software.amazon.awssdk.services.ssm.model.GetParameterRequest;
+import software.amazon.awssdk.services.ssm.model.GetParametersByPathRequest;
+import software.amazon.awssdk.services.ssm.model.Parameter;
+import software.amazon.awssdk.services.ssm.model.ParameterType;
+import software.amazon.awssdk.services.ssm.model.PutParameterRequest;
+
+public abstract class QuarkusSsmResource {
+
+    @ConfigProperty(name = "parameters.path") (1)
+    String parametersPath;
+
+    @PostConstruct (2)
+    void normalizePath() {
+        if (!parametersPath.startsWith("/")) {
+            parametersPath = "/" + parametersPath;
+        }
+        if (!parametersPath.endsWith("/")) {
+            parametersPath = parametersPath + "/";
+        }
+    }
+
+    protected Collector<Parameter, ?, Map<String, String>> parametersToMap() { (3)
+        return toMap(p -> p.name().substring(parametersPath.length()), Parameter::value);
+    }
+
+    protected GetParametersByPathRequest generateGetParametersByPathRequest() {
+        return GetParametersByPathRequest.builder() (4)
+                .path(parametersPath)
+                .withDecryption(TRUE)
+                .build();
+    }
+
+    protected PutParameterRequest generatePutParameterRequest(String name, String value, boolean secure) {
+        return PutParameterRequest.builder() (5)
+                .name(parametersPath + name)
+                .value(value)
+                .type(secure ? ParameterType.SECURE_STRING : ParameterType.STRING)
+                .overwrite(TRUE)
+                .build();
+    }
+
+    protected GetParameterRequest generateGetParameterRequest(String name) {
+        return GetParameterRequest.builder() (6)
+                .name(parametersPath + name)
+                .withDecryption(TRUE)
+                .build();
+    }
+}
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
1Inject a configured path under which to store parameters
2Ensure the path starts and ends with /
3Collect parameters into a map of simple names and values
4Generate a request for all parameters under the configured path
5Generate a request to set a specific parameter
6Generate a request to get a specific parameter value
+
+
+

Now, we can extend the class and create the synchronous implementation in the org.acme.ssm.QuarkusSsmSyncResource class.

+
+
+
+
package org.acme.ssm;
+
+import java.util.Map;
+
+import javax.inject.Inject;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DefaultValue;
+import javax.ws.rs.GET;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+
+import org.jboss.resteasy.reactive.RestQuery;
+
+import software.amazon.awssdk.services.ssm.SsmClient;
+
+@Path("/sync")
+public class QuarkusSsmSyncResource extends QuarkusSsmResource {
+
+    @Inject (1)
+    SsmClient ssm;
+
+    @GET
+    @Produces(MediaType.APPLICATION_JSON)
+    public Map<String, String> getParameters() {
+        return ssm.getParametersByPath(generateGetParametersByPathRequest())
+                .parameters().stream().collect(parametersToMap());
+    }
+
+    @PUT
+    @Path("/{name}")
+    @Consumes(MediaType.TEXT_PLAIN)
+    public void setParameter(String name,
+            @RestQuery("secure") @DefaultValue("false") boolean secure,
+            String value) {
+
+        ssm.putParameter(generatePutParameterRequest(name, value, secure));
+    }
+
+    @GET
+    @Path("/{name}")
+    @Produces(MediaType.TEXT_PLAIN)
+    public String getParameter(String name) {
+        return ssm.getParameter(generateGetParameterRequest(name))
+                .parameter().value();
+    }
+}
+
+
+
+ + + + + +
1Inject the client provided by the amazon-ssm extension
+
+
+

Using the Amazon SSM SDK, we can easily store and retrieve arbitrary name/value pairs, and we can optionally store the values in a secure manner.

+
+
+
+
+

Configuring SSM clients

+
+
+

Both SSM clients (sync and async) are configurable via the application.properties file that can be provided in the src/main/resources directory. +Additionally, you need to add to the classpath a proper implementation of the sync client. By default the extension uses the URL connection HTTP client, so +you need to add a URL connection client dependency to the pom.xml file:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.ssm.sync-client.type=apache
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

If you’re going to use a local SSM instance, configure it as follows:

+
+
+
+
quarkus.ssm.endpoint-override=http://localhost:4566 (1)
+
+quarkus.ssm.aws.region=us-east-1 (2)
+quarkus.ssm.aws.credentials.type=static (3)
+quarkus.ssm.aws.credentials.static-provider.access-key-id=test-key
+quarkus.ssm.aws.credentials.static-provider.secret-access-key=test-secret
+
+
+
+ + + + + + + + + + + + + +
1Override the SSM client to use LocalStack instead of the actual AWS service
2Localstack defaults to us-east-1
3The static credentials provider lets you set the access-key-id and secret-access-key directly
+
+
+

If you want to work with an AWS account, you can simply remove or comment out all Amazon SSM related properties. By default, the SSM client extension will use the default credentials provider chain that looks for credentials in this order:

+
+
+
    +
  • +

    Java System Properties - aws.accessKeyId and aws.secretAccessKey

    +
  • +
  • +

    Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

    +
  • +
  • +

    Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

    +
  • +
  • +

    Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

    +
  • +
  • +

    Instance profile credentials delivered through the Amazon EC2 metadata service

    +
  • +
+
+
+

And the region from your AWS CLI profile will be used.

+
+
+
+
+

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can then be run with java -Dparameters.path=/quarkus/is/awesome/ -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

Create a org.acme.ssm.QuarkusSsmAsyncResource REST resource that will be similar to our QuarkusSsmSyncResource but using an asynchronous programming model.

+
+
+
+
package org.acme.ssm;
+
+import java.util.Map;
+
+import javax.inject.Inject;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DefaultValue;
+import javax.ws.rs.GET;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+
+import io.smallrye.mutiny.Uni;
+import org.jboss.resteasy.reactive.RestQuery;
+import software.amazon.awssdk.services.ssm.SsmAsyncClient;
+
+@Path("/async")
+public class QuarkusSsmAsyncResource extends QuarkusSsmResource {
+
+    @Inject
+    SsmAsyncClient ssm;
+
+    @GET
+    @Produces(MediaType.APPLICATION_JSON)
+    public Uni<Map<String, String>> getParameters() {
+        return Uni.createFrom().completionStage(ssm.getParametersByPath(generateGetParametersByPathRequest()))
+                .onItem().transform(r -> r.parameters().stream().collect(parametersToMap()));
+    }
+
+    @PUT
+    @Path("/{name}")
+    @Consumes(MediaType.TEXT_PLAIN)
+    public Uni<Void> setParameter(String name,
+            @RestQuery("secure") @DefaultValue("false") boolean secure,
+            String value) {
+
+        return Uni.createFrom().completionStage(ssm.putParameter(generatePutParameterRequest(name, value, secure)))
+                .onItem().transform(r -> null);
+    }
+
+    @GET
+    @Path("/{name}")
+    @Produces(MediaType.TEXT_PLAIN)
+    public Uni<String> getParameter(String name) {
+        return Uni.createFrom().completionStage(ssm.getParameter(generateGetParameterRequest(name)))
+                .onItem().transform(r -> r.parameter().value());
+    }
+}
+
+
+
+

Note that the SsmAsyncClient behaves just like the SsmClient, but returns CompletionStage objects which we use to create Uni instances, and then transform the emitted item.

+
+
+

To enable the asynchronous client, we also need to add the Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK. +The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface.

+
+
+

Environment variable: QUARKUS_SSM_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TYPE

+
+
+
+

url, apache

+

url

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_SSM_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container. +The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property. +Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_SSM_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance. +This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_SSM_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_SSM_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate. +If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_SSM_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call. +This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc. +This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SSM_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out. +This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SSM_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_SSM_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain. +Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider. +If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed. +This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool. +Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously. +When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through. +Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

Netty HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests. +For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed. +Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown. +Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown. +Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle. +Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed. +When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client. +Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through. +Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group. +If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group. +The prefix will be appended with a number unique to the thread factory and a number unique to the thread. +If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request. +When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/1.x/amazon-sts.html b/quarkus-amazon-services/1.x/amazon-sts.html new file mode 100644 index 0000000000..b2d3c8d201 --- /dev/null +++ b/quarkus-amazon-services/1.x/amazon-sts.html @@ -0,0 +1,2827 @@ + + + + + + Amazon STS Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon STS Client

+
+
+
+

AWS Security Token Service (AWS STS) is a web service that enables you to request temporary, limited-privilege credentials for users.

+
+
+

You can find more information about STS at AWS Security Token Service API Reference.

+
+
+ + + + + +
+ + +The STS extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client.

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use STS locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 11+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    An AWS Account to access the STS service

    +
  • +
  • +

    Docker for your system to run STS locally for testing purposes

    +
  • +
+
+
+

Provision STS locally via Dev Services

+
+

The easiest way to start working with STS is to run a local instance using Dev Services.

+
+
+
+

Provision STS locally manually

+
+

You can also set up a local version of STS manually, first start a LocalStack container:

+
+
+
+
docker run --rm --name local-sts --publish 4592:4592 -e SERVICES=sts -e START_WEB=0 -d localstack/localstack:1.0.3
+
+
+
+

This starts a STS instance that is accessible on port 4592.

+
+
+

Create an AWS profile for your local instance using AWS CLI:

+
+
+
+
$ aws configure --profile localstack
+AWS Access Key ID [None]: test-key
+AWS Secret Access Key [None]: test-secret
+Default region name [None]: us-east-1
+Default output format [None]:
+
+
+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:2.16.9.Final:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-sts-quickstart \
+    -DclassName="org.acme.sts.QuarkusStsSyncResource" \
+    -Dpath="/sync" \
+    -Dextensions="resteasy-reactive-jackson,amazon-sts"
+cd amazon-sts-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy Reactive/JAX-RS and Amazon STS Client extensions. +After this, the amazon-sts extension has been added to your pom.xml as well as the Mutiny support for RESTEasy.

+
+
+
+
+

Configuring STS clients

+
+
+

Both STS clients (sync and async) are configurable via the application.properties file that can be provided in the src/main/resources directory. +Additionally, you need to add to the classpath a proper implementation of the sync client. By default the extension uses the URL connection HTTP client, so +you need to add a URL connection client dependency to the pom.xml file:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.sts.sync-client.type=apache
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

If you’re going to use a local STS instance, configure it as follows:

+
+
+
+
quarkus.sts.endpoint-override=http://localhost:4592 (1)
+
+quarkus.sts.aws.region=us-east-1 (2)
+quarkus.sts.aws.credentials.type=static (3)
+quarkus.sts.aws.credentials.static-provider.access-key-id=test-key
+quarkus.sts.aws.credentials.static-provider.secret-access-key=test-secret
+
+
+
+ + + + + + + + + + + + + +
1Override the STS client to use LocalStack instead of the actual AWS service
2Localstack defaults to us-east-1
3The static credentials provider lets you set the access-key-id and secret-access-key directly
+
+
+

If you want to work with an AWS account, you can simply remove or comment out all Amazon STS related properties. By default, the ST client extension will use the default credentials provider chain that looks for credentials in this order:

+
+
+
    +
  • +

    Java System Properties - aws.accessKeyId and aws.secretAccessKey

    +
  • +
  • +

    Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

    +
  • +
  • +

    Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

    +
  • +
  • +

    Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

    +
  • +
  • +

    Instance profile credentials delivered through the Amazon EC2 metadata service

    +
  • +
+
+
+

And the region from your AWS CLI profile will be used.

+
+
+
+
+

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can then be run with java -Dparameters.path=/quarkus/is/awesome/ -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK. +The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface.

+
+
+

Environment variable: QUARKUS_STS_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TYPE

+
+
+
+

url, apache

+

url

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_STS_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container. +The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property. +Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_STS_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance. +This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_STS_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_STS_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate. +If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_STS_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call. +This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc. +This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_STS_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out. +This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_STS_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_STS_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain. +Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider. +If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed. +This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool. +Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously. +When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through. +Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

Netty HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests. +For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed. +Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown. +Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown. +Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle. +Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed. +When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client. +Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through. +Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group. +If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group. +The prefix will be appended with a number unique to the thread factory and a number unique to the thread. +If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request. +When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/1.x/dev-services.html b/quarkus-amazon-services/1.x/dev-services.html new file mode 100644 index 0000000000..0e258cab38 --- /dev/null +++ b/quarkus-amazon-services/1.x/dev-services.html @@ -0,0 +1,1307 @@ + + + + + + Dev services for Amazon Services :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Dev services for Amazon Services

+
+
+
+

Quarkus Amazon Services automatically starts a LocalStack container in dev mode and when running tests. So, you don’t have to start one manually. The extension client is configured automatically.

+
+
+
+
+

Enabling / Disabling Dev Services for Amazon Services

+
+
+

Dev Services for Amazon Services is automatically enabled for each extensions added to pom.xml except in the following situations:

+
+
+
    +
  • +

    quarkus.devservices.enabled is set to false

    +
  • +
  • +

    devservices.enabled is set to false per extension (eg. quarkus.s3.devservices.enabled=false)

    +
  • +
  • +

    the endpoint-override is configured (eg. quarkus.s3.endpoint-override=http://localhost:4566)

    +
  • +
  • +

    Your environment does not support Docker

    +
  • +
+
+
+
+
+

Shared services

+
+
+

By default, Dev Services for Amazon Services will start one LocalStack container with only the needed services.

+
+
+

If you need to share a particular service between applications, Dev Services for Amazon Services implements a service discovery mechanism for your multiple Quarkus applications running in dev mode to share a single container. To ease sharing, each service will be started in its own container.

+
+
+

Dev Services for Amazon Services starts the container with the quarkus-dev-service-localstack label and service name as the value, which is used to identify the container. +If you need multiple (shared) container, you can configure the devservices.service-name attribute for a given extension (eg. quarkus.s3.devservices.services-name) and indicate the container name. It looks for a container with the same value, or starts a new one if none can be found. The default service name is localstack.

+
+
+

Sharing is disabled by default in dev mode, and is always disabled in test mode. You can enable the sharing with devservices.shared=true for a given extension (e.g. quarkus.s3.devservices.shared=true). All other non-shared services will be grouped in another container.

+
+
+
+
+

Configuring the image

+
+
+

Dev Services for Amazon Services uses localstack/localstack image. You can configure the image and version using the quarkus.aws.devservices.localstack.image-name property:

+
+
+
+
quarkus.aws.devservices.localstack.image-name=localstack/localstack:1.0.3
+
+
+
+
+
+

Specific configuration

+
+
+

Dev Services for Amazon Services can support specific properties sent to the container. It can be globally applied to all containers or be specified per service as follows:

+
+
+
+
quarkus.aws.devservices.localstack.container-properties.START_WEB=0
+quarkus.dynamodb.devservices.container-properties.DYNAMODB_HEAP_SIZE=1G
+
+
+
+

Refer to the LocalStack documentation for more configuration : https://docs.localstack.cloud/localstack/configuration/#local-aws-services. Note that not all environment variables are supported and some may affect Dev Services for Amazon Services.

+
+
+
+
+

Additional services

+
+
+

To start additional services for which a Quarkus extension does not exist or is not imported in the project, use the additional-services property:

+
+
+
+
quarkus.aws.devservices.localstack.additional-services."kinesis".enabled=true
+quarkus.aws.devservices.localstack.additional-services."redshift".enabled=true
+
+
+
+

The key is the name of the service to enable and must be a valid LocalStack service name.

+
+
+
+
+

Additional setup

+
+
+

Some extensions support additional configuration to be applied at startup. Refer to the extension documentation.

+
+
+
+
+

Cognito

+
+
+

The Cognito extension is not using LocalStack but Moto.

+
+
+

Dev Services for Amazon Services uses the latest motoserver/moto image. You can configure the image and version using the quarkus.aws.devservices.moto.image-name property:

+
+
+
+
quarkus.aws.devservices.moto.image-name=motoserver/moto:3.0.2
+
+
+
+

Dev Services for Amazon Services can support specific properties sent to the container as follows:

+
+
+
+
quarkus.aws.devservices.moto.container-properties.MOTO_COGNITO_IDP_USER_POOL_ID_STRATEGY=HASH
+
+
+
+
+
+

Global DevServices Configuration Reference

+
+
+

LocalStack Configuration

+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The LocalStack container image to use.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_IMAGE_NAME

+
+
+

string

localstack/localstack:1.0.3

+
+
+
+

Path to init scripts folder executed during localstack startup.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_INIT_SCRIPTS_FOLDER

+
+
+

string

+
+
+
+

Specific container log message to be waiting for localstack init scripts completion.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_INIT_COMPLETION_MSG

+
+
+

string

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_ADDITIONAL_SERVICES__ADDITIONAL_SERVICES__ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container. +The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property. +Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_ADDITIONAL_SERVICES__ADDITIONAL_SERVICES__SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance. +This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_ADDITIONAL_SERVICES__ADDITIONAL_SERVICES__SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_ADDITIONAL_SERVICES__ADDITIONAL_SERVICES__CONTAINER_PROPERTIES

+
+
+

Map<String,String>

+
+
+

Moto Configuration

+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The Moto container image to use.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_MOTO_IMAGE_NAME

+
+
+

string

motoserver/moto

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_MOTO_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/1.x/includes/attributes.html b/quarkus-amazon-services/1.x/includes/attributes.html new file mode 100644 index 0000000000..09b639f3a5 --- /dev/null +++ b/quarkus-amazon-services/1.x/includes/attributes.html @@ -0,0 +1,957 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/1.x/includes/quarkus-amazon-cognitouserpools.html b/quarkus-amazon-services/1.x/includes/quarkus-amazon-cognitouserpools.html new file mode 100644 index 0000000000..6ee3086617 --- /dev/null +++ b/quarkus-amazon-services/1.x/includes/quarkus-amazon-cognitouserpools.html @@ -0,0 +1,2589 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK. +The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TYPE

+
+
+
+

url, apache

+

url

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container. +The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property. +Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance. +This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate. +If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call. +This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc. +This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out. +This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain. +Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider. +If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed. +This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool. +Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously. +When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through. +Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

Netty HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests. +For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed. +Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown. +Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown. +Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle. +Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed. +When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client. +Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through. +Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group. +If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group. +The prefix will be appended with a number unique to the thread factory and a number unique to the thread. +If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request. +When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/1.x/includes/quarkus-amazon-dynamodb-enhanced.html b/quarkus-amazon-services/1.x/includes/quarkus-amazon-dynamodb-enhanced.html new file mode 100644 index 0000000000..c718d77cf0 --- /dev/null +++ b/quarkus-amazon-services/1.x/includes/quarkus-amazon-dynamodb-enhanced.html @@ -0,0 +1,991 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of extensions to load with the enhanced client. +The list should consists of class names which implements software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClientExtension interface.

+
+
+

Environment variable: QUARKUS_DYNAMODBENHANCED_CLIENT_EXTENSIONS

+
+
+

list of string

+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/1.x/includes/quarkus-amazon-dynamodb.html b/quarkus-amazon-services/1.x/includes/quarkus-amazon-dynamodb.html new file mode 100644 index 0000000000..98b4306b1c --- /dev/null +++ b/quarkus-amazon-services/1.x/includes/quarkus-amazon-dynamodb.html @@ -0,0 +1,2606 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK. +The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface.

+
+
+

Environment variable: QUARKUS_DYNAMODB_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TYPE

+
+
+
+

url, apache

+

url

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_DYNAMODB_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container. +The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property. +Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_DYNAMODB_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance. +This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_DYNAMODB_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Enable DynamoDB service endpoint discovery.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ENABLE_ENDPOINT_DISCOVERY

+
+
+

boolean

false

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_DYNAMODB_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate. +If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call. +This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc. +This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_DYNAMODB_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out. +This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_DYNAMODB_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain. +Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider. +If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed. +This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool. +Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously. +When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through. +Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

Netty HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests. +For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed. +Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown. +Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown. +Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle. +Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed. +When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client. +Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through. +Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group. +If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group. +The prefix will be appended with a number unique to the thread factory and a number unique to the thread. +If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request. +When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/1.x/includes/quarkus-amazon-iam.html b/quarkus-amazon-services/1.x/includes/quarkus-amazon-iam.html new file mode 100644 index 0000000000..11ae1f3df4 --- /dev/null +++ b/quarkus-amazon-services/1.x/includes/quarkus-amazon-iam.html @@ -0,0 +1,2589 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK. +The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface.

+
+
+

Environment variable: QUARKUS_IAM_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TYPE

+
+
+
+

url, apache

+

url

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_IAM_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container. +The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property. +Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_IAM_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance. +This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_IAM_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_IAM_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate. +If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_IAM_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call. +This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc. +This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_IAM_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out. +This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_IAM_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_IAM_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain. +Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider. +If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed. +This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool. +Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously. +When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through. +Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

Netty HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests. +For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed. +Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown. +Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown. +Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle. +Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed. +When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client. +Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through. +Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group. +If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group. +The prefix will be appended with a number unique to the thread factory and a number unique to the thread. +If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request. +When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/1.x/includes/quarkus-amazon-kms.html b/quarkus-amazon-services/1.x/includes/quarkus-amazon-kms.html new file mode 100644 index 0000000000..103718f879 --- /dev/null +++ b/quarkus-amazon-services/1.x/includes/quarkus-amazon-kms.html @@ -0,0 +1,2589 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK. +The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface.

+
+
+

Environment variable: QUARKUS_KMS_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TYPE

+
+
+
+

url, apache

+

url

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_KMS_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container. +The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property. +Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_KMS_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance. +This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_KMS_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_KMS_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate. +If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_KMS_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call. +This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc. +This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_KMS_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out. +This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_KMS_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_KMS_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain. +Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider. +If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed. +This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool. +Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously. +When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through. +Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

Netty HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests. +For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed. +Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown. +Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown. +Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle. +Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed. +When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client. +Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through. +Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group. +If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group. +The prefix will be appended with a number unique to the thread factory and a number unique to the thread. +If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request. +When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/1.x/includes/quarkus-amazon-s3.html b/quarkus-amazon-services/1.x/includes/quarkus-amazon-s3.html new file mode 100644 index 0000000000..eba8eaa6f8 --- /dev/null +++ b/quarkus-amazon-services/1.x/includes/quarkus-amazon-s3.html @@ -0,0 +1,2727 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK. +The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface.

+
+
+

Environment variable: QUARKUS_S3_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TYPE

+
+
+
+

url, apache

+

url

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_S3_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container. +The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property. +Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_S3_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance. +This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_S3_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

The buckets to create on startup.

+
+
+

Environment variable: QUARKUS_S3_DEVSERVICES_BUCKETS

+
+
+

list of string

default

+
+
+
+

Enable using the accelerate endpoint when accessing S3. +Accelerate endpoints allow faster transfer of objects by using Amazon CloudFront’s globally distributed edge locations.

+
+
+

Environment variable: QUARKUS_S3_ACCELERATE_MODE

+
+
+

boolean

false

+
+
+
+

Enable doing a validation of the checksum of an object stored in S3.

+
+
+

Environment variable: QUARKUS_S3_CHECKSUM_VALIDATION

+
+
+

boolean

true

+
+
+
+

Enable using chunked encoding when signing the request payload for software.amazon.awssdk.services.s3.model.PutObjectRequest and software.amazon.awssdk.services.s3.model.UploadPartRequest.

+
+
+

Environment variable: QUARKUS_S3_CHUNKED_ENCODING

+
+
+

boolean

true

+
+
+
+

Enable dualstack mode for accessing S3. If you want to use IPv6 when accessing S3, dualstack must be enabled.

+
+
+

Environment variable: QUARKUS_S3_DUALSTACK

+
+
+

boolean

false

+
+
+
+

Enable using path style access for accessing S3 objects instead of DNS style access. DNS style access is preferred as it will result in better load balancing when accessing S3.

+
+
+

Environment variable: QUARKUS_S3_PATH_STYLE_ACCESS

+
+
+

boolean

false

+
+
+
+

Enable cross-region call to the region specified in the S3 resource ARN different than the region the client was configured with. If this flag is not set to 'true', the cross-region call will throw an exception.

+
+
+

Environment variable: QUARKUS_S3_USE_ARN_REGION_ENABLED

+
+
+

boolean

false

+
+
+
+

Define the profile name that should be consulted to determine the default value of use-arn-region-enabled. This is not used, if the use-arn-region-enabled is configured to 'true'. +If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_S3_PROFILE_NAME

+
+
+

string

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_S3_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate. +If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_S3_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call. +This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc. +This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_S3_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out. +This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_S3_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_S3_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain. +Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider. +If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed. +This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool. +Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously. +When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through. +Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

Netty HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests. +For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed. +Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown. +Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown. +Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle. +Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed. +When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client. +Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through. +Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group. +If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group. +The prefix will be appended with a number unique to the thread factory and a number unique to the thread. +If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request. +When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/1.x/includes/quarkus-amazon-secretsmanager.html b/quarkus-amazon-services/1.x/includes/quarkus-amazon-secretsmanager.html new file mode 100644 index 0000000000..adc5003b93 --- /dev/null +++ b/quarkus-amazon-services/1.x/includes/quarkus-amazon-secretsmanager.html @@ -0,0 +1,2589 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK. +The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TYPE

+
+
+
+

url, apache

+

url

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container. +The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property. +Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance. +This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate. +If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call. +This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc. +This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out. +This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain. +Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider. +If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed. +This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool. +Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously. +When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through. +Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

Netty HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests. +For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed. +Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown. +Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown. +Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle. +Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed. +When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client. +Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through. +Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group. +If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group. +The prefix will be appended with a number unique to the thread factory and a number unique to the thread. +If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request. +When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/1.x/includes/quarkus-amazon-ses.html b/quarkus-amazon-services/1.x/includes/quarkus-amazon-ses.html new file mode 100644 index 0000000000..15201b33ec --- /dev/null +++ b/quarkus-amazon-services/1.x/includes/quarkus-amazon-ses.html @@ -0,0 +1,2589 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK. +The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface.

+
+
+

Environment variable: QUARKUS_SES_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TYPE

+
+
+
+

url, apache

+

url

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_SES_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container. +The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property. +Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_SES_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance. +This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_SES_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_SES_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate. +If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_SES_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call. +This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc. +This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SES_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out. +This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SES_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_SES_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain. +Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider. +If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed. +This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool. +Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously. +When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through. +Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

Netty HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests. +For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed. +Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown. +Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown. +Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle. +Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed. +When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client. +Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through. +Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group. +If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group. +The prefix will be appended with a number unique to the thread factory and a number unique to the thread. +If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request. +When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/1.x/includes/quarkus-amazon-sns.html b/quarkus-amazon-services/1.x/includes/quarkus-amazon-sns.html new file mode 100644 index 0000000000..be277096a7 --- /dev/null +++ b/quarkus-amazon-services/1.x/includes/quarkus-amazon-sns.html @@ -0,0 +1,2589 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK. +The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface.

+
+
+

Environment variable: QUARKUS_SNS_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TYPE

+
+
+
+

url, apache

+

url

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_SNS_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container. +The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property. +Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_SNS_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance. +This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_SNS_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_SNS_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate. +If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_SNS_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call. +This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc. +This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SNS_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out. +This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SNS_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_SNS_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain. +Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider. +If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed. +This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool. +Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously. +When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through. +Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

Netty HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests. +For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed. +Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown. +Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown. +Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle. +Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed. +When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client. +Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through. +Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group. +If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group. +The prefix will be appended with a number unique to the thread factory and a number unique to the thread. +If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request. +When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/1.x/includes/quarkus-amazon-sqs.html b/quarkus-amazon-services/1.x/includes/quarkus-amazon-sqs.html new file mode 100644 index 0000000000..a33ab78d39 --- /dev/null +++ b/quarkus-amazon-services/1.x/includes/quarkus-amazon-sqs.html @@ -0,0 +1,2606 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK. +The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface.

+
+
+

Environment variable: QUARKUS_SQS_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TYPE

+
+
+
+

url, apache

+

url

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_SQS_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container. +The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property. +Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_SQS_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance. +This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_SQS_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

The queues to create on startup.

+
+
+

Environment variable: QUARKUS_SQS_DEVSERVICES_QUEUES

+
+
+

list of string

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_SQS_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate. +If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_SQS_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call. +This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc. +This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SQS_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out. +This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SQS_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_SQS_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain. +Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider. +If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed. +This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool. +Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously. +When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through. +Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

Netty HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests. +For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed. +Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown. +Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown. +Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle. +Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed. +When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client. +Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through. +Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group. +If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group. +The prefix will be appended with a number unique to the thread factory and a number unique to the thread. +If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request. +When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/1.x/includes/quarkus-amazon-ssm.html b/quarkus-amazon-services/1.x/includes/quarkus-amazon-ssm.html new file mode 100644 index 0000000000..b3de2c4b7d --- /dev/null +++ b/quarkus-amazon-services/1.x/includes/quarkus-amazon-ssm.html @@ -0,0 +1,2589 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK. +The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface.

+
+
+

Environment variable: QUARKUS_SSM_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TYPE

+
+
+
+

url, apache

+

url

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_SSM_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container. +The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property. +Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_SSM_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance. +This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_SSM_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_SSM_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate. +If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_SSM_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call. +This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc. +This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SSM_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out. +This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SSM_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_SSM_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain. +Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider. +If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed. +This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool. +Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously. +When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through. +Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

Netty HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests. +For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed. +Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown. +Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown. +Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle. +Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed. +When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client. +Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through. +Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group. +If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group. +The prefix will be appended with a number unique to the thread factory and a number unique to the thread. +If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request. +When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/1.x/includes/quarkus-amazon-sts.html b/quarkus-amazon-services/1.x/includes/quarkus-amazon-sts.html new file mode 100644 index 0000000000..77741b4859 --- /dev/null +++ b/quarkus-amazon-services/1.x/includes/quarkus-amazon-sts.html @@ -0,0 +1,2589 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK. +The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface.

+
+
+

Environment variable: QUARKUS_STS_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TYPE

+
+
+
+

url, apache

+

url

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_STS_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container. +The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property. +Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_STS_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance. +This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_STS_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_STS_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate. +If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_STS_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call. +This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc. +This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_STS_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out. +This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_STS_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_STS_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain. +Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider. +If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed. +This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool. +Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously. +When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through. +Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

Netty HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests. +For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed. +Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown. +Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown. +Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle. +Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed. +When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client. +Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0. +This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through. +Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type. +See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group. +If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group. +The prefix will be appended with a number unique to the thread factory and a number unique to the thread. +If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request. +When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/1.x/includes/quarkus-aws-devservices-localstack-local-stack-dev-services-build-time-config.html b/quarkus-amazon-services/1.x/includes/quarkus-aws-devservices-localstack-local-stack-dev-services-build-time-config.html new file mode 100644 index 0000000000..8412ab30aa --- /dev/null +++ b/quarkus-amazon-services/1.x/includes/quarkus-aws-devservices-localstack-local-stack-dev-services-build-time-config.html @@ -0,0 +1,1112 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The LocalStack container image to use.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_IMAGE_NAME

+
+
+

string

localstack/localstack:1.0.3

+
+
+
+

Path to init scripts folder executed during localstack startup.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_INIT_SCRIPTS_FOLDER

+
+
+

string

+
+
+
+

Specific container log message to be waiting for localstack init scripts completion.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_INIT_COMPLETION_MSG

+
+
+

string

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_ADDITIONAL_SERVICES__ADDITIONAL_SERVICES__ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container. +The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property. +Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_ADDITIONAL_SERVICES__ADDITIONAL_SERVICES__SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance. +This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_ADDITIONAL_SERVICES__ADDITIONAL_SERVICES__SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_ADDITIONAL_SERVICES__ADDITIONAL_SERVICES__CONTAINER_PROPERTIES

+
+
+

Map<String,String>

+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/1.x/includes/quarkus-aws-devservices-moto-moto-dev-services-build-time-config.html b/quarkus-amazon-services/1.x/includes/quarkus-aws-devservices-moto-moto-dev-services-build-time-config.html new file mode 100644 index 0000000000..dcff0c4232 --- /dev/null +++ b/quarkus-amazon-services/1.x/includes/quarkus-aws-devservices-moto-moto-dev-services-build-time-config.html @@ -0,0 +1,1007 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The Moto container image to use.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_MOTO_IMAGE_NAME

+
+
+

string

motoserver/moto

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_MOTO_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/1.x/index.html b/quarkus-amazon-services/1.x/index.html new file mode 100644 index 0000000000..cabc1f9b40 --- /dev/null +++ b/quarkus-amazon-services/1.x/index.html @@ -0,0 +1,966 @@ + + + + + + Quarkus Amazon Services :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Amazon Services

+
+

This set of extensions expose AWS services through configuration properties and CDI injection.

+
+
+

You can find the full set of supported services and documentation for each of them in the navigation on the left.

+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.12.x/amazon-cognitouserpools.html b/quarkus-amazon-services/2.12.x/amazon-cognitouserpools.html new file mode 100644 index 0000000000..05a2bf09e2 --- /dev/null +++ b/quarkus-amazon-services/2.12.x/amazon-cognitouserpools.html @@ -0,0 +1,3319 @@ + + + + + + Amazon Cognito User Pools Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon Cognito User Pools Client

+
+
+
+

Service client for accessing Amazon Cognito user pools (Identity Provider).

+
+
+

Using the Amazon Cognito user pools API, you can create a user pool to manage directories and users. +You can authenticate a user to obtain tokens related to user identity and access policies.

+
+
+

For more information, see the Amazon Cognito user pools (AWS Java SDK 2.x docs).

+
+
+ + + + + +
+ + +The Cognito User Pools extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client (by default) or the AWS CRT-based HTTP client

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use Cognito User Pool locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 17+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    One of:

    +
    +
      +
    • +

      An AWS Account to access the Cognito service

      +
    • +
    • +

      Or Docker for your system to run Cognito locally for testing purposes

      +
    • +
    +
    +
  • +
+
+
+

Provision Cognito locally via Dev Services

+
+

The easiest way to start working with Cognito is to run a local instance using Dev Services.

+
+
+
+

Provision Cognito locally manually

+
+

You can also set up a local version of Cognito manually, first start a local instance as a container:

+
+
+
+
docker run --rm --name moto -p 5000:5000 -d motoserver/moto:3.0.2
+
+
+
+

This starts a Cognito mock instance that is accessible on port 5000.

+
+
+

Create an AWS profile for your local instance using AWS CLI:

+
+
+
+
$ aws configure --profile moto
+AWS Access Key ID [None]: test-key
+AWS Secret Access Key [None]: test-secret
+Default region name [None]: us-east-1
+Default output format [None]: test
+
+
+
+
+

Create a Cognito User Pool

+
+

Create a Cognito user pool using AWS CLI.

+
+
+
+
aws --profile moto --endpoint-url=http://localhost:5000 cognito-idp create-user-pool --pool-name quarkus-users-dev
+
+
+
+

Or, if you want to use your Cognito user pool on your AWS account create a user pool using your default profile

+
+
+
+
aws cognito-user-pools cognito-idp --pool-name quarkus-users-dev
+
+
+
+
+
+
+

Solution

+
+
+

The application built here shows the count of Cognito User Pools in the current region.

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step.

+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.8.0:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-cognito-user-pools-quickstart \
+    -DclassName="org.acme.cognitouserpools.CognitoExampleResource" \
+    -Dpath="/cognito-example" \
+    -Dextensions="resteasy,resteasy-jackson,amazon-cognito-user-pools,resteasy-mutiny"
+cd amazon-cognito-user-pools-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy/JAX-RS, Mutiny and Amazon Cognito User Pool extensions. +After this, the amazon-cognito-user-pools extension has been added to your pom.xml as well as the Mutiny support for RESTEasy.

+
+
+
+
+

Creating JSON REST service

+
+
+

Edit a org.acme.cognitouserpools.CognitoExampleResource that will provide an API return count of Cognito User Pools using the synchronous client.

+
+
+
+
package org.acme.cognitouserpools;
+
+import jakarta.inject.Inject;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+
+import software.amazon.awssdk.services.cognitoidentityprovider.CognitoIdentityProviderClient;
+import software.amazon.awssdk.services.cognitoidentityprovider.model.ListUserPoolsRequest;
+import software.amazon.awssdk.services.cognitoidentityprovider.model.ListUserPoolsResponse;
+
+@Path("/cognito-example")
+public class CognitoExampleResource {
+    @Inject
+    CognitoIdentityProviderClient cognitoClient;
+
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public String hello() {
+        ListUserPoolsRequest request = ListUserPoolsRequest.builder().build();
+        ListUserPoolsResponse response = cognitoClient.listUserPools(request);
+        return String.format("You have %d user pools", response.userPools().size());
+    }
+}
+
+
+
+

And update test class:

+
+
+
+
package org.acme.cognitouserpools;
+
+import io.quarkus.test.junit.QuarkusTest;
+import org.junit.jupiter.api.Test;
+
+import static io.restassured.RestAssured.given;
+import static org.hamcrest.CoreMatchers.is;
+
+@QuarkusTest
+public class CognitoExampleResourceTest {
+
+    @Test
+    public void testHelloEndpoint() {
+        given()
+          .when().get("/cognito-example")
+          .then()
+             .statusCode(200)
+             .body(is("You have 1 user pools"));
+    }
+
+}
+
+
+
+
+
+

Configuring Cognito User Pools clients

+
+
+

Both Cognito clients (sync and async) are configurable via the application.properties file that +can be provided in the src/main/resources directory.

+
+
+

Additionally, you need to add to the classpath a proper implementation of the sync client. +By default the extension uses the URL connection HTTP client, so you need to add a URL connection +client dependency to the pom.xml file:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.cognito-user-pools.sync-client.type=apache
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.cognito-user-pools.sync-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+

If you’re going to use a local Cognito mock instance, configure it as follows:

+
+
+
+
quarkus.cognito-user-pools.endpoint-override=http://localhost:5000
+
+quarkus.cognito-user-pools.aws.region=eu-west-1
+quarkus.cognito-user-pools.aws.credentials.type=static
+quarkus.cognito-user-pools.aws.credentials.static-provider.access-key-id=test-key
+quarkus.cognito-user-pools.aws.credentials.static-provider.secret-access-key=test-secret
+
+
+
+
    +
  • +

    quarkus.cognito-user-pools.aws.region - It’s required by the client, but since you’re using a local Cognito mock instance use us-east-1 as it’s a default region of moto.

    +
  • +
  • +

    quarkus.cognito-user-pools.aws.credentials - Set static credentials provider with any values for access-key-id and secret-access-key

    +
  • +
  • +

    quarkus.cognito-user-pools.endpoint-override - Override the Cognito User Pools client to use a local instance instead of an AWS service

    +
  • +
+
+
+

If you want to work with an AWS account, you can simply remove or comment out all Cognito User Pools +related properties. By default, the Cognito User Pools client extension will use the default +credentials provider chain that looks for credentials in this order:

+
+
+
    +
  • +

    Java System Properties - aws.accessKeyId and aws.secretAccessKey

    +
  • +
  • +

    Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

    +
  • +
  • +

    Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

    +
  • +
  • +

    Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

    +
  • +
  • +

    Instance profile credentials delivered through the Amazon EC2 metadata service

    +
  • +
+
+
+

And the region from your AWS CLI profile will be used.

+
+
+
+
+

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can be run with java -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

Create a org.acme.cognitouserpools.CognitoAsyncExampleResource REST resource that will be similar to our +CognitoExampleResource but using an asynchronous programming model.

+
+
+
+
package org.acme.cognitouserpools;
+
+import jakarta.inject.Inject;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+
+import io.smallrye.mutiny.Uni;
+import software.amazon.awssdk.services.cognitoidentityprovider.CognitoIdentityProviderAsyncClient;
+import software.amazon.awssdk.services.cognitoidentityprovider.model.ListUserPoolsRequest;
+
+@Path("/cognito-async-example")
+public class CognitoAsyncExampleResource {
+    @Inject
+    CognitoIdentityProviderAsyncClient cognitoAsyncClient;
+
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public Uni<String> hello() {
+        ListUserPoolsRequest request = ListUserPoolsRequest.builder().build();
+        return Uni
+            .createFrom()
+            .completionStage(cognitoAsyncClient.listUserPools(request))
+            .map(response -> {
+                return String.format("You have %d user pools", response.userPools().size());
+            });
+    }
+}
+
+
+
+

We create Uni instances from the CompletionStage objects returned by the asynchronous Cognito +Identity Provider client, and then transform the emitted item.

+
+
+

And we need to add the Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.cognito-user-pools.async-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.12.x/amazon-credentials.html b/quarkus-amazon-services/2.12.x/amazon-credentials.html new file mode 100644 index 0000000000..89e1cf9388 --- /dev/null +++ b/quarkus-amazon-services/2.12.x/amazon-credentials.html @@ -0,0 +1,987 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+
    +
  • +

    Java System Properties - aws.accessKeyId and aws.secretAccessKey

    +
  • +
  • +

    Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

    +
  • +
  • +

    Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

    +
  • +
  • +

    Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

    +
  • +
  • +

    Instance profile credentials delivered through the Amazon EC2 metadata service

    +
  • +
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.12.x/amazon-dynamodb.html b/quarkus-amazon-services/2.12.x/amazon-dynamodb.html new file mode 100644 index 0000000000..09d7316f9d --- /dev/null +++ b/quarkus-amazon-services/2.12.x/amazon-dynamodb.html @@ -0,0 +1,3879 @@ + + + + + + Amazon DynamoDB Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon DynamoDB Client

+
+
+
+

DynamoDB is a scalable AWS managed NoSQL database. +It supports both key-value and document data models, that enables to have a flexible schema for your data. +This extension provides functionality that allows the client to communicate with the service when running in Quarkus. +You can find more information about DynamoDB at the Amazon DynamoDB website.

+
+
+ + + + + +
+ + +The DynamoDB extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +Keep in mind it’s actively developed and does not support yet all the features available in SDK 1.x such as Document APIs +
+
+
+

The Quarkus extension supports the traditional DynamoDB client as well as the enhanced client.

+
+
+

It supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client (by default) or the AWS CRT-based HTTP client

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use the DynamoDB locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 17+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    An AWS Account to access the DynamoDB service

    +
  • +
  • +

    Optionally, Docker for your system to run DynamoDB locally for testing purposes

    +
  • +
+
+
+

Provision DynamoDB locally via Dev Services

+
+

The easiest way to start working with DynamoDB is to run a local instance using Dev Services.

+
+
+
+

Provision DynamoDB locally manually

+
+

You can also set up a local version of DynamoDB manually, first start a local instance as a container:

+
+
+
+
docker run --publish 4566:8000 amazon/dynamodb-local:1.19.0 -jar DynamoDBLocal.jar -inMemory -sharedDb
+
+
+
+

This starts a DynamoDB instance that is accessible on port 4566. +You can check if it’s working with aws dynamodb list-tables --endpoint-url http://localhost:4566.

+
+
+
+
{
+    "TableNames": []
+}
+
+
+
+

You should see the output above in your terminal. That’s it, DynamoDB runs locally.

+
+
+

Have a look at the Setting Up DynamoDB Local guide for other options to run DynamoDB.

+
+
+
+

Set up Dynamodb on AWS

+
+

Before you can use the AWS SDKs with DynamoDB, you must get an AWS access key ID and secret access key. +For more information, see Setting Up DynamoDB (Web Service).

+
+
+

We recommend to use the AWS CLI to provision the table:

+
+
+
+

Create the QuarkusFruits Table

+
+
+
aws dynamodb create-table --table-name QuarkusFruits \
+                          --attribute-definitions AttributeName=fruitName,AttributeType=S \
+                          --key-schema AttributeName=fruitName,KeyType=HASH \
+                          --provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1
+
+
+
+
+
+
+

Solution

+
+
+

The application built here allows to manage elements (fruits) stored in Amazon DynamoDB.

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step. +However, you can go right to the completed example.

+
+
+

Clone the Git repository: git clone https://github.com/quarkusio/quarkus-quickstarts.git, or download an archive.

+
+
+

The solution is located in the amazon-dynamodb-quickstart directory.

+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.8.0:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-dynamodb-quickstart \
+    -DclassName="org.acme.dynamodb.FruitResource" \
+    -Dpath="/fruits" \
+    -Dextensions="resteasy-reactive-jackson,amazon-dynamodb"
+cd amazon-dynamodb-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy Reactive/JAX-RS and DynamoDB Client extensions. +After this, the amazon-dynamodb extension has been added to your pom.xml as well as the Mutiny support for RESTEasy.

+
+
+
+
+

Creating JSON REST service

+
+
+

In this example, we will create an application to manage a list of fruits. The example application will demonstrate the two programming models supported by the extension.

+
+
+

First, let’s create the Fruit bean as follows:

+
+
+
+
package org.acme.dynamodb;
+
+import java.util.Map;
+import java.util.Objects;
+
+import io.quarkus.runtime.annotations.RegisterForReflection;
+import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
+
+@RegisterForReflection
+public class Fruit {
+
+    private String name;
+    private String description;
+
+    public Fruit() {
+    }
+
+    public static Fruit from(Map<String, AttributeValue> item) {
+        Fruit fruit = new Fruit();
+        if (item != null && !item.isEmpty()) {
+            fruit.setName(item.get(AbstractService.FRUIT_NAME_COL).s());
+            fruit.setDescription(item.get(AbstractService.FRUIT_DESC_COL).s());
+        }
+        return fruit;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (!(obj instanceof Fruit)) {
+            return false;
+        }
+
+        Fruit other = (Fruit) obj;
+
+        return Objects.equals(other.name, this.name);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(this.name);
+    }
+}
+
+
+
+ + + + + +
+ + +The @RegisterForReflection annotation instructs Quarkus to keep the class and its members during the native compilation. More details about the @RegisterForReflection annotation can be found on the native application tips page. +
+
+
+

Nothing fancy. One important thing to note is that having a default constructor is required by the JSON serialization layer. The static from method creates a bean based on the Map +object provided by the DynamoDB client response.

+
+
+

Now create a org.acme.dynamodb.AbstractService that will consist of helper methods that prepare DynamoDB request objects for reading and adding items to the table.

+
+
+
+
package org.acme.dynamodb;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
+import software.amazon.awssdk.services.dynamodb.model.GetItemRequest;
+import software.amazon.awssdk.services.dynamodb.model.PutItemRequest;
+import software.amazon.awssdk.services.dynamodb.model.ScanRequest;
+
+public abstract class AbstractService {
+
+    public final static String FRUIT_NAME_COL = "fruitName";
+    public final static String FRUIT_DESC_COL = "fruitDescription";
+    public final static String FRUIT_TABLE_NAME = "QuarkusFruits";
+
+    protected ScanRequest scanRequest() {
+        return ScanRequest.builder().tableName(FRUIT_TABLE_NAME)
+                .attributesToGet(FRUIT_NAME_COL, FRUIT_DESC_COL).build();
+    }
+
+    protected PutItemRequest putRequest(Fruit fruit) {
+        Map<String, AttributeValue> item = new HashMap<>();
+        item.put(FRUIT_NAME_COL, AttributeValue.builder().s(fruit.getName()).build());
+        item.put(FRUIT_DESC_COL, AttributeValue.builder().s(fruit.getDescription()).build());
+
+        return PutItemRequest.builder()
+                .tableName(FRUIT_TABLE_NAME)
+                .item(item)
+                .build();
+    }
+
+    protected GetItemRequest getRequest(String name) {
+        Map<String, AttributeValue> key = new HashMap<>();
+        key.put(FRUIT_NAME_COL, AttributeValue.builder().s(name).build());
+
+        return GetItemRequest.builder()
+                .tableName(FRUIT_TABLE_NAME)
+                .key(key)
+                .attributesToGet(FRUIT_NAME_COL, FRUIT_DESC_COL)
+                .build();
+    }
+}
+
+
+
+

Then, create a org.acme.dynamodb.FruitSyncService that will be the business layer of our application and stores/loads the fruits from DynamoDB using the synchronous client.

+
+
+
+
package org.acme.dynamodb;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+
+import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
+
+@ApplicationScoped
+public class FruitSyncService extends AbstractService {
+
+    @Inject
+    DynamoDbClient dynamoDB;
+
+    public List<Fruit> findAll() {
+        return dynamoDB.scanPaginator(scanRequest()).items().stream()
+                .map(Fruit::from)
+                .collect(Collectors.toList());
+    }
+
+    public void add(Fruit fruit) {
+        dynamoDB.putItem(putRequest(fruit));
+    }
+
+    public Fruit get(String name) {
+        return Fruit.from(dynamoDB.getItem(getRequest(name)).item());
+    }
+}
+
+
+
+

Now, edit the org.acme.dynamodb.FruitResource class as follows:

+
+
+
+
package org.acme.dynamodb;
+
+import java.util.List;
+
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+
+@Path("/fruits")
+@Produces(MediaType.APPLICATION_JSON)
+@Consumes(MediaType.APPLICATION_JSON)
+public class FruitResource {
+
+    @Inject
+    FruitSyncService service;
+
+    @GET
+    public List<Fruit> getAll() {
+        return service.findAll();
+    }
+
+    @GET
+    @Path("{name}")
+    public Fruit getSingle(String name) {
+        return service.get(name);
+    }
+
+    @POST
+    public List<Fruit> add(Fruit fruit) {
+        service.add(fruit);
+        return getAll();
+    }
+}
+
+
+
+

The implementation is pretty straightforward and you just need to define your endpoints using the JAX-RS annotations and use the FruitSyncService to list/add new fruits.

+
+
+
+
+

Configuring DynamoDB clients

+
+
+

DynamoDB clients (sync and async) are configurable via the application.properties file that can be provided in the src/main/resources directory. +Additionally, you need to add to the classpath a proper implementation of the sync client. By default the extension uses the java.net.URLConnection HTTP client, so +you need to add a URL connection client dependency to the pom.xml file:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.dynamodb.sync-client.type=apache
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.dynamodb.sync-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+

If you’re going to use a local DynamoDB instance, configure it as follows:

+
+
+
+
quarkus.dynamodb.endpoint-override=http://localhost:4566
+
+quarkus.dynamodb.aws.region=eu-central-1
+quarkus.dynamodb.aws.credentials.type=static
+quarkus.dynamodb.aws.credentials.static-provider.access-key-id=test-key
+quarkus.dynamodb.aws.credentials.static-provider.secret-access-key=test-secret
+
+
+
+
    +
  • +

    quarkus.dynamodb.aws.region - It’s required by the client, but since you’re using a local DynamoDB instance you can pick any valid AWS region.

    +
  • +
  • +

    quarkus.dynamodb.aws.credentials.type - Set static credentials provider with any values for access-key-id and secret-access-key

    +
  • +
  • +

    quarkus.dynamodb.endpoint-override - Override the DynamoDB client to use a local instance instead of an AWS service

    +
  • +
+
+
+

If you want to work with an AWS account, you’d need to set it with:

+
+
+
+
quarkus.dynamodb.aws.region=<YOUR_REGION>
+quarkus.dynamodb.aws.credentials.type=default
+
+
+
+
    +
  • +

    quarkus.dynamodb.aws.region you should set it to the region where you provisioned the DynamoDB table,

    +
  • +
  • +

    quarkus.dynamodb.aws.credentials.type - use the default credentials provider chain that looks for credentials in this order:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

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

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can be run with java -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

Create a org.acme.dynamodb.FruitAsyncService that will be similar to our FruitSyncService but using an asynchronous programming model.

+
+
+
+
package org.acme.dynamodb;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+
+import io.smallrye.mutiny.Uni;
+import software.amazon.awssdk.services.dynamodb.DynamoDbAsyncClient;
+
+@ApplicationScoped
+public class FruitAsyncService extends AbstractService {
+
+    @Inject
+    DynamoDbAsyncClient dynamoDB;
+
+    public Uni<List<Fruit>> findAll() {
+        return Uni.createFrom().completionStage(() -> dynamoDB.scan(scanRequest()))
+                .onItem().transform(res -> res.items().stream().map(Fruit::from).collect(Collectors.toList()));
+    }
+
+    public Uni<Void> add(Fruit fruit) {
+        return Uni.createFrom().completionStage(() -> dynamoDB.putItem(putRequest(fruit))).replaceWithVoid();
+    }
+
+    public Uni<Fruit> get(String name) {
+        return Uni.createFrom().completionStage(() -> dynamoDB.getItem(getRequest(name)))
+                .onItem().transform(resp -> Fruit.from(resp.item()));
+    }
+}
+
+
+
+

In the previous code, we create Uni instances from the CompletionStage objects returned by the asynchronous DynamoDB client, and then transform the emitted item.

+
+
+

Then, create an asynchronous REST resource that consumes this async service:

+
+
+
+
package org.acme.dynamodb;
+
+import java.util.List;
+
+import jakarta.inject.Inject;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+
+import io.smallrye.mutiny.Uni;
+
+@Path("/async-fruits")
+public class FruitAsyncResource {
+
+    @Inject
+    FruitAsyncService service;
+
+    @GET
+    public Uni<List<Fruit>> getAll() {
+        return service.findAll();
+    }
+
+    @GET
+    @Path("{name}")
+    public Uni<Fruit> getSingle(String name) {
+        return service.get(name);
+    }
+
+    @POST
+    public Uni<List<Fruit>> add(Fruit fruit) {
+        return service.add(fruit)
+                .onItem().ignore().andSwitchTo(this::getAll);
+    }
+}
+
+
+
+

And add Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.dynamodb.async-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+
+

DynamoDB enhanced client

+
+

The DynamoDB enhanced client is part of the AWS SDK for Java version 2 and makes the mapping between DynamoDB Tables and Java beans very easy. +The Enhanced Client requires a TableSchema which can be generated from a bean class annotated with DynamoDbBean or DynamoDbImmutable or generated from code. +By default, TableSchemas generated from bean classes are registered and cached at startup. You don’t need to explicitely instantiate them at class-load time. +It has both a sync and an async variants.

+
+
+

To use the enhanced client, add the quarkus-amazon-dynamodb-enhanced extension to your pom.xml:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.amazonservices</groupId>
+    <artifactId>quarkus-amazon-dynamodb-enhanced</artifactId>
+</dependency>
+
+
+
+

The Fruit bean would look like this:

+
+
+
+
package org.acme.dynamodb;
+
+import java.util.Map;
+import java.util.Objects;
+
+import io.quarkus.runtime.annotations.RegisterForReflection;
+import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbAttribute;
+import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbBean;
+import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbPartitionKey;
+import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
+
+@RegisterForReflection
+@DynamoDbBean
+public class Fruit {
+
+    private String name;
+    private String description;
+
+    public Fruit() {
+    }
+
+    @DynamoDbPartitionKey
+    @DynamoDbAttribute(AbstractService.FRUIT_NAME_COL)
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    @DynamoDbAttribute(AbstractService.FRUIT_DESC_COL)
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (!(obj instanceof Fruit)) {
+            return false;
+        }
+
+        Fruit other = (Fruit) obj;
+
+        return Objects.equals(other.name, this.name);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(this.name);
+    }
+}
+
+
+
+

Note that you don’t need to add @RegisterForReflection anymore.

+
+
+

The FruitSyncService would need to use the DynamoDbEnhancedClient as well as create a TableSchema:

+
+
+
+
package org.acme.dynamodb;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClient;
+import software.amazon.awssdk.enhanced.dynamodb.DynamoDbTable;
+import software.amazon.awssdk.enhanced.dynamodb.Key;
+import software.amazon.awssdk.enhanced.dynamodb.TableSchema;
+
+@ApplicationScoped
+public class FruitSyncService extends AbstractService {
+
+    private DynamoDbTable<Fruit> fruitTable;
+
+    @Inject
+    FruitEnhancedSyncService(DynamoDbEnhancedClient dynamoEnhancedClient) {
+        fruitTable = dynamoEnhancedClient.table(FRUIT_TABLE_NAME,
+            TableSchema.fromClass(Fruit.class));
+    }
+
+    public List<Fruit> findAll() {
+        return fruitTable.scan().items().stream().collect(Collectors.toList());
+    }
+
+    public List<Fruit> add(Fruit fruit) {
+        fruitTable.putItem(fruit);
+        return findAll();
+    }
+
+    public Fruit get(String name) {
+        Key partitionKey = Key.builder().partitionValue(name).build();
+        return fruitTable.getItem(partitionKey);
+    }
+}
+
+
+
+

The same goes for the asynchronous version with DynamoDbEnhanceAsyncdClient:

+
+
+
+
package org.acme.dynamodb;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+import io.smallrye.mutiny.Multi;
+import io.smallrye.mutiny.Uni;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+import mutiny.zero.flow.adapters.AdaptersToFlow;
+import software.amazon.awssdk.enhanced.dynamodb.DynamoDbAsyncTable;
+import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedAsyncClient;
+import software.amazon.awssdk.enhanced.dynamodb.Key;
+import software.amazon.awssdk.enhanced.dynamodb.TableSchema;
+
+@ApplicationScoped
+public class FruitAsyncService extends AbstractService {
+
+    private DynamoDbAsyncTable<Fruit> fruitTable;
+
+    @Inject
+    FruitEnhancedAsyncService(DynamoDbEnhancedAsyncClient dynamoEnhancedAsyncClient) {
+        fruitTable = dynamoEnhancedAsyncClient.table(FRUIT_TABLE_NAME,
+            TableSchema.fromClass(Fruit.class));
+    }
+
+    public Uni<List<Fruit>> findAll() {
+        return Multi.createFrom().publisher(AdaptersToFlow.publisher(fruitTable.scan().items())).collect().asList();
+    }
+
+    public Uni<Void> add(Fruit fruit){
+        return Uni.createFrom().completionStage(() -> fruitTable.putItem(fruit));
+}
+
+    public Uni<Fruit> get(String name) {
+        Key partitionKey = Key.builder().partitionValue(name).build();
+        return Uni.createFrom().completionStage(() -> fruitTable.getItem(partitionKey));
+    }
+}
+
+
+
+

Resource classes remain unchanged.

+
+
+

Alternatively, if you only need to use the DynamoDbTable instance, you can inject it directly with a @NamedDynamoDbTable annotation.

+
+
+

The synchronous version would be :

+
+
+
+
package org.acme.dynamodb;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+import io.quarkus.amazon.dynamodb.enhanced.runtime.NamedDynamoDbTable;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+import software.amazon.awssdk.enhanced.dynamodb.DynamoDbTable;
+import software.amazon.awssdk.enhanced.dynamodb.Key;
+
+@ApplicationScoped
+public class FruitSyncService extends AbstractService {
+
+    @Inject
+    @NamedDynamoDbTable(FRUIT_TABLE_NAME)
+    DynamoDbTable<Fruit> fruitTable;
+
+    public List<Fruit> findAll() {
+        return fruitTable.scan().items().stream().collect(Collectors.toList());
+    }
+
+    public List<Fruit> add(Fruit fruit) {
+        fruitTable.putItem(fruit);
+        return findAll();
+    }
+
+    public Fruit get(String name) {
+        Key partitionKey = Key.builder().partitionValue(name).build();
+        return fruitTable.getItem(partitionKey);
+    }
+}
+
+
+
+

And the asynchronous version :

+
+
+
+
package org.acme.dynamodb;
+
+import java.util.List;
+
+import io.quarkus.amazon.dynamodb.enhanced.runtime.NamedDynamoDbTable;
+import io.smallrye.mutiny.Multi;
+import io.smallrye.mutiny.Uni;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+import mutiny.zero.flow.adapters.AdaptersToFlow;
+import software.amazon.awssdk.enhanced.dynamodb.DynamoDbAsyncTable;
+import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedAsyncClient;
+import software.amazon.awssdk.enhanced.dynamodb.Key;
+import software.amazon.awssdk.enhanced.dynamodb.TableSchema;
+
+@ApplicationScoped
+public class FruitEnhancedAsyncService extends AbstractService {
+
+    @Inject
+    @NamedDynamoDbTable(FRUIT_TABLE_NAME)
+    private DynamoDbAsyncTable<Fruit> fruitTable;
+
+    public Uni<List<Fruit>> findAll() {
+        return Multi.createFrom().publisher(AdaptersToFlow.publisher(fruitTable.scan().items())).collect().asList();
+    }
+
+    public Uni<Void> add(Fruit fruit){
+        return Uni.createFrom().completionStage(() -> fruitTable.putItem(fruit));
+}
+
+    public Uni<Fruit> get(String name) {
+        Key partitionKey = Key.builder().partitionValue(name).build();
+        return Uni.createFrom().completionStage(() -> fruitTable.getItem(partitionKey));
+    }
+}
+
+
+
+

You can find more information about the DynamoDB enhanced client in the AWS documentation:

+
+ +
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_DYNAMODB_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_DYNAMODB_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_DYNAMODB_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_DYNAMODB_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_DYNAMODB_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_DYNAMODB_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Enable DynamoDB service endpoint discovery.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ENABLE_ENDPOINT_DISCOVERY

+
+
+

boolean

false

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_DYNAMODB_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_DYNAMODB_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_DYNAMODB_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of extensions to load with the enhanced client.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClientExtension interface.

+
+
+

Environment variable: QUARKUS_DYNAMODBENHANCED_CLIENT_EXTENSIONS

+
+
+

list of string

+
+
+
+

Whether a TableSchema should be created at start up for DynamoDb mappable entities annotated with DynamoDbBean or DynamoDbImmutable

+
+
+

TableSchema are cached and can be retrieved later with TableSchema.fromClass()

+
+
+

Environment variable: QUARKUS_DYNAMODBENHANCED_CREATE_TABLE_SCHEMAS

+
+
+

boolean

true

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.12.x/amazon-eventbridge.html b/quarkus-amazon-services/2.12.x/amazon-eventbridge.html new file mode 100644 index 0000000000..b16ef5b89e --- /dev/null +++ b/quarkus-amazon-services/2.12.x/amazon-eventbridge.html @@ -0,0 +1,3169 @@ + + + + + + Amazon EventBridge Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon EventBridge Client

+
+
+
+

Amazon EventBridge is a serverless event bus service that makes it easy to connect your applications with data from a variety of sources.

+
+
+

You can find more information about EventBridge at AWS EventBridge Data Streams Service API Reference.

+
+
+ + + + + +
+ + +The EventBridge extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client.

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use EventBridge locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 17+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    An AWS Account to access the EventBridge service

    +
  • +
  • +

    Docker for your system to run EventBridge locally for testing purposes

    +
  • +
+
+
+

Provision EventBridge locally via Dev Services

+
+

The easiest way to start working with EventBridge is to run a local instance using Dev Services.

+
+
+
+

Provision EventBridge locally manually

+
+

You can also set up a local version of EventBridge manually, first start a LocalStack container:

+
+
+
+
docker run --rm --name local-eventbridge --publish 4592:4592 -e SERVICES=events -e START_WEB=0 -d localstack/localstack:3.0.1
+
+
+
+

This starts a EventBridge instance that is accessible on port 4592.

+
+
+

Create an AWS profile for your local instance using AWS CLI:

+
+
+
+
$ aws configure --profile localstack
+AWS Access Key ID [None]: test-key
+AWS Secret Access Key [None]: test-secret
+Default region name [None]: us-east-1
+Default output format [None]:
+
+
+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.8.0:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-eventbridge-quickstart \
+    -DclassName="org.acme.eventbridge.QuarkusEventBridgeSyncResource" \
+    -Dpath="/sync" \
+    -Dextensions="resteasy-reactive-jackson,amazon-eventbridge"
+cd amazon-eventbridge-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy Reactive/JAX-RS and Amazon EventBridge Client extensions. +After this, the amazon-eventbridge extension has been added to your pom.xml as well as the Mutiny support for RESTEasy.

+
+
+
+
+

Configuring EventBridge clients

+
+
+

Both EventBridge clients (sync and async) are configurable via the application.properties file that can be provided in the src/main/resources directory. +Additionally, you need to add to the classpath a proper implementation of the sync client. By default the extension uses the URL connection HTTP client, so +you need to add a URL connection client dependency to the pom.xml file:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.eventbridge.sync-client.type=apache
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.eventbridge.sync-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+

If you’re going to use a local EventBridge instance, configure it as follows:

+
+
+
+
quarkus.eventbridge.endpoint-override=http://localhost:4592 (1)
+
+quarkus.eventbridge.aws.region=us-east-1 (2)
+quarkus.eventbridge.aws.credentials.type=static (3)
+quarkus.eventbridge.aws.credentials.static-provider.access-key-id=test-key
+quarkus.eventbridge.aws.credentials.static-provider.secret-access-key=test-secret
+
+
+
+ + + + + + + + + + + + + +
1Override the EventBridge client to use LocalStack instead of the actual AWS service
2Localstack defaults to us-east-1
3The static credentials provider lets you set the access-key-id and secret-access-key directly
+
+
+

If you want to work with an AWS account, you can simply remove or comment out all Amazon EventBridge related properties. By default, the ST client extension will use the default credentials provider chain that looks for credentials in this order:

+
+
+
    +
  • +

    Java System Properties - aws.accessKeyId and aws.secretAccessKey

    +
  • +
  • +

    Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

    +
  • +
  • +

    Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

    +
  • +
  • +

    Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

    +
  • +
  • +

    Instance profile credentials delivered through the Amazon EC2 metadata service

    +
  • +
+
+
+

And the region from your AWS CLI profile will be used.

+
+
+
+
+

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can then be run with java -Dparameters.path=/quarkus/is/awesome/ -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

We need to add the Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.eventbridge.async-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.12.x/amazon-iam.html b/quarkus-amazon-services/2.12.x/amazon-iam.html new file mode 100644 index 0000000000..d7420cf90f --- /dev/null +++ b/quarkus-amazon-services/2.12.x/amazon-iam.html @@ -0,0 +1,2913 @@ + + + + + + Amazon IAM Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon IAM Client

+
+

Amazon Identity and Access Management (IAM) enables users to manage access to AWS services and resources securely.

+
+
+

You can find more information about IAM at the Amazon IAM website.

+
+
+ + + + + +
+ + +The IAM extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client (by default) or the AWS CRT-based HTTP client

    +
  • +
+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_IAM_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_IAM_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_IAM_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_IAM_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_IAM_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_IAM_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_IAM_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_IAM_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_IAM_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_IAM_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_IAM_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_IAM_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.12.x/amazon-kinesis.html b/quarkus-amazon-services/2.12.x/amazon-kinesis.html new file mode 100644 index 0000000000..171c2789b6 --- /dev/null +++ b/quarkus-amazon-services/2.12.x/amazon-kinesis.html @@ -0,0 +1,3169 @@ + + + + + + Amazon Kinesis Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon Kinesis Client

+
+
+
+

Kinesis Data Streams is a managed service provided by Amazon Web Services (AWS) that scales elastically for real-time processing of streaming big data.

+
+
+

You can find more information about Kinesis at AWS Kinesis Data Streams Service API Reference.

+
+
+ + + + + +
+ + +The Kinesis extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client.

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use Kinesis locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 17+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    An AWS Account to access the Kinesis service

    +
  • +
  • +

    Docker for your system to run Kinesis locally for testing purposes

    +
  • +
+
+
+

Provision Kinesis locally via Dev Services

+
+

The easiest way to start working with Kinesis is to run a local instance using Dev Services.

+
+
+
+

Provision Kinesis locally manually

+
+

You can also set up a local version of Kinesis manually, first start a LocalStack container:

+
+
+
+
docker run --rm --name local-kinesis --publish 4592:4592 -e SERVICES=kinesis -e START_WEB=0 -d localstack/localstack:3.0.1
+
+
+
+

This starts a Kinesis instance that is accessible on port 4592.

+
+
+

Create an AWS profile for your local instance using AWS CLI:

+
+
+
+
$ aws configure --profile localstack
+AWS Access Key ID [None]: test-key
+AWS Secret Access Key [None]: test-secret
+Default region name [None]: us-east-1
+Default output format [None]:
+
+
+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.8.0:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-kinesis-quickstart \
+    -DclassName="org.acme.kinesis.QuarkusKinesisSyncResource" \
+    -Dpath="/sync" \
+    -Dextensions="resteasy-reactive-jackson,amazon-kinesis"
+cd amazon-kinesis-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy Reactive/JAX-RS and Amazon Kinesis Client extensions. +After this, the amazon-kinesis extension has been added to your pom.xml as well as the Mutiny support for RESTEasy.

+
+
+
+
+

Configuring Kinesis clients

+
+
+

Both Kinesis clients (sync and async) are configurable via the application.properties file that can be provided in the src/main/resources directory. +Additionally, you need to add to the classpath a proper implementation of the sync client. By default the extension uses the URL connection HTTP client, so +you need to add a URL connection client dependency to the pom.xml file:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.kinesis.sync-client.type=apache
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.kinesis.sync-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+

If you’re going to use a local Kinesis instance, configure it as follows:

+
+
+
+
quarkus.kinesis.endpoint-override=http://localhost:4592 (1)
+
+quarkus.kinesis.aws.region=us-east-1 (2)
+quarkus.kinesis.aws.credentials.type=static (3)
+quarkus.kinesis.aws.credentials.static-provider.access-key-id=test-key
+quarkus.kinesis.aws.credentials.static-provider.secret-access-key=test-secret
+
+
+
+ + + + + + + + + + + + + +
1Override the Kinesis client to use LocalStack instead of the actual AWS service
2Localstack defaults to us-east-1
3The static credentials provider lets you set the access-key-id and secret-access-key directly
+
+
+

If you want to work with an AWS account, you can simply remove or comment out all Amazon Kinesis related properties. By default, the ST client extension will use the default credentials provider chain that looks for credentials in this order:

+
+
+
    +
  • +

    Java System Properties - aws.accessKeyId and aws.secretAccessKey

    +
  • +
  • +

    Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

    +
  • +
  • +

    Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

    +
  • +
  • +

    Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

    +
  • +
  • +

    Instance profile credentials delivered through the Amazon EC2 metadata service

    +
  • +
+
+
+

And the region from your AWS CLI profile will be used.

+
+
+
+
+

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can then be run with java -Dparameters.path=/quarkus/is/awesome/ -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

We need to add the Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.kinesis.async-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_KINESIS_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_KINESIS_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_KINESIS_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_KINESIS_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_KINESIS_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_KINESIS_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_KINESIS_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_KINESIS_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_KINESIS_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_KINESIS_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_KINESIS_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.12.x/amazon-kms.html b/quarkus-amazon-services/2.12.x/amazon-kms.html new file mode 100644 index 0000000000..7cb2e00b6e --- /dev/null +++ b/quarkus-amazon-services/2.12.x/amazon-kms.html @@ -0,0 +1,3332 @@ + + + + + + Amazon KMS Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon KMS Client

+
+
+
+

AWS Key Management Service (KMS) is a service that allows you to create and control the keys used to encrypt or digitally sign your data. +Using KMS, you can create and manage cryptographic keys and control their use across a wide range of AWS services and in your application.

+
+
+

You can find more information about KMS at the AWS KMS website.

+
+
+ + + + + +
+ + +The KMS extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client (by default) or the AWS CRT-based HTTP client

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use KMS locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 17+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    An AWS Account to access the KMS service

    +
  • +
  • +

    Docker for your system to run KMS locally for testing purposes

    +
  • +
+
+
+

Provision KMS locally via Dev Services

+
+

The easiest way to start working with KMS is to run a local instance using Dev Services.

+
+
+
+

Provision KMS locally manually

+
+

You can also set up a local version of KMS manually, first start a LocalStack container:

+
+
+
+
docker run --rm --name local-kms --publish 4566:4599 -e SERVICES=kms -e START_WEB=0 -d localstack/localstack:3.0.1
+
+
+
+

This starts a KMS instance that is accessible on port 4566.

+
+
+

Create an AWS profile for your local instance using AWS CLI:

+
+
+
+
$ aws configure --profile localstack
+AWS Access Key ID [None]: test-key
+AWS Secret Access Key [None]: test-secret
+Default region name [None]: us-east-1
+Default output format [None]: text
+
+
+
+
+

Create a KMS master key

+
+

Create a KMS master key queue using AWS CLI and store in MASTER_KEY_ARN environment variable.

+
+
+
+
MASTER_KEY_ARN=`aws kms create-key --profile localstack --endpoint-url=http://localhost:4566 | cut -f3`
+
+
+
+

Generate a key data as 256-bit symmetric key (AES 256)

+
+
+
+
aws kms generate-data-key --key-id $MASTER_KEY_ARN --key-spec AES_256 --profile localstack --endpoint-url=http://localhost:4566
+
+
+
+

Or, if you want to use your AWS account create a key using your default profile

+
+
+
+
MASTER_KEY_ARN=`aws kms create-key | cut -f3`
+aws kms generate-data-key --key-id $MASTER_KEY_ARN --key-spec AES_256
+
+
+
+
+
+
+

Solution

+
+
+

The application built here allows to encrypt and decrypt text messages using a master key created on AWS KMS.

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step. +However, you can go right to the completed example.

+
+
+

Clone the Git repository: git clone https://github.com/quarkusio/quarkus-quickstarts.git, or download an archive.

+
+
+

The solution is located in the amazon-kms-quickstart directory.

+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.8.0:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-kms-quickstart \
+    -DclassName="org.acme.kms.QuarkusKmsSyncResource" \
+    -Dpath="/sync" \
+    -Dextensions="resteasy-reactive-jackson,amazon-kms"
+cd amazon-kms-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy Reactive/JAX-RS and Amazon KMS Client extensions. +After this, the amazon-kms extension has been added to your pom.xml as well as the Mutiny support for RESTEasy.

+
+
+
+
+

Creating JSON REST service

+
+
+

In this example, we will create an application that allows to encrypt and decrypt text message provided in the request. +The example application will demonstrate the two programming models supported by the extension.

+
+
+

Let’s create a org.acme.kms.QuarkusKmsSyncResource that will provide an API to encrypt and decrypt message using the synchronous client.

+
+
+
+
package org.acme.kms;
+
+import java.util.Base64;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import software.amazon.awssdk.core.SdkBytes;
+import software.amazon.awssdk.services.kms.KmsClient;
+import software.amazon.awssdk.services.kms.model.DecryptResponse;
+
+@Path("/sync")
+@Produces(MediaType.TEXT_PLAIN)
+@Consumes(MediaType.TEXT_PLAIN)
+public class QuarkusKmsSyncResource {
+
+    @Inject
+    KmsClient kms;
+
+    @ConfigProperty(name = "key.arn")
+    String keyArn;
+
+    @POST
+    @Path("/encrypt")
+    public String encrypt(String data) {
+        SdkBytes encryptedBytes = kms.encrypt(req -> req.keyId(keyArn).plaintext(SdkBytes.fromUtf8String(data))).ciphertextBlob();
+
+        return Base64.getEncoder().encodeToString(encryptedBytes.asByteArray());
+    }
+
+    @POST
+    @Path("/decrypt")
+    public String decrypt(String data) {
+        SdkBytes encryptedData = SdkBytes.fromByteArray(Base64.getDecoder().decode(data.getBytes()));
+        DecryptResponse decrypted = kms.decrypt(req -> req.keyId(keyArn).ciphertextBlob(encryptedData));
+
+        return decrypted.plaintext().asUtf8String();
+    }
+}
+
+
+
+

An encrypted message is in the form of a bytes array. To return it to the user we need to encode it as Base64 string in the encrypt endpoint. +On the decrypt endpoint we need to decode from the Base64 string back to the bytes array before sending it out to the KMS client.

+
+
+
+
+

Configuring KMS clients

+
+
+

Both KMS clients (sync and async) are configurable via the application.properties file that can be provided in the src/main/resources directory. +Additionally, you need to add to the classpath a proper implementation of the sync client. By default the extension uses the URL connection HTTP client, so +you need to add a URL connection client dependency to the pom.xml file:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.kms.sync-client.type=apache
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.kms.sync-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+

If you’re going to use a local KMS instance, configure it as follows:

+
+
+
+
quarkus.kms.endpoint-override=http://localhost:4566
+
+quarkus.kms.aws.region=us-east-1
+quarkus.kms.aws.credentials.type=static
+quarkus.kms.aws.credentials.static-provider.access-key-id=test-key
+quarkus.kms.aws.credentials.static-provider.secret-access-key=test-secret
+
+
+
+
    +
  • +

    quarkus.kms.aws.region - It’s required by the client, but since you’re using a local KMS instance use us-east-1 as it’s a default region of LocalStack’s KMS.

    +
  • +
  • +

    quarkus.kms.aws.credentials.type - Set static credentials provider with any values for access-key-id and secret-access-key

    +
  • +
  • +

    quarkus.kms.endpoint-override - Override the KMS client to use a local instance instead of an AWS service

    +
  • +
+
+
+

If you want to work with an AWS account, you can simply remove or comment out all Amazon KMS related properties. By default, the KMS client extension +will use the default credentials provider chain that looks for credentials in this order:

+
+
+
    +
  • +

    Java System Properties - aws.accessKeyId and aws.secretAccessKey

    +
  • +
  • +

    Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

    +
  • +
  • +

    Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

    +
  • +
  • +

    Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

    +
  • +
  • +

    Instance profile credentials delivered through the Amazon EC2 metadata service

    +
  • +
+
+
+

And the region from your AWS CLI profile will be used.

+
+
+
+
+

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can be run with java -Dkey.arn=$MASTER_KEY_ARN -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

Create a org.acme.kms.QuarkusKmsAsyncResource REST resource that will be similar to our QuarkusKmsSyncResource but using an asynchronous programming model.

+
+
+
+
package org.acme.kms;
+
+import java.util.Base64;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import io.smallrye.mutiny.Uni;
+import software.amazon.awssdk.core.SdkBytes;
+import software.amazon.awssdk.services.kms.KmsAsyncClient;
+import software.amazon.awssdk.services.kms.model.DecryptResponse;
+import software.amazon.awssdk.services.kms.model.EncryptResponse;
+
+@Path("/async")
+@Produces(MediaType.TEXT_PLAIN)
+@Consumes(MediaType.TEXT_PLAIN)
+public class QuarkusKmsAsyncResource {
+
+    @Inject
+    KmsAsyncClient kms;
+
+    @ConfigProperty(name = "key.arn")
+    String keyArn;
+
+    @POST
+    @Path("/encrypt")
+    public Uni<String> encrypt(String data) {
+        return Uni.createFrom().completionStage(kms.encrypt(req -> req.keyId(keyArn).plaintext(SdkBytes.fromUtf8String(data))))
+            .onItem().transform(EncryptResponse::ciphertextBlob)
+            .onItem().transform(blob -> Base64.getEncoder().encodeToString(blob.asByteArray()));
+    }
+
+    @POST
+    @Path("/decrypt")
+    public Uni<String> decrypt(String data) {
+        return Uni.createFrom().item(SdkBytes.fromByteArray(Base64.getDecoder().decode(data.getBytes())))
+            .onItem().transformToUni(msg ->
+                        Uni.createFrom().completionStage(kms.decrypt(req -> req.keyId(keyArn).ciphertextBlob(msg)))
+            )
+            .onItem().transform(DecryptResponse::plaintext)
+            .onItem().transform(SdkBytes::asUtf8String);
+    }
+}
+
+
+
+

We create Uni instances from the CompletionStage objects returned by the asynchronous KMS client, and then transform the emitted item.

+
+
+

And we need to add the Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.kms.async-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_KMS_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_KMS_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_KMS_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_KMS_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_KMS_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_KMS_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_KMS_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_KMS_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_KMS_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_KMS_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_KMS_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_KMS_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.12.x/amazon-lambda.html b/quarkus-amazon-services/2.12.x/amazon-lambda.html new file mode 100644 index 0000000000..d4b1d24696 --- /dev/null +++ b/quarkus-amazon-services/2.12.x/amazon-lambda.html @@ -0,0 +1,3172 @@ + + + + + + Amazon Lambda Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon Lambda Client

+
+
+
+

Service client for accessing Amazon Lambda.

+
+
+

Using the Amazon Lambda API, you can manage your AWS Lambdas.

+
+
+

You can find more information about Lambda at the AWS Lambda website.

+
+
+ + + + + +
+ + +The Lambda extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client (by default) or the AWS CRT-based HTTP client

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use Lambda locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 17+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    An AWS Account to access the Lambda service

    +
  • +
  • +

    Docker for your system to run Lambda locally for testing purposes

    +
  • +
+
+
+

Provision Lambda locally via Dev Services

+
+

The easiest way to start working with Lambda is to run a local instance using Dev Services.

+
+
+
+

Provision Lambda locally manually

+
+

You can also set up a local version of Lambda manually, first start a LocalStack container:

+
+
+
+
docker run --rm --name local-lambda --publish 4566:4583 -e SERVICES=lambda -e START_WEB=0 -d localstack/localstack:3.0.1
+
+
+
+

This starts a Lambda instance that is accessible on port 4566.

+
+
+

Create an AWS profile for your local instance using AWS CLI:

+
+
+
+
$ aws configure --profile localstack
+AWS Access Key ID [None]: test-key
+AWS Secret Access Key [None]: test-secret
+Default region name [None]: us-east-1
+Default output format [None]:
+
+
+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.8.0:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-lambda-quickstart \
+    -DclassName="org.acme.lambda.QuarkusLambdaSyncResource" \
+    -Dpath="/sync" \
+    -Dextensions="resteasy-reactive-jackson,amazon-lambda"
+cd amazon-lambda-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy Reactive/JAX-RS and Amazon Lambda Client extensions. +After this, the amazon-lambda extension has been added to your pom.xml as well as the Mutiny support for RESTEasy.

+
+
+
+
+

Configuring Lambda clients

+
+
+

Both Lambda clients (sync and async) are configurable via the application.properties file that can be provided in the src/main/resources directory. +Additionally, you need to add to the classpath a proper implementation of the sync client. By default the extension uses the URL connection HTTP client, so +you need to add a URL connection client dependency to the pom.xml file:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.lambda.sync-client.type=apache
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.lambda.sync-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+

If you’re going to use a local Lambda instance, configure it as follows:

+
+
+
+
quarkus.lambda.endpoint-override=http://localhost:4566 (1)
+
+quarkus.lambda.aws.region=us-east-1 (2)
+quarkus.lambda.aws.credentials.type=static (3)
+quarkus.lambda.aws.credentials.static-provider.access-key-id=test-key
+quarkus.lambda.aws.credentials.static-provider.secret-access-key=test-secret
+
+
+
+ + + + + + + + + + + + + +
1Override the Lambda client to use LocalStack instead of the actual AWS service
2Localstack defaults to us-east-1
3The static credentials provider lets you set the access-key-id and secret-access-key directly
+
+
+

If you want to work with an AWS account, you can simply remove or comment out all Amazon Lambda related properties. By default, the Lambda client extension will use the default credentials provider chain that looks for credentials in this order:

+
+
+
    +
  • +

    Java System Properties - aws.accessKeyId and aws.secretAccessKey

    +
  • +
  • +

    Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

    +
  • +
  • +

    Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

    +
  • +
  • +

    Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

    +
  • +
  • +

    Instance profile credentials delivered through the Amazon EC2 metadata service

    +
  • +
+
+
+

And the region from your AWS CLI profile will be used.

+
+
+
+
+

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can then be run with java -Dparameters.path=/quarkus/is/awesome/ -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

We need to add the Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.lambda.async-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_LAMBDA_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_LAMBDA_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_LAMBDA_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_LAMBDA_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_LAMBDA_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_LAMBDA_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_LAMBDA_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_LAMBDA_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_LAMBDA_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_LAMBDA_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_LAMBDA_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.12.x/amazon-s3.html b/quarkus-amazon-services/2.12.x/amazon-s3.html new file mode 100644 index 0000000000..f6b1323ab2 --- /dev/null +++ b/quarkus-amazon-services/2.12.x/amazon-s3.html @@ -0,0 +1,3886 @@ + + + + + + Amazon S3 Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon S3 Client

+
+
+
+

Amazon S3 is an object storage service. It can be employed to store any type of object which allows for uses like storage for Internet applications, +backup and recovery, disaster recovery, data archives, data lakes for analytics, any hybrid cloud storage. +This extension provides functionality that allows the client to communicate with the service when running in Quarkus. +You can find more information about S3 at the Amazon S3 website.

+
+
+ + + + + +
+ + +The S3 extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client (by default) or the AWS CRT-based HTTP client

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use S3 locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 17+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    AWS Command line interface

    +
  • +
  • +

    An AWS Account to access the S3 service. Before you can use the AWS SDKs with Amazon S3, you must get an AWS access key ID and secret access key.

    +
  • +
  • +

    Optionally, Docker for your system to run S3 locally for testing purposes

    +
  • +
+
+
+

Provision S3 locally via Dev Services

+
+

The easiest way to start working with S3 is to run a local instance using Dev Services.

+
+
+

You can optionally configure the buckets that are created on startup with the quarkus.s3.devservices.buckets config property.

+
+
+

Provision S3 locally manually

+
+

You can also setup a local version of S3 manually, first start a LocalStack container:

+
+
+
+
docker run -it --publish 4566:4566 -e SERVICES=s3 -e START_WEB=0 localstack/localstack:3.0.1
+
+
+
+

This starts a S3 instance that is accessible on port 4566.

+
+
+

Create an AWS profile for your local instance using AWS CLI:

+
+
+
+
$ aws configure --profile localstack
+AWS Access Key ID [None]: test-key
+AWS Secret Access Key [None]: test-secret
+Default region name [None]: us-east-1
+Default output format [None]:
+
+
+
+
+
+

Create a S3 bucket

+
+

Create a S3 bucket using AWS CLI

+
+
+
+
aws s3 mb s3://quarkus.s3.quickstart --profile localstack --endpoint-url=http://localhost:4566
+
+
+
+
+
+
+

Solution

+
+
+

The application built here allows to manage files stored in Amazon S3.

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step. +However, you can go right to the completed example.

+
+
+

Clone the Git repository: git clone https://github.com/quarkusio/quarkus-quickstarts.git, or download an archive.

+
+
+

The solution is located in the amazon-s3-quickstart directory.

+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.8.0:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-s3-quickstart \
+    -DclassName="org.acme.s3.S3SyncClientResource" \
+    -Dpath="/s3" \
+    -Dextensions="resteasy-reactive-jackson,amazon-s3"
+cd amazon-s3-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy Reactive/JAX-RS and S3 Client extensions. +After this, the amazon-s3 extension has been added to your pom.xml.

+
+
+ + + + + +
+ + +The default setting for quarkus.http.limits.max-body-size is 10240K. This may limit your ability to upload multipart files larger than the default. If you want to upload larger files, you will need to set this limit explicitly. +
+
+
+
+
+

Setting up the model

+
+
+

In this example, we will create an application to manage a list of files. The example application will demonstrate the two programming models supported by the extension.

+
+
+

Because the primary goal of our application is to upload a file into the S3 bucket, we need to setup the model we will be using to define the multipart/form-data payload, +in the form of a @MultipartForm POJO.

+
+
+

Create a org.acme.s3.FormData class as follows:

+
+
+
+
package org.acme.s3;
+
+import java.io.File;
+import jakarta.ws.rs.core.MediaType;
+import org.jboss.resteasy.reactive.PartType;
+import org.jboss.resteasy.reactive.RestForm;
+
+public class FormData {
+
+    @RestForm("file")
+    public File data;
+
+    @RestForm
+    @PartType(MediaType.TEXT_PLAIN)
+    public String filename;
+
+    @RestForm
+    @PartType(MediaType.TEXT_PLAIN)
+    public String mimetype;
+
+}
+
+
+
+

The class defines three fields:

+
+
+
    +
  • +

    data that fill capture stream of uploaded bytes from the client

    +
  • +
  • +

    fileName that captures a filename as provided by the submited form

    +
  • +
  • +

    mimeType content type of the uploaded file

    +
  • +
+
+
+

In the second step let’s create a bean that will represent a file in a Amazon S3 bucket as follows:

+
+
+
+
package org.acme.s3;
+
+import software.amazon.awssdk.services.s3.model.S3Object;
+
+public class FileObject {
+    private String objectKey;
+
+    private Long size;
+
+    public FileObject() {
+    }
+
+    public static FileObject from(S3Object s3Object) {
+        FileObject file = new FileObject();
+        if (s3Object != null) {
+            file.setObjectKey(s3Object.key());
+            file.setSize(s3Object.size());
+        }
+        return file;
+    }
+
+    public String getObjectKey() {
+        return objectKey;
+    }
+
+    public Long getSize() {
+        return size;
+    }
+
+    public FileObject setObjectKey(String objectKey) {
+        this.objectKey = objectKey;
+        return this;
+    }
+
+    public FileObject setSize(Long size) {
+        this.size = size;
+        return this;
+    }
+}
+
+
+
+

Nothing fancy. One important thing to note is that having a default constructor is required by the JSON serialization layer. The static from method creates a bean based on the S3Object +object provided by the S3 client response when listing all the objects in a bucket.

+
+
+
+
+

Create JAX-RS resource

+
+
+

Now create a org.acme.s3.CommonResource that will consist of methods to prepare S3 request to get object from a S3 bucket, or to put file into a S3 bucket. +Note a configuration property bucket.name is defined here as the request method required name of the S3 bucket.

+
+
+
+
package org.acme.s3;
+
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+
+import software.amazon.awssdk.services.s3.model.GetObjectRequest;
+import software.amazon.awssdk.services.s3.model.PutObjectRequest;
+
+abstract public class CommonResource {
+
+    @ConfigProperty(name = "bucket.name")
+    String bucketName;
+
+    protected PutObjectRequest buildPutRequest(FormData formData) {
+        return PutObjectRequest.builder()
+                .bucket(bucketName)
+                .key(formData.filename)
+                .contentType(formData.mimetype)
+                .build();
+    }
+
+    protected GetObjectRequest buildGetRequest(String objectKey) {
+        return GetObjectRequest.builder()
+                .bucket(bucketName)
+                .key(objectKey)
+                .build();
+    }
+
+}
+
+
+
+

Then, create a org.acme.s3.S3SyncClientResource that will provides an API to upload/download files as well as to list all the files in a bucket.

+
+
+
+
package org.acme.s3;
+
+import java.util.Comparator;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+import jakarta.ws.rs.core.Response.ResponseBuilder;
+import jakarta.ws.rs.core.Response.Status;
+import software.amazon.awssdk.core.ResponseBytes;
+import software.amazon.awssdk.core.sync.RequestBody;
+import software.amazon.awssdk.services.s3.S3Client;
+import software.amazon.awssdk.services.s3.model.GetObjectResponse;
+import software.amazon.awssdk.services.s3.model.ListObjectsRequest;
+import software.amazon.awssdk.services.s3.model.PutObjectResponse;
+
+
+@Path("/s3")
+public class S3SyncClientResource extends CommonResource {
+    @Inject
+    S3Client s3;
+
+    @POST
+    @Path("upload")
+    @Consumes(MediaType.MULTIPART_FORM_DATA)
+    public Response uploadFile(FormData formData) throws Exception {
+
+        if (formData.filename == null || formData.filename.isEmpty()) {
+            return Response.status(Status.BAD_REQUEST).build();
+        }
+
+        if (formData.mimetype == null || formData.mimetype.isEmpty()) {
+            return Response.status(Status.BAD_REQUEST).build();
+        }
+
+        PutObjectResponse putResponse = s3.putObject(buildPutRequest(formData),
+                RequestBody.fromFile(formData.data));
+        if (putResponse != null) {
+            return Response.ok().status(Status.CREATED).build();
+        } else {
+            return Response.serverError().build();
+        }
+    }
+
+    @GET
+    @Path("download/{objectKey}")
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    public Response downloadFile(String objectKey) {
+        ResponseBytes<GetObjectResponse> objectBytes = s3.getObjectAsBytes(buildGetRequest(objectKey));
+        ResponseBuilder response = Response.ok(objectBytes.asUtf8String());
+        response.header("Content-Disposition", "attachment;filename=" + objectKey);
+        response.header("Content-Type", objectBytes.response().contentType());
+        return response.build();
+    }
+
+    @GET
+    @Produces(MediaType.APPLICATION_JSON)
+    public List<FileObject> listFiles() {
+        ListObjectsRequest listRequest = ListObjectsRequest.builder().bucket(bucketName).build();
+
+        //HEAD S3 objects to get metadata
+        return s3.listObjects(listRequest).contents().stream()
+                .map(FileObject::from)
+                .sorted(Comparator.comparing(FileObject::getObjectKey))
+                .collect(Collectors.toList());
+    }
+}
+
+
+
+
+
+

Configuring S3 clients

+
+
+

Both S3 clients (sync and async) are configurable via the application.properties file that can be provided in the src/main/resources directory.

+
+
+ + + + + +
+ + +You need to add to the classpath a proper implementation of the sync client. By default the extension uses the URL connection HTTP client, so +add a URL connection client dependency to the pom.xml file: +
+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.s3.sync-client.type=apache
+
+
+
+

And add following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.s3.sync-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+

For asynchronous client refer to Going asynchronous for more information.

+
+
+

If you’re going to use a local S3 instance, configure it as follows:

+
+
+
+
quarkus.s3.endpoint-override=http://localhost:4566
+
+quarkus.s3.aws.region=us-east-1
+quarkus.s3.aws.credentials.type=static
+quarkus.s3.aws.credentials.static-provider.access-key-id=test-key
+quarkus.s3.aws.credentials.static-provider.secret-access-key=test-secret
+
+bucket.name=quarkus.s3.quickstart
+
+
+
+
    +
  • +

    quarkus.s3.aws.region - It’s required by the client, but since you’re using a local S3 instance you can pick any valid AWS region.

    +
  • +
  • +

    quarkus.s3.aws.credentials.type - Set static credentials provider with any values for access-key-id and secret-access-key

    +
  • +
  • +

    quarkus.s3.endpoint-override - Override the S3 client to use a local instance instead of an AWS service

    +
  • +
  • +

    bucket.name - Name of the S3 bucket

    +
  • +
+
+
+

If you want to work with an AWS account, you’d need to set it with:

+
+
+
+
bucket.name=<your-bucket-name>
+
+quarkus.s3.aws.region=<YOUR_REGION>
+quarkus.s3.aws.credentials.type=default
+
+
+
+
    +
  • +

    bucket.name - name of the S3 bucket on your AWS account.

    +
  • +
  • +

    quarkus.s3.aws.region you should set it to the region where your S3 bucket was created,

    +
  • +
  • +

    quarkus.s3.aws.credentials.type - use the default credentials provider chain that looks for credentials in this order:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

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

Creating a frontend

+
+
+

Now let’s add a simple web page to interact with our S3SyncClientResource. +Quarkus automatically serves static resources located under the META-INF/resources directory. +In the src/main/resources/META-INF/resources directory, add a s3.html file with the content from this s3.html file in it.

+
+
+

You can now interact with your REST service:

+
+
+
    +
  • +

    start Quarkus with ./mvnw compile quarkus:dev

    +
  • +
  • +

    open a browser to http://localhost:8080/s3.html

    +
  • +
  • +

    upload new file to the current S3 bucket via the form and see the list of files in the bucket

    +
  • +
+
+
+
+
+

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can be run with java -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

Create a org.acme.s3.S3AsyncClientResource that will be similar to our S3SyncClientResource but using an asynchronous programming model.

+
+
+
+
package org.acme.s3;
+
+import java.nio.ByteBuffer;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+import jakarta.ws.rs.core.Response.Status;
+import mutiny.zero.flow.adapters.AdaptersToFlow;
+
+import org.jboss.resteasy.reactive.RestMulti;
+import org.reactivestreams.Publisher;
+
+import io.smallrye.mutiny.Multi;
+import io.smallrye.mutiny.Uni;
+import io.vertx.core.buffer.Buffer;
+import software.amazon.awssdk.core.async.AsyncRequestBody;
+import software.amazon.awssdk.core.async.AsyncResponseTransformer;
+import software.amazon.awssdk.services.s3.S3AsyncClient;
+import software.amazon.awssdk.services.s3.model.ListObjectsRequest;
+import software.amazon.awssdk.services.s3.model.ListObjectsResponse;
+
+@Path("/async-s3")
+public class S3AsyncClientResource extends CommonResource {
+    @Inject
+    S3AsyncClient s3;
+
+    @POST
+    @Path("upload")
+    @Consumes(MediaType.MULTIPART_FORM_DATA)
+    public Uni<Response> uploadFile(FormData formData) throws Exception {
+
+        if (formData.filename == null || formData.filename.isEmpty()) {
+            return Uni.createFrom().item(Response.status(Status.BAD_REQUEST).build());
+        }
+
+        if (formData.mimetype == null || formData.mimetype.isEmpty()) {
+            return Uni.createFrom().item(Response.status(Status.BAD_REQUEST).build());
+        }
+
+        return Uni.createFrom()
+                .completionStage(() -> {
+                    return s3.putObject(buildPutRequest(formData), AsyncRequestBody.fromFile(formData.data));
+                })
+                .onItem().ignore().andSwitchTo(Uni.createFrom().item(Response.created(null).build()))
+                .onFailure().recoverWithItem(th -> {
+                    th.printStackTrace();
+                    return Response.serverError().build();
+                });
+    }
+
+    @GET
+    @Path("download/{objectKey}")
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    public RestMulti<Buffer> downloadFile(String objectKey) {
+
+        return RestMulti.fromUniResponse(Uni.createFrom()
+                .completionStage(() -> s3.getObject(buildGetRequest(objectKey),
+                        AsyncResponseTransformer.toPublisher())),
+                response -> Multi.createFrom().safePublisher(AdaptersToFlow.publisher((Publisher<ByteBuffer>) response))
+                        .map(S3AsyncClientResource::toBuffer),
+                response -> Map.of("Content-Disposition", List.of("attachment;filename=" + objectKey), "Content-Type",
+                        List.of(response.response().contentType())));
+    }
+
+    @GET
+    public Uni<List<FileObject>> listFiles() {
+        ListObjectsRequest listRequest = ListObjectsRequest.builder()
+                .bucket(bucketName)
+                .build();
+
+        return Uni.createFrom().completionStage(() -> s3.listObjects(listRequest))
+                .onItem().transform(result -> toFileItems(result));
+    }
+
+    private static Buffer toBuffer(ByteBuffer bytebuffer) {
+        byte[] result = new byte[bytebuffer.remaining()];
+        bytebuffer.get(result);
+        return Buffer.buffer(result);
+    }
+
+    private List<FileObject> toFileItems(ListObjectsResponse objects) {
+        return objects.contents().stream()
+                .map(FileObject::from)
+                .sorted(Comparator.comparing(FileObject::getObjectKey))
+                .collect(Collectors.toList());
+    }
+}
+
+
+
+

And we need to add the Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.s3.async-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based S3 client, add the io.quarkus.amazon.s3.runtime.S3Crt qualifier as follows:

+
+
+
+
@Inject
+@S3Crt
+S3AsyncClient s3;
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+
+

S3 Transfer Manager

+
+

Amazon S3 Transfer Manager is high-level file transfer utility based on the S3 client. The extension provides functionality that allows to use S3TransferManager when running in Quarkus. +You can find more information about S3 Transfer Manager at the Amazon S3 website.

+
+
+

S3 Transfer Manager and the Quarkus extension supports only Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client (by default) or the AWS CRT-based HTTP client, or AWS CRT-based S3 client.

+
+
+

S3 Transfer Manager share the same configuration as S3 asynchronous client. See above to configure an S3AsyncClient.

+
+
+

If you want to use S3 Transfer Manager, configure an S3AsyncClient`with the desired HTTP client library and simply inject an instance of `S3TransferManager:

+
+
+
+
// Netty or AWS CRT-based HTTP client
+@Inject
+S3TransferManager transferManager;
+
+// or AWS CRT-based S3 client
+@Inject
+@S3Crt
+S3TransferManager transferManager;
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.amazonservices</groupId>
+    <artifactId>quarkus-amazon-s3-transfer-manager</artifactId>
+</dependency>
+
+
+
+

You can then make call

+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_S3_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_S3_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_S3_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_S3_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_S3_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_S3_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

The buckets to create on startup.

+
+
+

Environment variable: QUARKUS_S3_DEVSERVICES_BUCKETS

+
+
+

list of string

default

+
+
+
+

Enable using the accelerate endpoint when accessing S3.

+
+
+

Accelerate endpoints allow faster transfer of objects by using Amazon CloudFront’s globally distributed edge locations.

+
+
+

Environment variable: QUARKUS_S3_ACCELERATE_MODE

+
+
+

boolean

false

+
+
+
+

Enable doing a validation of the checksum of an object stored in S3.

+
+
+

Environment variable: QUARKUS_S3_CHECKSUM_VALIDATION

+
+
+

boolean

true

+
+
+
+

Enable using chunked encoding when signing the request payload for software.amazon.awssdk.services.s3.model.PutObjectRequest and software.amazon.awssdk.services.s3.model.UploadPartRequest.

+
+
+

Environment variable: QUARKUS_S3_CHUNKED_ENCODING

+
+
+

boolean

true

+
+
+
+

Enable dualstack mode for accessing S3. If you want to use IPv6 when accessing S3, dualstack must be enabled.

+
+
+

Environment variable: QUARKUS_S3_DUALSTACK

+
+
+

boolean

false

+
+
+
+

Enable using path style access for accessing S3 objects instead of DNS style access. DNS style access is preferred as it will result in better load balancing when accessing S3.

+
+
+

Environment variable: QUARKUS_S3_PATH_STYLE_ACCESS

+
+
+

boolean

false

+
+
+
+

Enable cross-region call to the region specified in the S3 resource ARN different than the region the client was configured with. If this flag is not set to 'true', the cross-region call will throw an exception.

+
+
+

Environment variable: QUARKUS_S3_USE_ARN_REGION_ENABLED

+
+
+

boolean

false

+
+
+
+

Define the profile name that should be consulted to determine the default value of use-arn-region-enabled. This is not used, if the use-arn-region-enabled is configured to 'true'.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_S3_PROFILE_NAME

+
+
+

string

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_S3_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_S3_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_S3_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_S3_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_S3_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_S3_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

AWS CRT-based S3 client configurations

Type

Default

+
+
+
+

Configure the starting buffer size the client will use to buffer the parts downloaded from S3.

+
+
+

Environment variable: QUARKUS_S3_CRT_CLIENT_INITIAL_READ_BUFFER_SIZE_IN_BYTES

+
+
+

long

Equal to the resolved part size * 10

+
+
+
+

Specifies the maximum number of S3 connections that should be established during a transfer.

+
+
+

Environment variable: QUARKUS_S3_CRT_CLIENT_MAX_CONCURRENCY

+
+
+

int

+
+
+
+

Sets the minimum part size for transfer parts.

+
+
+

Environment variable: QUARKUS_S3_CRT_CLIENT_MINIMUM_PART_SIZE_IN_BYTES

+
+
+

long

8MB

+
+
+
+

The target throughput for transfer requests.

+
+
+

Environment variable: QUARKUS_S3_CRT_CLIENT_TARGET_THROUGHPUT_IN_GBPS

+
+
+

double

10

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.12.x/amazon-secretsmanager.html b/quarkus-amazon-services/2.12.x/amazon-secretsmanager.html new file mode 100644 index 0000000000..7fa5db9088 --- /dev/null +++ b/quarkus-amazon-services/2.12.x/amazon-secretsmanager.html @@ -0,0 +1,3358 @@ + + + + + + Amazon Secrets Manager Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon Secrets Manager Client

+
+
+
+

AWS Secrets Manager enables you to replace hardcoded credentials in your code, including passwords, with an API call to Secrets Manager to retrieve the secret programmatically. +This helps ensure the secret can’t be compromised by someone examining your code, because the secret no longer exists in the code.

+
+
+

You can find more information about Secrets Manager at the AWS Secrets Manager website.

+
+
+ + + + + +
+ + +The Secrets Manager extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client (by default) or the AWS CRT-based HTTP client

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use Secrets Manager locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 17+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    An AWS Account to access the Secrets Manager service

    +
  • +
  • +

    Docker for your system to run Secrets Manager locally for testing purposes

    +
  • +
+
+
+

Provision Secrets Manager locally via Dev Services

+
+

The easiest way to start working with Secrets Manager is to run a local instance using Dev Services.

+
+
+
+

Provision Secrets Manager locally manually

+
+

You can also set up a local version of Secrets Manager manually, first start a LocalStack container:

+
+
+
+
docker run --rm --name local-secrets-manager --publish 4566:4584 -e SERVICES=secretsmanager -e START_WEB=0 -d localstack/localstack:3.0.1
+
+
+
+

This starts a Secrets Manager instance that is accessible on port 4566.

+
+
+

Create an AWS profile for your local instance using AWS CLI:

+
+
+
+
$ aws configure --profile localstack
+AWS Access Key ID [None]: test-key
+AWS Secret Access Key [None]: test-secret
+Default region name [None]: us-east-1
+Default output format [None]:
+
+
+
+
+
+
+

Solution

+
+
+

The application built here allows to store and retrieve credentials using Secrets Manager.

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step. +However, you can go right to the completed example.

+
+
+

Clone the Git repository: git clone https://github.com/quarkusio/quarkus-quickstarts.git, or download an archive.

+
+
+

The solution is located in the amazon-secretsmanager-quickstart directory.

+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.8.0:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-secretsmanager-quickstart \
+    -DclassName="org.acme.secretsmanager.QuarkusSecretsManagerSyncResource" \
+    -Dpath="/sync" \
+    -Dextensions="resteasy,resteasy-jackson,amazon-secretsmanager,resteasy-mutiny"
+cd amazon-secretsmanager-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy/JAX-RS, Mutiny and Amazon Secrets Manager Client extensions. +After this, the amazon-secretsmanager extension has been added to your pom.xml as well as the Mutiny support for RESTEasy.

+
+
+
+
+

Creating JSON REST service

+
+
+

In this example, we will create an application that allows us to store and retrieve parameters to and from Secrets Manager store using a RESTful API. +The example application will demonstrate the two programming models supported by the extension.

+
+
+

Let’s start with an abstract org.acme.secretsmanager.QuarkusSecretsManagerResource class to provide the common functionality we will need for both the synchronous and asynchrounous exposures.

+
+
+
+
package org.acme.secretsmanager;
+
+import static java.lang.Boolean.TRUE;
+import static java.util.stream.Collectors.toMap;
+
+import java.util.Map;
+import java.util.stream.Collector;
+
+import jakarta.annotation.PostConstruct;
+
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+
+import software.amazon.awssdk.services.secretsmanager.model.CreateSecretRequest;
+import software.amazon.awssdk.services.secretsmanager.model.GetSecretValueRequest;
+
+public abstract class QuarkusSecretsManagerResource {
+    public static final String VERSION_STAGE = "AWSCURRENT";
+
+    @ConfigProperty(name = "secret.name") (1)
+    String secretName;
+
+    protected GetSecretValueRequest generateGetSecretValueRequest() {
+        return GetSecretValueRequest.builder() (2)
+                .secretId(secretName)
+                .versionStage(VERSION_STAGE)
+                .build();
+    }
+
+    protected CreateSecretRequest generateCreateSecretRequest(String name, String secret) {
+        return CreateSecretRequest.builder() (3)
+                .name(name)
+                .secretString(secret)
+                .build();
+    }
+
+}
+
+
+
+ + + + + + + + + + + + + +
1Inject a configured name under which is stored the secret
2Generate a request for the credentials with the configured name
3Generate a request to create a specific secret
+
+
+

Now, we can extend the class and create the synchronous implementation in the org.acme.secretsmanager.QuarkusSecretsManagerSyncResource class.

+
+
+
+
package org.acme.secretsmanager;
+
+import java.util.Map;
+
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.DefaultValue;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.PUT;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+
+import software.amazon.awssdk.services.secretsmanager.SecretsManagerClient;
+
+@Path("/sync")
+public class QuarkusSecretsManagerSyncResource extends QuarkusSecretsManagerResource {
+
+    @Inject (1)
+    SecretsManagerClient secretsManagerClient;
+
+    @GET
+    @Produces(MediaType.APPLICATION_JSON)
+    public String getSecret() {
+        return secretsManagerClient.getSecretValue(generateGetSecretValueRequest()).secretString();
+    }
+
+    @POST
+    @Path("/{name}")
+    @Consumes(MediaType.TEXT_PLAIN)
+    public void createSecret(String name, String value) {
+        secretsManagerClient.createSecret(generateCreateSecretRequest(name, secret));
+    }
+
+}
+
+
+
+ + + + + +
1Inject the client provided by the amazon-secretsmanager extension
+
+
+

Using the Amazon Secrets Manager SDK, we can easily store and retrieve secrets.

+
+
+
+
+

Configuring Secrets Manager clients

+
+
+

Both Secrets Manager clients (sync and async) are configurable via the application.properties file that can be provided in the src/main/resources directory. +Additionally, you need to add to the classpath a proper implementation of the sync client. By default the extension uses the URL connection HTTP client, so +you need to add a URL connection client dependency to the pom.xml file:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.secretsmanager.sync-client.type=apache
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.secretsmanager.sync-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+

If you’re going to use a local Secrets Manager instance, configure it as follows:

+
+
+
+
quarkus.secretsmanager.endpoint-override=http://localhost:4566 (1)
+
+quarkus.secretsmanager.aws.region=us-east-1 (2)
+quarkus.secretsmanager.aws.credentials.type=static (3)
+quarkus.secretsmanager.aws.credentials.static-provider.access-key-id=test-key
+quarkus.secretsmanager.aws.credentials.static-provider.secret-access-key=test-secret
+
+
+
+ + + + + + + + + + + + + +
1Override the Secret Manager client to use LocalStack instead of the actual AWS service
2Localstack defaults to us-east-1
3The static credentials provider lets you set the access-key-id and secret-access-key directly
+
+
+

If you want to work with an AWS account, you can simply remove or comment out all Amazon Secrets Manager related properties. By default, the Secrets Manager client extension will use the default credentials provider chain that looks for credentials in this order:

+
+
+
    +
  • +

    Java System Properties - aws.accessKeyId and aws.secretAccessKey

    +
  • +
  • +

    Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

    +
  • +
  • +

    Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

    +
  • +
  • +

    Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

    +
  • +
  • +

    Instance profile credentials delivered through the Amazon EC2 metadata service

    +
  • +
+
+
+

And the region from your AWS CLI profile will be used.

+
+
+
+
+

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can then be run with java -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

Create a org.acme.secretsmanager.QuarkusSecretsManagerAsyncResource REST resource that will be similar to our QuarkusSecretsManagerSyncResource but using an asynchronous programming model.

+
+
+
+
package org.acme.secretsmanager;
+
+import java.util.Map;
+
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.DefaultValue;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.PUT;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+
+import io.smallrye.mutiny.Uni;
+import software.amazon.awssdk.services.secretsmanager.SecretsManagerAsyncClient;
+
+@Path("/async")
+public class QuarkusSecretsManagerAsyncResource extends QuarkusSecretsManagerResource {
+
+    @Inject
+    SecretsManagerAsyncClient secretsManagerAsyncClient;
+
+    @GET
+    @Produces(MediaType.APPLICATION_JSON)
+    public Uni<String> getSecret() {
+        return Uni.createFrom().completionStage(secretsManagerAsyncClient.getSecretValue(generateGetSecretValueRequest()))
+                .onItem().transform(r -> r.secretString());
+    }
+
+    @PUT
+    @Path("/{name}")
+    @Consumes(MediaType.TEXT_PLAIN)
+    public Uni<Void> createSecret(String name, String value) {
+
+        return Uni.createFrom().completionStage(secretsManagerAsyncClient.createSecret(generateCreateSecretRequest(name, secret)))
+                .onItem().transform(r -> null);
+    }
+
+}
+
+
+
+

Note that the SecretsManagerAsyncClient behaves just like the SecretsManagerClient, but returns CompletionStage objects which we use to create Uni instances, and then transform the emitted item.

+
+
+

To enable the asynchronous client, we also need to add the Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.secretsmanager.async-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.12.x/amazon-ses.html b/quarkus-amazon-services/2.12.x/amazon-ses.html new file mode 100644 index 0000000000..177ae79b82 --- /dev/null +++ b/quarkus-amazon-services/2.12.x/amazon-ses.html @@ -0,0 +1,3312 @@ + + + + + + Amazon SES Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon SES Client

+
+
+
+

Amazon Simple Email Service (SES) is a flexible and highly-scalable email sending and receiving service. +Using SES, you can send emails with any type of correspondence. You can find more information about SES at the Amazon SES website.

+
+
+ + + + + +
+ + +The SES extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client (by default) or the AWS CRT-based HTTP client

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use SES locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 17+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    An AWS Account to access the SES service

    +
  • +
  • +

    Docker for your system to run SES locally for testing purposes

    +
  • +
+
+
+

Provision SES locally via Dev Services

+
+

The easiest way to start working with SES is to run a local instance using Dev Services. +However, local instance of SES is only mocks the SES APIs without the actual email sending capabilities. You can still use it for this guide to verify an API communication or integration test purposes.

+
+
+
+

Provision SES locally manually

+
+

You can also set up a local version of SES manually, first start a LocalStack container:

+
+
+
+
docker run --rm --name local-ses -p 4566:4579 -e SERVICES=ses -e START_WEB=0 -d localstack/localstack:3.0.1
+
+
+
+

This starts a SES instance that is accessible on port 4566.

+
+
+

Create an AWS profile for your local instance using AWS CLI:

+
+
+
+
$ aws configure --profile localstack
+AWS Access Key ID [None]: test-key
+AWS Secret Access Key [None]: test-secret
+Default region name [None]: us-east-1
+Default output format [None]: text
+
+
+
+
+
+
+

Using SES on your AWS account

+
+
+

Amazon applies certain restrictions to new Amazon SES accounts, mainly to prevent fraud and abuse. All new accounts are in the Amazon SES sandbox. +All the features of the Amazon SES are still available while in sandbox, but a following restrictions applies: +- You can send mail to verified email addresses and domains or to the Amazon SES mailbox simulator +- You can only send mail from verified email addresses and domains +- You can send a maximum of 1 message per second.

+
+
+

Going production, you’d need to get your account of the sandbox following the Amazon procedure.

+
+
+

Set up AWS SES

+
+

We assume you are going to use AWS SES sandbox for the sake of this guide. But before sending any email, you must verify sender and recipient email addresses using AWS CLI. +You can use your personal email or any temporary email service available if you wish.

+
+
+
+
aws ses verify-email-identity --email-address <sender@email.address>
+aws ses verify-email-identity --email-address <recipient@email.address>
+
+
+
+

Now, you need to open a mailboxes of those email addresses in order to follow confirmation procedure. Once email is approved you can use it in your application.

+
+
+

If you are using local SES you still need to verify email addresses, otherwise your send email in order to let local SES accepting your request. +However, no emails to be send as it only mocks the service APIs.

+
+
+
+
aws ses verify-email-identity --email-address <sender@email.address> --profile localstack --endpoint-url=http://localhost:4566
+aws ses verify-email-identity --email-address <recipient@email.address> --profile localstack --endpoint-url=http://localhost:4566
+
+
+
+
+
+
+

Solution

+
+
+

The application built here allows sending text emails to the recipients that are verified on AWS SES.

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step. +However, you can go right to the completed example.

+
+
+

Clone the Git repository: git clone https://github.com/quarkusio/quarkus-quickstarts.git, or download an archive.

+
+
+

The solution is located in the amazon-ses-quickstart directory.

+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.8.0:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-ses-quickstart \
+    -DclassName="org.acme.ses.QuarkusSesSyncResource" \
+    -Dpath="/sync" \
+    -Dextensions="resteasy-reactive-jackson,amazon-ses"
+cd amazon-ses-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy Reactive/JAX-RS and Amazon SES Client extensions. +After this, the amazon-ses extension has been added to your pom.xml as well as the Mutiny support for RESTEasy.

+
+
+
+
+

Creating JSON REST service

+
+
+

Lets create a org.acme.ses.QuarkusSesSyncResource that will provide an API to send emails using the synchronous client.

+
+
+
+
package org.acme.ses;
+
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import org.acme.ses.model.Email;
+import software.amazon.awssdk.services.ses.SesClient;
+
+@Path("/sync")
+@Produces(MediaType.TEXT_PLAIN)
+@Consumes(MediaType.APPLICATION_JSON)
+public class QuarkusSesSyncResource {
+
+    @Inject
+    SesClient ses;
+
+    @POST
+    @Path("/email")
+    public String encrypt(Email data) {
+        return ses.sendEmail(req -> req
+            .source(data.getFrom())
+            .destination(d -> d.toAddresses(data.getTo()))
+            .message(msg -> msg
+                .subject(sub -> sub.data(data.getSubject()))
+                .body(b -> b.text(txt -> txt.data(data.getBody()))))).messageId();
+    }
+}
+
+
+
+
+
+

Configuring SES clients

+
+
+

Both SES clients (sync and async) are configurable via the application.properties file that can be provided in the src/main/resources directory. +Additionally, you need to add to the classpath a proper implementation of the sync client. By default the extension uses the URL connection HTTP client, so +you need to add a URL connection client dependency to the pom.xml file:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.ses.sync-client.type=apache
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.ses.sync-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+

If you’re going to use a local SES instance, configure it as follows:

+
+
+
+
quarkus.ses.endpoint-override=http://localhost:4566
+
+quarkus.ses.aws.region=us-east-1
+quarkus.ses.aws.credentials.type=static
+quarkus.ses.aws.credentials.static-provider.access-key-id=test-key
+quarkus.ses.aws.credentials.static-provider.secret-access-key=test-secret
+
+
+
+
    +
  • +

    quarkus.ses.aws.region - It’s required by the client, but since you’re using a local SES instance use us-east-1 as it’s a default region of LocalStack’s SES.

    +
  • +
  • +

    quarkus.ses.aws.credentials.type - Set static credentials provider with any values for access-key-id and secret-access-key

    +
  • +
  • +

    quarkus.ses.endpoint-override - Override the SES client to use a local instance instead of an AWS service

    +
  • +
+
+
+

If you want to work with an AWS account, you can simply remove or comment out all Amazon SES related properties. By default, the SES client extension +will use the default credentials provider chain that looks for credentials in this order:

+
+
+
    +
  • +

    Java System Properties - aws.accessKeyId and aws.secretAccessKey

    +
  • +
  • +

    Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

    +
  • +
  • +

    Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

    +
  • +
  • +

    Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

    +
  • +
  • +

    Instance profile credentials delivered through the Amazon EC2 metadata service

    +
  • +
+
+
+

And the region from your AWS CLI profile will be used.

+
+
+
+
+

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can be run with java -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

Create a org.acme.ses.QuarkusSesAsyncResource REST resource that will be similar to our QuarkusSesSyncResource but using an asynchronous programming model.

+
+
+
+
package org.acme.ses;
+
+import io.smallrye.mutiny.Uni;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import org.acme.ses.model.Email;
+import software.amazon.awssdk.services.ses.SesAsyncClient;
+import software.amazon.awssdk.services.ses.model.SendEmailResponse;
+
+@Path("/async")
+@Produces(MediaType.TEXT_PLAIN)
+@Consumes(MediaType.APPLICATION_JSON)
+public class QuarkusSesAsyncResource {
+
+    @Inject
+    SesAsyncClient ses;
+
+    @POST
+    @Path("/email")
+    public Uni<String> encrypt(Email data) {
+        return Uni.createFrom()
+            .completionStage(
+                ses.sendEmail(req -> req
+                    .source(data.getFrom())
+                    .destination(d -> d.toAddresses(data.getTo()))
+                    .message(msg -> msg
+                        .subject(sub -> sub.data(data.getSubject()))
+                        .body(b -> b.text(txt -> txt.data(data.getBody()))))))
+            .onItem().apply(SendEmailResponse::messageId);
+    }
+}
+
+
+
+

We create Uni instances from the CompletionStage objects returned by the asynchronous SES client, and then transform the emitted item.

+
+
+

And we need to add the Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.ses.async-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_SES_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_SES_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_SES_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_SES_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_SES_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_SES_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_SES_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_SES_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SES_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SES_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_SES_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_SES_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.12.x/amazon-sfn.html b/quarkus-amazon-services/2.12.x/amazon-sfn.html new file mode 100644 index 0000000000..8069a5a5e9 --- /dev/null +++ b/quarkus-amazon-services/2.12.x/amazon-sfn.html @@ -0,0 +1,3216 @@ + + + + + + Amazon SFN Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon SFN Client

+
+
+
+

Amazon AWS Step Functions (SFN) is a cloud service that enables you to coordinate and automate the execution of multiple AWS services in a serverless workflow. +It allows you to design, visualize, and execute workflows using a state machine architecture. +With SFN, you can seamlessly integrate various AWS services, including Lambda functions, Amazon S3, Amazon DynamoDB, and others, into a cohesive and scalable workflow.

+
+
+

You can find more information about SFN at the Amazon SFN website.

+
+
+ + + + + +
+ + +The SFN extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client (by default) or the AWS CRT-based HTTP client

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use SFN locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 17+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    An AWS Account to access the SFN service

    +
  • +
  • +

    Optionally, Docker for your system to run SFN locally for testing purposes

    +
  • +
+
+
+

Provision SFN locally via Dev Services

+
+

The easiest way to start working with SFN is to run a local instance using Dev Services.

+
+
+
+

Provision SFN locally manually

+
+

You can also set up a local version of SFN manually, first start a LocalStack container:

+
+
+
+
docker run -it --publish 4566:4566 -e SERVICES=stepfunctions -e START_WEB=0 localstack/localstack:3.0.1
+
+
+
+

This starts a SFN instance that is accessible on port 4566.

+
+
+

Create an AWS profile for your local instance using AWS CLI:

+
+
+
+
$ aws configure --profile localstack
+AWS Access Key ID [None]: test-key
+AWS Secret Access Key [None]: test-secret
+Default region name [None]: us-east-1
+Default output format [None]: text
+
+
+
+
+

Create a SFN state machine

+
+

Create a SFN state machine using AWS CLI and store the state machine ARN in a STATE_MACHINE_ARN variable:

+
+
+
+
STATE_MACHINE_ARN=$(aws stepfunctions create-state-machine --definition "{\
+  \"Comment\": \"A Hello World example of the Amazon States Language using a Pass state\",\
+  \"StartAt\": \"HelloWorld\",\
+  \"States\": {\
+    \"HelloWorld\": {\
+      \"Type\": \"Pass\",\
+      \"End\": true\
+    }\
+  }}" --name "HelloWorld" --role-arn "arn:aws:iam::012345678901:role/DummyRole"  --endpoint-url http://localhost:4566 --profile localstack --query stateMachineArn --output text)
+
+
+
+

Start an execution using the ARN of the state machine you created and store the execution ARN in a EXECUTION_ARN variable:

+
+
+
+
EXECUTION_ARN=$(aws stepfunctions start-execution --state-machine-arn "$STATE_MACHINE_ARN" --endpoint-url http://localhost:4566 --profile localstack --query executionArn --output text)
+
+
+
+

Finally, get the information about the state machine execution:

+
+
+
+
aws stepfunctions describe-execution --execution-arn "$EXECUTION_ARN" --endpoint-url http://localhost:4566 --profile localstack
+
+
+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.8.0:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-sfn-quickstart \
+    -DclassName="org.acme.sfn.QuarkusSfnSyncResource" \
+    -Dpath="/sync" \
+    -Dextensions="resteasy-reactive-jackson,amazon-sfn"
+cd amazon-sfn-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy Reactive/JAX-RS and Amazon SFN Client extensions. +After this, the amazon-sfn extension has been added to your pom.xml as well as the Mutiny support for RESTEasy.

+
+
+
+
+

Configuring SFN clients

+
+
+

Both SFN clients (sync and async) are configurable via the application.properties file that can be provided in the src/main/resources directory. +Additionally, you need to add to the classpath a proper implementation of the sync client. By default, the extension uses URL connection HTTP client, so +you need to add a URL connection client dependency to the pom.xml file:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.sfn.sync-client.type=apache
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.sfn.sync-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+

If you’re going to use a local SFN instance, configure it as follows:

+
+
+
+
quarkus.sfn.endpoint-override=http://localhost:4566
+
+quarkus.sfn.aws.region=us-east-1
+quarkus.sfn.aws.credentials.type=static
+quarkus.sfn.aws.credentials.static-provider.access-key-id=test-key
+quarkus.sfn.aws.credentials.static-provider.secret-access-key=test-secret
+
+
+
+
    +
  • +

    quarkus.sfn.aws.region - It’s required by the client, but since you’re using a local SFN instance you can pick any valid AWS region.

    +
  • +
  • +

    quarkus.sfn.aws.credentials.type - Set static credentials provider with any values for access-key-id and secret-access-key

    +
  • +
  • +

    quarkus.sfn.endpoint-override - Override the SFN client to use a local instance instead of an AWS service

    +
  • +
+
+
+

If you want to work with an AWS account, you’d need to set it with:

+
+
+
+
quarkus.sfn.aws.region=<YOUR_REGION>
+quarkus.sfn.aws.credentials.type=default
+
+
+
+
    +
  • +

    quarkus.sfn.aws.region you should set it to the region where you provisioned the SFN state machine,

    +
  • +
  • +

    quarkus.sfn.aws.credentials.type - use the default credentials provider chain that looks for credentials in this order:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

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

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can then be run with java -Dparameters.path=/quarkus/is/awesome/ -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

We need to add Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.sfn.async-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_SFN_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_SFN_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_SFN_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_SFN_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_SFN_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_SFN_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_SFN_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_SFN_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SFN_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SFN_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_SFN_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_SFN_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.12.x/amazon-sns.html b/quarkus-amazon-services/2.12.x/amazon-sns.html new file mode 100644 index 0000000000..39a9d9e84b --- /dev/null +++ b/quarkus-amazon-services/2.12.x/amazon-sns.html @@ -0,0 +1,3960 @@ + + + + + + Amazon SNS Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon SNS Client

+
+
+
+

Amazon Simple Notification Service (SNS) is a highly available and fully managed pub/sub messaging service. +It provides topics for high-throughput, push-based, many-to-many messaging. Messages can fan out to a large number of subscriber endpoints for +parallel processing, including Amazon SQS queues, AWS Lambda functions, and HTTP/S webhooks. Additionally, SNS can be used +to fan out notifications to end users using mobile push, SMS and email.

+
+
+

You can find more information about SNS at the Amazon SNS website.

+
+
+ + + + + +
+ + +The SNS extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client (by default) or the AWS CRT-based HTTP client

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use SNS locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 17+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    An AWS Account to access the SNS service

    +
  • +
  • +

    Optionally, Docker for your system to run SNS locally for testing purposes

    +
  • +
+
+
+

Provision SNS locally via Dev Services

+
+

The easiest way to start working with SNS is to run a local instance using Dev Services.

+
+
+
+

Provision SNS locally manually

+
+

You can also set up a local version of SNS manually, first start a LocalStack container:

+
+
+
+
docker run -it --publish 4566:4575 -e SERVICES=sns -e START_WEB=0 localstack/localstack:3.0.1
+
+
+
+

This starts a SNS instance that is accessible on port 4566.

+
+
+

Create an AWS profile for your local instance using AWS CLI:

+
+
+
+
$ aws configure --profile localstack
+AWS Access Key ID [None]: test-key
+AWS Secret Access Key [None]: test-secret
+Default region name [None]: us-east-1
+Default output format [None]: text
+
+
+
+
+

Create a SNS topic

+
+

Create a SNS topic using AWS CLI and store in TOPIC_ARN environment variable

+
+
+
+
TOPIC_ARN=`aws sns create-topic --name=QuarksCollider --profile localstack --endpoint-url=http://localhost:4566`
+
+
+
+ + + + + +
+ + +
+

If you are using LocalStack, some additional configuration is needed:

+
+
+
    +
  • +

    Set the quarkus.shield.base.url configuration property in your application.properties to your IP address instead of localhost.

    +
  • +
  • +

    Set the quarkus.http.host configuration property in your application.properties to 0.0.0.0. +Be aware that Quarkus will then listen to all interfaces, which might be a security hazard depending on your network configuration.

    +
  • +
+
+
+

Otherwise your service will not receive the notifications.

+
+
+
+
+

If you want to run the demo using SNS on your AWS account, you can create a topic using AWS default profile

+
+
+
+
TOPIC_ARN=`aws sns create-topic --name=QuarksCollider`
+
+
+
+
+
+
+

Solution

+
+
+

The application built here allows to shoot elementary particles (quarks) into a QuarksCollider topic of the AWS SNS. +Additionally, we create a resource that allows to subscribe to the QuarksCollider topic in order to receive published quarks.

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step. +However, you can go right to the completed example.

+
+
+

Clone the Git repository: git clone https://github.com/quarkusio/quarkus-quickstarts.git, or download an archive.

+
+
+

The solution is located in the amazon-sns-quickstart directory.

+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.8.0:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-sns-quickstart \
+    -DclassName="org.acme.sns.QuarksCannonSyncResource" \
+    -Dpath="/sync-cannon" \
+    -Dextensions="resteasy-reactive-jackson,amazon-sns"
+cd amazon-sns-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy Reactive/JAX-RS and Amazon SNS Client extensions. +After this, the amazon-sns extension has been added to your pom.xml as well as the Mutiny support for RESTEasy.

+
+
+
+
+

Creating JSON REST service

+
+
+

In this example, we will create an application that allows to publish quarks. The example application will demonstrate the two programming models supported by the extension.

+
+
+

First, let’s create the Quark bean as follows:

+
+
+
+
package org.acme.sns.model;
+
+import io.quarkus.runtime.annotations.RegisterForReflection;
+import java.util.Objects;
+
+@RegisterForReflection
+public class Quark {
+
+    private String flavor;
+    private String spin;
+
+    public Quark() {
+    }
+
+    public String getFlavor() {
+        return flavor;
+    }
+
+    public void setFlavor(String flavor) {
+        this.flavor = flavor;
+    }
+
+    public String getSpin() {
+        return spin;
+    }
+
+    public void setSpin(String spin) {
+        this.spin = spin;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (!(obj instanceof Quark)) {
+            return false;
+        }
+
+        Quark other = (Quark) obj;
+
+        return Objects.equals(other.flavor, this.flavor);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(this.flavor);
+    }
+}
+
+
+
+

Then, create a org.acme.sns.QuarksCannonSyncResource that will provide an API to shoot quarks into the SNS topic via the SNS synchronous client.

+
+
+ + + + + +
+ + +The @RegisterForReflection annotation instructs Quarkus to keep the class and its members during the native compilation. More details about the @RegisterForReflection annotation can be found on the native application tips page. +
+
+
+
+
package org.acme.sns;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectWriter;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+import org.acme.sns.model.Quark;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import org.jboss.logging.Logger;
+import software.amazon.awssdk.services.sns.SnsClient;
+import software.amazon.awssdk.services.sns.model.PublishResponse;
+
+@Path("/sync/cannon")
+@Produces(MediaType.TEXT_PLAIN)
+public class QuarksCannonSyncResource {
+
+    private static final Logger LOGGER = Logger.getLogger(QuarksCannonSyncResource.class);
+
+    @Inject
+    SnsClient sns;
+
+    @ConfigProperty(name = "topic.arn")
+    String topicArn;
+
+    static ObjectWriter QUARK_WRITER = new ObjectMapper().writerFor(Quark.class);
+
+    @POST
+    @Path("/shoot")
+    @Consumes(MediaType.APPLICATION_JSON)
+    public Response publish(Quark quark) throws Exception {
+        String message = QUARK_WRITER.writeValueAsString(quark);
+        PublishResponse response = sns.publish(p -> p.topicArn(topicArn).message(message));
+        LOGGER.infov("Fired Quark[{0}, {1}}]", quark.getFlavor(), quark.getSpin());
+        return Response.ok().entity(response.messageId()).build();
+    }
+}
+
+
+
+

Because of the fact that messages published must be simply a String we’re using Jackson’s ObjectWriter in order to serialize our Quark objects into a String.

+
+
+

The missing piece is the subscriber that will receive the messages published to our topic. Before implementing subscribers, we need to define POJO classes representing messages posted by the AWS SNS.

+
+
+

Let’s create two classes that represent SNS Notification and SNS Subscription Confirmation messages based on the AWS SNS Message and JSON formats

+
+
+

Create org.acme.sns.model.SnsNotification class

+
+
+
+
package org.acme.sns.model;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class SnsNotification {
+
+    @JsonProperty("Message")
+    private String message;
+
+    @JsonProperty("MessageId")
+    private String messageId;
+
+    @JsonProperty("Signature")
+    private String signature;
+
+    @JsonProperty("SignatureVersion")
+    private String signatureVersion;
+
+    @JsonProperty("SigningCertURL")
+    private String signinCertUrl;
+
+    @JsonProperty("Subject")
+    private String subject;
+
+    @JsonProperty("Timestamp")
+    private String timestamp;
+
+    @JsonProperty("TopicArn")
+    private String topicArn;
+
+    @JsonProperty("Type")
+    private String type;
+
+    @JsonProperty("UnsubscribeURL")
+    private String unsubscribeURL;
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
+    public String getMessageId() {
+        return messageId;
+    }
+
+    public void setMessageId(String messageId) {
+        this.messageId = messageId;
+    }
+
+    public String getSignature() {
+        return signature;
+    }
+
+    public void setSignature(String signature) {
+        this.signature = signature;
+    }
+
+    public String getSignatureVersion() {
+        return signatureVersion;
+    }
+
+    public void setSignatureVersion(String signatureVersion) {
+        this.signatureVersion = signatureVersion;
+    }
+
+    public String getSigninCertUrl() {
+        return signinCertUrl;
+    }
+
+    public void setSigninCertUrl(String signinCertUrl) {
+        this.signinCertUrl = signinCertUrl;
+    }
+
+    public String getSubject() {
+        return subject;
+    }
+
+    public void setSubject(String subject) {
+        this.subject = subject;
+    }
+
+    public String getTimestamp() {
+        return timestamp;
+    }
+
+    public void setTimestamp(String timestamp) {
+        this.timestamp = timestamp;
+    }
+
+    public String getTopicArn() {
+        return topicArn;
+    }
+
+    public void setTopicArn(String topicArn) {
+        this.topicArn = topicArn;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getUnsubscribeURL() {
+        return unsubscribeURL;
+    }
+
+    public void setUnsubscribeURL(String unsubscribeURL) {
+        this.unsubscribeURL = unsubscribeURL;
+    }
+}
+
+
+
+

Then, create org.acme.sns.SnsSubscriptionConfirmation

+
+
+
+
package org.acme.sns.model;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class SnsSubscriptionConfirmation {
+
+    @JsonProperty("Message")
+    private String message;
+
+    @JsonProperty("MessageId")
+    private String messageId;
+
+    @JsonProperty("Signature")
+    private String signature;
+
+    @JsonProperty("SignatureVersion")
+    private String signatureVersion;
+
+    @JsonProperty("SigningCertURL")
+    private String signingCertUrl;
+
+    @JsonProperty("SubscribeURL")
+    private String subscribeUrl;
+
+    @JsonProperty("Timestamp")
+    private String timestamp;
+
+    @JsonProperty("Token")
+    private String token;
+
+    @JsonProperty("TopicArn")
+    private String topicArn;
+
+    @JsonProperty("Type")
+    private String type;
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
+    public String getMessageId() {
+        return messageId;
+    }
+
+    public void setMessageId(String messageId) {
+        this.messageId = messageId;
+    }
+
+    public String getSignature() {
+        return signature;
+    }
+
+    public void setSignature(String signature) {
+        this.signature = signature;
+    }
+
+    public String getSignatureVersion() {
+        return signatureVersion;
+    }
+
+    public void setSignatureVersion(String signatureVersion) {
+        this.signatureVersion = signatureVersion;
+    }
+
+    public String getSigningCertUrl() {
+        return signingCertUrl;
+    }
+
+    public void setSigningCertUrl(String signingCertUrl) {
+        this.signingCertUrl = signingCertUrl;
+    }
+
+    public String getSubscribeUrl() {
+        return subscribeUrl;
+    }
+
+    public void setSubscribeUrl(String subscribeUrl) {
+        this.subscribeUrl = subscribeUrl;
+    }
+
+    public String getTimestamp() {
+        return timestamp;
+    }
+
+    public void setTimestamp(String timestamp) {
+        this.timestamp = timestamp;
+    }
+
+    public String getToken() {
+        return token;
+    }
+
+    public void setToken(String token) {
+        this.token = token;
+    }
+
+    public String getTopicArn() {
+        return topicArn;
+    }
+
+    public void setTopicArn(String topicArn) {
+        this.topicArn = topicArn;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+}
+
+
+
+

Now, create org.acme.QuarksShieldSyncResource REST resources that: +- Allows to subscribe itself to our SNS topic +- Unsubscribe from the SNS topic +- Receive notifications from the subscribed SNS topic

+
+
+ + + + + +
+ + +Keep in mind that AWS SNS supports multiple types of subscribers (that is web servers, email addresses, AWS SQS queues, AWS Lambda functions, and many more), but for the sake of the +quickstart we will show how to subscribe an HTTP endpoint served by our application. +
+
+
+
+
package org.acme.sns;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectReader;
+import java.util.HashMap;
+import java.util.Map;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.HeaderParam;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+import org.acme.sns.model.Quark;
+import org.acme.sns.model.SnsNotification;
+import org.acme.sns.model.SnsSubscriptionConfirmation;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import org.jboss.logging.Logger;
+import software.amazon.awssdk.services.sns.SnsClient;
+import software.amazon.awssdk.services.sns.model.SubscribeResponse;
+
+@Path("/sync/shield")
+public class QuarksShieldSyncResource {
+
+    private static final Logger LOGGER = Logger.getLogger(QuarksShieldSyncResource.class);
+
+    private static final String NOTIFICATION_TYPE = "Notification";
+    private static final String SUBSCRIPTION_CONFIRMATION_TYPE = "SubscriptionConfirmation";
+    private static final String UNSUBSCRIPTION_CONFIRMATION_TYPE = "UnsubscribeConfirmation";
+
+    @Inject
+    SnsClient sns;
+
+    @ConfigProperty(name = "topic.arn")
+    String topicArn;
+
+    @ConfigProperty(name = "quarks.shield.base.url")
+    String quarksShieldBaseUrl;
+
+    private volatile String subscriptionArn;
+
+    static Map<Class<?>, ObjectReader> READERS = new HashMap<>();
+
+    static {
+        READERS.put(SnsNotification.class, new ObjectMapper().readerFor(SnsNotification.class));
+        READERS.put(SnsSubscriptionConfirmation.class, new ObjectMapper().readerFor(SnsSubscriptionConfirmation.class));
+        READERS.put(Quark.class, new ObjectMapper().readerFor(Quark.class));
+    }
+
+    @POST
+    @Consumes({MediaType.TEXT_PLAIN})
+    public Response notificationEndpoint(@HeaderParam("x-amz-sns-message-type") String messageType, String message) throws JsonProcessingException {
+        if (messageType == null) {
+            return Response.status(400).build();
+        }
+
+        if (messageType.equals(NOTIFICATION_TYPE)) {
+            SnsNotification notification = readObject(SnsNotification.class, message);
+            Quark quark = readObject(Quark.class, notification.getMessage());
+            LOGGER.infov("Quark[{0}, {1}] collision with the shield.", quark.getFlavor(), quark.getSpin());
+        } else if (messageType.equals(SUBSCRIPTION_CONFIRMATION_TYPE)) {
+            SnsSubscriptionConfirmation subConf = readObject(SnsSubscriptionConfirmation.class, message);
+            sns.confirmSubscription(cs -> cs.topicArn(topicArn).token(subConf.getToken()));
+            LOGGER.info("Subscription confirmed. Ready for quarks collisions.");
+        } else if (messageType.equals(UNSUBSCRIPTION_CONFIRMATION_TYPE)) {
+            LOGGER.info("We are unsubscribed");
+        } else {
+            return Response.status(400).entity("Unknown messageType").build();
+        }
+
+        return Response.ok().build();
+    }
+
+    @POST
+    @Path("/subscribe")
+    public Response subscribe() {
+        String notificationEndpoint = notificationEndpoint();
+        SubscribeResponse response = sns.subscribe(s -> s.topicArn(topicArn).protocol("http").endpoint(notificationEndpoint));
+        subscriptionArn = response.subscriptionArn();
+        LOGGER.infov("Subscribed Quarks shield <{0}> : {1} ", notificationEndpoint, response.subscriptionArn());
+        return Response.ok().entity(response.subscriptionArn()).build();
+    }
+
+    @POST
+    @Path("/unsubscribe")
+    public Response unsubscribe() {
+        if (subscriptionArn != null) {
+            sns.unsubscribe(s -> s.subscriptionArn(subscriptionArn));
+            LOGGER.infov("Unsubscribed quarks shield for id = {0}", subscriptionArn);
+            return Response.ok().build();
+        } else {
+            LOGGER.info("Not subscribed yet");
+            return Response.status(400).entity("Not subscribed yet").build();
+        }
+    }
+
+    private String notificationEndpoint() {
+        return quarksShieldBaseUrl + "/sync/shield";
+    }
+
+    private <T> T readObject(Class<T> clazz, String message) {
+        T object = null;
+        try {
+            object = READERS.get(clazz).readValue(message);
+        } catch (JsonProcessingException e) {
+            LOGGER.errorv("Unable to deserialize message <{0}> to Class <{1}>", message, clazz.getSimpleName());
+            throw new RuntimeException(e);
+        }
+        return object;
+    }
+}
+
+
+
+
    +
  1. +

    subscribe() endpoint subscribes to our topic by providing the URL to the POST endpoint receiving SNS notification requests.

    +
  2. +
  3. +

    unsubscribe() simply removes our subscription, so any messages published to the topic will not be routed to our endpoint anymore

    +
  4. +
  5. +

    notificationEndpoint() is called by SNS on new message if endpoint is subscribed. +See Amazon SNS message and JSON formats for details about the format of the messages SNS can submit.

    +
  6. +
+
+
+
+
+

Configuring SNS clients

+
+
+

Both SNS clients (sync and async) are configurable via the application.properties file that can be provided in the src/main/resources directory. +Additionally, you need to add to the classpath a proper implementation of the sync client. By default the extension uses URL connection HTTP client, so +you need to add a URL connection client dependency to the pom.xml file:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.sns.sync-client.type=apache
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.sns.sync-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+

If you’re going to use a local SNS instance, configure it as follows:

+
+
+
+
quarkus.sns.endpoint-override=http://localhost:4566
+
+quarkus.sns.aws.region=us-east-1
+quarkus.sns.aws.credentials.type=static
+quarkus.sns.aws.credentials.static-provider.access-key-id=test-key
+quarkus.sns.aws.credentials.static-provider.secret-access-key=test-secret
+
+
+
+
    +
  • +

    quarkus.sns.aws.region - It’s required by the client, but since you’re using a local SNS instance you can pick any valid AWS region.

    +
  • +
  • +

    quarkus.sns.aws.credentials.type - Set static credentials provider with any values for access-key-id and secret-access-key

    +
  • +
  • +

    quarkus.sns.endpoint-override - Override the SNS client to use a local instance instead of an AWS service

    +
  • +
+
+
+

If you want to work with an AWS account, you’d need to set it with:

+
+
+
+
quarkus.sns.aws.region=<YOUR_REGION>
+quarkus.sns.aws.credentials.type=default
+
+
+
+
    +
  • +

    quarkus.sns.aws.region you should set it to the region where you provisioned the SNS table,

    +
  • +
  • +

    quarkus.sns.aws.credentials.type - use the default credentials provider chain that looks for credentials in this order:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

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

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can be run with java -Dtopic.arn=$TOPIC_ARN -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

Create a org.acme.sns.QuarksCannonAsyncResource REST resource that will be similar to our QuarksCannonSyncResource but using an asynchronous programming model.

+
+
+
+
package org.acme.sns;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectWriter;
+import io.smallrye.mutiny.Uni;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+import org.acme.sns.model.Quark;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import org.jboss.logging.Logger;
+import software.amazon.awssdk.services.sns.SnsAsyncClient;
+import software.amazon.awssdk.services.sns.model.PublishResponse;
+
+@Path("/async/cannon")
+@Produces(MediaType.APPLICATION_JSON)
+@Consumes(MediaType.APPLICATION_JSON)
+public class QuarksCannonAsyncResource {
+
+    private static final Logger LOGGER = Logger.getLogger(QuarksCannonAsyncResource.class);
+
+    @Inject
+    SnsAsyncClient sns;
+
+    @ConfigProperty(name = "topic.arn")
+    String topicArn;
+
+    static ObjectWriter QUARK_WRITER = new ObjectMapper().writerFor(Quark.class);
+
+    @POST
+    @Path("/shoot")
+    @Consumes(MediaType.APPLICATION_JSON)
+    public Uni<Response> publish(Quark quark) throws Exception {
+        String message = QUARK_WRITER.writeValueAsString(quark);
+        return Uni.createFrom()
+            .completionStage(sns.publish(p -> p.topicArn(topicArn).message(message)))
+            .onItem().invoke(item -> LOGGER.infov("Fired Quark[{0}, {1}}]", quark.getFlavor(), quark.getSpin()))
+            .onItem().transform(PublishResponse::messageId)
+            .onItem().transform(id -> Response.ok().entity(id).build());
+    }
+}
+
+
+
+

We create Uni instances from the CompletionStage objects returned by the asynchronous SNS client, and then transform the emitted item.

+
+
+

And corresponding async subscriber org.acme.sns.QuarksShieldAsyncResource

+
+
+
+
package org.acme.sns;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectReader;
+import io.smallrye.mutiny.Uni;
+import java.util.HashMap;
+import java.util.Map;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.HeaderParam;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+import org.acme.sns.model.Quark;
+import org.acme.sns.model.SnsNotification;
+import org.acme.sns.model.SnsSubscriptionConfirmation;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import org.jboss.logging.Logger;
+import software.amazon.awssdk.services.sns.SnsAsyncClient;
+import software.amazon.awssdk.services.sns.model.SubscribeResponse;
+
+@Path("/async/shield")
+public class QuarksShieldAsyncResource {
+
+    private static final Logger LOGGER = Logger.getLogger(QuarksShieldAsyncResource.class);
+
+    private static final String NOTIFICATION_TYPE = "Notification";
+    private static final String SUBSCRIPTION_CONFIRMATION_TYPE = "SubscriptionConfirmation";
+    private static final String UNSUBSCRIPTION_CONFIRMATION_TYPE = "UnsubscribeConfirmation";
+
+    @Inject
+    SnsAsyncClient sns;
+
+    @ConfigProperty(name = "topic.arn")
+    String topicArn;
+
+    @ConfigProperty(name = "quarks.shield.base.url")
+    String quarksShieldBaseUrl;
+
+    private volatile String subscriptionArn;
+
+    static Map<Class<?>, ObjectReader> READERS = new HashMap<>();
+
+    static {
+        READERS.put(SnsNotification.class, new ObjectMapper().readerFor(SnsNotification.class));
+        READERS.put(SnsSubscriptionConfirmation.class, new ObjectMapper().readerFor(SnsSubscriptionConfirmation.class));
+        READERS.put(Quark.class, new ObjectMapper().readerFor(Quark.class));
+    }
+
+    @POST
+    @Consumes({MediaType.TEXT_PLAIN})
+    public Uni<Response> notificationEndpoint(@HeaderParam("x-amz-sns-message-type") String messageType, String message) {
+        if (messageType == null) {
+            return Uni.createFrom().item(Response.status(400).build());
+        }
+
+        if (messageType.equals(NOTIFICATION_TYPE)) {
+            return Uni.createFrom().item(readObject(SnsNotification.class, message))
+                .onItem().transform(notification -> readObject(Quark.class, notification.getMessage()))
+                .onItem().invoke(quark -> LOGGER.infov("Quark[{0}, {1}] collision with the shield.", quark.getFlavor(), quark.getSpin()))
+                .onItem().transform(quark -> Response.ok().build());
+        } else if (messageType.equals(SUBSCRIPTION_CONFIRMATION_TYPE)) {
+            return Uni.createFrom().item(readObject(SnsSubscriptionConfirmation.class, message))
+                .onItem().transformToUni(msg ->
+                    Uni.createFrom().completionStage(
+                        sns.confirmSubscription(confirm -> confirm.topicArn(topicArn).token(msg.getToken())))
+                )
+                .onItem().invoke(resp -> LOGGER.info("Subscription confirmed. Ready for quarks collisions."))
+                .onItem().transform(resp -> Response.ok().build());
+        } else if (messageType.equals(UNSUBSCRIPTION_CONFIRMATION_TYPE)) {
+            LOGGER.info("We are unsubscribed");
+            return Uni.createFrom().item(Response.ok().build());
+        }
+
+        return Uni.createFrom().item(Response.status(400).entity("Unknown messageType").build());
+    }
+
+    @POST
+    @Path("/subscribe")
+    public Uni<Response> subscribe() {
+        return Uni.createFrom()
+            .completionStage(sns.subscribe(s -> s.topicArn(topicArn).protocol("http").endpoint(notificationEndpoint())))
+            .onItem().transform(SubscribeResponse::subscriptionArn)
+            .onItem().invoke(this::setSubscriptionArn)
+            .onItem().invoke(arn -> LOGGER.infov("Subscribed Quarks shield with id = {0} ", arn))
+            .onItem().transform(arn -> Response.ok().entity(arn).build());
+    }
+
+    @POST
+    @Path("/unsubscribe")
+    public Uni<Response> unsubscribe() {
+        if (subscriptionArn != null) {
+            return Uni.createFrom()
+                .completionStage(sns.unsubscribe(s -> s.subscriptionArn(subscriptionArn)))
+                .onItem().invoke(arn -> LOGGER.infov("Unsubscribed quarks shield for id = {0}", subscriptionArn))
+                .onItem().invoke(arn -> subscriptionArn = null)
+                .onItem().transform(arn -> Response.ok().build());
+        } else {
+            return Uni.createFrom().item(Response.status(400).entity("Not subscribed yet").build());
+        }
+    }
+
+    private String notificationEndpoint() {
+        return quarksShieldBaseUrl + "/async/shield";
+    }
+
+    private void setSubscriptionArn(String arn) {
+        this.subscriptionArn = arn;
+    }
+
+    private <T> T readObject(Class<T> clazz, String message) {
+        T object = null;
+        try {
+            object = READERS.get(clazz).readValue(message);
+        } catch (JsonProcessingException e) {
+            LOGGER.errorv("Unable to deserialize message <{0}> to Class <{1}>", message, clazz.getSimpleName());
+            throw new RuntimeException(e);
+        }
+        return object;
+    }
+}
+
+
+
+

And we need to add Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.sns.async-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_SNS_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_SNS_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_SNS_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_SNS_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_SNS_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_SNS_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_SNS_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_SNS_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SNS_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SNS_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_SNS_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_SNS_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.12.x/amazon-sqs.html b/quarkus-amazon-services/2.12.x/amazon-sqs.html new file mode 100644 index 0000000000..9a2281074c --- /dev/null +++ b/quarkus-amazon-services/2.12.x/amazon-sqs.html @@ -0,0 +1,3529 @@ + + + + + + Amazon SQS Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon SQS Client

+
+
+
+

Amazon Simple Queue Service (SQS) is a fully managed message queuing service. +Using SQS, you can send, store, and receive messages between software components at any volume, without losing messages or requiring other +services to be available. +SQS offers two types of message queues. Standard queues offer maximum throughput, best-effort ordering and at-least-once delivery. +SQS FIFO queues are designed to guarantee that messages are processes exactly once, on the exact order that they were sent.

+
+
+

You can find more information about SQS at the Amazon SQS website.

+
+
+ + + + + +
+ + +The SQS extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client (by default) or the AWS CRT-based HTTP client

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use SQS locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 17+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    An AWS Account to access the SQS service

    +
  • +
  • +

    Docker for your system to run SQS locally for testing purposes

    +
  • +
+
+
+

Provision SQS locally via Dev Services

+
+

The easiest way to start working with SQS is to run a local instance using Dev Services.

+
+
+

You can optionally configure the queues that are created on startup with the quarkus.sqs.devservices.queues config property.

+
+
+
+

Provision SQS locally manually

+
+

You can also set up a local version of SQS manually, first start a LocalStack container:

+
+
+
+
docker run --rm --name local-sqs -p 4566:4566 -e SERVICES=sqs -e START_WEB=0 -d localstack/localstack:3.0.1
+
+
+
+

This starts a SQS instance that is accessible on port 4566.

+
+
+

Create an AWS profile for your local instance using AWS CLI:

+
+
+
+
$ aws configure --profile localstack
+AWS Access Key ID [None]: test-key
+AWS Secret Access Key [None]: test-secret
+Default region name [None]: us-east-1
+Default output format [None]: text
+
+
+
+
+

Create a SQS queue

+
+

Create a SQS queue using AWS CLI and store in QUEUE_URL environment variable.

+
+
+
+
QUEUE_URL=`aws sqs create-queue --queue-name=ColliderQueue --profile localstack --endpoint-url=http://localhost:4566`
+
+
+
+

Or, if you want to use your SQS queue on your AWS account create a queue using your default profile

+
+
+
+
QUEUE_URL=`aws sqs create-queue --queue-name=ColliderQueue`
+
+
+
+
+
+
+

Solution

+
+
+

The application built here allows shooting an elementary particles (quarks) into a ColliderQueue queue of the AWS SQS. +Additionally, we create a resource that allows receiving those quarks from the ColliderQueue queue in the order they were sent.

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step. +However, you can go right to the completed example.

+
+
+

Clone the Git repository: git clone https://github.com/quarkusio/quarkus-quickstarts.git, or download an archive.

+
+
+

The solution is located in the amazon-sqs-quickstart directory.

+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.8.0:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-sqs-quickstart \
+    -DclassName="org.acme.sqs.QuarksCannonSyncResource" \
+    -Dpath="/sync-cannon" \
+    -Dextensions="resteasy-reactive-jackson,amazon-sqs"
+cd amazon-sqs-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy Reactive and Amazon SQS Client extensions. +After this, the amazon-sqs extension has been added to your pom.xml as well as the Mutiny support for RESTEasy.

+
+
+
+
+

Creating JSON REST service

+
+
+

In this example, we will create an application that sends quarks via the queue. The example application will demonstrate the two programming models supported by the extension.

+
+
+

First, let’s create the Quark bean as follows:

+
+
+
+
package org.acme.sqs.model;
+
+import io.quarkus.runtime.annotations.RegisterForReflection;
+import java.util.Objects;
+
+@RegisterForReflection
+public class Quark {
+
+    private String flavor;
+    private String spin;
+
+    public Quark() {
+    }
+
+    public String getFlavor() {
+        return flavor;
+    }
+
+    public void setFlavor(String flavor) {
+        this.flavor = flavor;
+    }
+
+    public String getSpin() {
+        return spin;
+    }
+
+    public void setSpin(String spin) {
+        this.spin = spin;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (!(obj instanceof Quark)) {
+            return false;
+        }
+
+        Quark other = (Quark) obj;
+
+        return Objects.equals(other.flavor, this.flavor);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(this.flavor);
+    }
+}
+
+
+
+

Then, create a org.acme.sqs.QuarksCannonSyncResource that will provide an API to shoot quarks into the SQS queue using the synchronous client.

+
+
+ + + + + +
+ + +The @RegisterForReflection annotation instructs Quarkus to keep the class and its members during the native compilation. More details about the @RegisterForReflection annotation can be found on the native application tips page. +
+
+
+
+
package org.acme.sqs;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectWriter;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+import org.acme.sqs.model.Quark;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import org.jboss.logging.Logger;
+import software.amazon.awssdk.services.sqs.SqsClient;
+import software.amazon.awssdk.services.sqs.model.SendMessageResponse;
+
+@Path("/sync/cannon")
+@Produces(MediaType.TEXT_PLAIN)
+public class QuarksCannonSyncResource {
+
+    private static final Logger LOGGER = Logger.getLogger(QuarksCannonSyncResource.class);
+
+    @Inject
+    SqsClient sqs;
+
+    @ConfigProperty(name = "queue.url")
+    String queueUrl;
+
+    static ObjectWriter QUARK_WRITER = new ObjectMapper().writerFor(Quark.class);
+
+    @POST
+    @Path("/shoot")
+    @Consumes(MediaType.APPLICATION_JSON)
+    public Response sendMessage(Quark quark) throws Exception {
+        String message = QUARK_WRITER.writeValueAsString(quark);
+        SendMessageResponse response = sqs.sendMessage(m -> m.queueUrl(queueUrl).messageBody(message));
+        LOGGER.infov("Fired Quark[{0}, {1}}]", quark.getFlavor(), quark.getSpin());
+        return Response.ok().entity(response.messageId()).build();
+    }
+}
+
+
+
+

Because of the fact messages sent to the queue must be a String, we’re using Jackson’s ObjectWriter in order to serialize our Quark objects into a String.

+
+
+

Now, create the org.acme.QuarksShieldSyncResource REST resources that provides an endpoint to read the messages from the ColliderQueue queue.

+
+
+
+
package org.acme.sqs;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectReader;
+import java.util.List;
+import java.util.stream.Collectors;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import org.acme.sqs.model.Quark;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import org.jboss.logging.Logger;
+import software.amazon.awssdk.services.sqs.SqsClient;
+import software.amazon.awssdk.services.sqs.model.Message;
+
+@Path("/sync/shield")
+public class QuarksShieldSyncResource {
+
+    private static final Logger LOGGER = Logger.getLogger(QuarksShieldSyncResource.class);
+
+    @Inject
+    SqsClient sqs;
+
+    @ConfigProperty(name = "queue.url")
+    String queueUrl;
+
+    static ObjectReader QUARK_READER = new ObjectMapper().readerFor(Quark.class);
+
+    @GET
+    public List<Quark> receive() {
+        List<Message> messages = sqs.receiveMessage(m -> m.maxNumberOfMessages(10).queueUrl(queueUrl)).messages();
+
+        return messages.stream()
+            .map(Message::body)
+            .map(this::toQuark)
+            .collect(Collectors.toList());
+    }
+
+    private Quark toQuark(String message) {
+        Quark quark = null;
+        try {
+            quark = QUARK_READER.readValue(message);
+        } catch (Exception e) {
+            LOGGER.error("Error decoding message", e);
+            throw new RuntimeException(e);
+        }
+        return quark;
+    }
+}
+
+
+
+

We are using here a Jackson’s ObjectReader in order to deserialize queue messages into our Quark POJOs.

+
+
+
+
+

Configuring SQS clients

+
+
+

Both SQS clients (sync and async) are configurable via the application.properties file that can be provided in the src/main/resources directory. +Additionally, you need to add to the classpath a proper implementation of the sync client. By default the extension uses the URL connection HTTP client, so +you need to add a URL connection client dependency to the pom.xml file:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.sqs.sync-client.type=apache
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.sqs.sync-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+

If you’re going to use a local SQS instance, configure it as follows:

+
+
+
+
quarkus.sqs.endpoint-override=http://localhost:4566
+
+quarkus.sqs.aws.region=us-east-1
+quarkus.sqs.aws.credentials.type=static
+quarkus.sqs.aws.credentials.static-provider.access-key-id=test-key
+quarkus.sqs.aws.credentials.static-provider.secret-access-key=test-secret
+
+
+
+
    +
  • +

    quarkus.sqs.aws.region - It’s required by the client, but since you’re using a local SQS instance use us-east-1 as it’s a default region of LocalStack’s SQS.

    +
  • +
  • +

    quarkus.sqs.aws.credentials.type - Set static credentials provider with any values for access-key-id and secret-access-key

    +
  • +
  • +

    quarkus.sqs.endpoint-override - Override the SQS client to use a local instance instead of an AWS service

    +
  • +
+
+
+

If you want to work with an AWS account, you can simply remove or comment out all SQS related properties. By default, the SQS client extension +will use the default credentials provider chain that looks for credentials in this order:

+
+
+
    +
  • +

    Java System Properties - aws.accessKeyId and aws.secretAccessKey

    +
  • +
  • +

    Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

    +
  • +
  • +

    Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

    +
  • +
  • +

    Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

    +
  • +
  • +

    Instance profile credentials delivered through the Amazon EC2 metadata service

    +
  • +
+
+
+

And the region from your AWS CLI profile will be used.

+
+
+
+
+

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can be run with java -Dqueue.url=$QUEUE_URL -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

Create a org.acme.sqs.QuarksCannonAsyncResource REST resource that will be similar to our QuarksCannonSyncResource but using an asynchronous programming model.

+
+
+
+
package org.acme.sqs;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectWriter;
+import io.smallrye.mutiny.Uni;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+import org.acme.sqs.model.Quark;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import org.jboss.logging.Logger;
+import software.amazon.awssdk.services.sqs.SqsAsyncClient;
+import software.amazon.awssdk.services.sqs.model.SendMessageResponse;
+
+@Path("/async/cannon")
+@Produces(MediaType.APPLICATION_JSON)
+@Consumes(MediaType.APPLICATION_JSON)
+public class QuarksCannonAsyncResource {
+
+    private static final Logger LOGGER = Logger.getLogger(QuarksCannonAsyncResource.class);
+
+    @Inject
+    SqsAsyncClient sqs;
+
+    @ConfigProperty(name = "queue.url")
+    String queueUrl;
+
+    static ObjectWriter QUARK_WRITER = new ObjectMapper().writerFor(Quark.class);
+
+    @POST
+    @Path("/shoot")
+    @Consumes(MediaType.APPLICATION_JSON)
+    public Uni<Response> sendMessage(Quark quark) throws Exception {
+        String message = QUARK_WRITER.writeValueAsString(quark);
+        return Uni.createFrom()
+            .completionStage(sqs.sendMessage(m -> m.queueUrl(queueUrl).messageBody(message)))
+            .onItem().invoke(item -> LOGGER.infov("Fired Quark[{0}, {1}}]", quark.getFlavor(), quark.getSpin()))
+            .onItem().transform(SendMessageResponse::messageId)
+            .onItem().transform(id -> Response.ok().entity(id).build());
+    }
+}
+
+
+
+

We create Uni instances from the CompletionStage objects returned by the asynchronous SQS client, and then transform the emitted item.

+
+
+

And the corresponding async receiver of the queue messages org.acme.sqs.QuarksShieldAsyncResource

+
+
+
+
package org.acme.sqs;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectReader;
+import io.smallrye.mutiny.Uni;
+import java.util.List;
+import java.util.stream.Collectors;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import org.acme.sqs.model.Quark;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import org.jboss.logging.Logger;
+import software.amazon.awssdk.services.sqs.SqsAsyncClient;
+import software.amazon.awssdk.services.sqs.model.Message;
+import software.amazon.awssdk.services.sqs.model.ReceiveMessageResponse;
+
+@Path("/async/shield")
+public class QuarksShieldAsyncResource {
+
+    private static final Logger LOGGER = Logger.getLogger(QuarksShieldAsyncResource.class);
+
+    @Inject
+    SqsAsyncClient sqs;
+
+    @ConfigProperty(name = "queue.url")
+    String queueUrl;
+
+    static ObjectReader QUARK_READER = new ObjectMapper().readerFor(Quark.class);
+
+    @GET
+    public Uni<List<Quark>> receive() {
+        return Uni.createFrom()
+            .completionStage(sqs.receiveMessage(m -> m.maxNumberOfMessages(10).queueUrl(queueUrl)))
+            .onItem().transform(ReceiveMessageResponse::messages)
+            .onItem().transform(m -> m.stream().map(Message::body).map(this::toQuark).collect(Collectors.toList()));
+    }
+
+    private Quark toQuark(String message) {
+        Quark quark = null;
+        try {
+            quark = QUARK_READER.readValue(message);
+        } catch (Exception e) {
+            LOGGER.error("Error decoding message", e);
+            throw new RuntimeException(e);
+        }
+        return quark;
+    }
+}
+
+
+
+

And we need to add the Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.sqs.async-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_SQS_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_SQS_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_SQS_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_SQS_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_SQS_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_SQS_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

The queues to create on startup.

+
+
+

Environment variable: QUARKUS_SQS_DEVSERVICES_QUEUES

+
+
+

list of string

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_SQS_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_SQS_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SQS_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SQS_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_SQS_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_SQS_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.12.x/amazon-ssm.html b/quarkus-amazon-services/2.12.x/amazon-ssm.html new file mode 100644 index 0000000000..b418377825 --- /dev/null +++ b/quarkus-amazon-services/2.12.x/amazon-ssm.html @@ -0,0 +1,3417 @@ + + + + + + Amazon SSM Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon SSM Client

+
+
+
+

AWS Systems Manager (formerly Amazon Simple Systems Manager, or SSM) is a service that you can use to view and control your infrastructure on AWS. +One of the most useful features of SSM for microservices is the Parameter Store, which provides secure, hierarchical storage for configuration data management and secrets management..

+
+
+

You can find more information about SSM at the AWS Systems Manager website.

+
+
+ + + + + +
+ + +The SSM extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client (by default) or the AWS CRT-based HTTP client

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use SSM locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 17+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    An AWS Account to access the SSM service

    +
  • +
  • +

    Docker for your system to run SSM locally for testing purposes

    +
  • +
+
+
+

Provision SSM locally via Dev Services

+
+

The easiest way to start working with SSM is to run a local instance using Dev Services.

+
+
+
+

Provision SSM locally manually

+
+

You can also set up a local version of SSM manually, first start a LocalStack container:

+
+
+
+
docker run --rm --name local-ssm --publish 4566:4583 -e SERVICES=ssm -e START_WEB=0 -d localstack/localstack:3.0.1
+
+
+
+

This starts a SSM instance that is accessible on port 4566.

+
+
+

Create an AWS profile for your local instance using AWS CLI:

+
+
+
+
$ aws configure --profile localstack
+AWS Access Key ID [None]: test-key
+AWS Secret Access Key [None]: test-secret
+Default region name [None]: us-east-1
+Default output format [None]:
+
+
+
+
+
+
+

Solution

+
+
+

The application built here allows to store and retrieve parameters using the SSM parameter store.

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step. +However, you can go right to the completed example.

+
+
+

Clone the Git repository: git clone https://github.com/quarkusio/quarkus-quickstarts.git, or download an archive.

+
+
+

The solution is located in the amazon-ssm-quickstart directory.

+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.8.0:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-ssm-quickstart \
+    -DclassName="org.acme.ssm.QuarkusSsmSyncResource" \
+    -Dpath="/sync" \
+    -Dextensions="resteasy-reactive-jackson,amazon-ssm"
+cd amazon-ssm-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy Reactive/JAX-RS and Amazon SSM Client extensions. +After this, the amazon-ssm extension has been added to your pom.xml as well as the Mutiny support for RESTEasy.

+
+
+
+
+

Creating JSON REST service

+
+
+

In this example, we will create an application that allows us to store and retrieve parameters to and from SSM parameter store using a RESTful API. +The example application will demonstrate the two programming models supported by the extension.

+
+
+

Let’s start with an abstract org.acme.ssm.QuarkusSsmResource class to provide the common functionality we will need for both the synchronous and asynchrounous exposures.

+
+
+
+
package org.acme.ssm;
+
+import static java.lang.Boolean.TRUE;
+import static java.util.stream.Collectors.toMap;
+
+import java.util.Map;
+import java.util.stream.Collector;
+
+import jakarta.annotation.PostConstruct;
+
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+
+import software.amazon.awssdk.services.ssm.model.GetParameterRequest;
+import software.amazon.awssdk.services.ssm.model.GetParametersByPathRequest;
+import software.amazon.awssdk.services.ssm.model.Parameter;
+import software.amazon.awssdk.services.ssm.model.ParameterType;
+import software.amazon.awssdk.services.ssm.model.PutParameterRequest;
+
+public abstract class QuarkusSsmResource {
+
+    @ConfigProperty(name = "parameters.path") (1)
+    String parametersPath;
+
+    @PostConstruct (2)
+    void normalizePath() {
+        if (!parametersPath.startsWith("/")) {
+            parametersPath = "/" + parametersPath;
+        }
+        if (!parametersPath.endsWith("/")) {
+            parametersPath = parametersPath + "/";
+        }
+    }
+
+    protected Collector<Parameter, ?, Map<String, String>> parametersToMap() { (3)
+        return toMap(p -> p.name().substring(parametersPath.length()), Parameter::value);
+    }
+
+    protected GetParametersByPathRequest generateGetParametersByPathRequest() {
+        return GetParametersByPathRequest.builder() (4)
+                .path(parametersPath)
+                .withDecryption(TRUE)
+                .build();
+    }
+
+    protected PutParameterRequest generatePutParameterRequest(String name, String value, boolean secure) {
+        return PutParameterRequest.builder() (5)
+                .name(parametersPath + name)
+                .value(value)
+                .type(secure ? ParameterType.SECURE_STRING : ParameterType.STRING)
+                .overwrite(TRUE)
+                .build();
+    }
+
+    protected GetParameterRequest generateGetParameterRequest(String name) {
+        return GetParameterRequest.builder() (6)
+                .name(parametersPath + name)
+                .withDecryption(TRUE)
+                .build();
+    }
+}
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
1Inject a configured path under which to store parameters
2Ensure the path starts and ends with /
3Collect parameters into a map of simple names and values
4Generate a request for all parameters under the configured path
5Generate a request to set a specific parameter
6Generate a request to get a specific parameter value
+
+
+

Now, we can extend the class and create the synchronous implementation in the org.acme.ssm.QuarkusSsmSyncResource class.

+
+
+
+
package org.acme.ssm;
+
+import java.util.Map;
+
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.DefaultValue;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.PUT;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+
+import org.jboss.resteasy.reactive.RestQuery;
+
+import software.amazon.awssdk.services.ssm.SsmClient;
+
+@Path("/sync")
+public class QuarkusSsmSyncResource extends QuarkusSsmResource {
+
+    @Inject (1)
+    SsmClient ssm;
+
+    @GET
+    @Produces(MediaType.APPLICATION_JSON)
+    public Map<String, String> getParameters() {
+        return ssm.getParametersByPath(generateGetParametersByPathRequest())
+                .parameters().stream().collect(parametersToMap());
+    }
+
+    @PUT
+    @Path("/{name}")
+    @Consumes(MediaType.TEXT_PLAIN)
+    public void setParameter(String name,
+            @RestQuery("secure") @DefaultValue("false") boolean secure,
+            String value) {
+
+        ssm.putParameter(generatePutParameterRequest(name, value, secure));
+    }
+
+    @GET
+    @Path("/{name}")
+    @Produces(MediaType.TEXT_PLAIN)
+    public String getParameter(String name) {
+        return ssm.getParameter(generateGetParameterRequest(name))
+                .parameter().value();
+    }
+}
+
+
+
+ + + + + +
1Inject the client provided by the amazon-ssm extension
+
+
+

Using the Amazon SSM SDK, we can easily store and retrieve arbitrary name/value pairs, and we can optionally store the values in a secure manner.

+
+
+
+
+

Configuring SSM clients

+
+
+

Both SSM clients (sync and async) are configurable via the application.properties file that can be provided in the src/main/resources directory. +Additionally, you need to add to the classpath a proper implementation of the sync client. By default the extension uses the URL connection HTTP client, so +you need to add a URL connection client dependency to the pom.xml file:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.ssm.sync-client.type=apache
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.ssm.sync-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+

If you’re going to use a local SSM instance, configure it as follows:

+
+
+
+
quarkus.ssm.endpoint-override=http://localhost:4566 (1)
+
+quarkus.ssm.aws.region=us-east-1 (2)
+quarkus.ssm.aws.credentials.type=static (3)
+quarkus.ssm.aws.credentials.static-provider.access-key-id=test-key
+quarkus.ssm.aws.credentials.static-provider.secret-access-key=test-secret
+
+
+
+ + + + + + + + + + + + + +
1Override the SSM client to use LocalStack instead of the actual AWS service
2Localstack defaults to us-east-1
3The static credentials provider lets you set the access-key-id and secret-access-key directly
+
+
+

If you want to work with an AWS account, you can simply remove or comment out all Amazon SSM related properties. By default, the SSM client extension will use the default credentials provider chain that looks for credentials in this order:

+
+
+
    +
  • +

    Java System Properties - aws.accessKeyId and aws.secretAccessKey

    +
  • +
  • +

    Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

    +
  • +
  • +

    Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

    +
  • +
  • +

    Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

    +
  • +
  • +

    Instance profile credentials delivered through the Amazon EC2 metadata service

    +
  • +
+
+
+

And the region from your AWS CLI profile will be used.

+
+
+
+
+

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can then be run with java -Dparameters.path=/quarkus/is/awesome/ -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

Create a org.acme.ssm.QuarkusSsmAsyncResource REST resource that will be similar to our QuarkusSsmSyncResource but using an asynchronous programming model.

+
+
+
+
package org.acme.ssm;
+
+import java.util.Map;
+
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.DefaultValue;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.PUT;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+
+import io.smallrye.mutiny.Uni;
+import org.jboss.resteasy.reactive.RestQuery;
+import software.amazon.awssdk.services.ssm.SsmAsyncClient;
+
+@Path("/async")
+public class QuarkusSsmAsyncResource extends QuarkusSsmResource {
+
+    @Inject
+    SsmAsyncClient ssm;
+
+    @GET
+    @Produces(MediaType.APPLICATION_JSON)
+    public Uni<Map<String, String>> getParameters() {
+        return Uni.createFrom().completionStage(ssm.getParametersByPath(generateGetParametersByPathRequest()))
+                .onItem().transform(r -> r.parameters().stream().collect(parametersToMap()));
+    }
+
+    @PUT
+    @Path("/{name}")
+    @Consumes(MediaType.TEXT_PLAIN)
+    public Uni<Void> setParameter(String name,
+            @RestQuery("secure") @DefaultValue("false") boolean secure,
+            String value) {
+
+        return Uni.createFrom().completionStage(ssm.putParameter(generatePutParameterRequest(name, value, secure)))
+                .onItem().transform(r -> null);
+    }
+
+    @GET
+    @Path("/{name}")
+    @Produces(MediaType.TEXT_PLAIN)
+    public Uni<String> getParameter(String name) {
+        return Uni.createFrom().completionStage(ssm.getParameter(generateGetParameterRequest(name)))
+                .onItem().transform(r -> r.parameter().value());
+    }
+}
+
+
+
+

Note that the SsmAsyncClient behaves just like the SsmClient, but returns CompletionStage objects which we use to create Uni instances, and then transform the emitted item.

+
+
+

To enable the asynchronous client, we also need to add the Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.ssm.async-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_SSM_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_SSM_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_SSM_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_SSM_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_SSM_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_SSM_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_SSM_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_SSM_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SSM_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SSM_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_SSM_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_SSM_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.12.x/amazon-sts.html b/quarkus-amazon-services/2.12.x/amazon-sts.html new file mode 100644 index 0000000000..0817039e08 --- /dev/null +++ b/quarkus-amazon-services/2.12.x/amazon-sts.html @@ -0,0 +1,3169 @@ + + + + + + Amazon STS Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon STS Client

+
+
+
+

AWS Security Token Service (AWS STS) is a web service that enables you to request temporary, limited-privilege credentials for users.

+
+
+

You can find more information about STS at AWS Security Token Service API Reference.

+
+
+ + + + + +
+ + +The STS extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client.

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use STS locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 17+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    An AWS Account to access the STS service

    +
  • +
  • +

    Docker for your system to run STS locally for testing purposes

    +
  • +
+
+
+

Provision STS locally via Dev Services

+
+

The easiest way to start working with STS is to run a local instance using Dev Services.

+
+
+
+

Provision STS locally manually

+
+

You can also set up a local version of STS manually, first start a LocalStack container:

+
+
+
+
docker run --rm --name local-sts --publish 4592:4592 -e SERVICES=sts -e START_WEB=0 -d localstack/localstack:3.0.1
+
+
+
+

This starts a STS instance that is accessible on port 4592.

+
+
+

Create an AWS profile for your local instance using AWS CLI:

+
+
+
+
$ aws configure --profile localstack
+AWS Access Key ID [None]: test-key
+AWS Secret Access Key [None]: test-secret
+Default region name [None]: us-east-1
+Default output format [None]:
+
+
+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.8.0:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-sts-quickstart \
+    -DclassName="org.acme.sts.QuarkusStsSyncResource" \
+    -Dpath="/sync" \
+    -Dextensions="resteasy-reactive-jackson,amazon-sts"
+cd amazon-sts-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy Reactive/JAX-RS and Amazon STS Client extensions. +After this, the amazon-sts extension has been added to your pom.xml as well as the Mutiny support for RESTEasy.

+
+
+
+
+

Configuring STS clients

+
+
+

Both STS clients (sync and async) are configurable via the application.properties file that can be provided in the src/main/resources directory. +Additionally, you need to add to the classpath a proper implementation of the sync client. By default the extension uses the URL connection HTTP client, so +you need to add a URL connection client dependency to the pom.xml file:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.sts.sync-client.type=apache
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.sts.sync-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+

If you’re going to use a local STS instance, configure it as follows:

+
+
+
+
quarkus.sts.endpoint-override=http://localhost:4592 (1)
+
+quarkus.sts.aws.region=us-east-1 (2)
+quarkus.sts.aws.credentials.type=static (3)
+quarkus.sts.aws.credentials.static-provider.access-key-id=test-key
+quarkus.sts.aws.credentials.static-provider.secret-access-key=test-secret
+
+
+
+ + + + + + + + + + + + + +
1Override the STS client to use LocalStack instead of the actual AWS service
2Localstack defaults to us-east-1
3The static credentials provider lets you set the access-key-id and secret-access-key directly
+
+
+

If you want to work with an AWS account, you can simply remove or comment out all Amazon STS related properties. By default, the ST client extension will use the default credentials provider chain that looks for credentials in this order:

+
+
+
    +
  • +

    Java System Properties - aws.accessKeyId and aws.secretAccessKey

    +
  • +
  • +

    Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

    +
  • +
  • +

    Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

    +
  • +
  • +

    Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

    +
  • +
  • +

    Instance profile credentials delivered through the Amazon EC2 metadata service

    +
  • +
+
+
+

And the region from your AWS CLI profile will be used.

+
+
+
+
+

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can then be run with java -Dparameters.path=/quarkus/is/awesome/ -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

We need to add the Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.sts.async-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_STS_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_STS_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_STS_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_STS_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_STS_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_STS_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_STS_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_STS_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_STS_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_STS_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_STS_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_STS_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.12.x/dev-services.html b/quarkus-amazon-services/2.12.x/dev-services.html new file mode 100644 index 0000000000..87233f0cc8 --- /dev/null +++ b/quarkus-amazon-services/2.12.x/dev-services.html @@ -0,0 +1,1362 @@ + + + + + + Dev services for Amazon Services :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Dev services for Amazon Services

+
+
+
+

Quarkus Amazon Services automatically starts a LocalStack container in dev mode and when running tests. So, you don’t have to start one manually. The extension client is configured automatically.

+
+
+
+
+

Enabling / Disabling Dev Services for Amazon Services

+
+
+

Dev Services for Amazon Services is automatically enabled for each extensions added to pom.xml except in the following situations:

+
+
+
    +
  • +

    quarkus.devservices.enabled is set to false

    +
  • +
  • +

    devservices.enabled is set to false per extension (eg. quarkus.s3.devservices.enabled=false)

    +
  • +
  • +

    the endpoint-override is configured (eg. quarkus.s3.endpoint-override=http://localhost:4566)

    +
  • +
  • +

    Your environment does not support Docker. In test mode, it will cause the test to fail. Either disable Dev Services or configure the endpoint-override.

    +
  • +
+
+
+
+
+

Shared services

+
+
+

By default, Dev Services for Amazon Services will start one LocalStack container with only the needed services.

+
+
+

If you need to share a particular service between applications, Dev Services for Amazon Services implements a service discovery mechanism for your multiple Quarkus applications running in dev mode to share a single container.

+
+
+

Dev Services for Amazon Services starts the container with the quarkus-dev-service-localstack label and service name as the value, which is used to identify the container. +If you need multiple (shared) container, you can configure the devservices.service-name attribute for a given extension (eg. quarkus.s3.devservices.service-name) and indicate the container name. It looks for a container with the same value, or starts a new one if none can be found. The default service name is localstack.

+
+
+

By default, to ease sharing containers across multiple applications, each service will be started in its own container (the value of the quarkus-dev-service-localstack label is suffixed by the extension name). However, sometimes, some services need to communicate with each other inside the same container (e.g., subscribing an Amazon SQS queue to an Amazon SNS topic). In this case, you can disable this behavior by setting the devservices.isolated attribute for a given extension to false.

+
+
+

Sharing is disabled by default in dev mode, and is always disabled in test mode. You can enable the sharing with devservices.shared=true for a given extension (e.g. quarkus.s3.devservices.shared=true). All other non-shared services will be grouped in another container.

+
+
+
+
+

Configuring the image

+
+
+

Dev Services for Amazon Services uses localstack/localstack image. You can configure the image and version using the quarkus.aws.devservices.localstack.image-name property:

+
+
+
+
quarkus.aws.devservices.localstack.image-name=localstack/localstack:3.0.1
+
+
+
+
+
+

Specific configuration

+
+
+

Dev Services for Amazon Services can support specific properties sent to the container. It can be globally applied to all containers or be specified per service as follows:

+
+
+
+
quarkus.aws.devservices.localstack.container-properties.START_WEB=0
+quarkus.dynamodb.devservices.container-properties.DYNAMODB_HEAP_SIZE=1G
+
+
+
+

Refer to the LocalStack documentation for more configuration : https://docs.localstack.cloud/localstack/configuration/#local-aws-services. Note that not all environment variables are supported and some may affect Dev Services for Amazon Services.

+
+
+
+
+

Additional services

+
+
+

To start additional services for which a Quarkus extension does not exist or is not imported in the project, use the additional-services property:

+
+
+
+
quarkus.aws.devservices.localstack.additional-services."kinesis".enabled=true
+quarkus.aws.devservices.localstack.additional-services."redshift".enabled=true
+
+
+
+

The key is the name of the service to enable and must be a valid LocalStack service name.

+
+
+
+
+

Additional setup

+
+
+

Some extensions support additional configuration to be applied at startup. Refer to the extension documentation.

+
+
+
+
+

Cognito

+
+
+

The Cognito extension is not using LocalStack but Moto.

+
+
+

Dev Services for Amazon Services uses the latest motoserver/moto image. You can configure the image and version using the quarkus.aws.devservices.moto.image-name property:

+
+
+
+
quarkus.aws.devservices.moto.image-name=motoserver/moto:3.0.2
+
+
+
+

Dev Services for Amazon Services can support specific properties sent to the container as follows:

+
+
+
+
quarkus.aws.devservices.moto.container-properties.MOTO_COGNITO_IDP_USER_POOL_ID_STRATEGY=HASH
+
+
+
+
+
+

Global DevServices Configuration Reference

+
+
+

LocalStack Configuration

+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The LocalStack container image to use.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_IMAGE_NAME

+
+
+

string

localstack/localstack:3.0.1

+
+
+
+

Path to init scripts folder executed during localstack startup.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_INIT_SCRIPTS_FOLDER

+
+
+

string

+
+
+
+

Classpath to init scripts folder executed during localstack startup. initScriptsFolder has higher precedence.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_INIT_SCRIPTS_CLASSPATH

+
+
+

string

+
+
+
+

Specific container log message to be waiting for localstack init scripts completion.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_INIT_COMPLETION_MSG

+
+
+

string

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_ADDITIONAL_SERVICES__ADDITIONAL_SERVICES__ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_ADDITIONAL_SERVICES__ADDITIONAL_SERVICES__SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_ADDITIONAL_SERVICES__ADDITIONAL_SERVICES__ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_ADDITIONAL_SERVICES__ADDITIONAL_SERVICES__SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_ADDITIONAL_SERVICES__ADDITIONAL_SERVICES__CONTAINER_PROPERTIES

+
+
+

Map<String,String>

+
+
+

Moto Configuration

+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The Moto container image to use.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_MOTO_IMAGE_NAME

+
+
+

string

motoserver/moto

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_MOTO_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.12.x/includes/attributes.html b/quarkus-amazon-services/2.12.x/includes/attributes.html new file mode 100644 index 0000000000..fe6b58a49d --- /dev/null +++ b/quarkus-amazon-services/2.12.x/includes/attributes.html @@ -0,0 +1,969 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-cognitouserpools.html b/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-cognitouserpools.html new file mode 100644 index 0000000000..88a85abc2a --- /dev/null +++ b/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-cognitouserpools.html @@ -0,0 +1,2876 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-dynamodb-enhanced.html b/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-dynamodb-enhanced.html new file mode 100644 index 0000000000..e487c1541d --- /dev/null +++ b/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-dynamodb-enhanced.html @@ -0,0 +1,1025 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of extensions to load with the enhanced client.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClientExtension interface.

+
+
+

Environment variable: QUARKUS_DYNAMODBENHANCED_CLIENT_EXTENSIONS

+
+
+

list of string

+
+
+
+

Whether a TableSchema should be created at start up for DynamoDb mappable entities annotated with DynamoDbBean or DynamoDbImmutable

+
+
+

TableSchema are cached and can be retrieved later with TableSchema.fromClass()

+
+
+

Environment variable: QUARKUS_DYNAMODBENHANCED_CREATE_TABLE_SCHEMAS

+
+
+

boolean

true

+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-dynamodb.html b/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-dynamodb.html new file mode 100644 index 0000000000..c8753e38c2 --- /dev/null +++ b/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-dynamodb.html @@ -0,0 +1,2893 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_DYNAMODB_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_DYNAMODB_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_DYNAMODB_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_DYNAMODB_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_DYNAMODB_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_DYNAMODB_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Enable DynamoDB service endpoint discovery.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ENABLE_ENDPOINT_DISCOVERY

+
+
+

boolean

false

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_DYNAMODB_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_DYNAMODB_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_DYNAMODB_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-eventbridge.html b/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-eventbridge.html new file mode 100644 index 0000000000..3ed5924cbd --- /dev/null +++ b/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-eventbridge.html @@ -0,0 +1,2876 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-iam.html b/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-iam.html new file mode 100644 index 0000000000..d279c4a734 --- /dev/null +++ b/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-iam.html @@ -0,0 +1,2876 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_IAM_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_IAM_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_IAM_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_IAM_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_IAM_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_IAM_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_IAM_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_IAM_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_IAM_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_IAM_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_IAM_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_IAM_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-kinesis.html b/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-kinesis.html new file mode 100644 index 0000000000..bc86e363cf --- /dev/null +++ b/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-kinesis.html @@ -0,0 +1,2876 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_KINESIS_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_KINESIS_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_KINESIS_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_KINESIS_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_KINESIS_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_KINESIS_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_KINESIS_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_KINESIS_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_KINESIS_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_KINESIS_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_KINESIS_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-kms.html b/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-kms.html new file mode 100644 index 0000000000..bf6126ecbc --- /dev/null +++ b/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-kms.html @@ -0,0 +1,2876 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_KMS_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_KMS_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_KMS_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_KMS_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_KMS_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_KMS_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_KMS_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_KMS_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_KMS_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_KMS_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_KMS_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_KMS_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-lambda.html b/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-lambda.html new file mode 100644 index 0000000000..92b1617dcf --- /dev/null +++ b/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-lambda.html @@ -0,0 +1,2876 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_LAMBDA_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_LAMBDA_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_LAMBDA_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_LAMBDA_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_LAMBDA_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_LAMBDA_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_LAMBDA_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_LAMBDA_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_LAMBDA_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_LAMBDA_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_LAMBDA_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-s3.html b/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-s3.html new file mode 100644 index 0000000000..6ce05f963e --- /dev/null +++ b/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-s3.html @@ -0,0 +1,3091 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_S3_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_S3_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_S3_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_S3_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_S3_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_S3_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

The buckets to create on startup.

+
+
+

Environment variable: QUARKUS_S3_DEVSERVICES_BUCKETS

+
+
+

list of string

default

+
+
+
+

Enable using the accelerate endpoint when accessing S3.

+
+
+

Accelerate endpoints allow faster transfer of objects by using Amazon CloudFront’s globally distributed edge locations.

+
+
+

Environment variable: QUARKUS_S3_ACCELERATE_MODE

+
+
+

boolean

false

+
+
+
+

Enable doing a validation of the checksum of an object stored in S3.

+
+
+

Environment variable: QUARKUS_S3_CHECKSUM_VALIDATION

+
+
+

boolean

true

+
+
+
+

Enable using chunked encoding when signing the request payload for software.amazon.awssdk.services.s3.model.PutObjectRequest and software.amazon.awssdk.services.s3.model.UploadPartRequest.

+
+
+

Environment variable: QUARKUS_S3_CHUNKED_ENCODING

+
+
+

boolean

true

+
+
+
+

Enable dualstack mode for accessing S3. If you want to use IPv6 when accessing S3, dualstack must be enabled.

+
+
+

Environment variable: QUARKUS_S3_DUALSTACK

+
+
+

boolean

false

+
+
+
+

Enable using path style access for accessing S3 objects instead of DNS style access. DNS style access is preferred as it will result in better load balancing when accessing S3.

+
+
+

Environment variable: QUARKUS_S3_PATH_STYLE_ACCESS

+
+
+

boolean

false

+
+
+
+

Enable cross-region call to the region specified in the S3 resource ARN different than the region the client was configured with. If this flag is not set to 'true', the cross-region call will throw an exception.

+
+
+

Environment variable: QUARKUS_S3_USE_ARN_REGION_ENABLED

+
+
+

boolean

false

+
+
+
+

Define the profile name that should be consulted to determine the default value of use-arn-region-enabled. This is not used, if the use-arn-region-enabled is configured to 'true'.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_S3_PROFILE_NAME

+
+
+

string

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_S3_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_S3_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_S3_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_S3_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_S3_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_S3_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

AWS CRT-based S3 client configurations

Type

Default

+
+
+
+

Configure the starting buffer size the client will use to buffer the parts downloaded from S3.

+
+
+

Environment variable: QUARKUS_S3_CRT_CLIENT_INITIAL_READ_BUFFER_SIZE_IN_BYTES

+
+
+

long

Equal to the resolved part size * 10

+
+
+
+

Specifies the maximum number of S3 connections that should be established during a transfer.

+
+
+

Environment variable: QUARKUS_S3_CRT_CLIENT_MAX_CONCURRENCY

+
+
+

int

+
+
+
+

Sets the minimum part size for transfer parts.

+
+
+

Environment variable: QUARKUS_S3_CRT_CLIENT_MINIMUM_PART_SIZE_IN_BYTES

+
+
+

long

8MB

+
+
+
+

The target throughput for transfer requests.

+
+
+

Environment variable: QUARKUS_S3_CRT_CLIENT_TARGET_THROUGHPUT_IN_GBPS

+
+
+

double

10

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-secretsmanager.html b/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-secretsmanager.html new file mode 100644 index 0000000000..0edcf5905e --- /dev/null +++ b/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-secretsmanager.html @@ -0,0 +1,2876 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-ses.html b/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-ses.html new file mode 100644 index 0000000000..002a9c9b49 --- /dev/null +++ b/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-ses.html @@ -0,0 +1,2876 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_SES_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_SES_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_SES_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_SES_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_SES_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_SES_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_SES_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_SES_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SES_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SES_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_SES_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_SES_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-sfn.html b/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-sfn.html new file mode 100644 index 0000000000..3ed676ae31 --- /dev/null +++ b/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-sfn.html @@ -0,0 +1,2876 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_SFN_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_SFN_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_SFN_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_SFN_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_SFN_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_SFN_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_SFN_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_SFN_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SFN_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SFN_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_SFN_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_SFN_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-sns.html b/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-sns.html new file mode 100644 index 0000000000..3b6ef608fd --- /dev/null +++ b/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-sns.html @@ -0,0 +1,2876 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_SNS_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_SNS_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_SNS_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_SNS_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_SNS_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_SNS_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_SNS_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_SNS_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SNS_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SNS_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_SNS_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_SNS_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-sqs.html b/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-sqs.html new file mode 100644 index 0000000000..15cfbd69f9 --- /dev/null +++ b/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-sqs.html @@ -0,0 +1,2893 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_SQS_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_SQS_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_SQS_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_SQS_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_SQS_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_SQS_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

The queues to create on startup.

+
+
+

Environment variable: QUARKUS_SQS_DEVSERVICES_QUEUES

+
+
+

list of string

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_SQS_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_SQS_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SQS_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SQS_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_SQS_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_SQS_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-ssm.html b/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-ssm.html new file mode 100644 index 0000000000..e2787a1d73 --- /dev/null +++ b/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-ssm.html @@ -0,0 +1,2876 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_SSM_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_SSM_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_SSM_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_SSM_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_SSM_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_SSM_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_SSM_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_SSM_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SSM_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SSM_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_SSM_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_SSM_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-sts.html b/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-sts.html new file mode 100644 index 0000000000..e13736e132 --- /dev/null +++ b/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-sts.html @@ -0,0 +1,2876 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_STS_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_STS_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_STS_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_STS_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_STS_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_STS_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_STS_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_STS_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_STS_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_STS_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_STS_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_STS_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.12.x/includes/quarkus-aws-devservices-localstack-local-stack-dev-services-build-time-config.html b/quarkus-amazon-services/2.12.x/includes/quarkus-aws-devservices-localstack-local-stack-dev-services-build-time-config.html new file mode 100644 index 0000000000..a547a7fa31 --- /dev/null +++ b/quarkus-amazon-services/2.12.x/includes/quarkus-aws-devservices-localstack-local-stack-dev-services-build-time-config.html @@ -0,0 +1,1164 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The LocalStack container image to use.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_IMAGE_NAME

+
+
+

string

localstack/localstack:3.0.1

+
+
+
+

Path to init scripts folder executed during localstack startup.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_INIT_SCRIPTS_FOLDER

+
+
+

string

+
+
+
+

Classpath to init scripts folder executed during localstack startup. initScriptsFolder has higher precedence.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_INIT_SCRIPTS_CLASSPATH

+
+
+

string

+
+
+
+

Specific container log message to be waiting for localstack init scripts completion.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_INIT_COMPLETION_MSG

+
+
+

string

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_ADDITIONAL_SERVICES__ADDITIONAL_SERVICES__ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_ADDITIONAL_SERVICES__ADDITIONAL_SERVICES__SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_ADDITIONAL_SERVICES__ADDITIONAL_SERVICES__ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_ADDITIONAL_SERVICES__ADDITIONAL_SERVICES__SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_ADDITIONAL_SERVICES__ADDITIONAL_SERVICES__CONTAINER_PROPERTIES

+
+
+

Map<String,String>

+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.12.x/includes/quarkus-aws-devservices-moto-moto-dev-services-build-time-config.html b/quarkus-amazon-services/2.12.x/includes/quarkus-aws-devservices-moto-moto-dev-services-build-time-config.html new file mode 100644 index 0000000000..acc2e945ec --- /dev/null +++ b/quarkus-amazon-services/2.12.x/includes/quarkus-aws-devservices-moto-moto-dev-services-build-time-config.html @@ -0,0 +1,1019 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The Moto container image to use.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_MOTO_IMAGE_NAME

+
+
+

string

motoserver/moto

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_MOTO_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.12.x/index.html b/quarkus-amazon-services/2.12.x/index.html new file mode 100644 index 0000000000..472f09b11a --- /dev/null +++ b/quarkus-amazon-services/2.12.x/index.html @@ -0,0 +1,979 @@ + + + + + + Quarkus Amazon Services :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Amazon Services

+
+

This set of extensions expose AWS services through configuration properties and CDI injection.

+
+
+

You can find the full set of supported services and documentation for each of them in the navigation on the left.

+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.4.x/amazon-cognitouserpools.html b/quarkus-amazon-services/2.4.x/amazon-cognitouserpools.html new file mode 100644 index 0000000000..a372e0c4d0 --- /dev/null +++ b/quarkus-amazon-services/2.4.x/amazon-cognitouserpools.html @@ -0,0 +1,3102 @@ + + + + + + Amazon Cognito User Pools Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon Cognito User Pools Client

+
+
+
+

Service client for accessing Amazon Cognito user pools (Identity Provider).

+
+
+

Using the Amazon Cognito user pools API, you can create a user pool to manage directories and users. +You can authenticate a user to obtain tokens related to user identity and access policies.

+
+
+

For more information, see the Amazon Cognito user pools (AWS Java SDK 2.x docs).

+
+
+ + + + + +
+ + +The Cognito User Pools extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client (by default) or the AWS CRT-based HTTP client

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use Cognito User Pool locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 11+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    One of:

    +
    +
      +
    • +

      An AWS Account to access the Cognito service

      +
    • +
    • +

      Or Docker for your system to run Cognito locally for testing purposes

      +
    • +
    +
    +
  • +
+
+
+

Provision Cognito locally via Dev Services

+
+

The easiest way to start working with Cognito is to run a local instance using Dev Services.

+
+
+
+

Provision Cognito locally manually

+
+

You can also set up a local version of Cognito manually, first start a local instance as a container:

+
+
+
+
docker run --rm --name moto -p 5000:5000 -d motoserver/moto:3.0.2
+
+
+
+

This starts a Cognito mock instance that is accessible on port 5000.

+
+
+

Create an AWS profile for your local instance using AWS CLI:

+
+
+
+
$ aws configure --profile moto
+AWS Access Key ID [None]: test-key
+AWS Secret Access Key [None]: test-secret
+Default region name [None]: us-east-1
+Default output format [None]: test
+
+
+
+
+

Create a Cognito User Pool

+
+

Create a Cognito user pool using AWS CLI.

+
+
+
+
aws --profile moto --endpoint-url=http://localhost:5000 cognito-idp create-user-pool --pool-name quarkus-users-dev
+
+
+
+

Or, if you want to use your Cognito user pool on your AWS account create a user pool using your default profile

+
+
+
+
aws cognito-user-pools cognito-idp --pool-name quarkus-users-dev
+
+
+
+
+
+
+

Solution

+
+
+

The application built here shows the count of Cognito User Pools in the current region.

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step.

+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.2.3.Final:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-cognito-user-pools-quickstart \
+    -DclassName="org.acme.cognitouserpools.CognitoExampleResource" \
+    -Dpath="/cognito-example" \
+    -Dextensions="resteasy,resteasy-jackson,amazon-cognito-user-pools,resteasy-mutiny"
+cd amazon-cognito-user-pools-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy/JAX-RS, Mutiny and Amazon Cognito User Pool extensions. +After this, the amazon-cognito-user-pools extension has been added to your pom.xml as well as the Mutiny support for RESTEasy.

+
+
+
+
+

Creating JSON REST service

+
+
+

Edit a org.acme.cognitouserpools.CognitoExampleResource that will provide an API return count of Cognito User Pools using the synchronous client.

+
+
+
+
package org.acme.cognitouserpools;
+
+import jakarta.inject.Inject;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+
+import software.amazon.awssdk.services.cognitoidentityprovider.CognitoIdentityProviderClient;
+import software.amazon.awssdk.services.cognitoidentityprovider.model.ListUserPoolsRequest;
+import software.amazon.awssdk.services.cognitoidentityprovider.model.ListUserPoolsResponse;
+
+@Path("/cognito-example")
+public class CognitoExampleResource {
+    @Inject
+    CognitoIdentityProviderClient cognitoClient;
+
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public String hello() {
+        ListUserPoolsRequest request = ListUserPoolsRequest.builder().build();
+        ListUserPoolsResponse response = cognitoClient.listUserPools(request);
+        return String.format("You have %d user pools", response.userPools().size());
+    }
+}
+
+
+
+

And update test class:

+
+
+
+
package org.acme.cognitouserpools;
+
+import io.quarkus.test.junit.QuarkusTest;
+import org.junit.jupiter.api.Test;
+
+import static io.restassured.RestAssured.given;
+import static org.hamcrest.CoreMatchers.is;
+
+@QuarkusTest
+public class CognitoExampleResourceTest {
+
+    @Test
+    public void testHelloEndpoint() {
+        given()
+          .when().get("/cognito-example")
+          .then()
+             .statusCode(200)
+             .body(is("You have 1 user pools"));
+    }
+
+}
+
+
+
+
+
+

Configuring Cognito User Pools clients

+
+
+

Both Cognito clients (sync and async) are configurable via the application.properties file that +can be provided in the src/main/resources directory.

+
+
+

Additionally, you need to add to the classpath a proper implementation of the sync client. +By default the extension uses the URL connection HTTP client, so you need to add a URL connection +client dependency to the pom.xml file:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.cognito-user-pools.sync-client.type=apache
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

If you’re going to use a local Cognito mock instance, configure it as follows:

+
+
+
+
quarkus.cognito-user-pools.endpoint-override=http://localhost:5000
+
+quarkus.cognito-user-pools.aws.region=eu-west-1
+quarkus.cognito-user-pools.aws.credentials.type=static
+quarkus.cognito-user-pools.aws.credentials.static-provider.access-key-id=test-key
+quarkus.cognito-user-pools.aws.credentials.static-provider.secret-access-key=test-secret
+
+
+
+
    +
  • +

    quarkus.cognito-user-pools.aws.region - It’s required by the client, but since you’re using a local Cognito mock instance use us-east-1 as it’s a default region of moto.

    +
  • +
  • +

    quarkus.cognito-user-pools.aws.credentials - Set static credentials provider with any values for access-key-id and secret-access-key

    +
  • +
  • +

    quarkus.cognito-user-pools.endpoint-override - Override the Cognito User Pools client to use a local instance instead of an AWS service

    +
  • +
+
+
+

If you want to work with an AWS account, you can simply remove or comment out all Cognito User Pools +related properties. By default, the Cognito User Pools client extension will use the default +credentials provider chain that looks for credentials in this order:

+
+
+
    +
  • +

    Java System Properties - aws.accessKeyId and aws.secretAccessKey

    +
  • +
  • +

    Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

    +
  • +
  • +

    Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

    +
  • +
  • +

    Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

    +
  • +
  • +

    Instance profile credentials delivered through the Amazon EC2 metadata service

    +
  • +
+
+
+

And the region from your AWS CLI profile will be used.

+
+
+
+
+

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can be run with java -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

Create a org.acme.cognitouserpools.CognitoAsyncExampleResource REST resource that will be similar to our +CognitoExampleResource but using an asynchronous programming model.

+
+
+
+
package org.acme.cognitouserpools;
+
+import jakarta.inject.Inject;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+
+import io.smallrye.mutiny.Uni;
+import software.amazon.awssdk.services.cognitoidentityprovider.CognitoIdentityProviderAsyncClient;
+import software.amazon.awssdk.services.cognitoidentityprovider.model.ListUserPoolsRequest;
+
+@Path("/cognito-async-example")
+public class CognitoAsyncExampleResource {
+    @Inject
+    CognitoIdentityProviderAsyncClient cognitoAsyncClient;
+
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public Uni<String> hello() {
+        ListUserPoolsRequest request = ListUserPoolsRequest.builder().build();
+        return Uni
+            .createFrom()
+            .completionStage(cognitoAsyncClient.listUserPools(request))
+            .map(response -> {
+                return String.format("You have %d user pools", response.userPools().size());
+            });
+    }
+}
+
+
+
+

We create Uni instances from the CompletionStage objects returned by the asynchronous Cognito +Identity Provider client, and then transform the emitted item.

+
+
+

And we need to add the Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.cognito-user-pools.async-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TYPE

+
+
+
+

url, apache

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.4.x/amazon-credentials.html b/quarkus-amazon-services/2.4.x/amazon-credentials.html new file mode 100644 index 0000000000..82b82bf850 --- /dev/null +++ b/quarkus-amazon-services/2.4.x/amazon-credentials.html @@ -0,0 +1,975 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+
    +
  • +

    Java System Properties - aws.accessKeyId and aws.secretAccessKey

    +
  • +
  • +

    Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

    +
  • +
  • +

    Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

    +
  • +
  • +

    Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

    +
  • +
  • +

    Instance profile credentials delivered through the Amazon EC2 metadata service

    +
  • +
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.4.x/amazon-dynamodb.html b/quarkus-amazon-services/2.4.x/amazon-dynamodb.html new file mode 100644 index 0000000000..0b0cbc019a --- /dev/null +++ b/quarkus-amazon-services/2.4.x/amazon-dynamodb.html @@ -0,0 +1,3662 @@ + + + + + + Amazon DynamoDB Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon DynamoDB Client

+
+
+
+

DynamoDB is a scalable AWS managed NoSQL database. +It supports both key-value and document data models, that enables to have a flexible schema for your data. +This extension provides functionality that allows the client to communicate with the service when running in Quarkus. +You can find more information about DynamoDB at the Amazon DynamoDB website.

+
+
+ + + + + +
+ + +The DynamoDB extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +Keep in mind it’s actively developed and does not support yet all the features available in SDK 1.x such as Document APIs +
+
+
+

The Quarkus extension supports the traditional DynamoDB client as well as the enhanced client.

+
+
+

It supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client (by default) or the AWS CRT-based HTTP client

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use the DynamoDB locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 11+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    An AWS Account to access the DynamoDB service

    +
  • +
  • +

    Optionally, Docker for your system to run DynamoDB locally for testing purposes

    +
  • +
+
+
+

Provision DynamoDB locally via Dev Services

+
+

The easiest way to start working with DynamoDB is to run a local instance using Dev Services.

+
+
+
+

Provision DynamoDB locally manually

+
+

You can also set up a local version of DynamoDB manually, first start a local instance as a container:

+
+
+
+
docker run --publish 4566:8000 amazon/dynamodb-local:1.19.0 -jar DynamoDBLocal.jar -inMemory -sharedDb
+
+
+
+

This starts a DynamoDB instance that is accessible on port 4566. +You can check if it’s working with aws dynamodb list-tables --endpoint-url http://localhost:4566.

+
+
+
+
{
+    "TableNames": []
+}
+
+
+
+

You should see the output above in your terminal. That’s it, DynamoDB runs locally.

+
+
+

Have a look at the Setting Up DynamoDB Local guide for other options to run DynamoDB.

+
+
+
+

Set up Dynamodb on AWS

+
+

Before you can use the AWS SDKs with DynamoDB, you must get an AWS access key ID and secret access key. +For more information, see Setting Up DynamoDB (Web Service).

+
+
+

We recommend to use the AWS CLI to provision the table:

+
+
+
+

Create the QuarkusFruits Table

+
+
+
aws dynamodb create-table --table-name QuarkusFruits \
+                          --attribute-definitions AttributeName=fruitName,AttributeType=S \
+                          --key-schema AttributeName=fruitName,KeyType=HASH \
+                          --provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1
+
+
+
+
+
+
+

Solution

+
+
+

The application built here allows to manage elements (fruits) stored in Amazon DynamoDB.

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step. +However, you can go right to the completed example.

+
+
+

Clone the Git repository: git clone https://github.com/quarkusio/quarkus-quickstarts.git, or download an archive.

+
+
+

The solution is located in the amazon-dynamodb-quickstart directory.

+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.2.3.Final:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-dynamodb-quickstart \
+    -DclassName="org.acme.dynamodb.FruitResource" \
+    -Dpath="/fruits" \
+    -Dextensions="resteasy-reactive-jackson,amazon-dynamodb"
+cd amazon-dynamodb-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy Reactive/JAX-RS and DynamoDB Client extensions. +After this, the amazon-dynamodb extension has been added to your pom.xml as well as the Mutiny support for RESTEasy.

+
+
+
+
+

Creating JSON REST service

+
+
+

In this example, we will create an application to manage a list of fruits. The example application will demonstrate the two programming models supported by the extension.

+
+
+

First, let’s create the Fruit bean as follows:

+
+
+
+
package org.acme.dynamodb;
+
+import java.util.Map;
+import java.util.Objects;
+
+import io.quarkus.runtime.annotations.RegisterForReflection;
+import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
+
+@RegisterForReflection
+public class Fruit {
+
+    private String name;
+    private String description;
+
+    public Fruit() {
+    }
+
+    public static Fruit from(Map<String, AttributeValue> item) {
+        Fruit fruit = new Fruit();
+        if (item != null && !item.isEmpty()) {
+            fruit.setName(item.get(AbstractService.FRUIT_NAME_COL).s());
+            fruit.setDescription(item.get(AbstractService.FRUIT_DESC_COL).s());
+        }
+        return fruit;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (!(obj instanceof Fruit)) {
+            return false;
+        }
+
+        Fruit other = (Fruit) obj;
+
+        return Objects.equals(other.name, this.name);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(this.name);
+    }
+}
+
+
+
+ + + + + +
+ + +The @RegisterForReflection annotation instructs Quarkus to keep the class and its members during the native compilation. More details about the @RegisterForReflection annotation can be found on the native application tips page. +
+
+
+

Nothing fancy. One important thing to note is that having a default constructor is required by the JSON serialization layer. The static from method creates a bean based on the Map +object provided by the DynamoDB client response.

+
+
+

Now create a org.acme.dynamodb.AbstractService that will consist of helper methods that prepare DynamoDB request objects for reading and adding items to the table.

+
+
+
+
package org.acme.dynamodb;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
+import software.amazon.awssdk.services.dynamodb.model.GetItemRequest;
+import software.amazon.awssdk.services.dynamodb.model.PutItemRequest;
+import software.amazon.awssdk.services.dynamodb.model.ScanRequest;
+
+public abstract class AbstractService {
+
+    public final static String FRUIT_NAME_COL = "fruitName";
+    public final static String FRUIT_DESC_COL = "fruitDescription";
+    public final static String FRUIT_TABLE_NAME = "QuarkusFruits";
+
+    protected ScanRequest scanRequest() {
+        return ScanRequest.builder().tableName(FRUIT_TABLE_NAME)
+                .attributesToGet(FRUIT_NAME_COL, FRUIT_DESC_COL).build();
+    }
+
+    protected PutItemRequest putRequest(Fruit fruit) {
+        Map<String, AttributeValue> item = new HashMap<>();
+        item.put(FRUIT_NAME_COL, AttributeValue.builder().s(fruit.getName()).build());
+        item.put(FRUIT_DESC_COL, AttributeValue.builder().s(fruit.getDescription()).build());
+
+        return PutItemRequest.builder()
+                .tableName(FRUIT_TABLE_NAME)
+                .item(item)
+                .build();
+    }
+
+    protected GetItemRequest getRequest(String name) {
+        Map<String, AttributeValue> key = new HashMap<>();
+        key.put(FRUIT_NAME_COL, AttributeValue.builder().s(name).build());
+
+        return GetItemRequest.builder()
+                .tableName(FRUIT_TABLE_NAME)
+                .key(key)
+                .attributesToGet(FRUIT_NAME_COL, FRUIT_DESC_COL)
+                .build();
+    }
+}
+
+
+
+

Then, create a org.acme.dynamodb.FruitSyncService that will be the business layer of our application and stores/loads the fruits from DynamoDB using the synchronous client.

+
+
+
+
package org.acme.dynamodb;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+
+import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
+
+@ApplicationScoped
+public class FruitSyncService extends AbstractService {
+
+    @Inject
+    DynamoDbClient dynamoDB;
+
+    public List<Fruit> findAll() {
+        return dynamoDB.scanPaginator(scanRequest()).items().stream()
+                .map(Fruit::from)
+                .collect(Collectors.toList());
+    }
+
+    public void add(Fruit fruit) {
+        dynamoDB.putItem(putRequest(fruit));
+    }
+
+    public Fruit get(String name) {
+        return Fruit.from(dynamoDB.getItem(getRequest(name)).item());
+    }
+}
+
+
+
+

Now, edit the org.acme.dynamodb.FruitResource class as follows:

+
+
+
+
package org.acme.dynamodb;
+
+import java.util.List;
+
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+
+@Path("/fruits")
+@Produces(MediaType.APPLICATION_JSON)
+@Consumes(MediaType.APPLICATION_JSON)
+public class FruitResource {
+
+    @Inject
+    FruitSyncService service;
+
+    @GET
+    public List<Fruit> getAll() {
+        return service.findAll();
+    }
+
+    @GET
+    @Path("{name}")
+    public Fruit getSingle(String name) {
+        return service.get(name);
+    }
+
+    @POST
+    public List<Fruit> add(Fruit fruit) {
+        service.add(fruit);
+        return getAll();
+    }
+}
+
+
+
+

The implementation is pretty straightforward and you just need to define your endpoints using the JAX-RS annotations and use the FruitSyncService to list/add new fruits.

+
+
+
+
+

Configuring DynamoDB clients

+
+
+

DynamoDB clients (sync and async) are configurable via the application.properties file that can be provided in the src/main/resources directory. +Additionally, you need to add to the classpath a proper implementation of the sync client. By default the extension uses the java.net.URLConnection HTTP client, so +you need to add a URL connection client dependency to the pom.xml file:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.dynamodb.sync-client.type=apache
+
+
+
+

And add following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

If you’re going to use a local DynamoDB instance, configure it as follows:

+
+
+
+
quarkus.dynamodb.endpoint-override=http://localhost:4566
+
+quarkus.dynamodb.aws.region=eu-central-1
+quarkus.dynamodb.aws.credentials.type=static
+quarkus.dynamodb.aws.credentials.static-provider.access-key-id=test-key
+quarkus.dynamodb.aws.credentials.static-provider.secret-access-key=test-secret
+
+
+
+
    +
  • +

    quarkus.dynamodb.aws.region - It’s required by the client, but since you’re using a local DynamoDB instance you can pick any valid AWS region.

    +
  • +
  • +

    quarkus.dynamodb.aws.credentials.type - Set static credentials provider with any values for access-key-id and secret-access-key

    +
  • +
  • +

    quarkus.dynamodb.endpoint-override - Override the DynamoDB client to use a local instance instead of an AWS service

    +
  • +
+
+
+

If you want to work with an AWS account, you’d need to set it with:

+
+
+
+
quarkus.dynamodb.aws.region=<YOUR_REGION>
+quarkus.dynamodb.aws.credentials.type=default
+
+
+
+
    +
  • +

    quarkus.dynamodb.aws.region you should set it to the region where you provisioned the DynamoDB table,

    +
  • +
  • +

    quarkus.dynamodb.aws.credentials.type - use the default credentials provider chain that looks for credentials in this order:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

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

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can be run with java -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

Create a org.acme.dynamodb.FruitAsyncService that will be similar to our FruitSyncService but using an asynchronous programming model.

+
+
+
+
package org.acme.dynamodb;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+
+import io.smallrye.mutiny.Uni;
+import software.amazon.awssdk.services.dynamodb.DynamoDbAsyncClient;
+
+@ApplicationScoped
+public class FruitAsyncService extends AbstractService {
+
+    @Inject
+    DynamoDbAsyncClient dynamoDB;
+
+    public Uni<List<Fruit>> findAll() {
+        return Uni.createFrom().completionStage(() -> dynamoDB.scan(scanRequest()))
+                .onItem().transform(res -> res.items().stream().map(Fruit::from).collect(Collectors.toList()));
+    }
+
+    public Uni<Void> add(Fruit fruit) {
+        return Uni.createFrom().completionStage(() -> dynamoDB.putItem(putRequest(fruit))).replaceWithVoid();
+    }
+
+    public Uni<Fruit> get(String name) {
+        return Uni.createFrom().completionStage(() -> dynamoDB.getItem(getRequest(name)))
+                .onItem().transform(resp -> Fruit.from(resp.item()));
+    }
+}
+
+
+
+

In the previous code, we create Uni instances from the CompletionStage objects returned by the asynchronous DynamoDB client, and then transform the emitted item.

+
+
+

Then, create an asynchronous REST resource that consumes this async service:

+
+
+
+
package org.acme.dynamodb;
+
+import java.util.List;
+
+import jakarta.inject.Inject;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+
+import io.smallrye.mutiny.Uni;
+
+@Path("/async-fruits")
+public class FruitAsyncResource {
+
+    @Inject
+    FruitAsyncService service;
+
+    @GET
+    public Uni<List<Fruit>> getAll() {
+        return service.findAll();
+    }
+
+    @GET
+    @Path("{name}")
+    public Uni<Fruit> getSingle(String name) {
+        return service.get(name);
+    }
+
+    @POST
+    public Uni<List<Fruit>> add(Fruit fruit) {
+        return service.add(fruit)
+                .onItem().ignore().andSwitchTo(this::getAll);
+    }
+}
+
+
+
+

And add Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.dynamodb.async-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+
+

DynamoDB enhanced client

+
+

The DynamoDB enhanced client is part of the AWS SDK for Java version 2 and makes the mapping between DynamoDB Tables and Java beans very easy. +The Enhanced Client requires a TableSchema which can be generated from a bean class annotated with DynamoDbBean or DynamoDbImmutable or generated from code. +By default, TableSchemas generated from bean classes are registered and cached at startup. You don’t need to explicitely instantiate them at class-load time. +It has both a sync and an async variants.

+
+
+

To use the enhanced client, add the quarkus-amazon-dynamodb-enhanced extension to your pom.xml:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.amazonservices</groupId>
+    <artifactId>quarkus-amazon-dynamodb-enhanced</artifactId>
+</dependency>
+
+
+
+

The Fruit bean would look like this:

+
+
+
+
package org.acme.dynamodb;
+
+import java.util.Map;
+import java.util.Objects;
+
+import io.quarkus.runtime.annotations.RegisterForReflection;
+import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbAttribute;
+import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbBean;
+import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbPartitionKey;
+import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
+
+@RegisterForReflection
+@DynamoDbBean
+public class Fruit {
+
+    private String name;
+    private String description;
+
+    public Fruit() {
+    }
+
+    @DynamoDbPartitionKey
+    @DynamoDbAttribute(AbstractService.FRUIT_NAME_COL)
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    @DynamoDbAttribute(AbstractService.FRUIT_DESC_COL)
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (!(obj instanceof Fruit)) {
+            return false;
+        }
+
+        Fruit other = (Fruit) obj;
+
+        return Objects.equals(other.name, this.name);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(this.name);
+    }
+}
+
+
+
+

Note that you don’t need to add @RegisterForReflection anymore.

+
+
+

The FruitSyncService would need to use the DynamoDbEnhancedClient as well as create a TableSchema:

+
+
+
+
package org.acme.dynamodb;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClient;
+import software.amazon.awssdk.enhanced.dynamodb.DynamoDbTable;
+import software.amazon.awssdk.enhanced.dynamodb.Key;
+import software.amazon.awssdk.enhanced.dynamodb.TableSchema;
+
+@ApplicationScoped
+public class FruitSyncService extends AbstractService {
+
+    private DynamoDbTable<Fruit> fruitTable;
+
+    @Inject
+    FruitEnhancedSyncService(DynamoDbEnhancedClient dynamoEnhancedClient) {
+        fruitTable = dynamoEnhancedClient.table(FRUIT_TABLE_NAME,
+            TableSchema.fromClass(Fruit.class));
+    }
+
+    public List<Fruit> findAll() {
+        return fruitTable.scan().items().stream().collect(Collectors.toList());
+    }
+
+    public List<Fruit> add(Fruit fruit) {
+        fruitTable.putItem(fruit);
+        return findAll();
+    }
+
+    public Fruit get(String name) {
+        Key partitionKey = Key.builder().partitionValue(name).build();
+        return fruitTable.getItem(partitionKey);
+    }
+}
+
+
+
+

The same goes for the asynchronous version with DynamoDbEnhanceAsyncdClient:

+
+
+
+
package org.acme.dynamodb;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+import io.smallrye.mutiny.Multi;
+import io.smallrye.mutiny.Uni;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+import mutiny.zero.flow.adapters.AdaptersToFlow;
+import software.amazon.awssdk.enhanced.dynamodb.DynamoDbAsyncTable;
+import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedAsyncClient;
+import software.amazon.awssdk.enhanced.dynamodb.Key;
+import software.amazon.awssdk.enhanced.dynamodb.TableSchema;
+
+@ApplicationScoped
+public class FruitAsyncService extends AbstractService {
+
+    private DynamoDbAsyncTable<Fruit> fruitTable;
+
+    @Inject
+    FruitEnhancedAsyncService(DynamoDbEnhancedAsyncClient dynamoEnhancedAsyncClient) {
+        fruitTable = dynamoEnhancedAsyncClient.table(FRUIT_TABLE_NAME,
+            TableSchema.fromClass(Fruit.class));
+    }
+
+    public Uni<List<Fruit>> findAll() {
+        return Multi.createFrom().publisher(AdaptersToFlow.publisher(fruitTable.scan().items())).collect().asList();
+    }
+
+    public Uni<Void> add(Fruit fruit){
+        return Uni.createFrom().completionStage(() -> fruitTable.putItem(fruit));
+}
+
+    public Uni<Fruit> get(String name) {
+        Key partitionKey = Key.builder().partitionValue(name).build();
+        return Uni.createFrom().completionStage(() -> fruitTable.getItem(partitionKey));
+    }
+}
+
+
+
+

Resource classes remain unchanged.

+
+
+

Alternatively, if you only need to use the DynamoDbTable instance, you can inject it directly with a @NamedDynamoDbTable annotation.

+
+
+

The synchronous version would be :

+
+
+
+
package org.acme.dynamodb;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+import io.quarkus.amazon.dynamodb.enhanced.runtime.NamedDynamoDbTable;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+import software.amazon.awssdk.enhanced.dynamodb.DynamoDbTable;
+import software.amazon.awssdk.enhanced.dynamodb.Key;
+
+@ApplicationScoped
+public class FruitSyncService extends AbstractService {
+
+    @Inject
+    @NamedDynamoDbTable(FRUIT_TABLE_NAME)
+    DynamoDbTable<Fruit> fruitTable;
+
+    public List<Fruit> findAll() {
+        return fruitTable.scan().items().stream().collect(Collectors.toList());
+    }
+
+    public List<Fruit> add(Fruit fruit) {
+        fruitTable.putItem(fruit);
+        return findAll();
+    }
+
+    public Fruit get(String name) {
+        Key partitionKey = Key.builder().partitionValue(name).build();
+        return fruitTable.getItem(partitionKey);
+    }
+}
+
+
+
+

And the asynchronous version :

+
+
+
+
package org.acme.dynamodb;
+
+import java.util.List;
+
+import io.quarkus.amazon.dynamodb.enhanced.runtime.NamedDynamoDbTable;
+import io.smallrye.mutiny.Multi;
+import io.smallrye.mutiny.Uni;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+import mutiny.zero.flow.adapters.AdaptersToFlow;
+import software.amazon.awssdk.enhanced.dynamodb.DynamoDbAsyncTable;
+import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedAsyncClient;
+import software.amazon.awssdk.enhanced.dynamodb.Key;
+import software.amazon.awssdk.enhanced.dynamodb.TableSchema;
+
+@ApplicationScoped
+public class FruitEnhancedAsyncService extends AbstractService {
+
+    @Inject
+    @NamedDynamoDbTable(FRUIT_TABLE_NAME)
+    private DynamoDbAsyncTable<Fruit> fruitTable;
+
+    public Uni<List<Fruit>> findAll() {
+        return Multi.createFrom().publisher(AdaptersToFlow.publisher(fruitTable.scan().items())).collect().asList();
+    }
+
+    public Uni<Void> add(Fruit fruit){
+        return Uni.createFrom().completionStage(() -> fruitTable.putItem(fruit));
+}
+
+    public Uni<Fruit> get(String name) {
+        Key partitionKey = Key.builder().partitionValue(name).build();
+        return Uni.createFrom().completionStage(() -> fruitTable.getItem(partitionKey));
+    }
+}
+
+
+
+

You can find more information about the DynamoDB enhanced client in the AWS documentation:

+
+ +
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface.

+
+
+

Environment variable: QUARKUS_DYNAMODB_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TYPE

+
+
+
+

url, apache

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_DYNAMODB_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_DYNAMODB_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_DYNAMODB_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Enable DynamoDB service endpoint discovery.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ENABLE_ENDPOINT_DISCOVERY

+
+
+

boolean

false

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_DYNAMODB_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_DYNAMODB_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_DYNAMODB_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of extensions to load with the enhanced client.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClientExtension interface.

+
+
+

Environment variable: QUARKUS_DYNAMODBENHANCED_CLIENT_EXTENSIONS

+
+
+

list of string

+
+
+
+

Whether a TableSchema should be created at start up for DynamoDb mappable entities annotated with DynamoDbBean or DynamoDbImmutable

+
+
+

TableSchema are cached and can be retrieved later with TableSchema.fromClass()

+
+
+

Environment variable: QUARKUS_DYNAMODBENHANCED_CREATE_TABLE_SCHEMAS

+
+
+

boolean

true

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.4.x/amazon-iam.html b/quarkus-amazon-services/2.4.x/amazon-iam.html new file mode 100644 index 0000000000..d686171b54 --- /dev/null +++ b/quarkus-amazon-services/2.4.x/amazon-iam.html @@ -0,0 +1,2715 @@ + + + + + + Amazon IAM Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon IAM Client

+
+

Amazon Identity and Access Management (IAM) enables users to manage access to AWS services and resources securely.

+
+
+

You can find more information about IAM at the Amazon IAM website.

+
+
+ + + + + +
+ + +The IAM extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client (by default) or the AWS CRT-based HTTP client

    +
  • +
+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface.

+
+
+

Environment variable: QUARKUS_IAM_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TYPE

+
+
+
+

url, apache

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_IAM_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_IAM_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_IAM_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_IAM_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_IAM_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_IAM_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_IAM_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_IAM_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.4.x/amazon-kms.html b/quarkus-amazon-services/2.4.x/amazon-kms.html new file mode 100644 index 0000000000..249b0a9f40 --- /dev/null +++ b/quarkus-amazon-services/2.4.x/amazon-kms.html @@ -0,0 +1,3115 @@ + + + + + + Amazon KMS Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon KMS Client

+
+
+
+

AWS Key Management Service (KMS) is a service that allows you to create and control the keys used to encrypt or digitally sign your data. +Using KMS, you can create and manage cryptographic keys and control their use across a wide range of AWS services and in your application.

+
+
+

You can find more information about KMS at the AWS KMS website.

+
+
+ + + + + +
+ + +The KMS extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client (by default) or the AWS CRT-based HTTP client

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use KMS locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 11+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    An AWS Account to access the KMS service

    +
  • +
  • +

    Docker for your system to run KMS locally for testing purposes

    +
  • +
+
+
+

Provision KMS locally via Dev Services

+
+

The easiest way to start working with KMS is to run a local instance using Dev Services.

+
+
+
+

Provision KMS locally manually

+
+

You can also set up a local version of KMS manually, first start a LocalStack container:

+
+
+
+
docker run --rm --name local-kms --publish 4566:4599 -e SERVICES=kms -e START_WEB=0 -d localstack/localstack:1.4.0
+
+
+
+

This starts a KMS instance that is accessible on port 4566.

+
+
+

Create an AWS profile for your local instance using AWS CLI:

+
+
+
+
$ aws configure --profile localstack
+AWS Access Key ID [None]: test-key
+AWS Secret Access Key [None]: test-secret
+Default region name [None]: us-east-1
+Default output format [None]: text
+
+
+
+
+

Create a KMS master key

+
+

Create a KMS master key queue using AWS CLI and store in MASTER_KEY_ARN environment variable.

+
+
+
+
MASTER_KEY_ARN=`aws kms create-key --profile localstack --endpoint-url=http://localhost:4566 | cut -f3`
+
+
+
+

Generate a key data as 256-bit symmetric key (AES 256)

+
+
+
+
aws kms generate-data-key --key-id $MASTER_KEY_ARN --key-spec AES_256 --profile localstack --endpoint-url=http://localhost:4566
+
+
+
+

Or, if you want to use your AWS account create a key using your default profile

+
+
+
+
MASTER_KEY_ARN=`aws kms create-key | cut -f3`
+aws kms generate-data-key --key-id $MASTER_KEY_ARN --key-spec AES_256
+
+
+
+
+
+
+

Solution

+
+
+

The application built here allows to encrypt and decrypt text messages using a master key created on AWS KMS.

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step. +However, you can go right to the completed example.

+
+
+

Clone the Git repository: git clone https://github.com/quarkusio/quarkus-quickstarts.git, or download an archive.

+
+
+

The solution is located in the amazon-kms-quickstart directory.

+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.2.3.Final:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-kms-quickstart \
+    -DclassName="org.acme.kms.QuarkusKmsSyncResource" \
+    -Dpath="/sync" \
+    -Dextensions="resteasy-reactive-jackson,amazon-kms"
+cd amazon-kms-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy Reactive/JAX-RS and Amazon KMS Client extensions. +After this, the amazon-kms extension has been added to your pom.xml as well as the Mutiny support for RESTEasy.

+
+
+
+
+

Creating JSON REST service

+
+
+

In this example, we will create an application that allows to encrypt and decrypt text message provided in the request. +The example application will demonstrate the two programming models supported by the extension.

+
+
+

Let’s create a org.acme.kms.QuarkusKmsSyncResource that will provide an API to encrypt and decrypt message using the synchronous client.

+
+
+
+
package org.acme.kms;
+
+import java.util.Base64;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import software.amazon.awssdk.core.SdkBytes;
+import software.amazon.awssdk.services.kms.KmsClient;
+import software.amazon.awssdk.services.kms.model.DecryptResponse;
+
+@Path("/sync")
+@Produces(MediaType.TEXT_PLAIN)
+@Consumes(MediaType.TEXT_PLAIN)
+public class QuarkusKmsSyncResource {
+
+    @Inject
+    KmsClient kms;
+
+    @ConfigProperty(name = "key.arn")
+    String keyArn;
+
+    @POST
+    @Path("/encrypt")
+    public String encrypt(String data) {
+        SdkBytes encryptedBytes = kms.encrypt(req -> req.keyId(keyArn).plaintext(SdkBytes.fromUtf8String(data))).ciphertextBlob();
+
+        return Base64.getEncoder().encodeToString(encryptedBytes.asByteArray());
+    }
+
+    @POST
+    @Path("/decrypt")
+    public String decrypt(String data) {
+        SdkBytes encryptedData = SdkBytes.fromByteArray(Base64.getDecoder().decode(data.getBytes()));
+        DecryptResponse decrypted = kms.decrypt(req -> req.keyId(keyArn).ciphertextBlob(encryptedData));
+
+        return decrypted.plaintext().asUtf8String();
+    }
+}
+
+
+
+

An encrypted message is in the form of a bytes array. To return it to the user we need to encode it as Base64 string in the encrypt endpoint. +On the decrypt endpoint we need to decode from the Base64 string back to the bytes array before sending it out to the KMS client.

+
+
+
+
+

Configuring KMS clients

+
+
+

Both KMS clients (sync and async) are configurable via the application.properties file that can be provided in the src/main/resources directory. +Additionally, you need to add to the classpath a proper implementation of the sync client. By default the extension uses the URL connection HTTP client, so +you need to add a URL connection client dependency to the pom.xml file:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.kms.sync-client.type=apache
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

If you’re going to use a local KMS instance, configure it as follows:

+
+
+
+
quarkus.kms.endpoint-override=http://localhost:4566
+
+quarkus.kms.aws.region=us-east-1
+quarkus.kms.aws.credentials.type=static
+quarkus.kms.aws.credentials.static-provider.access-key-id=test-key
+quarkus.kms.aws.credentials.static-provider.secret-access-key=test-secret
+
+
+
+
    +
  • +

    quarkus.kms.aws.region - It’s required by the client, but since you’re using a local KMS instance use us-east-1 as it’s a default region of LocalStack’s KMS.

    +
  • +
  • +

    quarkus.kms.aws.credentials.type - Set static credentials provider with any values for access-key-id and secret-access-key

    +
  • +
  • +

    quarkus.kms.endpoint-override - Override the KMS client to use a local instance instead of an AWS service

    +
  • +
+
+
+

If you want to work with an AWS account, you can simply remove or comment out all Amazon KMS related properties. By default, the KMS client extension +will use the default credentials provider chain that looks for credentials in this order:

+
+
+
    +
  • +

    Java System Properties - aws.accessKeyId and aws.secretAccessKey

    +
  • +
  • +

    Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

    +
  • +
  • +

    Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

    +
  • +
  • +

    Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

    +
  • +
  • +

    Instance profile credentials delivered through the Amazon EC2 metadata service

    +
  • +
+
+
+

And the region from your AWS CLI profile will be used.

+
+
+
+
+

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can be run with java -Dkey.arn=$MASTER_KEY_ARN -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

Create a org.acme.kms.QuarkusKmsAsyncResource REST resource that will be similar to our QuarkusKmsSyncResource but using an asynchronous programming model.

+
+
+
+
package org.acme.kms;
+
+import java.util.Base64;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import io.smallrye.mutiny.Uni;
+import software.amazon.awssdk.core.SdkBytes;
+import software.amazon.awssdk.services.kms.KmsAsyncClient;
+import software.amazon.awssdk.services.kms.model.DecryptResponse;
+import software.amazon.awssdk.services.kms.model.EncryptResponse;
+
+@Path("/async")
+@Produces(MediaType.TEXT_PLAIN)
+@Consumes(MediaType.TEXT_PLAIN)
+public class QuarkusKmsAsyncResource {
+
+    @Inject
+    KmsAsyncClient kms;
+
+    @ConfigProperty(name = "key.arn")
+    String keyArn;
+
+    @POST
+    @Path("/encrypt")
+    public Uni<String> encrypt(String data) {
+        return Uni.createFrom().completionStage(kms.encrypt(req -> req.keyId(keyArn).plaintext(SdkBytes.fromUtf8String(data))))
+            .onItem().transform(EncryptResponse::ciphertextBlob)
+            .onItem().transform(blob -> Base64.getEncoder().encodeToString(blob.asByteArray()));
+    }
+
+    @POST
+    @Path("/decrypt")
+    public Uni<String> decrypt(String data) {
+        return Uni.createFrom().item(SdkBytes.fromByteArray(Base64.getDecoder().decode(data.getBytes())))
+            .onItem().transformToUni(msg ->
+                        Uni.createFrom().completionStage(kms.decrypt(req -> req.keyId(keyArn).ciphertextBlob(msg)))
+            )
+            .onItem().transform(DecryptResponse::plaintext)
+            .onItem().transform(SdkBytes::asUtf8String);
+    }
+}
+
+
+
+

We create Uni instances from the CompletionStage objects returned by the asynchronous KMS client, and then transform the emitted item.

+
+
+

And we need to add the Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.kms.async-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface.

+
+
+

Environment variable: QUARKUS_KMS_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TYPE

+
+
+
+

url, apache

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_KMS_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_KMS_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_KMS_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_KMS_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_KMS_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_KMS_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_KMS_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_KMS_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.4.x/amazon-s3.html b/quarkus-amazon-services/2.4.x/amazon-s3.html new file mode 100644 index 0000000000..d4fddc35f8 --- /dev/null +++ b/quarkus-amazon-services/2.4.x/amazon-s3.html @@ -0,0 +1,3533 @@ + + + + + + Amazon S3 Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon S3 Client

+
+
+
+

Amazon S3 is an object storage service. It can be employed to store any type of object which allows for uses like storage for Internet applications, +backup and recovery, disaster recovery, data archives, data lakes for analytics, any hybrid cloud storage. +This extension provides functionality that allows the client to communicate with the service when running in Quarkus. +You can find more information about S3 at the Amazon S3 website.

+
+
+ + + + + +
+ + +The S3 extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client (by default) or the AWS CRT-based HTTP client

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use S3 locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 11+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    AWS Command line interface

    +
  • +
  • +

    An AWS Account to access the S3 service. Before you can use the AWS SDKs with Amazon S3, you must get an AWS access key ID and secret access key.

    +
  • +
  • +

    Optionally, Docker for your system to run S3 locally for testing purposes

    +
  • +
+
+
+

Provision S3 locally via Dev Services

+
+

The easiest way to start working with S3 is to run a local instance using Dev Services.

+
+
+

You can optionally configure the buckets that are created on startup with the quarkus.s3.devservices.buckets config property.

+
+
+

Provision S3 locally manually

+
+

You can also setup a local version of S3 manually, first start a LocalStack container:

+
+
+
+
docker run -it --publish 4566:4566 -e SERVICES=s3 -e START_WEB=0 localstack/localstack:1.4.0
+
+
+
+

This starts a S3 instance that is accessible on port 4566.

+
+
+

Create an AWS profile for your local instance using AWS CLI:

+
+
+
+
$ aws configure --profile localstack
+AWS Access Key ID [None]: test-key
+AWS Secret Access Key [None]: test-secret
+Default region name [None]: us-east-1
+Default output format [None]:
+
+
+
+
+
+

Create a S3 bucket

+
+

Create a S3 bucket using AWS CLI

+
+
+
+
aws s3 mb s3://quarkus.s3.quickstart --profile localstack --endpoint-url=http://localhost:4566
+
+
+
+
+
+
+

Solution

+
+
+

The application built here allows to manage files stored in Amazon S3.

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step. +However, you can go right to the completed example.

+
+
+

Clone the Git repository: git clone https://github.com/quarkusio/quarkus-quickstarts.git, or download an archive.

+
+
+

The solution is located in the amazon-s3-quickstart directory.

+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.2.3.Final:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-s3-quickstart \
+    -DclassName="org.acme.s3.S3SyncClientResource" \
+    -Dpath="/s3" \
+    -Dextensions="resteasy-reactive-jackson,amazon-s3"
+cd amazon-s3-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy Reactive/JAX-RS and S3 Client extensions. +After this, the amazon-s3 extension has been added to your pom.xml.

+
+
+ + + + + +
+ + +The default setting for quarkus.http.limits.max-body-size is 10240K. This may limit your ability to upload multipart files larger than the default. If you want to upload larger files, you will need to set this limit explicitly. +
+
+
+
+
+

Setting up the model

+
+
+

In this example, we will create an application to manage a list of files. The example application will demonstrate the two programming models supported by the extension.

+
+
+

Because the primary goal of our application is to upload a file into the S3 bucket, we need to setup the model we will be using to define the multipart/form-data payload, +in the form of a @MultipartForm POJO.

+
+
+

Create a org.acme.s3.FormData class as follows:

+
+
+
+
package org.acme.s3;
+
+import java.io.File;
+import jakarta.ws.rs.core.MediaType;
+import org.jboss.resteasy.reactive.PartType;
+import org.jboss.resteasy.reactive.RestForm;
+
+public class FormData {
+
+    @RestForm("file")
+    public File data;
+
+    @RestForm
+    @PartType(MediaType.TEXT_PLAIN)
+    public String filename;
+
+    @RestForm
+    @PartType(MediaType.TEXT_PLAIN)
+    public String mimetype;
+
+}
+
+
+
+

The class defines three fields:

+
+
+
    +
  • +

    data that fill capture stream of uploaded bytes from the client

    +
  • +
  • +

    fileName that captures a filename as provided by the submited form

    +
  • +
  • +

    mimeType content type of the uploaded file

    +
  • +
+
+
+

In the second step let’s create a bean that will represent a file in a Amazon S3 bucket as follows:

+
+
+
+
package org.acme.s3;
+
+import software.amazon.awssdk.services.s3.model.S3Object;
+
+public class FileObject {
+    private String objectKey;
+
+    private Long size;
+
+    public FileObject() {
+    }
+
+    public static FileObject from(S3Object s3Object) {
+        FileObject file = new FileObject();
+        if (s3Object != null) {
+            file.setObjectKey(s3Object.key());
+            file.setSize(s3Object.size());
+        }
+        return file;
+    }
+
+    public String getObjectKey() {
+        return objectKey;
+    }
+
+    public Long getSize() {
+        return size;
+    }
+
+    public FileObject setObjectKey(String objectKey) {
+        this.objectKey = objectKey;
+        return this;
+    }
+
+    public FileObject setSize(Long size) {
+        this.size = size;
+        return this;
+    }
+}
+
+
+
+

Nothing fancy. One important thing to note is that having a default constructor is required by the JSON serialization layer. The static from method creates a bean based on the S3Object +object provided by the S3 client response when listing all the objects in a bucket.

+
+
+
+
+

Create JAX-RS resource

+
+
+

Now create a org.acme.s3.CommonResource that will consist of methods to prepare S3 request to get object from a S3 bucket, or to put file into a S3 bucket. +Note a configuration property bucket.name is defined here as the request method required name of the S3 bucket.

+
+
+
+
package org.acme.s3;
+
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+
+import software.amazon.awssdk.services.s3.model.GetObjectRequest;
+import software.amazon.awssdk.services.s3.model.PutObjectRequest;
+
+abstract public class CommonResource {
+
+    @ConfigProperty(name = "bucket.name")
+    String bucketName;
+
+    protected PutObjectRequest buildPutRequest(FormData formData) {
+        return PutObjectRequest.builder()
+                .bucket(bucketName)
+                .key(formData.filename)
+                .contentType(formData.mimetype)
+                .build();
+    }
+
+    protected GetObjectRequest buildGetRequest(String objectKey) {
+        return GetObjectRequest.builder()
+                .bucket(bucketName)
+                .key(objectKey)
+                .build();
+    }
+
+}
+
+
+
+

Then, create a org.acme.s3.S3SyncClientResource that will provides an API to upload/download files as well as to list all the files in a bucket.

+
+
+
+
package org.acme.s3;
+
+import java.util.Comparator;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+import jakarta.ws.rs.core.Response.ResponseBuilder;
+import jakarta.ws.rs.core.Response.Status;
+import software.amazon.awssdk.core.ResponseBytes;
+import software.amazon.awssdk.core.sync.RequestBody;
+import software.amazon.awssdk.services.s3.S3Client;
+import software.amazon.awssdk.services.s3.model.GetObjectResponse;
+import software.amazon.awssdk.services.s3.model.ListObjectsRequest;
+import software.amazon.awssdk.services.s3.model.PutObjectResponse;
+
+
+@Path("/s3")
+public class S3SyncClientResource extends CommonResource {
+    @Inject
+    S3Client s3;
+
+    @POST
+    @Path("upload")
+    @Consumes(MediaType.MULTIPART_FORM_DATA)
+    public Response uploadFile(FormData formData) throws Exception {
+
+        if (formData.filename == null || formData.filename.isEmpty()) {
+            return Response.status(Status.BAD_REQUEST).build();
+        }
+
+        if (formData.mimetype == null || formData.mimetype.isEmpty()) {
+            return Response.status(Status.BAD_REQUEST).build();
+        }
+
+        PutObjectResponse putResponse = s3.putObject(buildPutRequest(formData),
+                RequestBody.fromFile(formData.data));
+        if (putResponse != null) {
+            return Response.ok().status(Status.CREATED).build();
+        } else {
+            return Response.serverError().build();
+        }
+    }
+
+    @GET
+    @Path("download/{objectKey}")
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    public Response downloadFile(String objectKey) {
+        ResponseBytes<GetObjectResponse> objectBytes = s3.getObjectAsBytes(buildGetRequest(objectKey));
+        ResponseBuilder response = Response.ok(objectBytes.asUtf8String());
+        response.header("Content-Disposition", "attachment;filename=" + objectKey);
+        response.header("Content-Type", objectBytes.response().contentType());
+        return response.build();
+    }
+
+    @GET
+    @Produces(MediaType.APPLICATION_JSON)
+    public List<FileObject> listFiles() {
+        ListObjectsRequest listRequest = ListObjectsRequest.builder().bucket(bucketName).build();
+
+        //HEAD S3 objects to get metadata
+        return s3.listObjects(listRequest).contents().stream()
+                .map(FileObject::from)
+                .sorted(Comparator.comparing(FileObject::getObjectKey))
+                .collect(Collectors.toList());
+    }
+}
+
+
+
+
+
+

Configuring S3 clients

+
+
+

Both S3 clients (sync and async) are configurable via the application.properties file that can be provided in the src/main/resources directory.

+
+
+ + + + + +
+ + +You need to add to the classpath a proper implementation of the sync client. By default the extension uses the URL connection HTTP client, so +add a URL connection client dependency to the pom.xml file: +
+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.s3.sync-client.type=apache
+
+
+
+

And add following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

For asynchronous client refer to Going asynchronous for more information.

+
+
+

If you’re going to use a local S3 instance, configure it as follows:

+
+
+
+
quarkus.s3.endpoint-override=http://localhost:4566
+
+quarkus.s3.aws.region=us-east-1
+quarkus.s3.aws.credentials.type=static
+quarkus.s3.aws.credentials.static-provider.access-key-id=test-key
+quarkus.s3.aws.credentials.static-provider.secret-access-key=test-secret
+
+bucket.name=quarkus.s3.quickstart
+
+
+
+
    +
  • +

    quarkus.s3.aws.region - It’s required by the client, but since you’re using a local S3 instance you can pick any valid AWS region.

    +
  • +
  • +

    quarkus.s3.aws.credentials.type - Set static credentials provider with any values for access-key-id and secret-access-key

    +
  • +
  • +

    quarkus.s3.endpoint-override - Override the S3 client to use a local instance instead of an AWS service

    +
  • +
  • +

    bucket.name - Name of the S3 bucket

    +
  • +
+
+
+

If you want to work with an AWS account, you’d need to set it with:

+
+
+
+
bucket.name=<your-bucket-name>
+
+quarkus.s3.aws.region=<YOUR_REGION>
+quarkus.s3.aws.credentials.type=default
+
+
+
+
    +
  • +

    bucket.name - name of the S3 bucket on your AWS account.

    +
  • +
  • +

    quarkus.s3.aws.region you should set it to the region where your S3 bucket was created,

    +
  • +
  • +

    quarkus.s3.aws.credentials.type - use the default credentials provider chain that looks for credentials in this order:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

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

Creating a frontend

+
+
+

Now let’s add a simple web page to interact with our S3SyncClientResource. +Quarkus automatically serves static resources located under the META-INF/resources directory. +In the src/main/resources/META-INF/resources directory, add a s3.html file with the content from this s3.html file in it.

+
+
+

You can now interact with your REST service:

+
+
+
    +
  • +

    start Quarkus with ./mvnw compile quarkus:dev

    +
  • +
  • +

    open a browser to http://localhost:8080/s3.html

    +
  • +
  • +

    upload new file to the current S3 bucket via the form and see the list of files in the bucket

    +
  • +
+
+
+
+
+

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can be run with java -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

Create a org.acme.s3.S3AsyncClientResource that will be similar to our S3SyncClientResource but using an asynchronous programming model.

+
+
+
+
package org.acme.s3;
+
+import java.nio.ByteBuffer;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+import jakarta.ws.rs.core.Response.Status;
+import mutiny.zero.flow.adapters.AdaptersToFlow;
+
+import org.jboss.resteasy.reactive.RestMulti;
+import org.reactivestreams.Publisher;
+
+import io.smallrye.mutiny.Multi;
+import io.smallrye.mutiny.Uni;
+import io.vertx.core.buffer.Buffer;
+import software.amazon.awssdk.core.async.AsyncRequestBody;
+import software.amazon.awssdk.core.async.AsyncResponseTransformer;
+import software.amazon.awssdk.services.s3.S3AsyncClient;
+import software.amazon.awssdk.services.s3.model.ListObjectsRequest;
+import software.amazon.awssdk.services.s3.model.ListObjectsResponse;
+
+@Path("/async-s3")
+public class S3AsyncClientResource extends CommonResource {
+    @Inject
+    S3AsyncClient s3;
+
+    @POST
+    @Path("upload")
+    @Consumes(MediaType.MULTIPART_FORM_DATA)
+    public Uni<Response> uploadFile(FormData formData) throws Exception {
+
+        if (formData.filename == null || formData.filename.isEmpty()) {
+            return Uni.createFrom().item(Response.status(Status.BAD_REQUEST).build());
+        }
+
+        if (formData.mimetype == null || formData.mimetype.isEmpty()) {
+            return Uni.createFrom().item(Response.status(Status.BAD_REQUEST).build());
+        }
+
+        return Uni.createFrom()
+                .completionStage(() -> {
+                    return s3.putObject(buildPutRequest(formData), AsyncRequestBody.fromFile(formData.data));
+                })
+                .onItem().ignore().andSwitchTo(Uni.createFrom().item(Response.created(null).build()))
+                .onFailure().recoverWithItem(th -> {
+                    th.printStackTrace();
+                    return Response.serverError().build();
+                });
+    }
+
+    @GET
+    @Path("download/{objectKey}")
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    public RestMulti<Buffer> downloadFile(String objectKey) {
+
+        return RestMulti.fromUniResponse(Uni.createFrom()
+                .completionStage(() -> s3.getObject(buildGetRequest(objectKey),
+                        AsyncResponseTransformer.toPublisher())),
+                response -> Multi.createFrom().safePublisher(AdaptersToFlow.publisher((Publisher<ByteBuffer>) response))
+                        .map(S3AsyncClientResource::toBuffer),
+                response -> Map.of("Content-Disposition", List.of("attachment;filename=" + objectKey), "Content-Type",
+                        List.of(response.response().contentType())));
+    }
+
+    @GET
+    public Uni<List<FileObject>> listFiles() {
+        ListObjectsRequest listRequest = ListObjectsRequest.builder()
+                .bucket(bucketName)
+                .build();
+
+        return Uni.createFrom().completionStage(() -> s3.listObjects(listRequest))
+                .onItem().transform(result -> toFileItems(result));
+    }
+
+    private static Buffer toBuffer(ByteBuffer bytebuffer) {
+        byte[] result = new byte[bytebuffer.remaining()];
+        bytebuffer.get(result);
+        return Buffer.buffer(result);
+    }
+
+    private List<FileObject> toFileItems(ListObjectsResponse objects) {
+        return objects.contents().stream()
+                .map(FileObject::from)
+                .sorted(Comparator.comparing(FileObject::getObjectKey))
+                .collect(Collectors.toList());
+    }
+}
+
+
+
+

And we need to add the Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.s3.async-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface.

+
+
+

Environment variable: QUARKUS_S3_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TYPE

+
+
+
+

url, apache

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_S3_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_S3_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_S3_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

The buckets to create on startup.

+
+
+

Environment variable: QUARKUS_S3_DEVSERVICES_BUCKETS

+
+
+

list of string

default

+
+
+
+

Enable using the accelerate endpoint when accessing S3.

+
+
+

Accelerate endpoints allow faster transfer of objects by using Amazon CloudFront’s globally distributed edge locations.

+
+
+

Environment variable: QUARKUS_S3_ACCELERATE_MODE

+
+
+

boolean

false

+
+
+
+

Enable doing a validation of the checksum of an object stored in S3.

+
+
+

Environment variable: QUARKUS_S3_CHECKSUM_VALIDATION

+
+
+

boolean

true

+
+
+
+

Enable using chunked encoding when signing the request payload for software.amazon.awssdk.services.s3.model.PutObjectRequest and software.amazon.awssdk.services.s3.model.UploadPartRequest.

+
+
+

Environment variable: QUARKUS_S3_CHUNKED_ENCODING

+
+
+

boolean

true

+
+
+
+

Enable dualstack mode for accessing S3. If you want to use IPv6 when accessing S3, dualstack must be enabled.

+
+
+

Environment variable: QUARKUS_S3_DUALSTACK

+
+
+

boolean

false

+
+
+
+

Enable using path style access for accessing S3 objects instead of DNS style access. DNS style access is preferred as it will result in better load balancing when accessing S3.

+
+
+

Environment variable: QUARKUS_S3_PATH_STYLE_ACCESS

+
+
+

boolean

false

+
+
+
+

Enable cross-region call to the region specified in the S3 resource ARN different than the region the client was configured with. If this flag is not set to 'true', the cross-region call will throw an exception.

+
+
+

Environment variable: QUARKUS_S3_USE_ARN_REGION_ENABLED

+
+
+

boolean

false

+
+
+
+

Define the profile name that should be consulted to determine the default value of use-arn-region-enabled. This is not used, if the use-arn-region-enabled is configured to 'true'.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_S3_PROFILE_NAME

+
+
+

string

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_S3_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_S3_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_S3_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_S3_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_S3_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.4.x/amazon-secretsmanager.html b/quarkus-amazon-services/2.4.x/amazon-secretsmanager.html new file mode 100644 index 0000000000..df0fede70c --- /dev/null +++ b/quarkus-amazon-services/2.4.x/amazon-secretsmanager.html @@ -0,0 +1,3141 @@ + + + + + + Amazon Secrets Manager Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon Secrets Manager Client

+
+
+
+

AWS Secrets Manager enables you to replace hardcoded credentials in your code, including passwords, with an API call to Secrets Manager to retrieve the secret programmatically. +This helps ensure the secret can’t be compromised by someone examining your code, because the secret no longer exists in the code.

+
+
+

You can find more information about Secrets Manager at the AWS Secrets Manager website.

+
+
+ + + + + +
+ + +The Secrets Manager extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client (by default) or the AWS CRT-based HTTP client

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use Secrets Manager locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 11+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    An AWS Account to access the Secrets Manager service

    +
  • +
  • +

    Docker for your system to run Secrets Manager locally for testing purposes

    +
  • +
+
+
+

Provision Secrets Manager locally via Dev Services

+
+

The easiest way to start working with Secrets Manager is to run a local instance using Dev Services.

+
+
+
+

Provision Secrets Manager locally manually

+
+

You can also set up a local version of Secrets Manager manually, first start a LocalStack container:

+
+
+
+
docker run --rm --name local-secrets-manager --publish 4566:4584 -e SERVICES=secretsmanager -e START_WEB=0 -d localstack/localstack:1.4.0
+
+
+
+

This starts a Secrets Manager instance that is accessible on port 4566.

+
+
+

Create an AWS profile for your local instance using AWS CLI:

+
+
+
+
$ aws configure --profile localstack
+AWS Access Key ID [None]: test-key
+AWS Secret Access Key [None]: test-secret
+Default region name [None]: us-east-1
+Default output format [None]:
+
+
+
+
+
+
+

Solution

+
+
+

The application built here allows to store and retrieve credentials using Secrets Manager.

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step. +However, you can go right to the completed example.

+
+
+

Clone the Git repository: git clone https://github.com/quarkusio/quarkus-quickstarts.git, or download an archive.

+
+
+

The solution is located in the amazon-secretsmanager-quickstart directory.

+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.2.3.Final:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-secretsmanager-quickstart \
+    -DclassName="org.acme.secretsmanager.QuarkusSecretsManagerSyncResource" \
+    -Dpath="/sync" \
+    -Dextensions="resteasy,resteasy-jackson,amazon-secretsmanager,resteasy-mutiny"
+cd amazon-secretsmanager-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy/JAX-RS, Mutiny and Amazon Secrets Manager Client extensions. +After this, the amazon-secretsmanager extension has been added to your pom.xml as well as the Mutiny support for RESTEasy.

+
+
+
+
+

Creating JSON REST service

+
+
+

In this example, we will create an application that allows us to store and retrieve parameters to and from Secrets Manager store using a RESTful API. +The example application will demonstrate the two programming models supported by the extension.

+
+
+

Let’s start with an abstract org.acme.secretsmanager.QuarkusSecretsManagerResource class to provide the common functionality we will need for both the synchronous and asynchrounous exposures.

+
+
+
+
package org.acme.secretsmanager;
+
+import static java.lang.Boolean.TRUE;
+import static java.util.stream.Collectors.toMap;
+
+import java.util.Map;
+import java.util.stream.Collector;
+
+import jakarta.annotation.PostConstruct;
+
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+
+import software.amazon.awssdk.services.secretsmanager.model.CreateSecretRequest;
+import software.amazon.awssdk.services.secretsmanager.model.GetSecretValueRequest;
+
+public abstract class QuarkusSecretsManagerResource {
+    public static final String VERSION_STAGE = "AWSCURRENT";
+
+    @ConfigProperty(name = "secret.name") (1)
+    String secretName;
+
+    protected GetSecretValueRequest generateGetSecretValueRequest() {
+        return GetSecretValueRequest.builder() (2)
+                .secretId(secretName)
+                .versionStage(VERSION_STAGE)
+                .build();
+    }
+
+    protected CreateSecretRequest generateCreateSecretRequest(String name, String secret) {
+        return CreateSecretRequest.builder() (3)
+                .name(name)
+                .secretString(secret)
+                .build();
+    }
+
+}
+
+
+
+ + + + + + + + + + + + + +
1Inject a configured name under which is stored the secret
2Generate a request for the credentials with the configured name
3Generate a request to create a specific secret
+
+
+

Now, we can extend the class and create the synchronous implementation in the org.acme.secretsmanager.QuarkusSecretsManagerSyncResource class.

+
+
+
+
package org.acme.secretsmanager;
+
+import java.util.Map;
+
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.DefaultValue;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.PUT;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+
+import software.amazon.awssdk.services.secretsmanager.SecretsManagerClient;
+
+@Path("/sync")
+public class QuarkusSecretsManagerSyncResource extends QuarkusSecretsManagerResource {
+
+    @Inject (1)
+    SecretsManagerClient secretsManagerClient;
+
+    @GET
+    @Produces(MediaType.APPLICATION_JSON)
+    public String getSecret() {
+        return secretsManagerClient.getSecretValue(generateGetSecretValueRequest()).secretString();
+    }
+
+    @POST
+    @Path("/{name}")
+    @Consumes(MediaType.TEXT_PLAIN)
+    public void createSecret(String name, String value) {
+        secretsManagerClient.createSecret(generateCreateSecretRequest(name, secret));
+    }
+
+}
+
+
+
+ + + + + +
1Inject the client provided by the amazon-secretsmanager extension
+
+
+

Using the Amazon Secrets Manager SDK, we can easily store and retrieve secrets.

+
+
+
+
+

Configuring Secrets Manager clients

+
+
+

Both Secrets Manager clients (sync and async) are configurable via the application.properties file that can be provided in the src/main/resources directory. +Additionally, you need to add to the classpath a proper implementation of the sync client. By default the extension uses the URL connection HTTP client, so +you need to add a URL connection client dependency to the pom.xml file:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.secretsmanager.sync-client.type=apache
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

If you’re going to use a local Secrets Manager instance, configure it as follows:

+
+
+
+
quarkus.secretsmanager.endpoint-override=http://localhost:4566 (1)
+
+quarkus.secretsmanager.aws.region=us-east-1 (2)
+quarkus.secretsmanager.aws.credentials.type=static (3)
+quarkus.secretsmanager.aws.credentials.static-provider.access-key-id=test-key
+quarkus.secretsmanager.aws.credentials.static-provider.secret-access-key=test-secret
+
+
+
+ + + + + + + + + + + + + +
1Override the Secret Manager client to use LocalStack instead of the actual AWS service
2Localstack defaults to us-east-1
3The static credentials provider lets you set the access-key-id and secret-access-key directly
+
+
+

If you want to work with an AWS account, you can simply remove or comment out all Amazon Secrets Manager related properties. By default, the Secrets Manager client extension will use the default credentials provider chain that looks for credentials in this order:

+
+
+
    +
  • +

    Java System Properties - aws.accessKeyId and aws.secretAccessKey

    +
  • +
  • +

    Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

    +
  • +
  • +

    Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

    +
  • +
  • +

    Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

    +
  • +
  • +

    Instance profile credentials delivered through the Amazon EC2 metadata service

    +
  • +
+
+
+

And the region from your AWS CLI profile will be used.

+
+
+
+
+

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can then be run with java -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

Create a org.acme.secretsmanager.QuarkusSecretsManagerAsyncResource REST resource that will be similar to our QuarkusSecretsManagerSyncResource but using an asynchronous programming model.

+
+
+
+
package org.acme.secretsmanager;
+
+import java.util.Map;
+
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.DefaultValue;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.PUT;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+
+import io.smallrye.mutiny.Uni;
+import software.amazon.awssdk.services.secretsmanager.SecretsManagerAsyncClient;
+
+@Path("/async")
+public class QuarkusSecretsManagerAsyncResource extends QuarkusSecretsManagerResource {
+
+    @Inject
+    SecretsManagerAsyncClient secretsManagerAsyncClient;
+
+    @GET
+    @Produces(MediaType.APPLICATION_JSON)
+    public Uni<String> getSecret() {
+        return Uni.createFrom().completionStage(secretsManagerAsyncClient.getSecretValue(generateGetSecretValueRequest()))
+                .onItem().transform(r -> r.secretString());
+    }
+
+    @PUT
+    @Path("/{name}")
+    @Consumes(MediaType.TEXT_PLAIN)
+    public Uni<Void> createSecret(String name, String value) {
+
+        return Uni.createFrom().completionStage(secretsManagerAsyncClient.createSecret(generateCreateSecretRequest(name, secret)))
+                .onItem().transform(r -> null);
+    }
+
+}
+
+
+
+

Note that the SecretsManagerAsyncClient behaves just like the SecretsManagerClient, but returns CompletionStage objects which we use to create Uni instances, and then transform the emitted item.

+
+
+

To enable the asynchronous client, we also need to add the Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.secretsmanager.async-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TYPE

+
+
+
+

url, apache

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.4.x/amazon-ses.html b/quarkus-amazon-services/2.4.x/amazon-ses.html new file mode 100644 index 0000000000..be1202c069 --- /dev/null +++ b/quarkus-amazon-services/2.4.x/amazon-ses.html @@ -0,0 +1,3095 @@ + + + + + + Amazon SES Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon SES Client

+
+
+
+

Amazon Simple Email Service (SES) is a flexible and highly-scalable email sending and receiving service. +Using SES, you can send emails with any type of correspondence. You can find more information about SES at the Amazon SES website.

+
+
+ + + + + +
+ + +The SES extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client (by default) or the AWS CRT-based HTTP client

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use SES locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 11+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    An AWS Account to access the SES service

    +
  • +
  • +

    Docker for your system to run SES locally for testing purposes

    +
  • +
+
+
+

Provision SES locally via Dev Services

+
+

The easiest way to start working with SES is to run a local instance using Dev Services. +However, local instance of SES is only mocks the SES APIs without the actual email sending capabilities. You can still use it for this guide to verify an API communication or integration test purposes.

+
+
+
+

Provision SES locally manually

+
+

You can also set up a local version of SES manually, first start a LocalStack container:

+
+
+
+
docker run --rm --name local-ses -p 4566:4579 -e SERVICES=ses -e START_WEB=0 -d localstack/localstack:1.4.0
+
+
+
+

This starts a SES instance that is accessible on port 4566.

+
+
+

Create an AWS profile for your local instance using AWS CLI:

+
+
+
+
$ aws configure --profile localstack
+AWS Access Key ID [None]: test-key
+AWS Secret Access Key [None]: test-secret
+Default region name [None]: us-east-1
+Default output format [None]: text
+
+
+
+
+
+
+

Using SES on your AWS account

+
+
+

Amazon applies certain restrictions to new Amazon SES accounts, mainly to prevent fraud and abuse. All new accounts are in the Amazon SES sandbox. +All the features of the Amazon SES are still available while in sandbox, but a following restrictions applies: +- You can send mail to verified email addresses and domains or to the Amazon SES mailbox simulator +- You can only send mail from verified email addresses and domains +- You can send a maximum of 1 message per second.

+
+
+

Going production, you’d need to get your account of the sandbox following the Amazon procedure.

+
+
+

Set up AWS SES

+
+

We assume you are going to use AWS SES sandbox for the sake of this guide. But before sending any email, you must verify sender and recipient email addresses using AWS CLI. +You can use your personal email or any temporary email service available if you wish.

+
+
+
+
aws ses verify-email-identity --email-address <sender@email.address>
+aws ses verify-email-identity --email-address <recipient@email.address>
+
+
+
+

Now, you need to open a mailboxes of those email addresses in order to follow confirmation procedure. Once email is approved you can use it in your application.

+
+
+

If you are using local SES you still need to verify email addresses, otherwise your send email in order to let local SES accepting your request. +However, no emails to be send as it only mocks the service APIs.

+
+
+
+
aws ses verify-email-identity --email-address <sender@email.address> --profile localstack --endpoint-url=http://localhost:4566
+aws ses verify-email-identity --email-address <recipient@email.address> --profile localstack --endpoint-url=http://localhost:4566
+
+
+
+
+
+
+

Solution

+
+
+

The application built here allows sending text emails to the recipients that are verified on AWS SES.

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step. +However, you can go right to the completed example.

+
+
+

Clone the Git repository: git clone https://github.com/quarkusio/quarkus-quickstarts.git, or download an archive.

+
+
+

The solution is located in the amazon-ses-quickstart directory.

+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.2.3.Final:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-ses-quickstart \
+    -DclassName="org.acme.ses.QuarkusSesSyncResource" \
+    -Dpath="/sync" \
+    -Dextensions="resteasy-reactive-jackson,amazon-ses"
+cd amazon-ses-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy Reactive/JAX-RS and Amazon SES Client extensions. +After this, the amazon-ses extension has been added to your pom.xml as well as the Mutiny support for RESTEasy.

+
+
+
+
+

Creating JSON REST service

+
+
+

Lets create a org.acme.ses.QuarkusSesSyncResource that will provide an API to send emails using the synchronous client.

+
+
+
+
package org.acme.ses;
+
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import org.acme.ses.model.Email;
+import software.amazon.awssdk.services.ses.SesClient;
+
+@Path("/sync")
+@Produces(MediaType.TEXT_PLAIN)
+@Consumes(MediaType.APPLICATION_JSON)
+public class QuarkusSesSyncResource {
+
+    @Inject
+    SesClient ses;
+
+    @POST
+    @Path("/email")
+    public String encrypt(Email data) {
+        return ses.sendEmail(req -> req
+            .source(data.getFrom())
+            .destination(d -> d.toAddresses(data.getTo()))
+            .message(msg -> msg
+                .subject(sub -> sub.data(data.getSubject()))
+                .body(b -> b.text(txt -> txt.data(data.getBody()))))).messageId();
+    }
+}
+
+
+
+
+
+

Configuring SES clients

+
+
+

Both SES clients (sync and async) are configurable via the application.properties file that can be provided in the src/main/resources directory. +Additionally, you need to add to the classpath a proper implementation of the sync client. By default the extension uses the URL connection HTTP client, so +you need to add a URL connection client dependency to the pom.xml file:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.ses.sync-client.type=apache
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

If you’re going to use a local SES instance, configure it as follows:

+
+
+
+
quarkus.ses.endpoint-override=http://localhost:4566
+
+quarkus.ses.aws.region=us-east-1
+quarkus.ses.aws.credentials.type=static
+quarkus.ses.aws.credentials.static-provider.access-key-id=test-key
+quarkus.ses.aws.credentials.static-provider.secret-access-key=test-secret
+
+
+
+
    +
  • +

    quarkus.ses.aws.region - It’s required by the client, but since you’re using a local SES instance use us-east-1 as it’s a default region of LocalStack’s SES.

    +
  • +
  • +

    quarkus.ses.aws.credentials.type - Set static credentials provider with any values for access-key-id and secret-access-key

    +
  • +
  • +

    quarkus.ses.endpoint-override - Override the SES client to use a local instance instead of an AWS service

    +
  • +
+
+
+

If you want to work with an AWS account, you can simply remove or comment out all Amazon SES related properties. By default, the SES client extension +will use the default credentials provider chain that looks for credentials in this order:

+
+
+
    +
  • +

    Java System Properties - aws.accessKeyId and aws.secretAccessKey

    +
  • +
  • +

    Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

    +
  • +
  • +

    Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

    +
  • +
  • +

    Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

    +
  • +
  • +

    Instance profile credentials delivered through the Amazon EC2 metadata service

    +
  • +
+
+
+

And the region from your AWS CLI profile will be used.

+
+
+
+
+

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can be run with java -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

Create a org.acme.ses.QuarkusSesAsyncResource REST resource that will be similar to our QuarkusSesSyncResource but using an asynchronous programming model.

+
+
+
+
package org.acme.ses;
+
+import io.smallrye.mutiny.Uni;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import org.acme.ses.model.Email;
+import software.amazon.awssdk.services.ses.SesAsyncClient;
+import software.amazon.awssdk.services.ses.model.SendEmailResponse;
+
+@Path("/async")
+@Produces(MediaType.TEXT_PLAIN)
+@Consumes(MediaType.APPLICATION_JSON)
+public class QuarkusSesAsyncResource {
+
+    @Inject
+    SesAsyncClient ses;
+
+    @POST
+    @Path("/email")
+    public Uni<String> encrypt(Email data) {
+        return Uni.createFrom()
+            .completionStage(
+                ses.sendEmail(req -> req
+                    .source(data.getFrom())
+                    .destination(d -> d.toAddresses(data.getTo()))
+                    .message(msg -> msg
+                        .subject(sub -> sub.data(data.getSubject()))
+                        .body(b -> b.text(txt -> txt.data(data.getBody()))))))
+            .onItem().apply(SendEmailResponse::messageId);
+    }
+}
+
+
+
+

We create Uni instances from the CompletionStage objects returned by the asynchronous SES client, and then transform the emitted item.

+
+
+

And we need to add the Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.ses.async-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface.

+
+
+

Environment variable: QUARKUS_SES_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TYPE

+
+
+
+

url, apache

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_SES_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_SES_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_SES_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_SES_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_SES_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SES_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SES_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_SES_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.4.x/amazon-sns.html b/quarkus-amazon-services/2.4.x/amazon-sns.html new file mode 100644 index 0000000000..66b6d33e4c --- /dev/null +++ b/quarkus-amazon-services/2.4.x/amazon-sns.html @@ -0,0 +1,3743 @@ + + + + + + Amazon SNS Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon SNS Client

+
+
+
+

Amazon Simple Notification Service (SNS) is a highly available and fully managed pub/sub messaging service. +It provides topics for high-throughput, push-based, many-to-many messaging. Messages can fan out to a large number of subscriber endpoints for +parallel processing, including Amazon SQS queues, AWS Lambda functions, and HTTP/S webhooks. Additionally, SNS can be used +to fan out notifications to end users using mobile push, SMS and email.

+
+
+

You can find more information about SNS at the Amazon SNS website.

+
+
+ + + + + +
+ + +The SNS extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client (by default) or the AWS CRT-based HTTP client

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use SNS locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 11+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    An AWS Account to access the SNS service

    +
  • +
  • +

    Optionally, Docker for your system to run SNS locally for testing purposes

    +
  • +
+
+
+

Provision SNS locally via Dev Services

+
+

The easiest way to start working with SNS is to run a local instance using Dev Services.

+
+
+
+

Provision SNS locally manually

+
+

You can also set up a local version of SNS manually, first start a LocalStack container:

+
+
+
+
docker run -it --publish 4566:4575 -e SERVICES=sns -e START_WEB=0 localstack/localstack:1.4.0
+
+
+
+

This starts a SNS instance that is accessible on port 4566.

+
+
+

Create an AWS profile for your local instance using AWS CLI:

+
+
+
+
$ aws configure --profile localstack
+AWS Access Key ID [None]: test-key
+AWS Secret Access Key [None]: test-secret
+Default region name [None]: us-east-1
+Default output format [None]: text
+
+
+
+
+

Create a SNS topic

+
+

Create a SNS topic using AWS CLI and store in TOPIC_ARN environment variable

+
+
+
+
TOPIC_ARN=`aws sns create-topic --name=QuarksCollider --profile localstack --endpoint-url=http://localhost:4566`
+
+
+
+ + + + + +
+ + +
+

If you are using LocalStack, some additional configuration is needed:

+
+
+
    +
  • +

    Set the quarkus.shield.base.url configuration property in your application.properties to your IP address instead of localhost.

    +
  • +
  • +

    Set the quarkus.http.host configuration property in your application.properties to 0.0.0.0. +Be aware that Quarkus will then listen to all interfaces, which might be a security hazard depending on your network configuration.

    +
  • +
+
+
+

Otherwise your service will not receive the notifications.

+
+
+
+
+

If you want to run the demo using SNS on your AWS account, you can create a topic using AWS default profile

+
+
+
+
TOPIC_ARN=`aws sns create-topic --name=QuarksCollider`
+
+
+
+
+
+
+

Solution

+
+
+

The application built here allows to shoot elementary particles (quarks) into a QuarksCollider topic of the AWS SNS. +Additionally, we create a resource that allows to subscribe to the QuarksCollider topic in order to receive published quarks.

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step. +However, you can go right to the completed example.

+
+
+

Clone the Git repository: git clone https://github.com/quarkusio/quarkus-quickstarts.git, or download an archive.

+
+
+

The solution is located in the amazon-sns-quickstart directory.

+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.2.3.Final:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-sns-quickstart \
+    -DclassName="org.acme.sns.QuarksCannonSyncResource" \
+    -Dpath="/sync-cannon" \
+    -Dextensions="resteasy-reactive-jackson,amazon-sns"
+cd amazon-sns-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy Reactive/JAX-RS and Amazon SNS Client extensions. +After this, the amazon-sns extension has been added to your pom.xml as well as the Mutiny support for RESTEasy.

+
+
+
+
+

Creating JSON REST service

+
+
+

In this example, we will create an application that allows to publish quarks. The example application will demonstrate the two programming models supported by the extension.

+
+
+

First, let’s create the Quark bean as follows:

+
+
+
+
package org.acme.sns.model;
+
+import io.quarkus.runtime.annotations.RegisterForReflection;
+import java.util.Objects;
+
+@RegisterForReflection
+public class Quark {
+
+    private String flavor;
+    private String spin;
+
+    public Quark() {
+    }
+
+    public String getFlavor() {
+        return flavor;
+    }
+
+    public void setFlavor(String flavor) {
+        this.flavor = flavor;
+    }
+
+    public String getSpin() {
+        return spin;
+    }
+
+    public void setSpin(String spin) {
+        this.spin = spin;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (!(obj instanceof Quark)) {
+            return false;
+        }
+
+        Quark other = (Quark) obj;
+
+        return Objects.equals(other.flavor, this.flavor);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(this.flavor);
+    }
+}
+
+
+
+

Then, create a org.acme.sns.QuarksCannonSyncResource that will provide an API to shoot quarks into the SNS topic via the SNS synchronous client.

+
+
+ + + + + +
+ + +The @RegisterForReflection annotation instructs Quarkus to keep the class and its members during the native compilation. More details about the @RegisterForReflection annotation can be found on the native application tips page. +
+
+
+
+
package org.acme.sns;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectWriter;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+import org.acme.sns.model.Quark;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import org.jboss.logging.Logger;
+import software.amazon.awssdk.services.sns.SnsClient;
+import software.amazon.awssdk.services.sns.model.PublishResponse;
+
+@Path("/sync/cannon")
+@Produces(MediaType.TEXT_PLAIN)
+public class QuarksCannonSyncResource {
+
+    private static final Logger LOGGER = Logger.getLogger(QuarksCannonSyncResource.class);
+
+    @Inject
+    SnsClient sns;
+
+    @ConfigProperty(name = "topic.arn")
+    String topicArn;
+
+    static ObjectWriter QUARK_WRITER = new ObjectMapper().writerFor(Quark.class);
+
+    @POST
+    @Path("/shoot")
+    @Consumes(MediaType.APPLICATION_JSON)
+    public Response publish(Quark quark) throws Exception {
+        String message = QUARK_WRITER.writeValueAsString(quark);
+        PublishResponse response = sns.publish(p -> p.topicArn(topicArn).message(message));
+        LOGGER.infov("Fired Quark[{0}, {1}}]", quark.getFlavor(), quark.getSpin());
+        return Response.ok().entity(response.messageId()).build();
+    }
+}
+
+
+
+

Because of the fact that messages published must be simply a String we’re using Jackson’s ObjectWriter in order to serialize our Quark objects into a String.

+
+
+

The missing piece is the subscriber that will receive the messages published to our topic. Before implementing subscribers, we need to define POJO classes representing messages posted by the AWS SNS.

+
+
+

Let’s create two classes that represent SNS Notification and SNS Subscription Confirmation messages based on the AWS SNS Message and JSON formats

+
+
+

Create org.acme.sns.model.SnsNotification class

+
+
+
+
package org.acme.sns.model;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class SnsNotification {
+
+    @JsonProperty("Message")
+    private String message;
+
+    @JsonProperty("MessageId")
+    private String messageId;
+
+    @JsonProperty("Signature")
+    private String signature;
+
+    @JsonProperty("SignatureVersion")
+    private String signatureVersion;
+
+    @JsonProperty("SigningCertURL")
+    private String signinCertUrl;
+
+    @JsonProperty("Subject")
+    private String subject;
+
+    @JsonProperty("Timestamp")
+    private String timestamp;
+
+    @JsonProperty("TopicArn")
+    private String topicArn;
+
+    @JsonProperty("Type")
+    private String type;
+
+    @JsonProperty("UnsubscribeURL")
+    private String unsubscribeURL;
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
+    public String getMessageId() {
+        return messageId;
+    }
+
+    public void setMessageId(String messageId) {
+        this.messageId = messageId;
+    }
+
+    public String getSignature() {
+        return signature;
+    }
+
+    public void setSignature(String signature) {
+        this.signature = signature;
+    }
+
+    public String getSignatureVersion() {
+        return signatureVersion;
+    }
+
+    public void setSignatureVersion(String signatureVersion) {
+        this.signatureVersion = signatureVersion;
+    }
+
+    public String getSigninCertUrl() {
+        return signinCertUrl;
+    }
+
+    public void setSigninCertUrl(String signinCertUrl) {
+        this.signinCertUrl = signinCertUrl;
+    }
+
+    public String getSubject() {
+        return subject;
+    }
+
+    public void setSubject(String subject) {
+        this.subject = subject;
+    }
+
+    public String getTimestamp() {
+        return timestamp;
+    }
+
+    public void setTimestamp(String timestamp) {
+        this.timestamp = timestamp;
+    }
+
+    public String getTopicArn() {
+        return topicArn;
+    }
+
+    public void setTopicArn(String topicArn) {
+        this.topicArn = topicArn;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getUnsubscribeURL() {
+        return unsubscribeURL;
+    }
+
+    public void setUnsubscribeURL(String unsubscribeURL) {
+        this.unsubscribeURL = unsubscribeURL;
+    }
+}
+
+
+
+

Then, create org.acme.sns.SnsSubscriptionConfirmation

+
+
+
+
package org.acme.sns.model;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class SnsSubscriptionConfirmation {
+
+    @JsonProperty("Message")
+    private String message;
+
+    @JsonProperty("MessageId")
+    private String messageId;
+
+    @JsonProperty("Signature")
+    private String signature;
+
+    @JsonProperty("SignatureVersion")
+    private String signatureVersion;
+
+    @JsonProperty("SigningCertURL")
+    private String signingCertUrl;
+
+    @JsonProperty("SubscribeURL")
+    private String subscribeUrl;
+
+    @JsonProperty("Timestamp")
+    private String timestamp;
+
+    @JsonProperty("Token")
+    private String token;
+
+    @JsonProperty("TopicArn")
+    private String topicArn;
+
+    @JsonProperty("Type")
+    private String type;
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
+    public String getMessageId() {
+        return messageId;
+    }
+
+    public void setMessageId(String messageId) {
+        this.messageId = messageId;
+    }
+
+    public String getSignature() {
+        return signature;
+    }
+
+    public void setSignature(String signature) {
+        this.signature = signature;
+    }
+
+    public String getSignatureVersion() {
+        return signatureVersion;
+    }
+
+    public void setSignatureVersion(String signatureVersion) {
+        this.signatureVersion = signatureVersion;
+    }
+
+    public String getSigningCertUrl() {
+        return signingCertUrl;
+    }
+
+    public void setSigningCertUrl(String signingCertUrl) {
+        this.signingCertUrl = signingCertUrl;
+    }
+
+    public String getSubscribeUrl() {
+        return subscribeUrl;
+    }
+
+    public void setSubscribeUrl(String subscribeUrl) {
+        this.subscribeUrl = subscribeUrl;
+    }
+
+    public String getTimestamp() {
+        return timestamp;
+    }
+
+    public void setTimestamp(String timestamp) {
+        this.timestamp = timestamp;
+    }
+
+    public String getToken() {
+        return token;
+    }
+
+    public void setToken(String token) {
+        this.token = token;
+    }
+
+    public String getTopicArn() {
+        return topicArn;
+    }
+
+    public void setTopicArn(String topicArn) {
+        this.topicArn = topicArn;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+}
+
+
+
+

Now, create org.acme.QuarksShieldSyncResource REST resources that: +- Allows to subscribe itself to our SNS topic +- Unsubscribe from the SNS topic +- Receive notifications from the subscribed SNS topic

+
+
+ + + + + +
+ + +Keep in mind that AWS SNS supports multiple types of subscribers (that is web servers, email addresses, AWS SQS queues, AWS Lambda functions, and many more), but for the sake of the +quickstart we will show how to subscribe an HTTP endpoint served by our application. +
+
+
+
+
package org.acme.sns;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectReader;
+import java.util.HashMap;
+import java.util.Map;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.HeaderParam;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+import org.acme.sns.model.Quark;
+import org.acme.sns.model.SnsNotification;
+import org.acme.sns.model.SnsSubscriptionConfirmation;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import org.jboss.logging.Logger;
+import software.amazon.awssdk.services.sns.SnsClient;
+import software.amazon.awssdk.services.sns.model.SubscribeResponse;
+
+@Path("/sync/shield")
+public class QuarksShieldSyncResource {
+
+    private static final Logger LOGGER = Logger.getLogger(QuarksShieldSyncResource.class);
+
+    private static final String NOTIFICATION_TYPE = "Notification";
+    private static final String SUBSCRIPTION_CONFIRMATION_TYPE = "SubscriptionConfirmation";
+    private static final String UNSUBSCRIPTION_CONFIRMATION_TYPE = "UnsubscribeConfirmation";
+
+    @Inject
+    SnsClient sns;
+
+    @ConfigProperty(name = "topic.arn")
+    String topicArn;
+
+    @ConfigProperty(name = "quarks.shield.base.url")
+    String quarksShieldBaseUrl;
+
+    private volatile String subscriptionArn;
+
+    static Map<Class<?>, ObjectReader> READERS = new HashMap<>();
+
+    static {
+        READERS.put(SnsNotification.class, new ObjectMapper().readerFor(SnsNotification.class));
+        READERS.put(SnsSubscriptionConfirmation.class, new ObjectMapper().readerFor(SnsSubscriptionConfirmation.class));
+        READERS.put(Quark.class, new ObjectMapper().readerFor(Quark.class));
+    }
+
+    @POST
+    @Consumes({MediaType.TEXT_PLAIN})
+    public Response notificationEndpoint(@HeaderParam("x-amz-sns-message-type") String messageType, String message) throws JsonProcessingException {
+        if (messageType == null) {
+            return Response.status(400).build();
+        }
+
+        if (messageType.equals(NOTIFICATION_TYPE)) {
+            SnsNotification notification = readObject(SnsNotification.class, message);
+            Quark quark = readObject(Quark.class, notification.getMessage());
+            LOGGER.infov("Quark[{0}, {1}] collision with the shield.", quark.getFlavor(), quark.getSpin());
+        } else if (messageType.equals(SUBSCRIPTION_CONFIRMATION_TYPE)) {
+            SnsSubscriptionConfirmation subConf = readObject(SnsSubscriptionConfirmation.class, message);
+            sns.confirmSubscription(cs -> cs.topicArn(topicArn).token(subConf.getToken()));
+            LOGGER.info("Subscription confirmed. Ready for quarks collisions.");
+        } else if (messageType.equals(UNSUBSCRIPTION_CONFIRMATION_TYPE)) {
+            LOGGER.info("We are unsubscribed");
+        } else {
+            return Response.status(400).entity("Unknown messageType").build();
+        }
+
+        return Response.ok().build();
+    }
+
+    @POST
+    @Path("/subscribe")
+    public Response subscribe() {
+        String notificationEndpoint = notificationEndpoint();
+        SubscribeResponse response = sns.subscribe(s -> s.topicArn(topicArn).protocol("http").endpoint(notificationEndpoint));
+        subscriptionArn = response.subscriptionArn();
+        LOGGER.infov("Subscribed Quarks shield <{0}> : {1} ", notificationEndpoint, response.subscriptionArn());
+        return Response.ok().entity(response.subscriptionArn()).build();
+    }
+
+    @POST
+    @Path("/unsubscribe")
+    public Response unsubscribe() {
+        if (subscriptionArn != null) {
+            sns.unsubscribe(s -> s.subscriptionArn(subscriptionArn));
+            LOGGER.infov("Unsubscribed quarks shield for id = {0}", subscriptionArn);
+            return Response.ok().build();
+        } else {
+            LOGGER.info("Not subscribed yet");
+            return Response.status(400).entity("Not subscribed yet").build();
+        }
+    }
+
+    private String notificationEndpoint() {
+        return quarksShieldBaseUrl + "/sync/shield";
+    }
+
+    private <T> T readObject(Class<T> clazz, String message) {
+        T object = null;
+        try {
+            object = READERS.get(clazz).readValue(message);
+        } catch (JsonProcessingException e) {
+            LOGGER.errorv("Unable to deserialize message <{0}> to Class <{1}>", message, clazz.getSimpleName());
+            throw new RuntimeException(e);
+        }
+        return object;
+    }
+}
+
+
+
+
    +
  1. +

    subscribe() endpoint subscribes to our topic by providing the URL to the POST endpoint receiving SNS notification requests.

    +
  2. +
  3. +

    unsubscribe() simply removes our subscription, so any messages published to the topic will not be routed to our endpoint anymore

    +
  4. +
  5. +

    notificationEndpoint() is called by SNS on new message if endpoint is subscribed. +See Amazon SNS message and JSON formats for details about the format of the messages SNS can submit.

    +
  6. +
+
+
+
+
+

Configuring SNS clients

+
+
+

Both SNS clients (sync and async) are configurable via the application.properties file that can be provided in the src/main/resources directory. +Additionally, you need to add to the classpath a proper implementation of the sync client. By default the extension uses URL connection HTTP client, so +you need to add a URL connection client dependency to the pom.xml file:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.sns.sync-client.type=apache
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

If you’re going to use a local SNS instance, configure it as follows:

+
+
+
+
quarkus.sns.endpoint-override=http://localhost:4566
+
+quarkus.sns.aws.region=us-east-1
+quarkus.sns.aws.credentials.type=static
+quarkus.sns.aws.credentials.static-provider.access-key-id=test-key
+quarkus.sns.aws.credentials.static-provider.secret-access-key=test-secret
+
+
+
+
    +
  • +

    quarkus.sns.aws.region - It’s required by the client, but since you’re using a local SNS instance you can pick any valid AWS region.

    +
  • +
  • +

    quarkus.sns.aws.credentials.type - Set static credentials provider with any values for access-key-id and secret-access-key

    +
  • +
  • +

    quarkus.sns.endpoint-override - Override the SNS client to use a local instance instead of an AWS service

    +
  • +
+
+
+

If you want to work with an AWS account, you’d need to set it with:

+
+
+
+
quarkus.sns.aws.region=<YOUR_REGION>
+quarkus.sns.aws.credentials.type=default
+
+
+
+
    +
  • +

    quarkus.sns.aws.region you should set it to the region where you provisioned the SNS table,

    +
  • +
  • +

    quarkus.sns.aws.credentials.type - use the default credentials provider chain that looks for credentials in this order:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

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

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can be run with java -Dtopic.arn=$TOPIC_ARN -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

Create a org.acme.sns.QuarksCannonAsyncResource REST resource that will be similar to our QuarksCannonSyncResource but using an asynchronous programming model.

+
+
+
+
package org.acme.sns;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectWriter;
+import io.smallrye.mutiny.Uni;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+import org.acme.sns.model.Quark;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import org.jboss.logging.Logger;
+import software.amazon.awssdk.services.sns.SnsAsyncClient;
+import software.amazon.awssdk.services.sns.model.PublishResponse;
+
+@Path("/async/cannon")
+@Produces(MediaType.APPLICATION_JSON)
+@Consumes(MediaType.APPLICATION_JSON)
+public class QuarksCannonAsyncResource {
+
+    private static final Logger LOGGER = Logger.getLogger(QuarksCannonAsyncResource.class);
+
+    @Inject
+    SnsAsyncClient sns;
+
+    @ConfigProperty(name = "topic.arn")
+    String topicArn;
+
+    static ObjectWriter QUARK_WRITER = new ObjectMapper().writerFor(Quark.class);
+
+    @POST
+    @Path("/shoot")
+    @Consumes(MediaType.APPLICATION_JSON)
+    public Uni<Response> publish(Quark quark) throws Exception {
+        String message = QUARK_WRITER.writeValueAsString(quark);
+        return Uni.createFrom()
+            .completionStage(sns.publish(p -> p.topicArn(topicArn).message(message)))
+            .onItem().invoke(item -> LOGGER.infov("Fired Quark[{0}, {1}}]", quark.getFlavor(), quark.getSpin()))
+            .onItem().transform(PublishResponse::messageId)
+            .onItem().transform(id -> Response.ok().entity(id).build());
+    }
+}
+
+
+
+

We create Uni instances from the CompletionStage objects returned by the asynchronous SNS client, and then transform the emitted item.

+
+
+

And corresponding async subscriber org.acme.sns.QuarksShieldAsyncResource

+
+
+
+
package org.acme.sns;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectReader;
+import io.smallrye.mutiny.Uni;
+import java.util.HashMap;
+import java.util.Map;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.HeaderParam;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+import org.acme.sns.model.Quark;
+import org.acme.sns.model.SnsNotification;
+import org.acme.sns.model.SnsSubscriptionConfirmation;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import org.jboss.logging.Logger;
+import software.amazon.awssdk.services.sns.SnsAsyncClient;
+import software.amazon.awssdk.services.sns.model.SubscribeResponse;
+
+@Path("/async/shield")
+public class QuarksShieldAsyncResource {
+
+    private static final Logger LOGGER = Logger.getLogger(QuarksShieldAsyncResource.class);
+
+    private static final String NOTIFICATION_TYPE = "Notification";
+    private static final String SUBSCRIPTION_CONFIRMATION_TYPE = "SubscriptionConfirmation";
+    private static final String UNSUBSCRIPTION_CONFIRMATION_TYPE = "UnsubscribeConfirmation";
+
+    @Inject
+    SnsAsyncClient sns;
+
+    @ConfigProperty(name = "topic.arn")
+    String topicArn;
+
+    @ConfigProperty(name = "quarks.shield.base.url")
+    String quarksShieldBaseUrl;
+
+    private volatile String subscriptionArn;
+
+    static Map<Class<?>, ObjectReader> READERS = new HashMap<>();
+
+    static {
+        READERS.put(SnsNotification.class, new ObjectMapper().readerFor(SnsNotification.class));
+        READERS.put(SnsSubscriptionConfirmation.class, new ObjectMapper().readerFor(SnsSubscriptionConfirmation.class));
+        READERS.put(Quark.class, new ObjectMapper().readerFor(Quark.class));
+    }
+
+    @POST
+    @Consumes({MediaType.TEXT_PLAIN})
+    public Uni<Response> notificationEndpoint(@HeaderParam("x-amz-sns-message-type") String messageType, String message) {
+        if (messageType == null) {
+            return Uni.createFrom().item(Response.status(400).build());
+        }
+
+        if (messageType.equals(NOTIFICATION_TYPE)) {
+            return Uni.createFrom().item(readObject(SnsNotification.class, message))
+                .onItem().transform(notification -> readObject(Quark.class, notification.getMessage()))
+                .onItem().invoke(quark -> LOGGER.infov("Quark[{0}, {1}] collision with the shield.", quark.getFlavor(), quark.getSpin()))
+                .onItem().transform(quark -> Response.ok().build());
+        } else if (messageType.equals(SUBSCRIPTION_CONFIRMATION_TYPE)) {
+            return Uni.createFrom().item(readObject(SnsSubscriptionConfirmation.class, message))
+                .onItem().transformToUni(msg ->
+                    Uni.createFrom().completionStage(
+                        sns.confirmSubscription(confirm -> confirm.topicArn(topicArn).token(msg.getToken())))
+                )
+                .onItem().invoke(resp -> LOGGER.info("Subscription confirmed. Ready for quarks collisions."))
+                .onItem().transform(resp -> Response.ok().build());
+        } else if (messageType.equals(UNSUBSCRIPTION_CONFIRMATION_TYPE)) {
+            LOGGER.info("We are unsubscribed");
+            return Uni.createFrom().item(Response.ok().build());
+        }
+
+        return Uni.createFrom().item(Response.status(400).entity("Unknown messageType").build());
+    }
+
+    @POST
+    @Path("/subscribe")
+    public Uni<Response> subscribe() {
+        return Uni.createFrom()
+            .completionStage(sns.subscribe(s -> s.topicArn(topicArn).protocol("http").endpoint(notificationEndpoint())))
+            .onItem().transform(SubscribeResponse::subscriptionArn)
+            .onItem().invoke(this::setSubscriptionArn)
+            .onItem().invoke(arn -> LOGGER.infov("Subscribed Quarks shield with id = {0} ", arn))
+            .onItem().transform(arn -> Response.ok().entity(arn).build());
+    }
+
+    @POST
+    @Path("/unsubscribe")
+    public Uni<Response> unsubscribe() {
+        if (subscriptionArn != null) {
+            return Uni.createFrom()
+                .completionStage(sns.unsubscribe(s -> s.subscriptionArn(subscriptionArn)))
+                .onItem().invoke(arn -> LOGGER.infov("Unsubscribed quarks shield for id = {0}", subscriptionArn))
+                .onItem().invoke(arn -> subscriptionArn = null)
+                .onItem().transform(arn -> Response.ok().build());
+        } else {
+            return Uni.createFrom().item(Response.status(400).entity("Not subscribed yet").build());
+        }
+    }
+
+    private String notificationEndpoint() {
+        return quarksShieldBaseUrl + "/async/shield";
+    }
+
+    private void setSubscriptionArn(String arn) {
+        this.subscriptionArn = arn;
+    }
+
+    private <T> T readObject(Class<T> clazz, String message) {
+        T object = null;
+        try {
+            object = READERS.get(clazz).readValue(message);
+        } catch (JsonProcessingException e) {
+            LOGGER.errorv("Unable to deserialize message <{0}> to Class <{1}>", message, clazz.getSimpleName());
+            throw new RuntimeException(e);
+        }
+        return object;
+    }
+}
+
+
+
+

And we need to add Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.sns.async-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface.

+
+
+

Environment variable: QUARKUS_SNS_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TYPE

+
+
+
+

url, apache

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_SNS_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_SNS_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_SNS_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_SNS_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_SNS_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SNS_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SNS_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_SNS_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.4.x/amazon-sqs.html b/quarkus-amazon-services/2.4.x/amazon-sqs.html new file mode 100644 index 0000000000..db094d7736 --- /dev/null +++ b/quarkus-amazon-services/2.4.x/amazon-sqs.html @@ -0,0 +1,3312 @@ + + + + + + Amazon SQS Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon SQS Client

+
+
+
+

Amazon Simple Queue Service (SQS) is a fully managed message queuing service. +Using SQS, you can send, store, and receive messages between software components at any volume, without losing messages or requiring other +services to be available. +SQS offers two types of message queues. Standard queues offer maximum throughput, best-effort ordering and at-least-once delivery. +SQS FIFO queues are designed to guarantee that messages are processes exactly once, on the exact order that they were sent.

+
+
+

You can find more information about SQS at the Amazon SQS website.

+
+
+ + + + + +
+ + +The SQS extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client (by default) or the AWS CRT-based HTTP client

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use SQS locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 11+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    An AWS Account to access the SQS service

    +
  • +
  • +

    Docker for your system to run SQS locally for testing purposes

    +
  • +
+
+
+

Provision SQS locally via Dev Services

+
+

The easiest way to start working with SQS is to run a local instance using Dev Services.

+
+
+

You can optionally configure the queues that are created on startup with the quarkus.sqs.devservices.queues config property.

+
+
+
+

Provision SQS locally manually

+
+

You can also set up a local version of SQS manually, first start a LocalStack container:

+
+
+
+
docker run --rm --name local-sqs -p 4566:4566 -e SERVICES=sqs -e START_WEB=0 -d localstack/localstack:1.4.0
+
+
+
+

This starts a SQS instance that is accessible on port 4566.

+
+
+

Create an AWS profile for your local instance using AWS CLI:

+
+
+
+
$ aws configure --profile localstack
+AWS Access Key ID [None]: test-key
+AWS Secret Access Key [None]: test-secret
+Default region name [None]: us-east-1
+Default output format [None]: text
+
+
+
+
+

Create a SQS queue

+
+

Create a SQS queue using AWS CLI and store in QUEUE_URL environment variable.

+
+
+
+
QUEUE_URL=`aws sqs create-queue --queue-name=ColliderQueue --profile localstack --endpoint-url=http://localhost:4566`
+
+
+
+

Or, if you want to use your SQS queue on your AWS account create a queue using your default profile

+
+
+
+
QUEUE_URL=`aws sqs create-queue --queue-name=ColliderQueue`
+
+
+
+
+
+
+

Solution

+
+
+

The application built here allows shooting an elementary particles (quarks) into a ColliderQueue queue of the AWS SQS. +Additionally, we create a resource that allows receiving those quarks from the ColliderQueue queue in the order they were sent.

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step. +However, you can go right to the completed example.

+
+
+

Clone the Git repository: git clone https://github.com/quarkusio/quarkus-quickstarts.git, or download an archive.

+
+
+

The solution is located in the amazon-sqs-quickstart directory.

+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.2.3.Final:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-sqs-quickstart \
+    -DclassName="org.acme.sqs.QuarksCannonSyncResource" \
+    -Dpath="/sync-cannon" \
+    -Dextensions="resteasy-reactive-jackson,amazon-sqs"
+cd amazon-sqs-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy Reactive and Amazon SQS Client extensions. +After this, the amazon-sqs extension has been added to your pom.xml as well as the Mutiny support for RESTEasy.

+
+
+
+
+

Creating JSON REST service

+
+
+

In this example, we will create an application that sends quarks via the queue. The example application will demonstrate the two programming models supported by the extension.

+
+
+

First, let’s create the Quark bean as follows:

+
+
+
+
package org.acme.sqs.model;
+
+import io.quarkus.runtime.annotations.RegisterForReflection;
+import java.util.Objects;
+
+@RegisterForReflection
+public class Quark {
+
+    private String flavor;
+    private String spin;
+
+    public Quark() {
+    }
+
+    public String getFlavor() {
+        return flavor;
+    }
+
+    public void setFlavor(String flavor) {
+        this.flavor = flavor;
+    }
+
+    public String getSpin() {
+        return spin;
+    }
+
+    public void setSpin(String spin) {
+        this.spin = spin;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (!(obj instanceof Quark)) {
+            return false;
+        }
+
+        Quark other = (Quark) obj;
+
+        return Objects.equals(other.flavor, this.flavor);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(this.flavor);
+    }
+}
+
+
+
+

Then, create a org.acme.sqs.QuarksCannonSyncResource that will provide an API to shoot quarks into the SQS queue using the synchronous client.

+
+
+ + + + + +
+ + +The @RegisterForReflection annotation instructs Quarkus to keep the class and its members during the native compilation. More details about the @RegisterForReflection annotation can be found on the native application tips page. +
+
+
+
+
package org.acme.sqs;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectWriter;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+import org.acme.sqs.model.Quark;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import org.jboss.logging.Logger;
+import software.amazon.awssdk.services.sqs.SqsClient;
+import software.amazon.awssdk.services.sqs.model.SendMessageResponse;
+
+@Path("/sync/cannon")
+@Produces(MediaType.TEXT_PLAIN)
+public class QuarksCannonSyncResource {
+
+    private static final Logger LOGGER = Logger.getLogger(QuarksCannonSyncResource.class);
+
+    @Inject
+    SqsClient sqs;
+
+    @ConfigProperty(name = "queue.url")
+    String queueUrl;
+
+    static ObjectWriter QUARK_WRITER = new ObjectMapper().writerFor(Quark.class);
+
+    @POST
+    @Path("/shoot")
+    @Consumes(MediaType.APPLICATION_JSON)
+    public Response sendMessage(Quark quark) throws Exception {
+        String message = QUARK_WRITER.writeValueAsString(quark);
+        SendMessageResponse response = sqs.sendMessage(m -> m.queueUrl(queueUrl).messageBody(message));
+        LOGGER.infov("Fired Quark[{0}, {1}}]", quark.getFlavor(), quark.getSpin());
+        return Response.ok().entity(response.messageId()).build();
+    }
+}
+
+
+
+

Because of the fact messages sent to the queue must be a String, we’re using Jackson’s ObjectWriter in order to serialize our Quark objects into a String.

+
+
+

Now, create the org.acme.QuarksShieldSyncResource REST resources that provides an endpoint to read the messages from the ColliderQueue queue.

+
+
+
+
package org.acme.sqs;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectReader;
+import java.util.List;
+import java.util.stream.Collectors;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import org.acme.sqs.model.Quark;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import org.jboss.logging.Logger;
+import software.amazon.awssdk.services.sqs.SqsClient;
+import software.amazon.awssdk.services.sqs.model.Message;
+
+@Path("/sync/shield")
+public class QuarksShieldSyncResource {
+
+    private static final Logger LOGGER = Logger.getLogger(QuarksShieldSyncResource.class);
+
+    @Inject
+    SqsClient sqs;
+
+    @ConfigProperty(name = "queue.url")
+    String queueUrl;
+
+    static ObjectReader QUARK_READER = new ObjectMapper().readerFor(Quark.class);
+
+    @GET
+    public List<Quark> receive() {
+        List<Message> messages = sqs.receiveMessage(m -> m.maxNumberOfMessages(10).queueUrl(queueUrl)).messages();
+
+        return messages.stream()
+            .map(Message::body)
+            .map(this::toQuark)
+            .collect(Collectors.toList());
+    }
+
+    private Quark toQuark(String message) {
+        Quark quark = null;
+        try {
+            quark = QUARK_READER.readValue(message);
+        } catch (Exception e) {
+            LOGGER.error("Error decoding message", e);
+            throw new RuntimeException(e);
+        }
+        return quark;
+    }
+}
+
+
+
+

We are using here a Jackson’s ObjectReader in order to deserialize queue messages into our Quark POJOs.

+
+
+
+
+

Configuring SQS clients

+
+
+

Both SQS clients (sync and async) are configurable via the application.properties file that can be provided in the src/main/resources directory. +Additionally, you need to add to the classpath a proper implementation of the sync client. By default the extension uses the URL connection HTTP client, so +you need to add a URL connection client dependency to the pom.xml file:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.sqs.sync-client.type=apache
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

If you’re going to use a local SQS instance, configure it as follows:

+
+
+
+
quarkus.sqs.endpoint-override=http://localhost:4566
+
+quarkus.sqs.aws.region=us-east-1
+quarkus.sqs.aws.credentials.type=static
+quarkus.sqs.aws.credentials.static-provider.access-key-id=test-key
+quarkus.sqs.aws.credentials.static-provider.secret-access-key=test-secret
+
+
+
+
    +
  • +

    quarkus.sqs.aws.region - It’s required by the client, but since you’re using a local SQS instance use us-east-1 as it’s a default region of LocalStack’s SQS.

    +
  • +
  • +

    quarkus.sqs.aws.credentials.type - Set static credentials provider with any values for access-key-id and secret-access-key

    +
  • +
  • +

    quarkus.sqs.endpoint-override - Override the SQS client to use a local instance instead of an AWS service

    +
  • +
+
+
+

If you want to work with an AWS account, you can simply remove or comment out all SQS related properties. By default, the SQS client extension +will use the default credentials provider chain that looks for credentials in this order:

+
+
+
    +
  • +

    Java System Properties - aws.accessKeyId and aws.secretAccessKey

    +
  • +
  • +

    Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

    +
  • +
  • +

    Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

    +
  • +
  • +

    Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

    +
  • +
  • +

    Instance profile credentials delivered through the Amazon EC2 metadata service

    +
  • +
+
+
+

And the region from your AWS CLI profile will be used.

+
+
+
+
+

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can be run with java -Dqueue.url=$QUEUE_URL -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

Create a org.acme.sqs.QuarksCannonAsyncResource REST resource that will be similar to our QuarksCannonSyncResource but using an asynchronous programming model.

+
+
+
+
package org.acme.sqs;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectWriter;
+import io.smallrye.mutiny.Uni;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+import org.acme.sqs.model.Quark;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import org.jboss.logging.Logger;
+import software.amazon.awssdk.services.sqs.SqsAsyncClient;
+import software.amazon.awssdk.services.sqs.model.SendMessageResponse;
+
+@Path("/async/cannon")
+@Produces(MediaType.APPLICATION_JSON)
+@Consumes(MediaType.APPLICATION_JSON)
+public class QuarksCannonAsyncResource {
+
+    private static final Logger LOGGER = Logger.getLogger(QuarksCannonAsyncResource.class);
+
+    @Inject
+    SqsAsyncClient sqs;
+
+    @ConfigProperty(name = "queue.url")
+    String queueUrl;
+
+    static ObjectWriter QUARK_WRITER = new ObjectMapper().writerFor(Quark.class);
+
+    @POST
+    @Path("/shoot")
+    @Consumes(MediaType.APPLICATION_JSON)
+    public Uni<Response> sendMessage(Quark quark) throws Exception {
+        String message = QUARK_WRITER.writeValueAsString(quark);
+        return Uni.createFrom()
+            .completionStage(sqs.sendMessage(m -> m.queueUrl(queueUrl).messageBody(message)))
+            .onItem().invoke(item -> LOGGER.infov("Fired Quark[{0}, {1}}]", quark.getFlavor(), quark.getSpin()))
+            .onItem().transform(SendMessageResponse::messageId)
+            .onItem().transform(id -> Response.ok().entity(id).build());
+    }
+}
+
+
+
+

We create Uni instances from the CompletionStage objects returned by the asynchronous SQS client, and then transform the emitted item.

+
+
+

And the corresponding async receiver of the queue messages org.acme.sqs.QuarksShieldAsyncResource

+
+
+
+
package org.acme.sqs;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectReader;
+import io.smallrye.mutiny.Uni;
+import java.util.List;
+import java.util.stream.Collectors;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import org.acme.sqs.model.Quark;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import org.jboss.logging.Logger;
+import software.amazon.awssdk.services.sqs.SqsAsyncClient;
+import software.amazon.awssdk.services.sqs.model.Message;
+import software.amazon.awssdk.services.sqs.model.ReceiveMessageResponse;
+
+@Path("/async/shield")
+public class QuarksShieldAsyncResource {
+
+    private static final Logger LOGGER = Logger.getLogger(QuarksShieldAsyncResource.class);
+
+    @Inject
+    SqsAsyncClient sqs;
+
+    @ConfigProperty(name = "queue.url")
+    String queueUrl;
+
+    static ObjectReader QUARK_READER = new ObjectMapper().readerFor(Quark.class);
+
+    @GET
+    public Uni<List<Quark>> receive() {
+        return Uni.createFrom()
+            .completionStage(sqs.receiveMessage(m -> m.maxNumberOfMessages(10).queueUrl(queueUrl)))
+            .onItem().transform(ReceiveMessageResponse::messages)
+            .onItem().transform(m -> m.stream().map(Message::body).map(this::toQuark).collect(Collectors.toList()));
+    }
+
+    private Quark toQuark(String message) {
+        Quark quark = null;
+        try {
+            quark = QUARK_READER.readValue(message);
+        } catch (Exception e) {
+            LOGGER.error("Error decoding message", e);
+            throw new RuntimeException(e);
+        }
+        return quark;
+    }
+}
+
+
+
+

And we need to add the Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.sqs.async-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface.

+
+
+

Environment variable: QUARKUS_SQS_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TYPE

+
+
+
+

url, apache

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_SQS_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_SQS_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_SQS_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

The queues to create on startup.

+
+
+

Environment variable: QUARKUS_SQS_DEVSERVICES_QUEUES

+
+
+

list of string

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_SQS_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_SQS_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SQS_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SQS_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_SQS_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.4.x/amazon-ssm.html b/quarkus-amazon-services/2.4.x/amazon-ssm.html new file mode 100644 index 0000000000..358c2dfee8 --- /dev/null +++ b/quarkus-amazon-services/2.4.x/amazon-ssm.html @@ -0,0 +1,3200 @@ + + + + + + Amazon SSM Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon SSM Client

+
+
+
+

AWS Systems Manager (formerly Amazon Simple Systems Manager, or SSM) is a service that you can use to view and control your infrastructure on AWS. +One of the most useful features of SSM for microservices is the Parameter Store, which provides secure, hierarchical storage for configuration data management and secrets management..

+
+
+

You can find more information about SSM at the AWS Systems Manager website.

+
+
+ + + + + +
+ + +The SSM extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client (by default) or the AWS CRT-based HTTP client

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use SSM locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 11+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    An AWS Account to access the SSM service

    +
  • +
  • +

    Docker for your system to run SSM locally for testing purposes

    +
  • +
+
+
+

Provision SSM locally via Dev Services

+
+

The easiest way to start working with SSM is to run a local instance using Dev Services.

+
+
+
+

Provision SSM locally manually

+
+

You can also set up a local version of SSM manually, first start a LocalStack container:

+
+
+
+
docker run --rm --name local-ssm --publish 4566:4583 -e SERVICES=ssm -e START_WEB=0 -d localstack/localstack:1.4.0
+
+
+
+

This starts a SSM instance that is accessible on port 4566.

+
+
+

Create an AWS profile for your local instance using AWS CLI:

+
+
+
+
$ aws configure --profile localstack
+AWS Access Key ID [None]: test-key
+AWS Secret Access Key [None]: test-secret
+Default region name [None]: us-east-1
+Default output format [None]:
+
+
+
+
+
+
+

Solution

+
+
+

The application built here allows to store and retrieve parameters using the SSM parameter store.

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step. +However, you can go right to the completed example.

+
+
+

Clone the Git repository: git clone https://github.com/quarkusio/quarkus-quickstarts.git, or download an archive.

+
+
+

The solution is located in the amazon-ssm-quickstart directory.

+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.2.3.Final:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-ssm-quickstart \
+    -DclassName="org.acme.ssm.QuarkusSsmSyncResource" \
+    -Dpath="/sync" \
+    -Dextensions="resteasy-reactive-jackson,amazon-ssm"
+cd amazon-ssm-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy Reactive/JAX-RS and Amazon SSM Client extensions. +After this, the amazon-ssm extension has been added to your pom.xml as well as the Mutiny support for RESTEasy.

+
+
+
+
+

Creating JSON REST service

+
+
+

In this example, we will create an application that allows us to store and retrieve parameters to and from SSM parameter store using a RESTful API. +The example application will demonstrate the two programming models supported by the extension.

+
+
+

Let’s start with an abstract org.acme.ssm.QuarkusSsmResource class to provide the common functionality we will need for both the synchronous and asynchrounous exposures.

+
+
+
+
package org.acme.ssm;
+
+import static java.lang.Boolean.TRUE;
+import static java.util.stream.Collectors.toMap;
+
+import java.util.Map;
+import java.util.stream.Collector;
+
+import jakarta.annotation.PostConstruct;
+
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+
+import software.amazon.awssdk.services.ssm.model.GetParameterRequest;
+import software.amazon.awssdk.services.ssm.model.GetParametersByPathRequest;
+import software.amazon.awssdk.services.ssm.model.Parameter;
+import software.amazon.awssdk.services.ssm.model.ParameterType;
+import software.amazon.awssdk.services.ssm.model.PutParameterRequest;
+
+public abstract class QuarkusSsmResource {
+
+    @ConfigProperty(name = "parameters.path") (1)
+    String parametersPath;
+
+    @PostConstruct (2)
+    void normalizePath() {
+        if (!parametersPath.startsWith("/")) {
+            parametersPath = "/" + parametersPath;
+        }
+        if (!parametersPath.endsWith("/")) {
+            parametersPath = parametersPath + "/";
+        }
+    }
+
+    protected Collector<Parameter, ?, Map<String, String>> parametersToMap() { (3)
+        return toMap(p -> p.name().substring(parametersPath.length()), Parameter::value);
+    }
+
+    protected GetParametersByPathRequest generateGetParametersByPathRequest() {
+        return GetParametersByPathRequest.builder() (4)
+                .path(parametersPath)
+                .withDecryption(TRUE)
+                .build();
+    }
+
+    protected PutParameterRequest generatePutParameterRequest(String name, String value, boolean secure) {
+        return PutParameterRequest.builder() (5)
+                .name(parametersPath + name)
+                .value(value)
+                .type(secure ? ParameterType.SECURE_STRING : ParameterType.STRING)
+                .overwrite(TRUE)
+                .build();
+    }
+
+    protected GetParameterRequest generateGetParameterRequest(String name) {
+        return GetParameterRequest.builder() (6)
+                .name(parametersPath + name)
+                .withDecryption(TRUE)
+                .build();
+    }
+}
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
1Inject a configured path under which to store parameters
2Ensure the path starts and ends with /
3Collect parameters into a map of simple names and values
4Generate a request for all parameters under the configured path
5Generate a request to set a specific parameter
6Generate a request to get a specific parameter value
+
+
+

Now, we can extend the class and create the synchronous implementation in the org.acme.ssm.QuarkusSsmSyncResource class.

+
+
+
+
package org.acme.ssm;
+
+import java.util.Map;
+
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.DefaultValue;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.PUT;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+
+import org.jboss.resteasy.reactive.RestQuery;
+
+import software.amazon.awssdk.services.ssm.SsmClient;
+
+@Path("/sync")
+public class QuarkusSsmSyncResource extends QuarkusSsmResource {
+
+    @Inject (1)
+    SsmClient ssm;
+
+    @GET
+    @Produces(MediaType.APPLICATION_JSON)
+    public Map<String, String> getParameters() {
+        return ssm.getParametersByPath(generateGetParametersByPathRequest())
+                .parameters().stream().collect(parametersToMap());
+    }
+
+    @PUT
+    @Path("/{name}")
+    @Consumes(MediaType.TEXT_PLAIN)
+    public void setParameter(String name,
+            @RestQuery("secure") @DefaultValue("false") boolean secure,
+            String value) {
+
+        ssm.putParameter(generatePutParameterRequest(name, value, secure));
+    }
+
+    @GET
+    @Path("/{name}")
+    @Produces(MediaType.TEXT_PLAIN)
+    public String getParameter(String name) {
+        return ssm.getParameter(generateGetParameterRequest(name))
+                .parameter().value();
+    }
+}
+
+
+
+ + + + + +
1Inject the client provided by the amazon-ssm extension
+
+
+

Using the Amazon SSM SDK, we can easily store and retrieve arbitrary name/value pairs, and we can optionally store the values in a secure manner.

+
+
+
+
+

Configuring SSM clients

+
+
+

Both SSM clients (sync and async) are configurable via the application.properties file that can be provided in the src/main/resources directory. +Additionally, you need to add to the classpath a proper implementation of the sync client. By default the extension uses the URL connection HTTP client, so +you need to add a URL connection client dependency to the pom.xml file:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.ssm.sync-client.type=apache
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

If you’re going to use a local SSM instance, configure it as follows:

+
+
+
+
quarkus.ssm.endpoint-override=http://localhost:4566 (1)
+
+quarkus.ssm.aws.region=us-east-1 (2)
+quarkus.ssm.aws.credentials.type=static (3)
+quarkus.ssm.aws.credentials.static-provider.access-key-id=test-key
+quarkus.ssm.aws.credentials.static-provider.secret-access-key=test-secret
+
+
+
+ + + + + + + + + + + + + +
1Override the SSM client to use LocalStack instead of the actual AWS service
2Localstack defaults to us-east-1
3The static credentials provider lets you set the access-key-id and secret-access-key directly
+
+
+

If you want to work with an AWS account, you can simply remove or comment out all Amazon SSM related properties. By default, the SSM client extension will use the default credentials provider chain that looks for credentials in this order:

+
+
+
    +
  • +

    Java System Properties - aws.accessKeyId and aws.secretAccessKey

    +
  • +
  • +

    Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

    +
  • +
  • +

    Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

    +
  • +
  • +

    Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

    +
  • +
  • +

    Instance profile credentials delivered through the Amazon EC2 metadata service

    +
  • +
+
+
+

And the region from your AWS CLI profile will be used.

+
+
+
+
+

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can then be run with java -Dparameters.path=/quarkus/is/awesome/ -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

Create a org.acme.ssm.QuarkusSsmAsyncResource REST resource that will be similar to our QuarkusSsmSyncResource but using an asynchronous programming model.

+
+
+
+
package org.acme.ssm;
+
+import java.util.Map;
+
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.DefaultValue;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.PUT;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+
+import io.smallrye.mutiny.Uni;
+import org.jboss.resteasy.reactive.RestQuery;
+import software.amazon.awssdk.services.ssm.SsmAsyncClient;
+
+@Path("/async")
+public class QuarkusSsmAsyncResource extends QuarkusSsmResource {
+
+    @Inject
+    SsmAsyncClient ssm;
+
+    @GET
+    @Produces(MediaType.APPLICATION_JSON)
+    public Uni<Map<String, String>> getParameters() {
+        return Uni.createFrom().completionStage(ssm.getParametersByPath(generateGetParametersByPathRequest()))
+                .onItem().transform(r -> r.parameters().stream().collect(parametersToMap()));
+    }
+
+    @PUT
+    @Path("/{name}")
+    @Consumes(MediaType.TEXT_PLAIN)
+    public Uni<Void> setParameter(String name,
+            @RestQuery("secure") @DefaultValue("false") boolean secure,
+            String value) {
+
+        return Uni.createFrom().completionStage(ssm.putParameter(generatePutParameterRequest(name, value, secure)))
+                .onItem().transform(r -> null);
+    }
+
+    @GET
+    @Path("/{name}")
+    @Produces(MediaType.TEXT_PLAIN)
+    public Uni<String> getParameter(String name) {
+        return Uni.createFrom().completionStage(ssm.getParameter(generateGetParameterRequest(name)))
+                .onItem().transform(r -> r.parameter().value());
+    }
+}
+
+
+
+

Note that the SsmAsyncClient behaves just like the SsmClient, but returns CompletionStage objects which we use to create Uni instances, and then transform the emitted item.

+
+
+

To enable the asynchronous client, we also need to add the Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.ssm.async-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface.

+
+
+

Environment variable: QUARKUS_SSM_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TYPE

+
+
+
+

url, apache

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_SSM_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_SSM_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_SSM_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_SSM_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_SSM_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SSM_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SSM_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_SSM_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.4.x/amazon-sts.html b/quarkus-amazon-services/2.4.x/amazon-sts.html new file mode 100644 index 0000000000..f221854777 --- /dev/null +++ b/quarkus-amazon-services/2.4.x/amazon-sts.html @@ -0,0 +1,2952 @@ + + + + + + Amazon STS Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon STS Client

+
+
+
+

AWS Security Token Service (AWS STS) is a web service that enables you to request temporary, limited-privilege credentials for users.

+
+
+

You can find more information about STS at AWS Security Token Service API Reference.

+
+
+ + + + + +
+ + +The STS extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client.

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use STS locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 11+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    An AWS Account to access the STS service

    +
  • +
  • +

    Docker for your system to run STS locally for testing purposes

    +
  • +
+
+
+

Provision STS locally via Dev Services

+
+

The easiest way to start working with STS is to run a local instance using Dev Services.

+
+
+
+

Provision STS locally manually

+
+

You can also set up a local version of STS manually, first start a LocalStack container:

+
+
+
+
docker run --rm --name local-sts --publish 4592:4592 -e SERVICES=sts -e START_WEB=0 -d localstack/localstack:1.0.3
+
+
+
+

This starts a STS instance that is accessible on port 4592.

+
+
+

Create an AWS profile for your local instance using AWS CLI:

+
+
+
+
$ aws configure --profile localstack
+AWS Access Key ID [None]: test-key
+AWS Secret Access Key [None]: test-secret
+Default region name [None]: us-east-1
+Default output format [None]:
+
+
+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.2.3.Final:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-sts-quickstart \
+    -DclassName="org.acme.sts.QuarkusStsSyncResource" \
+    -Dpath="/sync" \
+    -Dextensions="resteasy-reactive-jackson,amazon-sts"
+cd amazon-sts-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy Reactive/JAX-RS and Amazon STS Client extensions. +After this, the amazon-sts extension has been added to your pom.xml as well as the Mutiny support for RESTEasy.

+
+
+
+
+

Configuring STS clients

+
+
+

Both STS clients (sync and async) are configurable via the application.properties file that can be provided in the src/main/resources directory. +Additionally, you need to add to the classpath a proper implementation of the sync client. By default the extension uses the URL connection HTTP client, so +you need to add a URL connection client dependency to the pom.xml file:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.sts.sync-client.type=apache
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

If you’re going to use a local STS instance, configure it as follows:

+
+
+
+
quarkus.sts.endpoint-override=http://localhost:4592 (1)
+
+quarkus.sts.aws.region=us-east-1 (2)
+quarkus.sts.aws.credentials.type=static (3)
+quarkus.sts.aws.credentials.static-provider.access-key-id=test-key
+quarkus.sts.aws.credentials.static-provider.secret-access-key=test-secret
+
+
+
+ + + + + + + + + + + + + +
1Override the STS client to use LocalStack instead of the actual AWS service
2Localstack defaults to us-east-1
3The static credentials provider lets you set the access-key-id and secret-access-key directly
+
+
+

If you want to work with an AWS account, you can simply remove or comment out all Amazon STS related properties. By default, the ST client extension will use the default credentials provider chain that looks for credentials in this order:

+
+
+
    +
  • +

    Java System Properties - aws.accessKeyId and aws.secretAccessKey

    +
  • +
  • +

    Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

    +
  • +
  • +

    Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

    +
  • +
  • +

    Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

    +
  • +
  • +

    Instance profile credentials delivered through the Amazon EC2 metadata service

    +
  • +
+
+
+

And the region from your AWS CLI profile will be used.

+
+
+
+
+

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can then be run with java -Dparameters.path=/quarkus/is/awesome/ -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

We need to add the Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.sts.async-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface.

+
+
+

Environment variable: QUARKUS_STS_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TYPE

+
+
+
+

url, apache

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_STS_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_STS_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_STS_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_STS_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_STS_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_STS_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_STS_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_STS_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.4.x/dev-services.html b/quarkus-amazon-services/2.4.x/dev-services.html new file mode 100644 index 0000000000..4dba8c6bfe --- /dev/null +++ b/quarkus-amazon-services/2.4.x/dev-services.html @@ -0,0 +1,1313 @@ + + + + + + Dev services for Amazon Services :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Dev services for Amazon Services

+
+
+
+

Quarkus Amazon Services automatically starts a LocalStack container in dev mode and when running tests. So, you don’t have to start one manually. The extension client is configured automatically.

+
+
+
+
+

Enabling / Disabling Dev Services for Amazon Services

+
+
+

Dev Services for Amazon Services is automatically enabled for each extensions added to pom.xml except in the following situations:

+
+
+
    +
  • +

    quarkus.devservices.enabled is set to false

    +
  • +
  • +

    devservices.enabled is set to false per extension (eg. quarkus.s3.devservices.enabled=false)

    +
  • +
  • +

    the endpoint-override is configured (eg. quarkus.s3.endpoint-override=http://localhost:4566)

    +
  • +
  • +

    Your environment does not support Docker

    +
  • +
+
+
+
+
+

Shared services

+
+
+

By default, Dev Services for Amazon Services will start one LocalStack container with only the needed services.

+
+
+

If you need to share a particular service between applications, Dev Services for Amazon Services implements a service discovery mechanism for your multiple Quarkus applications running in dev mode to share a single container. To ease sharing, each service will be started in its own container.

+
+
+

Dev Services for Amazon Services starts the container with the quarkus-dev-service-localstack label and service name as the value, which is used to identify the container. +If you need multiple (shared) container, you can configure the devservices.service-name attribute for a given extension (eg. quarkus.s3.devservices.services-name) and indicate the container name. It looks for a container with the same value, or starts a new one if none can be found. The default service name is localstack.

+
+
+

Sharing is disabled by default in dev mode, and is always disabled in test mode. You can enable the sharing with devservices.shared=true for a given extension (e.g. quarkus.s3.devservices.shared=true). All other non-shared services will be grouped in another container.

+
+
+
+
+

Configuring the image

+
+
+

Dev Services for Amazon Services uses localstack/localstack image. You can configure the image and version using the quarkus.aws.devservices.localstack.image-name property:

+
+
+
+
quarkus.aws.devservices.localstack.image-name=localstack/localstack:1.4.0
+
+
+
+
+
+

Specific configuration

+
+
+

Dev Services for Amazon Services can support specific properties sent to the container. It can be globally applied to all containers or be specified per service as follows:

+
+
+
+
quarkus.aws.devservices.localstack.container-properties.START_WEB=0
+quarkus.dynamodb.devservices.container-properties.DYNAMODB_HEAP_SIZE=1G
+
+
+
+

Refer to the LocalStack documentation for more configuration : https://docs.localstack.cloud/localstack/configuration/#local-aws-services. Note that not all environment variables are supported and some may affect Dev Services for Amazon Services.

+
+
+
+
+

Additional services

+
+
+

To start additional services for which a Quarkus extension does not exist or is not imported in the project, use the additional-services property:

+
+
+
+
quarkus.aws.devservices.localstack.additional-services."kinesis".enabled=true
+quarkus.aws.devservices.localstack.additional-services."redshift".enabled=true
+
+
+
+

The key is the name of the service to enable and must be a valid LocalStack service name.

+
+
+
+
+

Additional setup

+
+
+

Some extensions support additional configuration to be applied at startup. Refer to the extension documentation.

+
+
+
+
+

Cognito

+
+
+

The Cognito extension is not using LocalStack but Moto.

+
+
+

Dev Services for Amazon Services uses the latest motoserver/moto image. You can configure the image and version using the quarkus.aws.devservices.moto.image-name property:

+
+
+
+
quarkus.aws.devservices.moto.image-name=motoserver/moto:3.0.2
+
+
+
+

Dev Services for Amazon Services can support specific properties sent to the container as follows:

+
+
+
+
quarkus.aws.devservices.moto.container-properties.MOTO_COGNITO_IDP_USER_POOL_ID_STRATEGY=HASH
+
+
+
+
+
+

Global DevServices Configuration Reference

+
+
+

LocalStack Configuration

+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The LocalStack container image to use.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_IMAGE_NAME

+
+
+

string

localstack/localstack:1.4.0

+
+
+
+

Path to init scripts folder executed during localstack startup.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_INIT_SCRIPTS_FOLDER

+
+
+

string

+
+
+
+

Specific container log message to be waiting for localstack init scripts completion.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_INIT_COMPLETION_MSG

+
+
+

string

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_ADDITIONAL_SERVICES__ADDITIONAL_SERVICES__ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_ADDITIONAL_SERVICES__ADDITIONAL_SERVICES__SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_ADDITIONAL_SERVICES__ADDITIONAL_SERVICES__SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_ADDITIONAL_SERVICES__ADDITIONAL_SERVICES__CONTAINER_PROPERTIES

+
+
+

Map<String,String>

+
+
+

Moto Configuration

+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The Moto container image to use.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_MOTO_IMAGE_NAME

+
+
+

string

motoserver/moto

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_MOTO_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.4.x/includes/attributes.html b/quarkus-amazon-services/2.4.x/includes/attributes.html new file mode 100644 index 0000000000..ffb0bd9e9b --- /dev/null +++ b/quarkus-amazon-services/2.4.x/includes/attributes.html @@ -0,0 +1,957 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-cognitouserpools.html b/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-cognitouserpools.html new file mode 100644 index 0000000000..9a358a822d --- /dev/null +++ b/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-cognitouserpools.html @@ -0,0 +1,2678 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TYPE

+
+
+
+

url, apache

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-dynamodb-enhanced.html b/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-dynamodb-enhanced.html new file mode 100644 index 0000000000..f4d90f940e --- /dev/null +++ b/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-dynamodb-enhanced.html @@ -0,0 +1,1013 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of extensions to load with the enhanced client.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClientExtension interface.

+
+
+

Environment variable: QUARKUS_DYNAMODBENHANCED_CLIENT_EXTENSIONS

+
+
+

list of string

+
+
+
+

Whether a TableSchema should be created at start up for DynamoDb mappable entities annotated with DynamoDbBean or DynamoDbImmutable

+
+
+

TableSchema are cached and can be retrieved later with TableSchema.fromClass()

+
+
+

Environment variable: QUARKUS_DYNAMODBENHANCED_CREATE_TABLE_SCHEMAS

+
+
+

boolean

true

+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-dynamodb.html b/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-dynamodb.html new file mode 100644 index 0000000000..90a2553a09 --- /dev/null +++ b/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-dynamodb.html @@ -0,0 +1,2695 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface.

+
+
+

Environment variable: QUARKUS_DYNAMODB_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TYPE

+
+
+
+

url, apache

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_DYNAMODB_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_DYNAMODB_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_DYNAMODB_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Enable DynamoDB service endpoint discovery.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ENABLE_ENDPOINT_DISCOVERY

+
+
+

boolean

false

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_DYNAMODB_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_DYNAMODB_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_DYNAMODB_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-iam.html b/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-iam.html new file mode 100644 index 0000000000..f21fc434dd --- /dev/null +++ b/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-iam.html @@ -0,0 +1,2678 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface.

+
+
+

Environment variable: QUARKUS_IAM_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TYPE

+
+
+
+

url, apache

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_IAM_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_IAM_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_IAM_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_IAM_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_IAM_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_IAM_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_IAM_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_IAM_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-kms.html b/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-kms.html new file mode 100644 index 0000000000..5df2c12d17 --- /dev/null +++ b/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-kms.html @@ -0,0 +1,2678 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface.

+
+
+

Environment variable: QUARKUS_KMS_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TYPE

+
+
+
+

url, apache

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_KMS_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_KMS_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_KMS_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_KMS_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_KMS_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_KMS_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_KMS_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_KMS_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-s3.html b/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-s3.html new file mode 100644 index 0000000000..4cd13ff122 --- /dev/null +++ b/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-s3.html @@ -0,0 +1,2820 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface.

+
+
+

Environment variable: QUARKUS_S3_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TYPE

+
+
+
+

url, apache

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_S3_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_S3_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_S3_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

The buckets to create on startup.

+
+
+

Environment variable: QUARKUS_S3_DEVSERVICES_BUCKETS

+
+
+

list of string

default

+
+
+
+

Enable using the accelerate endpoint when accessing S3.

+
+
+

Accelerate endpoints allow faster transfer of objects by using Amazon CloudFront’s globally distributed edge locations.

+
+
+

Environment variable: QUARKUS_S3_ACCELERATE_MODE

+
+
+

boolean

false

+
+
+
+

Enable doing a validation of the checksum of an object stored in S3.

+
+
+

Environment variable: QUARKUS_S3_CHECKSUM_VALIDATION

+
+
+

boolean

true

+
+
+
+

Enable using chunked encoding when signing the request payload for software.amazon.awssdk.services.s3.model.PutObjectRequest and software.amazon.awssdk.services.s3.model.UploadPartRequest.

+
+
+

Environment variable: QUARKUS_S3_CHUNKED_ENCODING

+
+
+

boolean

true

+
+
+
+

Enable dualstack mode for accessing S3. If you want to use IPv6 when accessing S3, dualstack must be enabled.

+
+
+

Environment variable: QUARKUS_S3_DUALSTACK

+
+
+

boolean

false

+
+
+
+

Enable using path style access for accessing S3 objects instead of DNS style access. DNS style access is preferred as it will result in better load balancing when accessing S3.

+
+
+

Environment variable: QUARKUS_S3_PATH_STYLE_ACCESS

+
+
+

boolean

false

+
+
+
+

Enable cross-region call to the region specified in the S3 resource ARN different than the region the client was configured with. If this flag is not set to 'true', the cross-region call will throw an exception.

+
+
+

Environment variable: QUARKUS_S3_USE_ARN_REGION_ENABLED

+
+
+

boolean

false

+
+
+
+

Define the profile name that should be consulted to determine the default value of use-arn-region-enabled. This is not used, if the use-arn-region-enabled is configured to 'true'.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_S3_PROFILE_NAME

+
+
+

string

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_S3_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_S3_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_S3_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_S3_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_S3_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-secretsmanager.html b/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-secretsmanager.html new file mode 100644 index 0000000000..4a67e40344 --- /dev/null +++ b/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-secretsmanager.html @@ -0,0 +1,2678 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TYPE

+
+
+
+

url, apache

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-ses.html b/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-ses.html new file mode 100644 index 0000000000..4e23fc9993 --- /dev/null +++ b/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-ses.html @@ -0,0 +1,2678 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface.

+
+
+

Environment variable: QUARKUS_SES_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TYPE

+
+
+
+

url, apache

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_SES_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_SES_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_SES_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_SES_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_SES_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SES_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SES_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_SES_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-sns.html b/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-sns.html new file mode 100644 index 0000000000..b92676e09b --- /dev/null +++ b/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-sns.html @@ -0,0 +1,2678 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface.

+
+
+

Environment variable: QUARKUS_SNS_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TYPE

+
+
+
+

url, apache

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_SNS_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_SNS_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_SNS_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_SNS_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_SNS_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SNS_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SNS_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_SNS_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-sqs.html b/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-sqs.html new file mode 100644 index 0000000000..d79066cbbf --- /dev/null +++ b/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-sqs.html @@ -0,0 +1,2695 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface.

+
+
+

Environment variable: QUARKUS_SQS_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TYPE

+
+
+
+

url, apache

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_SQS_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_SQS_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_SQS_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

The queues to create on startup.

+
+
+

Environment variable: QUARKUS_SQS_DEVSERVICES_QUEUES

+
+
+

list of string

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_SQS_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_SQS_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SQS_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SQS_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_SQS_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-ssm.html b/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-ssm.html new file mode 100644 index 0000000000..d32a0af18e --- /dev/null +++ b/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-ssm.html @@ -0,0 +1,2678 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface.

+
+
+

Environment variable: QUARKUS_SSM_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TYPE

+
+
+
+

url, apache

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_SSM_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_SSM_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_SSM_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_SSM_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_SSM_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SSM_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SSM_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_SSM_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-sts.html b/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-sts.html new file mode 100644 index 0000000000..6c0d677dfc --- /dev/null +++ b/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-sts.html @@ -0,0 +1,2678 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface.

+
+
+

Environment variable: QUARKUS_STS_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TYPE

+
+
+
+

url, apache

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_STS_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_STS_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_STS_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_STS_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_STS_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_STS_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_STS_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_STS_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.4.x/includes/quarkus-aws-devservices-localstack-local-stack-dev-services-build-time-config.html b/quarkus-amazon-services/2.4.x/includes/quarkus-aws-devservices-localstack-local-stack-dev-services-build-time-config.html new file mode 100644 index 0000000000..25a985229f --- /dev/null +++ b/quarkus-amazon-services/2.4.x/includes/quarkus-aws-devservices-localstack-local-stack-dev-services-build-time-config.html @@ -0,0 +1,1118 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The LocalStack container image to use.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_IMAGE_NAME

+
+
+

string

localstack/localstack:1.4.0

+
+
+
+

Path to init scripts folder executed during localstack startup.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_INIT_SCRIPTS_FOLDER

+
+
+

string

+
+
+
+

Specific container log message to be waiting for localstack init scripts completion.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_INIT_COMPLETION_MSG

+
+
+

string

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_ADDITIONAL_SERVICES__ADDITIONAL_SERVICES__ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_ADDITIONAL_SERVICES__ADDITIONAL_SERVICES__SHARED

+
+
+

boolean

false

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_ADDITIONAL_SERVICES__ADDITIONAL_SERVICES__SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_ADDITIONAL_SERVICES__ADDITIONAL_SERVICES__CONTAINER_PROPERTIES

+
+
+

Map<String,String>

+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.4.x/includes/quarkus-aws-devservices-moto-moto-dev-services-build-time-config.html b/quarkus-amazon-services/2.4.x/includes/quarkus-aws-devservices-moto-moto-dev-services-build-time-config.html new file mode 100644 index 0000000000..5014c9d098 --- /dev/null +++ b/quarkus-amazon-services/2.4.x/includes/quarkus-aws-devservices-moto-moto-dev-services-build-time-config.html @@ -0,0 +1,1007 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The Moto container image to use.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_MOTO_IMAGE_NAME

+
+
+

string

motoserver/moto

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_MOTO_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/2.4.x/index.html b/quarkus-amazon-services/2.4.x/index.html new file mode 100644 index 0000000000..1e1510c19c --- /dev/null +++ b/quarkus-amazon-services/2.4.x/index.html @@ -0,0 +1,967 @@ + + + + + + Quarkus Amazon Services :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Amazon Services

+
+

This set of extensions expose AWS services through configuration properties and CDI injection.

+
+
+

You can find the full set of supported services and documentation for each of them in the navigation on the left.

+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/dev/amazon-cognitouserpools.html b/quarkus-amazon-services/dev/amazon-cognitouserpools.html new file mode 100644 index 0000000000..8da26832ec --- /dev/null +++ b/quarkus-amazon-services/dev/amazon-cognitouserpools.html @@ -0,0 +1,3319 @@ + + + + + + Amazon Cognito User Pools Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon Cognito User Pools Client

+
+
+
+

Service client for accessing Amazon Cognito user pools (Identity Provider).

+
+
+

Using the Amazon Cognito user pools API, you can create a user pool to manage directories and users. +You can authenticate a user to obtain tokens related to user identity and access policies.

+
+
+

For more information, see the Amazon Cognito user pools (AWS Java SDK 2.x docs).

+
+
+ + + + + +
+ + +The Cognito User Pools extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client (by default) or the AWS CRT-based HTTP client

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use Cognito User Pool locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 17+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    One of:

    +
    +
      +
    • +

      An AWS Account to access the Cognito service

      +
    • +
    • +

      Or Docker for your system to run Cognito locally for testing purposes

      +
    • +
    +
    +
  • +
+
+
+

Provision Cognito locally via Dev Services

+
+

The easiest way to start working with Cognito is to run a local instance using Dev Services.

+
+
+
+

Provision Cognito locally manually

+
+

You can also set up a local version of Cognito manually, first start a local instance as a container:

+
+
+
+
docker run --rm --name moto -p 5000:5000 -d motoserver/moto:3.0.2
+
+
+
+

This starts a Cognito mock instance that is accessible on port 5000.

+
+
+

Create an AWS profile for your local instance using AWS CLI:

+
+
+
+
$ aws configure --profile moto
+AWS Access Key ID [None]: test-key
+AWS Secret Access Key [None]: test-secret
+Default region name [None]: us-east-1
+Default output format [None]: test
+
+
+
+
+

Create a Cognito User Pool

+
+

Create a Cognito user pool using AWS CLI.

+
+
+
+
aws --profile moto --endpoint-url=http://localhost:5000 cognito-idp create-user-pool --pool-name quarkus-users-dev
+
+
+
+

Or, if you want to use your Cognito user pool on your AWS account create a user pool using your default profile

+
+
+
+
aws cognito-user-pools cognito-idp --pool-name quarkus-users-dev
+
+
+
+
+
+
+

Solution

+
+
+

The application built here shows the count of Cognito User Pools in the current region.

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step.

+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.8.0:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-cognito-user-pools-quickstart \
+    -DclassName="org.acme.cognitouserpools.CognitoExampleResource" \
+    -Dpath="/cognito-example" \
+    -Dextensions="resteasy,resteasy-jackson,amazon-cognito-user-pools,resteasy-mutiny"
+cd amazon-cognito-user-pools-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy/JAX-RS, Mutiny and Amazon Cognito User Pool extensions. +After this, the amazon-cognito-user-pools extension has been added to your pom.xml as well as the Mutiny support for RESTEasy.

+
+
+
+
+

Creating JSON REST service

+
+
+

Edit a org.acme.cognitouserpools.CognitoExampleResource that will provide an API return count of Cognito User Pools using the synchronous client.

+
+
+
+
package org.acme.cognitouserpools;
+
+import jakarta.inject.Inject;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+
+import software.amazon.awssdk.services.cognitoidentityprovider.CognitoIdentityProviderClient;
+import software.amazon.awssdk.services.cognitoidentityprovider.model.ListUserPoolsRequest;
+import software.amazon.awssdk.services.cognitoidentityprovider.model.ListUserPoolsResponse;
+
+@Path("/cognito-example")
+public class CognitoExampleResource {
+    @Inject
+    CognitoIdentityProviderClient cognitoClient;
+
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public String hello() {
+        ListUserPoolsRequest request = ListUserPoolsRequest.builder().build();
+        ListUserPoolsResponse response = cognitoClient.listUserPools(request);
+        return String.format("You have %d user pools", response.userPools().size());
+    }
+}
+
+
+
+

And update test class:

+
+
+
+
package org.acme.cognitouserpools;
+
+import io.quarkus.test.junit.QuarkusTest;
+import org.junit.jupiter.api.Test;
+
+import static io.restassured.RestAssured.given;
+import static org.hamcrest.CoreMatchers.is;
+
+@QuarkusTest
+public class CognitoExampleResourceTest {
+
+    @Test
+    public void testHelloEndpoint() {
+        given()
+          .when().get("/cognito-example")
+          .then()
+             .statusCode(200)
+             .body(is("You have 1 user pools"));
+    }
+
+}
+
+
+
+
+
+

Configuring Cognito User Pools clients

+
+
+

Both Cognito clients (sync and async) are configurable via the application.properties file that +can be provided in the src/main/resources directory.

+
+
+

Additionally, you need to add to the classpath a proper implementation of the sync client. +By default the extension uses the URL connection HTTP client, so you need to add a URL connection +client dependency to the pom.xml file:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.cognito-user-pools.sync-client.type=apache
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.cognito-user-pools.sync-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+

If you’re going to use a local Cognito mock instance, configure it as follows:

+
+
+
+
quarkus.cognito-user-pools.endpoint-override=http://localhost:5000
+
+quarkus.cognito-user-pools.aws.region=eu-west-1
+quarkus.cognito-user-pools.aws.credentials.type=static
+quarkus.cognito-user-pools.aws.credentials.static-provider.access-key-id=test-key
+quarkus.cognito-user-pools.aws.credentials.static-provider.secret-access-key=test-secret
+
+
+
+
    +
  • +

    quarkus.cognito-user-pools.aws.region - It’s required by the client, but since you’re using a local Cognito mock instance use us-east-1 as it’s a default region of moto.

    +
  • +
  • +

    quarkus.cognito-user-pools.aws.credentials - Set static credentials provider with any values for access-key-id and secret-access-key

    +
  • +
  • +

    quarkus.cognito-user-pools.endpoint-override - Override the Cognito User Pools client to use a local instance instead of an AWS service

    +
  • +
+
+
+

If you want to work with an AWS account, you can simply remove or comment out all Cognito User Pools +related properties. By default, the Cognito User Pools client extension will use the default +credentials provider chain that looks for credentials in this order:

+
+
+
    +
  • +

    Java System Properties - aws.accessKeyId and aws.secretAccessKey

    +
  • +
  • +

    Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

    +
  • +
  • +

    Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

    +
  • +
  • +

    Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

    +
  • +
  • +

    Instance profile credentials delivered through the Amazon EC2 metadata service

    +
  • +
+
+
+

And the region from your AWS CLI profile will be used.

+
+
+
+
+

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can be run with java -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

Create a org.acme.cognitouserpools.CognitoAsyncExampleResource REST resource that will be similar to our +CognitoExampleResource but using an asynchronous programming model.

+
+
+
+
package org.acme.cognitouserpools;
+
+import jakarta.inject.Inject;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+
+import io.smallrye.mutiny.Uni;
+import software.amazon.awssdk.services.cognitoidentityprovider.CognitoIdentityProviderAsyncClient;
+import software.amazon.awssdk.services.cognitoidentityprovider.model.ListUserPoolsRequest;
+
+@Path("/cognito-async-example")
+public class CognitoAsyncExampleResource {
+    @Inject
+    CognitoIdentityProviderAsyncClient cognitoAsyncClient;
+
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public Uni<String> hello() {
+        ListUserPoolsRequest request = ListUserPoolsRequest.builder().build();
+        return Uni
+            .createFrom()
+            .completionStage(cognitoAsyncClient.listUserPools(request))
+            .map(response -> {
+                return String.format("You have %d user pools", response.userPools().size());
+            });
+    }
+}
+
+
+
+

We create Uni instances from the CompletionStage objects returned by the asynchronous Cognito +Identity Provider client, and then transform the emitted item.

+
+
+

And we need to add the Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.cognito-user-pools.async-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/dev/amazon-credentials.html b/quarkus-amazon-services/dev/amazon-credentials.html new file mode 100644 index 0000000000..d0136ef6b3 --- /dev/null +++ b/quarkus-amazon-services/dev/amazon-credentials.html @@ -0,0 +1,987 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+
    +
  • +

    Java System Properties - aws.accessKeyId and aws.secretAccessKey

    +
  • +
  • +

    Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

    +
  • +
  • +

    Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

    +
  • +
  • +

    Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

    +
  • +
  • +

    Instance profile credentials delivered through the Amazon EC2 metadata service

    +
  • +
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/dev/amazon-dynamodb.html b/quarkus-amazon-services/dev/amazon-dynamodb.html new file mode 100644 index 0000000000..49480d9e35 --- /dev/null +++ b/quarkus-amazon-services/dev/amazon-dynamodb.html @@ -0,0 +1,3879 @@ + + + + + + Amazon DynamoDB Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon DynamoDB Client

+
+
+
+

DynamoDB is a scalable AWS managed NoSQL database. +It supports both key-value and document data models, that enables to have a flexible schema for your data. +This extension provides functionality that allows the client to communicate with the service when running in Quarkus. +You can find more information about DynamoDB at the Amazon DynamoDB website.

+
+
+ + + + + +
+ + +The DynamoDB extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +Keep in mind it’s actively developed and does not support yet all the features available in SDK 1.x such as Document APIs +
+
+
+

The Quarkus extension supports the traditional DynamoDB client as well as the enhanced client.

+
+
+

It supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client (by default) or the AWS CRT-based HTTP client

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use the DynamoDB locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 17+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    An AWS Account to access the DynamoDB service

    +
  • +
  • +

    Optionally, Docker for your system to run DynamoDB locally for testing purposes

    +
  • +
+
+
+

Provision DynamoDB locally via Dev Services

+
+

The easiest way to start working with DynamoDB is to run a local instance using Dev Services.

+
+
+
+

Provision DynamoDB locally manually

+
+

You can also set up a local version of DynamoDB manually, first start a local instance as a container:

+
+
+
+
docker run --publish 4566:8000 amazon/dynamodb-local:1.19.0 -jar DynamoDBLocal.jar -inMemory -sharedDb
+
+
+
+

This starts a DynamoDB instance that is accessible on port 4566. +You can check if it’s working with aws dynamodb list-tables --endpoint-url http://localhost:4566.

+
+
+
+
{
+    "TableNames": []
+}
+
+
+
+

You should see the output above in your terminal. That’s it, DynamoDB runs locally.

+
+
+

Have a look at the Setting Up DynamoDB Local guide for other options to run DynamoDB.

+
+
+
+

Set up Dynamodb on AWS

+
+

Before you can use the AWS SDKs with DynamoDB, you must get an AWS access key ID and secret access key. +For more information, see Setting Up DynamoDB (Web Service).

+
+
+

We recommend to use the AWS CLI to provision the table:

+
+
+
+

Create the QuarkusFruits Table

+
+
+
aws dynamodb create-table --table-name QuarkusFruits \
+                          --attribute-definitions AttributeName=fruitName,AttributeType=S \
+                          --key-schema AttributeName=fruitName,KeyType=HASH \
+                          --provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1
+
+
+
+
+
+
+

Solution

+
+
+

The application built here allows to manage elements (fruits) stored in Amazon DynamoDB.

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step. +However, you can go right to the completed example.

+
+
+

Clone the Git repository: git clone https://github.com/quarkusio/quarkus-quickstarts.git, or download an archive.

+
+
+

The solution is located in the amazon-dynamodb-quickstart directory.

+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.8.0:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-dynamodb-quickstart \
+    -DclassName="org.acme.dynamodb.FruitResource" \
+    -Dpath="/fruits" \
+    -Dextensions="resteasy-reactive-jackson,amazon-dynamodb"
+cd amazon-dynamodb-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy Reactive/JAX-RS and DynamoDB Client extensions. +After this, the amazon-dynamodb extension has been added to your pom.xml as well as the Mutiny support for RESTEasy.

+
+
+
+
+

Creating JSON REST service

+
+
+

In this example, we will create an application to manage a list of fruits. The example application will demonstrate the two programming models supported by the extension.

+
+
+

First, let’s create the Fruit bean as follows:

+
+
+
+
package org.acme.dynamodb;
+
+import java.util.Map;
+import java.util.Objects;
+
+import io.quarkus.runtime.annotations.RegisterForReflection;
+import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
+
+@RegisterForReflection
+public class Fruit {
+
+    private String name;
+    private String description;
+
+    public Fruit() {
+    }
+
+    public static Fruit from(Map<String, AttributeValue> item) {
+        Fruit fruit = new Fruit();
+        if (item != null && !item.isEmpty()) {
+            fruit.setName(item.get(AbstractService.FRUIT_NAME_COL).s());
+            fruit.setDescription(item.get(AbstractService.FRUIT_DESC_COL).s());
+        }
+        return fruit;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (!(obj instanceof Fruit)) {
+            return false;
+        }
+
+        Fruit other = (Fruit) obj;
+
+        return Objects.equals(other.name, this.name);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(this.name);
+    }
+}
+
+
+
+ + + + + +
+ + +The @RegisterForReflection annotation instructs Quarkus to keep the class and its members during the native compilation. More details about the @RegisterForReflection annotation can be found on the native application tips page. +
+
+
+

Nothing fancy. One important thing to note is that having a default constructor is required by the JSON serialization layer. The static from method creates a bean based on the Map +object provided by the DynamoDB client response.

+
+
+

Now create a org.acme.dynamodb.AbstractService that will consist of helper methods that prepare DynamoDB request objects for reading and adding items to the table.

+
+
+
+
package org.acme.dynamodb;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
+import software.amazon.awssdk.services.dynamodb.model.GetItemRequest;
+import software.amazon.awssdk.services.dynamodb.model.PutItemRequest;
+import software.amazon.awssdk.services.dynamodb.model.ScanRequest;
+
+public abstract class AbstractService {
+
+    public final static String FRUIT_NAME_COL = "fruitName";
+    public final static String FRUIT_DESC_COL = "fruitDescription";
+    public final static String FRUIT_TABLE_NAME = "QuarkusFruits";
+
+    protected ScanRequest scanRequest() {
+        return ScanRequest.builder().tableName(FRUIT_TABLE_NAME)
+                .attributesToGet(FRUIT_NAME_COL, FRUIT_DESC_COL).build();
+    }
+
+    protected PutItemRequest putRequest(Fruit fruit) {
+        Map<String, AttributeValue> item = new HashMap<>();
+        item.put(FRUIT_NAME_COL, AttributeValue.builder().s(fruit.getName()).build());
+        item.put(FRUIT_DESC_COL, AttributeValue.builder().s(fruit.getDescription()).build());
+
+        return PutItemRequest.builder()
+                .tableName(FRUIT_TABLE_NAME)
+                .item(item)
+                .build();
+    }
+
+    protected GetItemRequest getRequest(String name) {
+        Map<String, AttributeValue> key = new HashMap<>();
+        key.put(FRUIT_NAME_COL, AttributeValue.builder().s(name).build());
+
+        return GetItemRequest.builder()
+                .tableName(FRUIT_TABLE_NAME)
+                .key(key)
+                .attributesToGet(FRUIT_NAME_COL, FRUIT_DESC_COL)
+                .build();
+    }
+}
+
+
+
+

Then, create a org.acme.dynamodb.FruitSyncService that will be the business layer of our application and stores/loads the fruits from DynamoDB using the synchronous client.

+
+
+
+
package org.acme.dynamodb;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+
+import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
+
+@ApplicationScoped
+public class FruitSyncService extends AbstractService {
+
+    @Inject
+    DynamoDbClient dynamoDB;
+
+    public List<Fruit> findAll() {
+        return dynamoDB.scanPaginator(scanRequest()).items().stream()
+                .map(Fruit::from)
+                .collect(Collectors.toList());
+    }
+
+    public void add(Fruit fruit) {
+        dynamoDB.putItem(putRequest(fruit));
+    }
+
+    public Fruit get(String name) {
+        return Fruit.from(dynamoDB.getItem(getRequest(name)).item());
+    }
+}
+
+
+
+

Now, edit the org.acme.dynamodb.FruitResource class as follows:

+
+
+
+
package org.acme.dynamodb;
+
+import java.util.List;
+
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+
+@Path("/fruits")
+@Produces(MediaType.APPLICATION_JSON)
+@Consumes(MediaType.APPLICATION_JSON)
+public class FruitResource {
+
+    @Inject
+    FruitSyncService service;
+
+    @GET
+    public List<Fruit> getAll() {
+        return service.findAll();
+    }
+
+    @GET
+    @Path("{name}")
+    public Fruit getSingle(String name) {
+        return service.get(name);
+    }
+
+    @POST
+    public List<Fruit> add(Fruit fruit) {
+        service.add(fruit);
+        return getAll();
+    }
+}
+
+
+
+

The implementation is pretty straightforward and you just need to define your endpoints using the JAX-RS annotations and use the FruitSyncService to list/add new fruits.

+
+
+
+
+

Configuring DynamoDB clients

+
+
+

DynamoDB clients (sync and async) are configurable via the application.properties file that can be provided in the src/main/resources directory. +Additionally, you need to add to the classpath a proper implementation of the sync client. By default the extension uses the java.net.URLConnection HTTP client, so +you need to add a URL connection client dependency to the pom.xml file:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.dynamodb.sync-client.type=apache
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.dynamodb.sync-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+

If you’re going to use a local DynamoDB instance, configure it as follows:

+
+
+
+
quarkus.dynamodb.endpoint-override=http://localhost:4566
+
+quarkus.dynamodb.aws.region=eu-central-1
+quarkus.dynamodb.aws.credentials.type=static
+quarkus.dynamodb.aws.credentials.static-provider.access-key-id=test-key
+quarkus.dynamodb.aws.credentials.static-provider.secret-access-key=test-secret
+
+
+
+
    +
  • +

    quarkus.dynamodb.aws.region - It’s required by the client, but since you’re using a local DynamoDB instance you can pick any valid AWS region.

    +
  • +
  • +

    quarkus.dynamodb.aws.credentials.type - Set static credentials provider with any values for access-key-id and secret-access-key

    +
  • +
  • +

    quarkus.dynamodb.endpoint-override - Override the DynamoDB client to use a local instance instead of an AWS service

    +
  • +
+
+
+

If you want to work with an AWS account, you’d need to set it with:

+
+
+
+
quarkus.dynamodb.aws.region=<YOUR_REGION>
+quarkus.dynamodb.aws.credentials.type=default
+
+
+
+
    +
  • +

    quarkus.dynamodb.aws.region you should set it to the region where you provisioned the DynamoDB table,

    +
  • +
  • +

    quarkus.dynamodb.aws.credentials.type - use the default credentials provider chain that looks for credentials in this order:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

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

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can be run with java -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

Create a org.acme.dynamodb.FruitAsyncService that will be similar to our FruitSyncService but using an asynchronous programming model.

+
+
+
+
package org.acme.dynamodb;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+
+import io.smallrye.mutiny.Uni;
+import software.amazon.awssdk.services.dynamodb.DynamoDbAsyncClient;
+
+@ApplicationScoped
+public class FruitAsyncService extends AbstractService {
+
+    @Inject
+    DynamoDbAsyncClient dynamoDB;
+
+    public Uni<List<Fruit>> findAll() {
+        return Uni.createFrom().completionStage(() -> dynamoDB.scan(scanRequest()))
+                .onItem().transform(res -> res.items().stream().map(Fruit::from).collect(Collectors.toList()));
+    }
+
+    public Uni<Void> add(Fruit fruit) {
+        return Uni.createFrom().completionStage(() -> dynamoDB.putItem(putRequest(fruit))).replaceWithVoid();
+    }
+
+    public Uni<Fruit> get(String name) {
+        return Uni.createFrom().completionStage(() -> dynamoDB.getItem(getRequest(name)))
+                .onItem().transform(resp -> Fruit.from(resp.item()));
+    }
+}
+
+
+
+

In the previous code, we create Uni instances from the CompletionStage objects returned by the asynchronous DynamoDB client, and then transform the emitted item.

+
+
+

Then, create an asynchronous REST resource that consumes this async service:

+
+
+
+
package org.acme.dynamodb;
+
+import java.util.List;
+
+import jakarta.inject.Inject;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+
+import io.smallrye.mutiny.Uni;
+
+@Path("/async-fruits")
+public class FruitAsyncResource {
+
+    @Inject
+    FruitAsyncService service;
+
+    @GET
+    public Uni<List<Fruit>> getAll() {
+        return service.findAll();
+    }
+
+    @GET
+    @Path("{name}")
+    public Uni<Fruit> getSingle(String name) {
+        return service.get(name);
+    }
+
+    @POST
+    public Uni<List<Fruit>> add(Fruit fruit) {
+        return service.add(fruit)
+                .onItem().ignore().andSwitchTo(this::getAll);
+    }
+}
+
+
+
+

And add Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.dynamodb.async-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+
+

DynamoDB enhanced client

+
+

The DynamoDB enhanced client is part of the AWS SDK for Java version 2 and makes the mapping between DynamoDB Tables and Java beans very easy. +The Enhanced Client requires a TableSchema which can be generated from a bean class annotated with DynamoDbBean or DynamoDbImmutable or generated from code. +By default, TableSchemas generated from bean classes are registered and cached at startup. You don’t need to explicitely instantiate them at class-load time. +It has both a sync and an async variants.

+
+
+

To use the enhanced client, add the quarkus-amazon-dynamodb-enhanced extension to your pom.xml:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.amazonservices</groupId>
+    <artifactId>quarkus-amazon-dynamodb-enhanced</artifactId>
+</dependency>
+
+
+
+

The Fruit bean would look like this:

+
+
+
+
package org.acme.dynamodb;
+
+import java.util.Map;
+import java.util.Objects;
+
+import io.quarkus.runtime.annotations.RegisterForReflection;
+import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbAttribute;
+import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbBean;
+import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbPartitionKey;
+import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
+
+@RegisterForReflection
+@DynamoDbBean
+public class Fruit {
+
+    private String name;
+    private String description;
+
+    public Fruit() {
+    }
+
+    @DynamoDbPartitionKey
+    @DynamoDbAttribute(AbstractService.FRUIT_NAME_COL)
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    @DynamoDbAttribute(AbstractService.FRUIT_DESC_COL)
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (!(obj instanceof Fruit)) {
+            return false;
+        }
+
+        Fruit other = (Fruit) obj;
+
+        return Objects.equals(other.name, this.name);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(this.name);
+    }
+}
+
+
+
+

Note that you don’t need to add @RegisterForReflection anymore.

+
+
+

The FruitSyncService would need to use the DynamoDbEnhancedClient as well as create a TableSchema:

+
+
+
+
package org.acme.dynamodb;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClient;
+import software.amazon.awssdk.enhanced.dynamodb.DynamoDbTable;
+import software.amazon.awssdk.enhanced.dynamodb.Key;
+import software.amazon.awssdk.enhanced.dynamodb.TableSchema;
+
+@ApplicationScoped
+public class FruitSyncService extends AbstractService {
+
+    private DynamoDbTable<Fruit> fruitTable;
+
+    @Inject
+    FruitEnhancedSyncService(DynamoDbEnhancedClient dynamoEnhancedClient) {
+        fruitTable = dynamoEnhancedClient.table(FRUIT_TABLE_NAME,
+            TableSchema.fromClass(Fruit.class));
+    }
+
+    public List<Fruit> findAll() {
+        return fruitTable.scan().items().stream().collect(Collectors.toList());
+    }
+
+    public List<Fruit> add(Fruit fruit) {
+        fruitTable.putItem(fruit);
+        return findAll();
+    }
+
+    public Fruit get(String name) {
+        Key partitionKey = Key.builder().partitionValue(name).build();
+        return fruitTable.getItem(partitionKey);
+    }
+}
+
+
+
+

The same goes for the asynchronous version with DynamoDbEnhanceAsyncdClient:

+
+
+
+
package org.acme.dynamodb;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+import io.smallrye.mutiny.Multi;
+import io.smallrye.mutiny.Uni;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+import mutiny.zero.flow.adapters.AdaptersToFlow;
+import software.amazon.awssdk.enhanced.dynamodb.DynamoDbAsyncTable;
+import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedAsyncClient;
+import software.amazon.awssdk.enhanced.dynamodb.Key;
+import software.amazon.awssdk.enhanced.dynamodb.TableSchema;
+
+@ApplicationScoped
+public class FruitAsyncService extends AbstractService {
+
+    private DynamoDbAsyncTable<Fruit> fruitTable;
+
+    @Inject
+    FruitEnhancedAsyncService(DynamoDbEnhancedAsyncClient dynamoEnhancedAsyncClient) {
+        fruitTable = dynamoEnhancedAsyncClient.table(FRUIT_TABLE_NAME,
+            TableSchema.fromClass(Fruit.class));
+    }
+
+    public Uni<List<Fruit>> findAll() {
+        return Multi.createFrom().publisher(AdaptersToFlow.publisher(fruitTable.scan().items())).collect().asList();
+    }
+
+    public Uni<Void> add(Fruit fruit){
+        return Uni.createFrom().completionStage(() -> fruitTable.putItem(fruit));
+}
+
+    public Uni<Fruit> get(String name) {
+        Key partitionKey = Key.builder().partitionValue(name).build();
+        return Uni.createFrom().completionStage(() -> fruitTable.getItem(partitionKey));
+    }
+}
+
+
+
+

Resource classes remain unchanged.

+
+
+

Alternatively, if you only need to use the DynamoDbTable instance, you can inject it directly with a @NamedDynamoDbTable annotation.

+
+
+

The synchronous version would be :

+
+
+
+
package org.acme.dynamodb;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+import io.quarkus.amazon.dynamodb.enhanced.runtime.NamedDynamoDbTable;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+import software.amazon.awssdk.enhanced.dynamodb.DynamoDbTable;
+import software.amazon.awssdk.enhanced.dynamodb.Key;
+
+@ApplicationScoped
+public class FruitSyncService extends AbstractService {
+
+    @Inject
+    @NamedDynamoDbTable(FRUIT_TABLE_NAME)
+    DynamoDbTable<Fruit> fruitTable;
+
+    public List<Fruit> findAll() {
+        return fruitTable.scan().items().stream().collect(Collectors.toList());
+    }
+
+    public List<Fruit> add(Fruit fruit) {
+        fruitTable.putItem(fruit);
+        return findAll();
+    }
+
+    public Fruit get(String name) {
+        Key partitionKey = Key.builder().partitionValue(name).build();
+        return fruitTable.getItem(partitionKey);
+    }
+}
+
+
+
+

And the asynchronous version :

+
+
+
+
package org.acme.dynamodb;
+
+import java.util.List;
+
+import io.quarkus.amazon.dynamodb.enhanced.runtime.NamedDynamoDbTable;
+import io.smallrye.mutiny.Multi;
+import io.smallrye.mutiny.Uni;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+import mutiny.zero.flow.adapters.AdaptersToFlow;
+import software.amazon.awssdk.enhanced.dynamodb.DynamoDbAsyncTable;
+import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedAsyncClient;
+import software.amazon.awssdk.enhanced.dynamodb.Key;
+import software.amazon.awssdk.enhanced.dynamodb.TableSchema;
+
+@ApplicationScoped
+public class FruitEnhancedAsyncService extends AbstractService {
+
+    @Inject
+    @NamedDynamoDbTable(FRUIT_TABLE_NAME)
+    private DynamoDbAsyncTable<Fruit> fruitTable;
+
+    public Uni<List<Fruit>> findAll() {
+        return Multi.createFrom().publisher(AdaptersToFlow.publisher(fruitTable.scan().items())).collect().asList();
+    }
+
+    public Uni<Void> add(Fruit fruit){
+        return Uni.createFrom().completionStage(() -> fruitTable.putItem(fruit));
+}
+
+    public Uni<Fruit> get(String name) {
+        Key partitionKey = Key.builder().partitionValue(name).build();
+        return Uni.createFrom().completionStage(() -> fruitTable.getItem(partitionKey));
+    }
+}
+
+
+
+

You can find more information about the DynamoDB enhanced client in the AWS documentation:

+
+ +
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_DYNAMODB_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_DYNAMODB_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_DYNAMODB_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_DYNAMODB_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_DYNAMODB_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_DYNAMODB_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Enable DynamoDB service endpoint discovery.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ENABLE_ENDPOINT_DISCOVERY

+
+
+

boolean

false

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_DYNAMODB_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_DYNAMODB_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_DYNAMODB_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of extensions to load with the enhanced client.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClientExtension interface.

+
+
+

Environment variable: QUARKUS_DYNAMODBENHANCED_CLIENT_EXTENSIONS

+
+
+

list of string

+
+
+
+

Whether a TableSchema should be created at start up for DynamoDb mappable entities annotated with DynamoDbBean or DynamoDbImmutable

+
+
+

TableSchema are cached and can be retrieved later with TableSchema.fromClass()

+
+
+

Environment variable: QUARKUS_DYNAMODBENHANCED_CREATE_TABLE_SCHEMAS

+
+
+

boolean

true

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/dev/amazon-eventbridge.html b/quarkus-amazon-services/dev/amazon-eventbridge.html new file mode 100644 index 0000000000..8f5d8c9c42 --- /dev/null +++ b/quarkus-amazon-services/dev/amazon-eventbridge.html @@ -0,0 +1,3169 @@ + + + + + + Amazon EventBridge Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon EventBridge Client

+
+
+
+

Amazon EventBridge is a serverless event bus service that makes it easy to connect your applications with data from a variety of sources.

+
+
+

You can find more information about EventBridge at AWS EventBridge Data Streams Service API Reference.

+
+
+ + + + + +
+ + +The EventBridge extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client.

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use EventBridge locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 17+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    An AWS Account to access the EventBridge service

    +
  • +
  • +

    Docker for your system to run EventBridge locally for testing purposes

    +
  • +
+
+
+

Provision EventBridge locally via Dev Services

+
+

The easiest way to start working with EventBridge is to run a local instance using Dev Services.

+
+
+
+

Provision EventBridge locally manually

+
+

You can also set up a local version of EventBridge manually, first start a LocalStack container:

+
+
+
+
docker run --rm --name local-eventbridge --publish 4592:4592 -e SERVICES=events -e START_WEB=0 -d localstack/localstack:3.0.1
+
+
+
+

This starts a EventBridge instance that is accessible on port 4592.

+
+
+

Create an AWS profile for your local instance using AWS CLI:

+
+
+
+
$ aws configure --profile localstack
+AWS Access Key ID [None]: test-key
+AWS Secret Access Key [None]: test-secret
+Default region name [None]: us-east-1
+Default output format [None]:
+
+
+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.8.0:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-eventbridge-quickstart \
+    -DclassName="org.acme.eventbridge.QuarkusEventBridgeSyncResource" \
+    -Dpath="/sync" \
+    -Dextensions="resteasy-reactive-jackson,amazon-eventbridge"
+cd amazon-eventbridge-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy Reactive/JAX-RS and Amazon EventBridge Client extensions. +After this, the amazon-eventbridge extension has been added to your pom.xml as well as the Mutiny support for RESTEasy.

+
+
+
+
+

Configuring EventBridge clients

+
+
+

Both EventBridge clients (sync and async) are configurable via the application.properties file that can be provided in the src/main/resources directory. +Additionally, you need to add to the classpath a proper implementation of the sync client. By default the extension uses the URL connection HTTP client, so +you need to add a URL connection client dependency to the pom.xml file:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.eventbridge.sync-client.type=apache
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.eventbridge.sync-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+

If you’re going to use a local EventBridge instance, configure it as follows:

+
+
+
+
quarkus.eventbridge.endpoint-override=http://localhost:4592 (1)
+
+quarkus.eventbridge.aws.region=us-east-1 (2)
+quarkus.eventbridge.aws.credentials.type=static (3)
+quarkus.eventbridge.aws.credentials.static-provider.access-key-id=test-key
+quarkus.eventbridge.aws.credentials.static-provider.secret-access-key=test-secret
+
+
+
+ + + + + + + + + + + + + +
1Override the EventBridge client to use LocalStack instead of the actual AWS service
2Localstack defaults to us-east-1
3The static credentials provider lets you set the access-key-id and secret-access-key directly
+
+
+

If you want to work with an AWS account, you can simply remove or comment out all Amazon EventBridge related properties. By default, the ST client extension will use the default credentials provider chain that looks for credentials in this order:

+
+
+
    +
  • +

    Java System Properties - aws.accessKeyId and aws.secretAccessKey

    +
  • +
  • +

    Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

    +
  • +
  • +

    Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

    +
  • +
  • +

    Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

    +
  • +
  • +

    Instance profile credentials delivered through the Amazon EC2 metadata service

    +
  • +
+
+
+

And the region from your AWS CLI profile will be used.

+
+
+
+
+

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can then be run with java -Dparameters.path=/quarkus/is/awesome/ -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

We need to add the Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.eventbridge.async-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/dev/amazon-iam.html b/quarkus-amazon-services/dev/amazon-iam.html new file mode 100644 index 0000000000..67a747aff1 --- /dev/null +++ b/quarkus-amazon-services/dev/amazon-iam.html @@ -0,0 +1,2913 @@ + + + + + + Amazon IAM Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon IAM Client

+
+

Amazon Identity and Access Management (IAM) enables users to manage access to AWS services and resources securely.

+
+
+

You can find more information about IAM at the Amazon IAM website.

+
+
+ + + + + +
+ + +The IAM extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client (by default) or the AWS CRT-based HTTP client

    +
  • +
+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_IAM_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_IAM_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_IAM_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_IAM_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_IAM_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_IAM_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_IAM_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_IAM_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_IAM_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_IAM_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_IAM_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_IAM_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/dev/amazon-kinesis.html b/quarkus-amazon-services/dev/amazon-kinesis.html new file mode 100644 index 0000000000..3f7d8d62c7 --- /dev/null +++ b/quarkus-amazon-services/dev/amazon-kinesis.html @@ -0,0 +1,3169 @@ + + + + + + Amazon Kinesis Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon Kinesis Client

+
+
+
+

Kinesis Data Streams is a managed service provided by Amazon Web Services (AWS) that scales elastically for real-time processing of streaming big data.

+
+
+

You can find more information about Kinesis at AWS Kinesis Data Streams Service API Reference.

+
+
+ + + + + +
+ + +The Kinesis extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client.

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use Kinesis locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 17+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    An AWS Account to access the Kinesis service

    +
  • +
  • +

    Docker for your system to run Kinesis locally for testing purposes

    +
  • +
+
+
+

Provision Kinesis locally via Dev Services

+
+

The easiest way to start working with Kinesis is to run a local instance using Dev Services.

+
+
+
+

Provision Kinesis locally manually

+
+

You can also set up a local version of Kinesis manually, first start a LocalStack container:

+
+
+
+
docker run --rm --name local-kinesis --publish 4592:4592 -e SERVICES=kinesis -e START_WEB=0 -d localstack/localstack:3.0.1
+
+
+
+

This starts a Kinesis instance that is accessible on port 4592.

+
+
+

Create an AWS profile for your local instance using AWS CLI:

+
+
+
+
$ aws configure --profile localstack
+AWS Access Key ID [None]: test-key
+AWS Secret Access Key [None]: test-secret
+Default region name [None]: us-east-1
+Default output format [None]:
+
+
+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.8.0:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-kinesis-quickstart \
+    -DclassName="org.acme.kinesis.QuarkusKinesisSyncResource" \
+    -Dpath="/sync" \
+    -Dextensions="resteasy-reactive-jackson,amazon-kinesis"
+cd amazon-kinesis-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy Reactive/JAX-RS and Amazon Kinesis Client extensions. +After this, the amazon-kinesis extension has been added to your pom.xml as well as the Mutiny support for RESTEasy.

+
+
+
+
+

Configuring Kinesis clients

+
+
+

Both Kinesis clients (sync and async) are configurable via the application.properties file that can be provided in the src/main/resources directory. +Additionally, you need to add to the classpath a proper implementation of the sync client. By default the extension uses the URL connection HTTP client, so +you need to add a URL connection client dependency to the pom.xml file:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.kinesis.sync-client.type=apache
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.kinesis.sync-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+

If you’re going to use a local Kinesis instance, configure it as follows:

+
+
+
+
quarkus.kinesis.endpoint-override=http://localhost:4592 (1)
+
+quarkus.kinesis.aws.region=us-east-1 (2)
+quarkus.kinesis.aws.credentials.type=static (3)
+quarkus.kinesis.aws.credentials.static-provider.access-key-id=test-key
+quarkus.kinesis.aws.credentials.static-provider.secret-access-key=test-secret
+
+
+
+ + + + + + + + + + + + + +
1Override the Kinesis client to use LocalStack instead of the actual AWS service
2Localstack defaults to us-east-1
3The static credentials provider lets you set the access-key-id and secret-access-key directly
+
+
+

If you want to work with an AWS account, you can simply remove or comment out all Amazon Kinesis related properties. By default, the ST client extension will use the default credentials provider chain that looks for credentials in this order:

+
+
+
    +
  • +

    Java System Properties - aws.accessKeyId and aws.secretAccessKey

    +
  • +
  • +

    Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

    +
  • +
  • +

    Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

    +
  • +
  • +

    Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

    +
  • +
  • +

    Instance profile credentials delivered through the Amazon EC2 metadata service

    +
  • +
+
+
+

And the region from your AWS CLI profile will be used.

+
+
+
+
+

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can then be run with java -Dparameters.path=/quarkus/is/awesome/ -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

We need to add the Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.kinesis.async-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_KINESIS_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_KINESIS_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_KINESIS_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_KINESIS_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_KINESIS_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_KINESIS_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_KINESIS_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_KINESIS_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_KINESIS_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_KINESIS_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_KINESIS_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/dev/amazon-kms.html b/quarkus-amazon-services/dev/amazon-kms.html new file mode 100644 index 0000000000..e1f85ad1f2 --- /dev/null +++ b/quarkus-amazon-services/dev/amazon-kms.html @@ -0,0 +1,3332 @@ + + + + + + Amazon KMS Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon KMS Client

+
+
+
+

AWS Key Management Service (KMS) is a service that allows you to create and control the keys used to encrypt or digitally sign your data. +Using KMS, you can create and manage cryptographic keys and control their use across a wide range of AWS services and in your application.

+
+
+

You can find more information about KMS at the AWS KMS website.

+
+
+ + + + + +
+ + +The KMS extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client (by default) or the AWS CRT-based HTTP client

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use KMS locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 17+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    An AWS Account to access the KMS service

    +
  • +
  • +

    Docker for your system to run KMS locally for testing purposes

    +
  • +
+
+
+

Provision KMS locally via Dev Services

+
+

The easiest way to start working with KMS is to run a local instance using Dev Services.

+
+
+
+

Provision KMS locally manually

+
+

You can also set up a local version of KMS manually, first start a LocalStack container:

+
+
+
+
docker run --rm --name local-kms --publish 4566:4599 -e SERVICES=kms -e START_WEB=0 -d localstack/localstack:3.0.1
+
+
+
+

This starts a KMS instance that is accessible on port 4566.

+
+
+

Create an AWS profile for your local instance using AWS CLI:

+
+
+
+
$ aws configure --profile localstack
+AWS Access Key ID [None]: test-key
+AWS Secret Access Key [None]: test-secret
+Default region name [None]: us-east-1
+Default output format [None]: text
+
+
+
+
+

Create a KMS master key

+
+

Create a KMS master key queue using AWS CLI and store in MASTER_KEY_ARN environment variable.

+
+
+
+
MASTER_KEY_ARN=`aws kms create-key --profile localstack --endpoint-url=http://localhost:4566 | cut -f3`
+
+
+
+

Generate a key data as 256-bit symmetric key (AES 256)

+
+
+
+
aws kms generate-data-key --key-id $MASTER_KEY_ARN --key-spec AES_256 --profile localstack --endpoint-url=http://localhost:4566
+
+
+
+

Or, if you want to use your AWS account create a key using your default profile

+
+
+
+
MASTER_KEY_ARN=`aws kms create-key | cut -f3`
+aws kms generate-data-key --key-id $MASTER_KEY_ARN --key-spec AES_256
+
+
+
+
+
+
+

Solution

+
+
+

The application built here allows to encrypt and decrypt text messages using a master key created on AWS KMS.

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step. +However, you can go right to the completed example.

+
+
+

Clone the Git repository: git clone https://github.com/quarkusio/quarkus-quickstarts.git, or download an archive.

+
+
+

The solution is located in the amazon-kms-quickstart directory.

+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.8.0:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-kms-quickstart \
+    -DclassName="org.acme.kms.QuarkusKmsSyncResource" \
+    -Dpath="/sync" \
+    -Dextensions="resteasy-reactive-jackson,amazon-kms"
+cd amazon-kms-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy Reactive/JAX-RS and Amazon KMS Client extensions. +After this, the amazon-kms extension has been added to your pom.xml as well as the Mutiny support for RESTEasy.

+
+
+
+
+

Creating JSON REST service

+
+
+

In this example, we will create an application that allows to encrypt and decrypt text message provided in the request. +The example application will demonstrate the two programming models supported by the extension.

+
+
+

Let’s create a org.acme.kms.QuarkusKmsSyncResource that will provide an API to encrypt and decrypt message using the synchronous client.

+
+
+
+
package org.acme.kms;
+
+import java.util.Base64;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import software.amazon.awssdk.core.SdkBytes;
+import software.amazon.awssdk.services.kms.KmsClient;
+import software.amazon.awssdk.services.kms.model.DecryptResponse;
+
+@Path("/sync")
+@Produces(MediaType.TEXT_PLAIN)
+@Consumes(MediaType.TEXT_PLAIN)
+public class QuarkusKmsSyncResource {
+
+    @Inject
+    KmsClient kms;
+
+    @ConfigProperty(name = "key.arn")
+    String keyArn;
+
+    @POST
+    @Path("/encrypt")
+    public String encrypt(String data) {
+        SdkBytes encryptedBytes = kms.encrypt(req -> req.keyId(keyArn).plaintext(SdkBytes.fromUtf8String(data))).ciphertextBlob();
+
+        return Base64.getEncoder().encodeToString(encryptedBytes.asByteArray());
+    }
+
+    @POST
+    @Path("/decrypt")
+    public String decrypt(String data) {
+        SdkBytes encryptedData = SdkBytes.fromByteArray(Base64.getDecoder().decode(data.getBytes()));
+        DecryptResponse decrypted = kms.decrypt(req -> req.keyId(keyArn).ciphertextBlob(encryptedData));
+
+        return decrypted.plaintext().asUtf8String();
+    }
+}
+
+
+
+

An encrypted message is in the form of a bytes array. To return it to the user we need to encode it as Base64 string in the encrypt endpoint. +On the decrypt endpoint we need to decode from the Base64 string back to the bytes array before sending it out to the KMS client.

+
+
+
+
+

Configuring KMS clients

+
+
+

Both KMS clients (sync and async) are configurable via the application.properties file that can be provided in the src/main/resources directory. +Additionally, you need to add to the classpath a proper implementation of the sync client. By default the extension uses the URL connection HTTP client, so +you need to add a URL connection client dependency to the pom.xml file:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.kms.sync-client.type=apache
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.kms.sync-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+

If you’re going to use a local KMS instance, configure it as follows:

+
+
+
+
quarkus.kms.endpoint-override=http://localhost:4566
+
+quarkus.kms.aws.region=us-east-1
+quarkus.kms.aws.credentials.type=static
+quarkus.kms.aws.credentials.static-provider.access-key-id=test-key
+quarkus.kms.aws.credentials.static-provider.secret-access-key=test-secret
+
+
+
+
    +
  • +

    quarkus.kms.aws.region - It’s required by the client, but since you’re using a local KMS instance use us-east-1 as it’s a default region of LocalStack’s KMS.

    +
  • +
  • +

    quarkus.kms.aws.credentials.type - Set static credentials provider with any values for access-key-id and secret-access-key

    +
  • +
  • +

    quarkus.kms.endpoint-override - Override the KMS client to use a local instance instead of an AWS service

    +
  • +
+
+
+

If you want to work with an AWS account, you can simply remove or comment out all Amazon KMS related properties. By default, the KMS client extension +will use the default credentials provider chain that looks for credentials in this order:

+
+
+
    +
  • +

    Java System Properties - aws.accessKeyId and aws.secretAccessKey

    +
  • +
  • +

    Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

    +
  • +
  • +

    Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

    +
  • +
  • +

    Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

    +
  • +
  • +

    Instance profile credentials delivered through the Amazon EC2 metadata service

    +
  • +
+
+
+

And the region from your AWS CLI profile will be used.

+
+
+
+
+

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can be run with java -Dkey.arn=$MASTER_KEY_ARN -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

Create a org.acme.kms.QuarkusKmsAsyncResource REST resource that will be similar to our QuarkusKmsSyncResource but using an asynchronous programming model.

+
+
+
+
package org.acme.kms;
+
+import java.util.Base64;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import io.smallrye.mutiny.Uni;
+import software.amazon.awssdk.core.SdkBytes;
+import software.amazon.awssdk.services.kms.KmsAsyncClient;
+import software.amazon.awssdk.services.kms.model.DecryptResponse;
+import software.amazon.awssdk.services.kms.model.EncryptResponse;
+
+@Path("/async")
+@Produces(MediaType.TEXT_PLAIN)
+@Consumes(MediaType.TEXT_PLAIN)
+public class QuarkusKmsAsyncResource {
+
+    @Inject
+    KmsAsyncClient kms;
+
+    @ConfigProperty(name = "key.arn")
+    String keyArn;
+
+    @POST
+    @Path("/encrypt")
+    public Uni<String> encrypt(String data) {
+        return Uni.createFrom().completionStage(kms.encrypt(req -> req.keyId(keyArn).plaintext(SdkBytes.fromUtf8String(data))))
+            .onItem().transform(EncryptResponse::ciphertextBlob)
+            .onItem().transform(blob -> Base64.getEncoder().encodeToString(blob.asByteArray()));
+    }
+
+    @POST
+    @Path("/decrypt")
+    public Uni<String> decrypt(String data) {
+        return Uni.createFrom().item(SdkBytes.fromByteArray(Base64.getDecoder().decode(data.getBytes())))
+            .onItem().transformToUni(msg ->
+                        Uni.createFrom().completionStage(kms.decrypt(req -> req.keyId(keyArn).ciphertextBlob(msg)))
+            )
+            .onItem().transform(DecryptResponse::plaintext)
+            .onItem().transform(SdkBytes::asUtf8String);
+    }
+}
+
+
+
+

We create Uni instances from the CompletionStage objects returned by the asynchronous KMS client, and then transform the emitted item.

+
+
+

And we need to add the Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.kms.async-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_KMS_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_KMS_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_KMS_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_KMS_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_KMS_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_KMS_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_KMS_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_KMS_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_KMS_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_KMS_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_KMS_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_KMS_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/dev/amazon-lambda.html b/quarkus-amazon-services/dev/amazon-lambda.html new file mode 100644 index 0000000000..048845e723 --- /dev/null +++ b/quarkus-amazon-services/dev/amazon-lambda.html @@ -0,0 +1,3172 @@ + + + + + + Amazon Lambda Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon Lambda Client

+
+
+
+

Service client for accessing Amazon Lambda.

+
+
+

Using the Amazon Lambda API, you can manage your AWS Lambdas.

+
+
+

You can find more information about Lambda at the AWS Lambda website.

+
+
+ + + + + +
+ + +The Lambda extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client (by default) or the AWS CRT-based HTTP client

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use Lambda locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 17+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    An AWS Account to access the Lambda service

    +
  • +
  • +

    Docker for your system to run Lambda locally for testing purposes

    +
  • +
+
+
+

Provision Lambda locally via Dev Services

+
+

The easiest way to start working with Lambda is to run a local instance using Dev Services.

+
+
+
+

Provision Lambda locally manually

+
+

You can also set up a local version of Lambda manually, first start a LocalStack container:

+
+
+
+
docker run --rm --name local-lambda --publish 4566:4583 -e SERVICES=lambda -e START_WEB=0 -d localstack/localstack:3.0.1
+
+
+
+

This starts a Lambda instance that is accessible on port 4566.

+
+
+

Create an AWS profile for your local instance using AWS CLI:

+
+
+
+
$ aws configure --profile localstack
+AWS Access Key ID [None]: test-key
+AWS Secret Access Key [None]: test-secret
+Default region name [None]: us-east-1
+Default output format [None]:
+
+
+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.8.0:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-lambda-quickstart \
+    -DclassName="org.acme.lambda.QuarkusLambdaSyncResource" \
+    -Dpath="/sync" \
+    -Dextensions="resteasy-reactive-jackson,amazon-lambda"
+cd amazon-lambda-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy Reactive/JAX-RS and Amazon Lambda Client extensions. +After this, the amazon-lambda extension has been added to your pom.xml as well as the Mutiny support for RESTEasy.

+
+
+
+
+

Configuring Lambda clients

+
+
+

Both Lambda clients (sync and async) are configurable via the application.properties file that can be provided in the src/main/resources directory. +Additionally, you need to add to the classpath a proper implementation of the sync client. By default the extension uses the URL connection HTTP client, so +you need to add a URL connection client dependency to the pom.xml file:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.lambda.sync-client.type=apache
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.lambda.sync-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+

If you’re going to use a local Lambda instance, configure it as follows:

+
+
+
+
quarkus.lambda.endpoint-override=http://localhost:4566 (1)
+
+quarkus.lambda.aws.region=us-east-1 (2)
+quarkus.lambda.aws.credentials.type=static (3)
+quarkus.lambda.aws.credentials.static-provider.access-key-id=test-key
+quarkus.lambda.aws.credentials.static-provider.secret-access-key=test-secret
+
+
+
+ + + + + + + + + + + + + +
1Override the Lambda client to use LocalStack instead of the actual AWS service
2Localstack defaults to us-east-1
3The static credentials provider lets you set the access-key-id and secret-access-key directly
+
+
+

If you want to work with an AWS account, you can simply remove or comment out all Amazon Lambda related properties. By default, the Lambda client extension will use the default credentials provider chain that looks for credentials in this order:

+
+
+
    +
  • +

    Java System Properties - aws.accessKeyId and aws.secretAccessKey

    +
  • +
  • +

    Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

    +
  • +
  • +

    Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

    +
  • +
  • +

    Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

    +
  • +
  • +

    Instance profile credentials delivered through the Amazon EC2 metadata service

    +
  • +
+
+
+

And the region from your AWS CLI profile will be used.

+
+
+
+
+

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can then be run with java -Dparameters.path=/quarkus/is/awesome/ -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

We need to add the Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.lambda.async-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_LAMBDA_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_LAMBDA_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_LAMBDA_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_LAMBDA_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_LAMBDA_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_LAMBDA_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_LAMBDA_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_LAMBDA_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_LAMBDA_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_LAMBDA_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_LAMBDA_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/dev/amazon-s3.html b/quarkus-amazon-services/dev/amazon-s3.html new file mode 100644 index 0000000000..f017e5aeff --- /dev/null +++ b/quarkus-amazon-services/dev/amazon-s3.html @@ -0,0 +1,3886 @@ + + + + + + Amazon S3 Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon S3 Client

+
+
+
+

Amazon S3 is an object storage service. It can be employed to store any type of object which allows for uses like storage for Internet applications, +backup and recovery, disaster recovery, data archives, data lakes for analytics, any hybrid cloud storage. +This extension provides functionality that allows the client to communicate with the service when running in Quarkus. +You can find more information about S3 at the Amazon S3 website.

+
+
+ + + + + +
+ + +The S3 extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client (by default) or the AWS CRT-based HTTP client

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use S3 locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 17+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    AWS Command line interface

    +
  • +
  • +

    An AWS Account to access the S3 service. Before you can use the AWS SDKs with Amazon S3, you must get an AWS access key ID and secret access key.

    +
  • +
  • +

    Optionally, Docker for your system to run S3 locally for testing purposes

    +
  • +
+
+
+

Provision S3 locally via Dev Services

+
+

The easiest way to start working with S3 is to run a local instance using Dev Services.

+
+
+

You can optionally configure the buckets that are created on startup with the quarkus.s3.devservices.buckets config property.

+
+
+

Provision S3 locally manually

+
+

You can also setup a local version of S3 manually, first start a LocalStack container:

+
+
+
+
docker run -it --publish 4566:4566 -e SERVICES=s3 -e START_WEB=0 localstack/localstack:3.0.1
+
+
+
+

This starts a S3 instance that is accessible on port 4566.

+
+
+

Create an AWS profile for your local instance using AWS CLI:

+
+
+
+
$ aws configure --profile localstack
+AWS Access Key ID [None]: test-key
+AWS Secret Access Key [None]: test-secret
+Default region name [None]: us-east-1
+Default output format [None]:
+
+
+
+
+
+

Create a S3 bucket

+
+

Create a S3 bucket using AWS CLI

+
+
+
+
aws s3 mb s3://quarkus.s3.quickstart --profile localstack --endpoint-url=http://localhost:4566
+
+
+
+
+
+
+

Solution

+
+
+

The application built here allows to manage files stored in Amazon S3.

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step. +However, you can go right to the completed example.

+
+
+

Clone the Git repository: git clone https://github.com/quarkusio/quarkus-quickstarts.git, or download an archive.

+
+
+

The solution is located in the amazon-s3-quickstart directory.

+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.8.0:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-s3-quickstart \
+    -DclassName="org.acme.s3.S3SyncClientResource" \
+    -Dpath="/s3" \
+    -Dextensions="resteasy-reactive-jackson,amazon-s3"
+cd amazon-s3-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy Reactive/JAX-RS and S3 Client extensions. +After this, the amazon-s3 extension has been added to your pom.xml.

+
+
+ + + + + +
+ + +The default setting for quarkus.http.limits.max-body-size is 10240K. This may limit your ability to upload multipart files larger than the default. If you want to upload larger files, you will need to set this limit explicitly. +
+
+
+
+
+

Setting up the model

+
+
+

In this example, we will create an application to manage a list of files. The example application will demonstrate the two programming models supported by the extension.

+
+
+

Because the primary goal of our application is to upload a file into the S3 bucket, we need to setup the model we will be using to define the multipart/form-data payload, +in the form of a @MultipartForm POJO.

+
+
+

Create a org.acme.s3.FormData class as follows:

+
+
+
+
package org.acme.s3;
+
+import java.io.File;
+import jakarta.ws.rs.core.MediaType;
+import org.jboss.resteasy.reactive.PartType;
+import org.jboss.resteasy.reactive.RestForm;
+
+public class FormData {
+
+    @RestForm("file")
+    public File data;
+
+    @RestForm
+    @PartType(MediaType.TEXT_PLAIN)
+    public String filename;
+
+    @RestForm
+    @PartType(MediaType.TEXT_PLAIN)
+    public String mimetype;
+
+}
+
+
+
+

The class defines three fields:

+
+
+
    +
  • +

    data that fill capture stream of uploaded bytes from the client

    +
  • +
  • +

    fileName that captures a filename as provided by the submited form

    +
  • +
  • +

    mimeType content type of the uploaded file

    +
  • +
+
+
+

In the second step let’s create a bean that will represent a file in a Amazon S3 bucket as follows:

+
+
+
+
package org.acme.s3;
+
+import software.amazon.awssdk.services.s3.model.S3Object;
+
+public class FileObject {
+    private String objectKey;
+
+    private Long size;
+
+    public FileObject() {
+    }
+
+    public static FileObject from(S3Object s3Object) {
+        FileObject file = new FileObject();
+        if (s3Object != null) {
+            file.setObjectKey(s3Object.key());
+            file.setSize(s3Object.size());
+        }
+        return file;
+    }
+
+    public String getObjectKey() {
+        return objectKey;
+    }
+
+    public Long getSize() {
+        return size;
+    }
+
+    public FileObject setObjectKey(String objectKey) {
+        this.objectKey = objectKey;
+        return this;
+    }
+
+    public FileObject setSize(Long size) {
+        this.size = size;
+        return this;
+    }
+}
+
+
+
+

Nothing fancy. One important thing to note is that having a default constructor is required by the JSON serialization layer. The static from method creates a bean based on the S3Object +object provided by the S3 client response when listing all the objects in a bucket.

+
+
+
+
+

Create JAX-RS resource

+
+
+

Now create a org.acme.s3.CommonResource that will consist of methods to prepare S3 request to get object from a S3 bucket, or to put file into a S3 bucket. +Note a configuration property bucket.name is defined here as the request method required name of the S3 bucket.

+
+
+
+
package org.acme.s3;
+
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+
+import software.amazon.awssdk.services.s3.model.GetObjectRequest;
+import software.amazon.awssdk.services.s3.model.PutObjectRequest;
+
+abstract public class CommonResource {
+
+    @ConfigProperty(name = "bucket.name")
+    String bucketName;
+
+    protected PutObjectRequest buildPutRequest(FormData formData) {
+        return PutObjectRequest.builder()
+                .bucket(bucketName)
+                .key(formData.filename)
+                .contentType(formData.mimetype)
+                .build();
+    }
+
+    protected GetObjectRequest buildGetRequest(String objectKey) {
+        return GetObjectRequest.builder()
+                .bucket(bucketName)
+                .key(objectKey)
+                .build();
+    }
+
+}
+
+
+
+

Then, create a org.acme.s3.S3SyncClientResource that will provides an API to upload/download files as well as to list all the files in a bucket.

+
+
+
+
package org.acme.s3;
+
+import java.util.Comparator;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+import jakarta.ws.rs.core.Response.ResponseBuilder;
+import jakarta.ws.rs.core.Response.Status;
+import software.amazon.awssdk.core.ResponseBytes;
+import software.amazon.awssdk.core.sync.RequestBody;
+import software.amazon.awssdk.services.s3.S3Client;
+import software.amazon.awssdk.services.s3.model.GetObjectResponse;
+import software.amazon.awssdk.services.s3.model.ListObjectsRequest;
+import software.amazon.awssdk.services.s3.model.PutObjectResponse;
+
+
+@Path("/s3")
+public class S3SyncClientResource extends CommonResource {
+    @Inject
+    S3Client s3;
+
+    @POST
+    @Path("upload")
+    @Consumes(MediaType.MULTIPART_FORM_DATA)
+    public Response uploadFile(FormData formData) throws Exception {
+
+        if (formData.filename == null || formData.filename.isEmpty()) {
+            return Response.status(Status.BAD_REQUEST).build();
+        }
+
+        if (formData.mimetype == null || formData.mimetype.isEmpty()) {
+            return Response.status(Status.BAD_REQUEST).build();
+        }
+
+        PutObjectResponse putResponse = s3.putObject(buildPutRequest(formData),
+                RequestBody.fromFile(formData.data));
+        if (putResponse != null) {
+            return Response.ok().status(Status.CREATED).build();
+        } else {
+            return Response.serverError().build();
+        }
+    }
+
+    @GET
+    @Path("download/{objectKey}")
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    public Response downloadFile(String objectKey) {
+        ResponseBytes<GetObjectResponse> objectBytes = s3.getObjectAsBytes(buildGetRequest(objectKey));
+        ResponseBuilder response = Response.ok(objectBytes.asUtf8String());
+        response.header("Content-Disposition", "attachment;filename=" + objectKey);
+        response.header("Content-Type", objectBytes.response().contentType());
+        return response.build();
+    }
+
+    @GET
+    @Produces(MediaType.APPLICATION_JSON)
+    public List<FileObject> listFiles() {
+        ListObjectsRequest listRequest = ListObjectsRequest.builder().bucket(bucketName).build();
+
+        //HEAD S3 objects to get metadata
+        return s3.listObjects(listRequest).contents().stream()
+                .map(FileObject::from)
+                .sorted(Comparator.comparing(FileObject::getObjectKey))
+                .collect(Collectors.toList());
+    }
+}
+
+
+
+
+
+

Configuring S3 clients

+
+
+

Both S3 clients (sync and async) are configurable via the application.properties file that can be provided in the src/main/resources directory.

+
+
+ + + + + +
+ + +You need to add to the classpath a proper implementation of the sync client. By default the extension uses the URL connection HTTP client, so +add a URL connection client dependency to the pom.xml file: +
+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.s3.sync-client.type=apache
+
+
+
+

And add following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.s3.sync-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+

For asynchronous client refer to Going asynchronous for more information.

+
+
+

If you’re going to use a local S3 instance, configure it as follows:

+
+
+
+
quarkus.s3.endpoint-override=http://localhost:4566
+
+quarkus.s3.aws.region=us-east-1
+quarkus.s3.aws.credentials.type=static
+quarkus.s3.aws.credentials.static-provider.access-key-id=test-key
+quarkus.s3.aws.credentials.static-provider.secret-access-key=test-secret
+
+bucket.name=quarkus.s3.quickstart
+
+
+
+
    +
  • +

    quarkus.s3.aws.region - It’s required by the client, but since you’re using a local S3 instance you can pick any valid AWS region.

    +
  • +
  • +

    quarkus.s3.aws.credentials.type - Set static credentials provider with any values for access-key-id and secret-access-key

    +
  • +
  • +

    quarkus.s3.endpoint-override - Override the S3 client to use a local instance instead of an AWS service

    +
  • +
  • +

    bucket.name - Name of the S3 bucket

    +
  • +
+
+
+

If you want to work with an AWS account, you’d need to set it with:

+
+
+
+
bucket.name=<your-bucket-name>
+
+quarkus.s3.aws.region=<YOUR_REGION>
+quarkus.s3.aws.credentials.type=default
+
+
+
+
    +
  • +

    bucket.name - name of the S3 bucket on your AWS account.

    +
  • +
  • +

    quarkus.s3.aws.region you should set it to the region where your S3 bucket was created,

    +
  • +
  • +

    quarkus.s3.aws.credentials.type - use the default credentials provider chain that looks for credentials in this order:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

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

Creating a frontend

+
+
+

Now let’s add a simple web page to interact with our S3SyncClientResource. +Quarkus automatically serves static resources located under the META-INF/resources directory. +In the src/main/resources/META-INF/resources directory, add a s3.html file with the content from this s3.html file in it.

+
+
+

You can now interact with your REST service:

+
+
+
    +
  • +

    start Quarkus with ./mvnw compile quarkus:dev

    +
  • +
  • +

    open a browser to http://localhost:8080/s3.html

    +
  • +
  • +

    upload new file to the current S3 bucket via the form and see the list of files in the bucket

    +
  • +
+
+
+
+
+

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can be run with java -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

Create a org.acme.s3.S3AsyncClientResource that will be similar to our S3SyncClientResource but using an asynchronous programming model.

+
+
+
+
package org.acme.s3;
+
+import java.nio.ByteBuffer;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+import jakarta.ws.rs.core.Response.Status;
+import mutiny.zero.flow.adapters.AdaptersToFlow;
+
+import org.jboss.resteasy.reactive.RestMulti;
+import org.reactivestreams.Publisher;
+
+import io.smallrye.mutiny.Multi;
+import io.smallrye.mutiny.Uni;
+import io.vertx.core.buffer.Buffer;
+import software.amazon.awssdk.core.async.AsyncRequestBody;
+import software.amazon.awssdk.core.async.AsyncResponseTransformer;
+import software.amazon.awssdk.services.s3.S3AsyncClient;
+import software.amazon.awssdk.services.s3.model.ListObjectsRequest;
+import software.amazon.awssdk.services.s3.model.ListObjectsResponse;
+
+@Path("/async-s3")
+public class S3AsyncClientResource extends CommonResource {
+    @Inject
+    S3AsyncClient s3;
+
+    @POST
+    @Path("upload")
+    @Consumes(MediaType.MULTIPART_FORM_DATA)
+    public Uni<Response> uploadFile(FormData formData) throws Exception {
+
+        if (formData.filename == null || formData.filename.isEmpty()) {
+            return Uni.createFrom().item(Response.status(Status.BAD_REQUEST).build());
+        }
+
+        if (formData.mimetype == null || formData.mimetype.isEmpty()) {
+            return Uni.createFrom().item(Response.status(Status.BAD_REQUEST).build());
+        }
+
+        return Uni.createFrom()
+                .completionStage(() -> {
+                    return s3.putObject(buildPutRequest(formData), AsyncRequestBody.fromFile(formData.data));
+                })
+                .onItem().ignore().andSwitchTo(Uni.createFrom().item(Response.created(null).build()))
+                .onFailure().recoverWithItem(th -> {
+                    th.printStackTrace();
+                    return Response.serverError().build();
+                });
+    }
+
+    @GET
+    @Path("download/{objectKey}")
+    @Produces(MediaType.APPLICATION_OCTET_STREAM)
+    public RestMulti<Buffer> downloadFile(String objectKey) {
+
+        return RestMulti.fromUniResponse(Uni.createFrom()
+                .completionStage(() -> s3.getObject(buildGetRequest(objectKey),
+                        AsyncResponseTransformer.toPublisher())),
+                response -> Multi.createFrom().safePublisher(AdaptersToFlow.publisher((Publisher<ByteBuffer>) response))
+                        .map(S3AsyncClientResource::toBuffer),
+                response -> Map.of("Content-Disposition", List.of("attachment;filename=" + objectKey), "Content-Type",
+                        List.of(response.response().contentType())));
+    }
+
+    @GET
+    public Uni<List<FileObject>> listFiles() {
+        ListObjectsRequest listRequest = ListObjectsRequest.builder()
+                .bucket(bucketName)
+                .build();
+
+        return Uni.createFrom().completionStage(() -> s3.listObjects(listRequest))
+                .onItem().transform(result -> toFileItems(result));
+    }
+
+    private static Buffer toBuffer(ByteBuffer bytebuffer) {
+        byte[] result = new byte[bytebuffer.remaining()];
+        bytebuffer.get(result);
+        return Buffer.buffer(result);
+    }
+
+    private List<FileObject> toFileItems(ListObjectsResponse objects) {
+        return objects.contents().stream()
+                .map(FileObject::from)
+                .sorted(Comparator.comparing(FileObject::getObjectKey))
+                .collect(Collectors.toList());
+    }
+}
+
+
+
+

And we need to add the Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.s3.async-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based S3 client, add the io.quarkus.amazon.s3.runtime.S3Crt qualifier as follows:

+
+
+
+
@Inject
+@S3Crt
+S3AsyncClient s3;
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+
+

S3 Transfer Manager

+
+

Amazon S3 Transfer Manager is high-level file transfer utility based on the S3 client. The extension provides functionality that allows to use S3TransferManager when running in Quarkus. +You can find more information about S3 Transfer Manager at the Amazon S3 website.

+
+
+

S3 Transfer Manager and the Quarkus extension supports only Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client (by default) or the AWS CRT-based HTTP client, or AWS CRT-based S3 client.

+
+
+

S3 Transfer Manager share the same configuration as S3 asynchronous client. See above to configure an S3AsyncClient.

+
+
+

If you want to use S3 Transfer Manager, configure an S3AsyncClient`with the desired HTTP client library and simply inject an instance of `S3TransferManager:

+
+
+
+
// Netty or AWS CRT-based HTTP client
+@Inject
+S3TransferManager transferManager;
+
+// or AWS CRT-based S3 client
+@Inject
+@S3Crt
+S3TransferManager transferManager;
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.amazonservices</groupId>
+    <artifactId>quarkus-amazon-s3-transfer-manager</artifactId>
+</dependency>
+
+
+
+

You can then make call

+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_S3_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_S3_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_S3_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_S3_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_S3_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_S3_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

The buckets to create on startup.

+
+
+

Environment variable: QUARKUS_S3_DEVSERVICES_BUCKETS

+
+
+

list of string

default

+
+
+
+

Enable using the accelerate endpoint when accessing S3.

+
+
+

Accelerate endpoints allow faster transfer of objects by using Amazon CloudFront’s globally distributed edge locations.

+
+
+

Environment variable: QUARKUS_S3_ACCELERATE_MODE

+
+
+

boolean

false

+
+
+
+

Enable doing a validation of the checksum of an object stored in S3.

+
+
+

Environment variable: QUARKUS_S3_CHECKSUM_VALIDATION

+
+
+

boolean

true

+
+
+
+

Enable using chunked encoding when signing the request payload for software.amazon.awssdk.services.s3.model.PutObjectRequest and software.amazon.awssdk.services.s3.model.UploadPartRequest.

+
+
+

Environment variable: QUARKUS_S3_CHUNKED_ENCODING

+
+
+

boolean

true

+
+
+
+

Enable dualstack mode for accessing S3. If you want to use IPv6 when accessing S3, dualstack must be enabled.

+
+
+

Environment variable: QUARKUS_S3_DUALSTACK

+
+
+

boolean

false

+
+
+
+

Enable using path style access for accessing S3 objects instead of DNS style access. DNS style access is preferred as it will result in better load balancing when accessing S3.

+
+
+

Environment variable: QUARKUS_S3_PATH_STYLE_ACCESS

+
+
+

boolean

false

+
+
+
+

Enable cross-region call to the region specified in the S3 resource ARN different than the region the client was configured with. If this flag is not set to 'true', the cross-region call will throw an exception.

+
+
+

Environment variable: QUARKUS_S3_USE_ARN_REGION_ENABLED

+
+
+

boolean

false

+
+
+
+

Define the profile name that should be consulted to determine the default value of use-arn-region-enabled. This is not used, if the use-arn-region-enabled is configured to 'true'.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_S3_PROFILE_NAME

+
+
+

string

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_S3_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_S3_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_S3_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_S3_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_S3_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_S3_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

AWS CRT-based S3 client configurations

Type

Default

+
+
+
+

Configure the starting buffer size the client will use to buffer the parts downloaded from S3.

+
+
+

Environment variable: QUARKUS_S3_CRT_CLIENT_INITIAL_READ_BUFFER_SIZE_IN_BYTES

+
+
+

long

Equal to the resolved part size * 10

+
+
+
+

Specifies the maximum number of S3 connections that should be established during a transfer.

+
+
+

Environment variable: QUARKUS_S3_CRT_CLIENT_MAX_CONCURRENCY

+
+
+

int

+
+
+
+

Sets the minimum part size for transfer parts.

+
+
+

Environment variable: QUARKUS_S3_CRT_CLIENT_MINIMUM_PART_SIZE_IN_BYTES

+
+
+

long

8MB

+
+
+
+

The target throughput for transfer requests.

+
+
+

Environment variable: QUARKUS_S3_CRT_CLIENT_TARGET_THROUGHPUT_IN_GBPS

+
+
+

double

10

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/dev/amazon-secretsmanager.html b/quarkus-amazon-services/dev/amazon-secretsmanager.html new file mode 100644 index 0000000000..3e0544e016 --- /dev/null +++ b/quarkus-amazon-services/dev/amazon-secretsmanager.html @@ -0,0 +1,3358 @@ + + + + + + Amazon Secrets Manager Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon Secrets Manager Client

+
+
+
+

AWS Secrets Manager enables you to replace hardcoded credentials in your code, including passwords, with an API call to Secrets Manager to retrieve the secret programmatically. +This helps ensure the secret can’t be compromised by someone examining your code, because the secret no longer exists in the code.

+
+
+

You can find more information about Secrets Manager at the AWS Secrets Manager website.

+
+
+ + + + + +
+ + +The Secrets Manager extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client (by default) or the AWS CRT-based HTTP client

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use Secrets Manager locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 17+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    An AWS Account to access the Secrets Manager service

    +
  • +
  • +

    Docker for your system to run Secrets Manager locally for testing purposes

    +
  • +
+
+
+

Provision Secrets Manager locally via Dev Services

+
+

The easiest way to start working with Secrets Manager is to run a local instance using Dev Services.

+
+
+
+

Provision Secrets Manager locally manually

+
+

You can also set up a local version of Secrets Manager manually, first start a LocalStack container:

+
+
+
+
docker run --rm --name local-secrets-manager --publish 4566:4584 -e SERVICES=secretsmanager -e START_WEB=0 -d localstack/localstack:3.0.1
+
+
+
+

This starts a Secrets Manager instance that is accessible on port 4566.

+
+
+

Create an AWS profile for your local instance using AWS CLI:

+
+
+
+
$ aws configure --profile localstack
+AWS Access Key ID [None]: test-key
+AWS Secret Access Key [None]: test-secret
+Default region name [None]: us-east-1
+Default output format [None]:
+
+
+
+
+
+
+

Solution

+
+
+

The application built here allows to store and retrieve credentials using Secrets Manager.

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step. +However, you can go right to the completed example.

+
+
+

Clone the Git repository: git clone https://github.com/quarkusio/quarkus-quickstarts.git, or download an archive.

+
+
+

The solution is located in the amazon-secretsmanager-quickstart directory.

+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.8.0:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-secretsmanager-quickstart \
+    -DclassName="org.acme.secretsmanager.QuarkusSecretsManagerSyncResource" \
+    -Dpath="/sync" \
+    -Dextensions="resteasy,resteasy-jackson,amazon-secretsmanager,resteasy-mutiny"
+cd amazon-secretsmanager-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy/JAX-RS, Mutiny and Amazon Secrets Manager Client extensions. +After this, the amazon-secretsmanager extension has been added to your pom.xml as well as the Mutiny support for RESTEasy.

+
+
+
+
+

Creating JSON REST service

+
+
+

In this example, we will create an application that allows us to store and retrieve parameters to and from Secrets Manager store using a RESTful API. +The example application will demonstrate the two programming models supported by the extension.

+
+
+

Let’s start with an abstract org.acme.secretsmanager.QuarkusSecretsManagerResource class to provide the common functionality we will need for both the synchronous and asynchrounous exposures.

+
+
+
+
package org.acme.secretsmanager;
+
+import static java.lang.Boolean.TRUE;
+import static java.util.stream.Collectors.toMap;
+
+import java.util.Map;
+import java.util.stream.Collector;
+
+import jakarta.annotation.PostConstruct;
+
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+
+import software.amazon.awssdk.services.secretsmanager.model.CreateSecretRequest;
+import software.amazon.awssdk.services.secretsmanager.model.GetSecretValueRequest;
+
+public abstract class QuarkusSecretsManagerResource {
+    public static final String VERSION_STAGE = "AWSCURRENT";
+
+    @ConfigProperty(name = "secret.name") (1)
+    String secretName;
+
+    protected GetSecretValueRequest generateGetSecretValueRequest() {
+        return GetSecretValueRequest.builder() (2)
+                .secretId(secretName)
+                .versionStage(VERSION_STAGE)
+                .build();
+    }
+
+    protected CreateSecretRequest generateCreateSecretRequest(String name, String secret) {
+        return CreateSecretRequest.builder() (3)
+                .name(name)
+                .secretString(secret)
+                .build();
+    }
+
+}
+
+
+
+ + + + + + + + + + + + + +
1Inject a configured name under which is stored the secret
2Generate a request for the credentials with the configured name
3Generate a request to create a specific secret
+
+
+

Now, we can extend the class and create the synchronous implementation in the org.acme.secretsmanager.QuarkusSecretsManagerSyncResource class.

+
+
+
+
package org.acme.secretsmanager;
+
+import java.util.Map;
+
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.DefaultValue;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.PUT;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+
+import software.amazon.awssdk.services.secretsmanager.SecretsManagerClient;
+
+@Path("/sync")
+public class QuarkusSecretsManagerSyncResource extends QuarkusSecretsManagerResource {
+
+    @Inject (1)
+    SecretsManagerClient secretsManagerClient;
+
+    @GET
+    @Produces(MediaType.APPLICATION_JSON)
+    public String getSecret() {
+        return secretsManagerClient.getSecretValue(generateGetSecretValueRequest()).secretString();
+    }
+
+    @POST
+    @Path("/{name}")
+    @Consumes(MediaType.TEXT_PLAIN)
+    public void createSecret(String name, String value) {
+        secretsManagerClient.createSecret(generateCreateSecretRequest(name, secret));
+    }
+
+}
+
+
+
+ + + + + +
1Inject the client provided by the amazon-secretsmanager extension
+
+
+

Using the Amazon Secrets Manager SDK, we can easily store and retrieve secrets.

+
+
+
+
+

Configuring Secrets Manager clients

+
+
+

Both Secrets Manager clients (sync and async) are configurable via the application.properties file that can be provided in the src/main/resources directory. +Additionally, you need to add to the classpath a proper implementation of the sync client. By default the extension uses the URL connection HTTP client, so +you need to add a URL connection client dependency to the pom.xml file:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.secretsmanager.sync-client.type=apache
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.secretsmanager.sync-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+

If you’re going to use a local Secrets Manager instance, configure it as follows:

+
+
+
+
quarkus.secretsmanager.endpoint-override=http://localhost:4566 (1)
+
+quarkus.secretsmanager.aws.region=us-east-1 (2)
+quarkus.secretsmanager.aws.credentials.type=static (3)
+quarkus.secretsmanager.aws.credentials.static-provider.access-key-id=test-key
+quarkus.secretsmanager.aws.credentials.static-provider.secret-access-key=test-secret
+
+
+
+ + + + + + + + + + + + + +
1Override the Secret Manager client to use LocalStack instead of the actual AWS service
2Localstack defaults to us-east-1
3The static credentials provider lets you set the access-key-id and secret-access-key directly
+
+
+

If you want to work with an AWS account, you can simply remove or comment out all Amazon Secrets Manager related properties. By default, the Secrets Manager client extension will use the default credentials provider chain that looks for credentials in this order:

+
+
+
    +
  • +

    Java System Properties - aws.accessKeyId and aws.secretAccessKey

    +
  • +
  • +

    Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

    +
  • +
  • +

    Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

    +
  • +
  • +

    Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

    +
  • +
  • +

    Instance profile credentials delivered through the Amazon EC2 metadata service

    +
  • +
+
+
+

And the region from your AWS CLI profile will be used.

+
+
+
+
+

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can then be run with java -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

Create a org.acme.secretsmanager.QuarkusSecretsManagerAsyncResource REST resource that will be similar to our QuarkusSecretsManagerSyncResource but using an asynchronous programming model.

+
+
+
+
package org.acme.secretsmanager;
+
+import java.util.Map;
+
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.DefaultValue;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.PUT;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+
+import io.smallrye.mutiny.Uni;
+import software.amazon.awssdk.services.secretsmanager.SecretsManagerAsyncClient;
+
+@Path("/async")
+public class QuarkusSecretsManagerAsyncResource extends QuarkusSecretsManagerResource {
+
+    @Inject
+    SecretsManagerAsyncClient secretsManagerAsyncClient;
+
+    @GET
+    @Produces(MediaType.APPLICATION_JSON)
+    public Uni<String> getSecret() {
+        return Uni.createFrom().completionStage(secretsManagerAsyncClient.getSecretValue(generateGetSecretValueRequest()))
+                .onItem().transform(r -> r.secretString());
+    }
+
+    @PUT
+    @Path("/{name}")
+    @Consumes(MediaType.TEXT_PLAIN)
+    public Uni<Void> createSecret(String name, String value) {
+
+        return Uni.createFrom().completionStage(secretsManagerAsyncClient.createSecret(generateCreateSecretRequest(name, secret)))
+                .onItem().transform(r -> null);
+    }
+
+}
+
+
+
+

Note that the SecretsManagerAsyncClient behaves just like the SecretsManagerClient, but returns CompletionStage objects which we use to create Uni instances, and then transform the emitted item.

+
+
+

To enable the asynchronous client, we also need to add the Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.secretsmanager.async-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/dev/amazon-ses.html b/quarkus-amazon-services/dev/amazon-ses.html new file mode 100644 index 0000000000..5bc6b11ac0 --- /dev/null +++ b/quarkus-amazon-services/dev/amazon-ses.html @@ -0,0 +1,3312 @@ + + + + + + Amazon SES Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon SES Client

+
+
+
+

Amazon Simple Email Service (SES) is a flexible and highly-scalable email sending and receiving service. +Using SES, you can send emails with any type of correspondence. You can find more information about SES at the Amazon SES website.

+
+
+ + + + + +
+ + +The SES extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client (by default) or the AWS CRT-based HTTP client

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use SES locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 17+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    An AWS Account to access the SES service

    +
  • +
  • +

    Docker for your system to run SES locally for testing purposes

    +
  • +
+
+
+

Provision SES locally via Dev Services

+
+

The easiest way to start working with SES is to run a local instance using Dev Services. +However, local instance of SES is only mocks the SES APIs without the actual email sending capabilities. You can still use it for this guide to verify an API communication or integration test purposes.

+
+
+
+

Provision SES locally manually

+
+

You can also set up a local version of SES manually, first start a LocalStack container:

+
+
+
+
docker run --rm --name local-ses -p 4566:4579 -e SERVICES=ses -e START_WEB=0 -d localstack/localstack:3.0.1
+
+
+
+

This starts a SES instance that is accessible on port 4566.

+
+
+

Create an AWS profile for your local instance using AWS CLI:

+
+
+
+
$ aws configure --profile localstack
+AWS Access Key ID [None]: test-key
+AWS Secret Access Key [None]: test-secret
+Default region name [None]: us-east-1
+Default output format [None]: text
+
+
+
+
+
+
+

Using SES on your AWS account

+
+
+

Amazon applies certain restrictions to new Amazon SES accounts, mainly to prevent fraud and abuse. All new accounts are in the Amazon SES sandbox. +All the features of the Amazon SES are still available while in sandbox, but a following restrictions applies: +- You can send mail to verified email addresses and domains or to the Amazon SES mailbox simulator +- You can only send mail from verified email addresses and domains +- You can send a maximum of 1 message per second.

+
+
+

Going production, you’d need to get your account of the sandbox following the Amazon procedure.

+
+
+

Set up AWS SES

+
+

We assume you are going to use AWS SES sandbox for the sake of this guide. But before sending any email, you must verify sender and recipient email addresses using AWS CLI. +You can use your personal email or any temporary email service available if you wish.

+
+
+
+
aws ses verify-email-identity --email-address <sender@email.address>
+aws ses verify-email-identity --email-address <recipient@email.address>
+
+
+
+

Now, you need to open a mailboxes of those email addresses in order to follow confirmation procedure. Once email is approved you can use it in your application.

+
+
+

If you are using local SES you still need to verify email addresses, otherwise your send email in order to let local SES accepting your request. +However, no emails to be send as it only mocks the service APIs.

+
+
+
+
aws ses verify-email-identity --email-address <sender@email.address> --profile localstack --endpoint-url=http://localhost:4566
+aws ses verify-email-identity --email-address <recipient@email.address> --profile localstack --endpoint-url=http://localhost:4566
+
+
+
+
+
+
+

Solution

+
+
+

The application built here allows sending text emails to the recipients that are verified on AWS SES.

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step. +However, you can go right to the completed example.

+
+
+

Clone the Git repository: git clone https://github.com/quarkusio/quarkus-quickstarts.git, or download an archive.

+
+
+

The solution is located in the amazon-ses-quickstart directory.

+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.8.0:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-ses-quickstart \
+    -DclassName="org.acme.ses.QuarkusSesSyncResource" \
+    -Dpath="/sync" \
+    -Dextensions="resteasy-reactive-jackson,amazon-ses"
+cd amazon-ses-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy Reactive/JAX-RS and Amazon SES Client extensions. +After this, the amazon-ses extension has been added to your pom.xml as well as the Mutiny support for RESTEasy.

+
+
+
+
+

Creating JSON REST service

+
+
+

Lets create a org.acme.ses.QuarkusSesSyncResource that will provide an API to send emails using the synchronous client.

+
+
+
+
package org.acme.ses;
+
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import org.acme.ses.model.Email;
+import software.amazon.awssdk.services.ses.SesClient;
+
+@Path("/sync")
+@Produces(MediaType.TEXT_PLAIN)
+@Consumes(MediaType.APPLICATION_JSON)
+public class QuarkusSesSyncResource {
+
+    @Inject
+    SesClient ses;
+
+    @POST
+    @Path("/email")
+    public String encrypt(Email data) {
+        return ses.sendEmail(req -> req
+            .source(data.getFrom())
+            .destination(d -> d.toAddresses(data.getTo()))
+            .message(msg -> msg
+                .subject(sub -> sub.data(data.getSubject()))
+                .body(b -> b.text(txt -> txt.data(data.getBody()))))).messageId();
+    }
+}
+
+
+
+
+
+

Configuring SES clients

+
+
+

Both SES clients (sync and async) are configurable via the application.properties file that can be provided in the src/main/resources directory. +Additionally, you need to add to the classpath a proper implementation of the sync client. By default the extension uses the URL connection HTTP client, so +you need to add a URL connection client dependency to the pom.xml file:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.ses.sync-client.type=apache
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.ses.sync-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+

If you’re going to use a local SES instance, configure it as follows:

+
+
+
+
quarkus.ses.endpoint-override=http://localhost:4566
+
+quarkus.ses.aws.region=us-east-1
+quarkus.ses.aws.credentials.type=static
+quarkus.ses.aws.credentials.static-provider.access-key-id=test-key
+quarkus.ses.aws.credentials.static-provider.secret-access-key=test-secret
+
+
+
+
    +
  • +

    quarkus.ses.aws.region - It’s required by the client, but since you’re using a local SES instance use us-east-1 as it’s a default region of LocalStack’s SES.

    +
  • +
  • +

    quarkus.ses.aws.credentials.type - Set static credentials provider with any values for access-key-id and secret-access-key

    +
  • +
  • +

    quarkus.ses.endpoint-override - Override the SES client to use a local instance instead of an AWS service

    +
  • +
+
+
+

If you want to work with an AWS account, you can simply remove or comment out all Amazon SES related properties. By default, the SES client extension +will use the default credentials provider chain that looks for credentials in this order:

+
+
+
    +
  • +

    Java System Properties - aws.accessKeyId and aws.secretAccessKey

    +
  • +
  • +

    Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

    +
  • +
  • +

    Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

    +
  • +
  • +

    Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

    +
  • +
  • +

    Instance profile credentials delivered through the Amazon EC2 metadata service

    +
  • +
+
+
+

And the region from your AWS CLI profile will be used.

+
+
+
+
+

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can be run with java -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

Create a org.acme.ses.QuarkusSesAsyncResource REST resource that will be similar to our QuarkusSesSyncResource but using an asynchronous programming model.

+
+
+
+
package org.acme.ses;
+
+import io.smallrye.mutiny.Uni;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import org.acme.ses.model.Email;
+import software.amazon.awssdk.services.ses.SesAsyncClient;
+import software.amazon.awssdk.services.ses.model.SendEmailResponse;
+
+@Path("/async")
+@Produces(MediaType.TEXT_PLAIN)
+@Consumes(MediaType.APPLICATION_JSON)
+public class QuarkusSesAsyncResource {
+
+    @Inject
+    SesAsyncClient ses;
+
+    @POST
+    @Path("/email")
+    public Uni<String> encrypt(Email data) {
+        return Uni.createFrom()
+            .completionStage(
+                ses.sendEmail(req -> req
+                    .source(data.getFrom())
+                    .destination(d -> d.toAddresses(data.getTo()))
+                    .message(msg -> msg
+                        .subject(sub -> sub.data(data.getSubject()))
+                        .body(b -> b.text(txt -> txt.data(data.getBody()))))))
+            .onItem().apply(SendEmailResponse::messageId);
+    }
+}
+
+
+
+

We create Uni instances from the CompletionStage objects returned by the asynchronous SES client, and then transform the emitted item.

+
+
+

And we need to add the Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.ses.async-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_SES_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_SES_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_SES_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_SES_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_SES_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_SES_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_SES_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_SES_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SES_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SES_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_SES_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_SES_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/dev/amazon-sfn.html b/quarkus-amazon-services/dev/amazon-sfn.html new file mode 100644 index 0000000000..b39f4a0724 --- /dev/null +++ b/quarkus-amazon-services/dev/amazon-sfn.html @@ -0,0 +1,3216 @@ + + + + + + Amazon SFN Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon SFN Client

+
+
+
+

Amazon AWS Step Functions (SFN) is a cloud service that enables you to coordinate and automate the execution of multiple AWS services in a serverless workflow. +It allows you to design, visualize, and execute workflows using a state machine architecture. +With SFN, you can seamlessly integrate various AWS services, including Lambda functions, Amazon S3, Amazon DynamoDB, and others, into a cohesive and scalable workflow.

+
+
+

You can find more information about SFN at the Amazon SFN website.

+
+
+ + + + + +
+ + +The SFN extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client (by default) or the AWS CRT-based HTTP client

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use SFN locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 17+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    An AWS Account to access the SFN service

    +
  • +
  • +

    Optionally, Docker for your system to run SFN locally for testing purposes

    +
  • +
+
+
+

Provision SFN locally via Dev Services

+
+

The easiest way to start working with SFN is to run a local instance using Dev Services.

+
+
+
+

Provision SFN locally manually

+
+

You can also set up a local version of SFN manually, first start a LocalStack container:

+
+
+
+
docker run -it --publish 4566:4566 -e SERVICES=stepfunctions -e START_WEB=0 localstack/localstack:3.0.1
+
+
+
+

This starts a SFN instance that is accessible on port 4566.

+
+
+

Create an AWS profile for your local instance using AWS CLI:

+
+
+
+
$ aws configure --profile localstack
+AWS Access Key ID [None]: test-key
+AWS Secret Access Key [None]: test-secret
+Default region name [None]: us-east-1
+Default output format [None]: text
+
+
+
+
+

Create a SFN state machine

+
+

Create a SFN state machine using AWS CLI and store the state machine ARN in a STATE_MACHINE_ARN variable:

+
+
+
+
STATE_MACHINE_ARN=$(aws stepfunctions create-state-machine --definition "{\
+  \"Comment\": \"A Hello World example of the Amazon States Language using a Pass state\",\
+  \"StartAt\": \"HelloWorld\",\
+  \"States\": {\
+    \"HelloWorld\": {\
+      \"Type\": \"Pass\",\
+      \"End\": true\
+    }\
+  }}" --name "HelloWorld" --role-arn "arn:aws:iam::012345678901:role/DummyRole"  --endpoint-url http://localhost:4566 --profile localstack --query stateMachineArn --output text)
+
+
+
+

Start an execution using the ARN of the state machine you created and store the execution ARN in a EXECUTION_ARN variable:

+
+
+
+
EXECUTION_ARN=$(aws stepfunctions start-execution --state-machine-arn "$STATE_MACHINE_ARN" --endpoint-url http://localhost:4566 --profile localstack --query executionArn --output text)
+
+
+
+

Finally, get the information about the state machine execution:

+
+
+
+
aws stepfunctions describe-execution --execution-arn "$EXECUTION_ARN" --endpoint-url http://localhost:4566 --profile localstack
+
+
+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.8.0:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-sfn-quickstart \
+    -DclassName="org.acme.sfn.QuarkusSfnSyncResource" \
+    -Dpath="/sync" \
+    -Dextensions="resteasy-reactive-jackson,amazon-sfn"
+cd amazon-sfn-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy Reactive/JAX-RS and Amazon SFN Client extensions. +After this, the amazon-sfn extension has been added to your pom.xml as well as the Mutiny support for RESTEasy.

+
+
+
+
+

Configuring SFN clients

+
+
+

Both SFN clients (sync and async) are configurable via the application.properties file that can be provided in the src/main/resources directory. +Additionally, you need to add to the classpath a proper implementation of the sync client. By default, the extension uses URL connection HTTP client, so +you need to add a URL connection client dependency to the pom.xml file:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.sfn.sync-client.type=apache
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.sfn.sync-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+

If you’re going to use a local SFN instance, configure it as follows:

+
+
+
+
quarkus.sfn.endpoint-override=http://localhost:4566
+
+quarkus.sfn.aws.region=us-east-1
+quarkus.sfn.aws.credentials.type=static
+quarkus.sfn.aws.credentials.static-provider.access-key-id=test-key
+quarkus.sfn.aws.credentials.static-provider.secret-access-key=test-secret
+
+
+
+
    +
  • +

    quarkus.sfn.aws.region - It’s required by the client, but since you’re using a local SFN instance you can pick any valid AWS region.

    +
  • +
  • +

    quarkus.sfn.aws.credentials.type - Set static credentials provider with any values for access-key-id and secret-access-key

    +
  • +
  • +

    quarkus.sfn.endpoint-override - Override the SFN client to use a local instance instead of an AWS service

    +
  • +
+
+
+

If you want to work with an AWS account, you’d need to set it with:

+
+
+
+
quarkus.sfn.aws.region=<YOUR_REGION>
+quarkus.sfn.aws.credentials.type=default
+
+
+
+
    +
  • +

    quarkus.sfn.aws.region you should set it to the region where you provisioned the SFN state machine,

    +
  • +
  • +

    quarkus.sfn.aws.credentials.type - use the default credentials provider chain that looks for credentials in this order:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

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

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can then be run with java -Dparameters.path=/quarkus/is/awesome/ -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

We need to add Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.sfn.async-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_SFN_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_SFN_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_SFN_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_SFN_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_SFN_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_SFN_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_SFN_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_SFN_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SFN_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SFN_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_SFN_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_SFN_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/dev/amazon-sns.html b/quarkus-amazon-services/dev/amazon-sns.html new file mode 100644 index 0000000000..40fe54ce93 --- /dev/null +++ b/quarkus-amazon-services/dev/amazon-sns.html @@ -0,0 +1,3960 @@ + + + + + + Amazon SNS Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon SNS Client

+
+
+
+

Amazon Simple Notification Service (SNS) is a highly available and fully managed pub/sub messaging service. +It provides topics for high-throughput, push-based, many-to-many messaging. Messages can fan out to a large number of subscriber endpoints for +parallel processing, including Amazon SQS queues, AWS Lambda functions, and HTTP/S webhooks. Additionally, SNS can be used +to fan out notifications to end users using mobile push, SMS and email.

+
+
+

You can find more information about SNS at the Amazon SNS website.

+
+
+ + + + + +
+ + +The SNS extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client (by default) or the AWS CRT-based HTTP client

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use SNS locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 17+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    An AWS Account to access the SNS service

    +
  • +
  • +

    Optionally, Docker for your system to run SNS locally for testing purposes

    +
  • +
+
+
+

Provision SNS locally via Dev Services

+
+

The easiest way to start working with SNS is to run a local instance using Dev Services.

+
+
+
+

Provision SNS locally manually

+
+

You can also set up a local version of SNS manually, first start a LocalStack container:

+
+
+
+
docker run -it --publish 4566:4575 -e SERVICES=sns -e START_WEB=0 localstack/localstack:3.0.1
+
+
+
+

This starts a SNS instance that is accessible on port 4566.

+
+
+

Create an AWS profile for your local instance using AWS CLI:

+
+
+
+
$ aws configure --profile localstack
+AWS Access Key ID [None]: test-key
+AWS Secret Access Key [None]: test-secret
+Default region name [None]: us-east-1
+Default output format [None]: text
+
+
+
+
+

Create a SNS topic

+
+

Create a SNS topic using AWS CLI and store in TOPIC_ARN environment variable

+
+
+
+
TOPIC_ARN=`aws sns create-topic --name=QuarksCollider --profile localstack --endpoint-url=http://localhost:4566`
+
+
+
+ + + + + +
+ + +
+

If you are using LocalStack, some additional configuration is needed:

+
+
+
    +
  • +

    Set the quarkus.shield.base.url configuration property in your application.properties to your IP address instead of localhost.

    +
  • +
  • +

    Set the quarkus.http.host configuration property in your application.properties to 0.0.0.0. +Be aware that Quarkus will then listen to all interfaces, which might be a security hazard depending on your network configuration.

    +
  • +
+
+
+

Otherwise your service will not receive the notifications.

+
+
+
+
+

If you want to run the demo using SNS on your AWS account, you can create a topic using AWS default profile

+
+
+
+
TOPIC_ARN=`aws sns create-topic --name=QuarksCollider`
+
+
+
+
+
+
+

Solution

+
+
+

The application built here allows to shoot elementary particles (quarks) into a QuarksCollider topic of the AWS SNS. +Additionally, we create a resource that allows to subscribe to the QuarksCollider topic in order to receive published quarks.

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step. +However, you can go right to the completed example.

+
+
+

Clone the Git repository: git clone https://github.com/quarkusio/quarkus-quickstarts.git, or download an archive.

+
+
+

The solution is located in the amazon-sns-quickstart directory.

+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.8.0:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-sns-quickstart \
+    -DclassName="org.acme.sns.QuarksCannonSyncResource" \
+    -Dpath="/sync-cannon" \
+    -Dextensions="resteasy-reactive-jackson,amazon-sns"
+cd amazon-sns-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy Reactive/JAX-RS and Amazon SNS Client extensions. +After this, the amazon-sns extension has been added to your pom.xml as well as the Mutiny support for RESTEasy.

+
+
+
+
+

Creating JSON REST service

+
+
+

In this example, we will create an application that allows to publish quarks. The example application will demonstrate the two programming models supported by the extension.

+
+
+

First, let’s create the Quark bean as follows:

+
+
+
+
package org.acme.sns.model;
+
+import io.quarkus.runtime.annotations.RegisterForReflection;
+import java.util.Objects;
+
+@RegisterForReflection
+public class Quark {
+
+    private String flavor;
+    private String spin;
+
+    public Quark() {
+    }
+
+    public String getFlavor() {
+        return flavor;
+    }
+
+    public void setFlavor(String flavor) {
+        this.flavor = flavor;
+    }
+
+    public String getSpin() {
+        return spin;
+    }
+
+    public void setSpin(String spin) {
+        this.spin = spin;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (!(obj instanceof Quark)) {
+            return false;
+        }
+
+        Quark other = (Quark) obj;
+
+        return Objects.equals(other.flavor, this.flavor);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(this.flavor);
+    }
+}
+
+
+
+

Then, create a org.acme.sns.QuarksCannonSyncResource that will provide an API to shoot quarks into the SNS topic via the SNS synchronous client.

+
+
+ + + + + +
+ + +The @RegisterForReflection annotation instructs Quarkus to keep the class and its members during the native compilation. More details about the @RegisterForReflection annotation can be found on the native application tips page. +
+
+
+
+
package org.acme.sns;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectWriter;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+import org.acme.sns.model.Quark;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import org.jboss.logging.Logger;
+import software.amazon.awssdk.services.sns.SnsClient;
+import software.amazon.awssdk.services.sns.model.PublishResponse;
+
+@Path("/sync/cannon")
+@Produces(MediaType.TEXT_PLAIN)
+public class QuarksCannonSyncResource {
+
+    private static final Logger LOGGER = Logger.getLogger(QuarksCannonSyncResource.class);
+
+    @Inject
+    SnsClient sns;
+
+    @ConfigProperty(name = "topic.arn")
+    String topicArn;
+
+    static ObjectWriter QUARK_WRITER = new ObjectMapper().writerFor(Quark.class);
+
+    @POST
+    @Path("/shoot")
+    @Consumes(MediaType.APPLICATION_JSON)
+    public Response publish(Quark quark) throws Exception {
+        String message = QUARK_WRITER.writeValueAsString(quark);
+        PublishResponse response = sns.publish(p -> p.topicArn(topicArn).message(message));
+        LOGGER.infov("Fired Quark[{0}, {1}}]", quark.getFlavor(), quark.getSpin());
+        return Response.ok().entity(response.messageId()).build();
+    }
+}
+
+
+
+

Because of the fact that messages published must be simply a String we’re using Jackson’s ObjectWriter in order to serialize our Quark objects into a String.

+
+
+

The missing piece is the subscriber that will receive the messages published to our topic. Before implementing subscribers, we need to define POJO classes representing messages posted by the AWS SNS.

+
+
+

Let’s create two classes that represent SNS Notification and SNS Subscription Confirmation messages based on the AWS SNS Message and JSON formats

+
+
+

Create org.acme.sns.model.SnsNotification class

+
+
+
+
package org.acme.sns.model;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class SnsNotification {
+
+    @JsonProperty("Message")
+    private String message;
+
+    @JsonProperty("MessageId")
+    private String messageId;
+
+    @JsonProperty("Signature")
+    private String signature;
+
+    @JsonProperty("SignatureVersion")
+    private String signatureVersion;
+
+    @JsonProperty("SigningCertURL")
+    private String signinCertUrl;
+
+    @JsonProperty("Subject")
+    private String subject;
+
+    @JsonProperty("Timestamp")
+    private String timestamp;
+
+    @JsonProperty("TopicArn")
+    private String topicArn;
+
+    @JsonProperty("Type")
+    private String type;
+
+    @JsonProperty("UnsubscribeURL")
+    private String unsubscribeURL;
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
+    public String getMessageId() {
+        return messageId;
+    }
+
+    public void setMessageId(String messageId) {
+        this.messageId = messageId;
+    }
+
+    public String getSignature() {
+        return signature;
+    }
+
+    public void setSignature(String signature) {
+        this.signature = signature;
+    }
+
+    public String getSignatureVersion() {
+        return signatureVersion;
+    }
+
+    public void setSignatureVersion(String signatureVersion) {
+        this.signatureVersion = signatureVersion;
+    }
+
+    public String getSigninCertUrl() {
+        return signinCertUrl;
+    }
+
+    public void setSigninCertUrl(String signinCertUrl) {
+        this.signinCertUrl = signinCertUrl;
+    }
+
+    public String getSubject() {
+        return subject;
+    }
+
+    public void setSubject(String subject) {
+        this.subject = subject;
+    }
+
+    public String getTimestamp() {
+        return timestamp;
+    }
+
+    public void setTimestamp(String timestamp) {
+        this.timestamp = timestamp;
+    }
+
+    public String getTopicArn() {
+        return topicArn;
+    }
+
+    public void setTopicArn(String topicArn) {
+        this.topicArn = topicArn;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getUnsubscribeURL() {
+        return unsubscribeURL;
+    }
+
+    public void setUnsubscribeURL(String unsubscribeURL) {
+        this.unsubscribeURL = unsubscribeURL;
+    }
+}
+
+
+
+

Then, create org.acme.sns.SnsSubscriptionConfirmation

+
+
+
+
package org.acme.sns.model;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class SnsSubscriptionConfirmation {
+
+    @JsonProperty("Message")
+    private String message;
+
+    @JsonProperty("MessageId")
+    private String messageId;
+
+    @JsonProperty("Signature")
+    private String signature;
+
+    @JsonProperty("SignatureVersion")
+    private String signatureVersion;
+
+    @JsonProperty("SigningCertURL")
+    private String signingCertUrl;
+
+    @JsonProperty("SubscribeURL")
+    private String subscribeUrl;
+
+    @JsonProperty("Timestamp")
+    private String timestamp;
+
+    @JsonProperty("Token")
+    private String token;
+
+    @JsonProperty("TopicArn")
+    private String topicArn;
+
+    @JsonProperty("Type")
+    private String type;
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
+    public String getMessageId() {
+        return messageId;
+    }
+
+    public void setMessageId(String messageId) {
+        this.messageId = messageId;
+    }
+
+    public String getSignature() {
+        return signature;
+    }
+
+    public void setSignature(String signature) {
+        this.signature = signature;
+    }
+
+    public String getSignatureVersion() {
+        return signatureVersion;
+    }
+
+    public void setSignatureVersion(String signatureVersion) {
+        this.signatureVersion = signatureVersion;
+    }
+
+    public String getSigningCertUrl() {
+        return signingCertUrl;
+    }
+
+    public void setSigningCertUrl(String signingCertUrl) {
+        this.signingCertUrl = signingCertUrl;
+    }
+
+    public String getSubscribeUrl() {
+        return subscribeUrl;
+    }
+
+    public void setSubscribeUrl(String subscribeUrl) {
+        this.subscribeUrl = subscribeUrl;
+    }
+
+    public String getTimestamp() {
+        return timestamp;
+    }
+
+    public void setTimestamp(String timestamp) {
+        this.timestamp = timestamp;
+    }
+
+    public String getToken() {
+        return token;
+    }
+
+    public void setToken(String token) {
+        this.token = token;
+    }
+
+    public String getTopicArn() {
+        return topicArn;
+    }
+
+    public void setTopicArn(String topicArn) {
+        this.topicArn = topicArn;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+}
+
+
+
+

Now, create org.acme.QuarksShieldSyncResource REST resources that: +- Allows to subscribe itself to our SNS topic +- Unsubscribe from the SNS topic +- Receive notifications from the subscribed SNS topic

+
+
+ + + + + +
+ + +Keep in mind that AWS SNS supports multiple types of subscribers (that is web servers, email addresses, AWS SQS queues, AWS Lambda functions, and many more), but for the sake of the +quickstart we will show how to subscribe an HTTP endpoint served by our application. +
+
+
+
+
package org.acme.sns;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectReader;
+import java.util.HashMap;
+import java.util.Map;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.HeaderParam;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+import org.acme.sns.model.Quark;
+import org.acme.sns.model.SnsNotification;
+import org.acme.sns.model.SnsSubscriptionConfirmation;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import org.jboss.logging.Logger;
+import software.amazon.awssdk.services.sns.SnsClient;
+import software.amazon.awssdk.services.sns.model.SubscribeResponse;
+
+@Path("/sync/shield")
+public class QuarksShieldSyncResource {
+
+    private static final Logger LOGGER = Logger.getLogger(QuarksShieldSyncResource.class);
+
+    private static final String NOTIFICATION_TYPE = "Notification";
+    private static final String SUBSCRIPTION_CONFIRMATION_TYPE = "SubscriptionConfirmation";
+    private static final String UNSUBSCRIPTION_CONFIRMATION_TYPE = "UnsubscribeConfirmation";
+
+    @Inject
+    SnsClient sns;
+
+    @ConfigProperty(name = "topic.arn")
+    String topicArn;
+
+    @ConfigProperty(name = "quarks.shield.base.url")
+    String quarksShieldBaseUrl;
+
+    private volatile String subscriptionArn;
+
+    static Map<Class<?>, ObjectReader> READERS = new HashMap<>();
+
+    static {
+        READERS.put(SnsNotification.class, new ObjectMapper().readerFor(SnsNotification.class));
+        READERS.put(SnsSubscriptionConfirmation.class, new ObjectMapper().readerFor(SnsSubscriptionConfirmation.class));
+        READERS.put(Quark.class, new ObjectMapper().readerFor(Quark.class));
+    }
+
+    @POST
+    @Consumes({MediaType.TEXT_PLAIN})
+    public Response notificationEndpoint(@HeaderParam("x-amz-sns-message-type") String messageType, String message) throws JsonProcessingException {
+        if (messageType == null) {
+            return Response.status(400).build();
+        }
+
+        if (messageType.equals(NOTIFICATION_TYPE)) {
+            SnsNotification notification = readObject(SnsNotification.class, message);
+            Quark quark = readObject(Quark.class, notification.getMessage());
+            LOGGER.infov("Quark[{0}, {1}] collision with the shield.", quark.getFlavor(), quark.getSpin());
+        } else if (messageType.equals(SUBSCRIPTION_CONFIRMATION_TYPE)) {
+            SnsSubscriptionConfirmation subConf = readObject(SnsSubscriptionConfirmation.class, message);
+            sns.confirmSubscription(cs -> cs.topicArn(topicArn).token(subConf.getToken()));
+            LOGGER.info("Subscription confirmed. Ready for quarks collisions.");
+        } else if (messageType.equals(UNSUBSCRIPTION_CONFIRMATION_TYPE)) {
+            LOGGER.info("We are unsubscribed");
+        } else {
+            return Response.status(400).entity("Unknown messageType").build();
+        }
+
+        return Response.ok().build();
+    }
+
+    @POST
+    @Path("/subscribe")
+    public Response subscribe() {
+        String notificationEndpoint = notificationEndpoint();
+        SubscribeResponse response = sns.subscribe(s -> s.topicArn(topicArn).protocol("http").endpoint(notificationEndpoint));
+        subscriptionArn = response.subscriptionArn();
+        LOGGER.infov("Subscribed Quarks shield <{0}> : {1} ", notificationEndpoint, response.subscriptionArn());
+        return Response.ok().entity(response.subscriptionArn()).build();
+    }
+
+    @POST
+    @Path("/unsubscribe")
+    public Response unsubscribe() {
+        if (subscriptionArn != null) {
+            sns.unsubscribe(s -> s.subscriptionArn(subscriptionArn));
+            LOGGER.infov("Unsubscribed quarks shield for id = {0}", subscriptionArn);
+            return Response.ok().build();
+        } else {
+            LOGGER.info("Not subscribed yet");
+            return Response.status(400).entity("Not subscribed yet").build();
+        }
+    }
+
+    private String notificationEndpoint() {
+        return quarksShieldBaseUrl + "/sync/shield";
+    }
+
+    private <T> T readObject(Class<T> clazz, String message) {
+        T object = null;
+        try {
+            object = READERS.get(clazz).readValue(message);
+        } catch (JsonProcessingException e) {
+            LOGGER.errorv("Unable to deserialize message <{0}> to Class <{1}>", message, clazz.getSimpleName());
+            throw new RuntimeException(e);
+        }
+        return object;
+    }
+}
+
+
+
+
    +
  1. +

    subscribe() endpoint subscribes to our topic by providing the URL to the POST endpoint receiving SNS notification requests.

    +
  2. +
  3. +

    unsubscribe() simply removes our subscription, so any messages published to the topic will not be routed to our endpoint anymore

    +
  4. +
  5. +

    notificationEndpoint() is called by SNS on new message if endpoint is subscribed. +See Amazon SNS message and JSON formats for details about the format of the messages SNS can submit.

    +
  6. +
+
+
+
+
+

Configuring SNS clients

+
+
+

Both SNS clients (sync and async) are configurable via the application.properties file that can be provided in the src/main/resources directory. +Additionally, you need to add to the classpath a proper implementation of the sync client. By default the extension uses URL connection HTTP client, so +you need to add a URL connection client dependency to the pom.xml file:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.sns.sync-client.type=apache
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.sns.sync-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+

If you’re going to use a local SNS instance, configure it as follows:

+
+
+
+
quarkus.sns.endpoint-override=http://localhost:4566
+
+quarkus.sns.aws.region=us-east-1
+quarkus.sns.aws.credentials.type=static
+quarkus.sns.aws.credentials.static-provider.access-key-id=test-key
+quarkus.sns.aws.credentials.static-provider.secret-access-key=test-secret
+
+
+
+
    +
  • +

    quarkus.sns.aws.region - It’s required by the client, but since you’re using a local SNS instance you can pick any valid AWS region.

    +
  • +
  • +

    quarkus.sns.aws.credentials.type - Set static credentials provider with any values for access-key-id and secret-access-key

    +
  • +
  • +

    quarkus.sns.endpoint-override - Override the SNS client to use a local instance instead of an AWS service

    +
  • +
+
+
+

If you want to work with an AWS account, you’d need to set it with:

+
+
+
+
quarkus.sns.aws.region=<YOUR_REGION>
+quarkus.sns.aws.credentials.type=default
+
+
+
+
    +
  • +

    quarkus.sns.aws.region you should set it to the region where you provisioned the SNS table,

    +
  • +
  • +

    quarkus.sns.aws.credentials.type - use the default credentials provider chain that looks for credentials in this order:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

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

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can be run with java -Dtopic.arn=$TOPIC_ARN -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

Create a org.acme.sns.QuarksCannonAsyncResource REST resource that will be similar to our QuarksCannonSyncResource but using an asynchronous programming model.

+
+
+
+
package org.acme.sns;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectWriter;
+import io.smallrye.mutiny.Uni;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+import org.acme.sns.model.Quark;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import org.jboss.logging.Logger;
+import software.amazon.awssdk.services.sns.SnsAsyncClient;
+import software.amazon.awssdk.services.sns.model.PublishResponse;
+
+@Path("/async/cannon")
+@Produces(MediaType.APPLICATION_JSON)
+@Consumes(MediaType.APPLICATION_JSON)
+public class QuarksCannonAsyncResource {
+
+    private static final Logger LOGGER = Logger.getLogger(QuarksCannonAsyncResource.class);
+
+    @Inject
+    SnsAsyncClient sns;
+
+    @ConfigProperty(name = "topic.arn")
+    String topicArn;
+
+    static ObjectWriter QUARK_WRITER = new ObjectMapper().writerFor(Quark.class);
+
+    @POST
+    @Path("/shoot")
+    @Consumes(MediaType.APPLICATION_JSON)
+    public Uni<Response> publish(Quark quark) throws Exception {
+        String message = QUARK_WRITER.writeValueAsString(quark);
+        return Uni.createFrom()
+            .completionStage(sns.publish(p -> p.topicArn(topicArn).message(message)))
+            .onItem().invoke(item -> LOGGER.infov("Fired Quark[{0}, {1}}]", quark.getFlavor(), quark.getSpin()))
+            .onItem().transform(PublishResponse::messageId)
+            .onItem().transform(id -> Response.ok().entity(id).build());
+    }
+}
+
+
+
+

We create Uni instances from the CompletionStage objects returned by the asynchronous SNS client, and then transform the emitted item.

+
+
+

And corresponding async subscriber org.acme.sns.QuarksShieldAsyncResource

+
+
+
+
package org.acme.sns;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectReader;
+import io.smallrye.mutiny.Uni;
+import java.util.HashMap;
+import java.util.Map;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.HeaderParam;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+import org.acme.sns.model.Quark;
+import org.acme.sns.model.SnsNotification;
+import org.acme.sns.model.SnsSubscriptionConfirmation;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import org.jboss.logging.Logger;
+import software.amazon.awssdk.services.sns.SnsAsyncClient;
+import software.amazon.awssdk.services.sns.model.SubscribeResponse;
+
+@Path("/async/shield")
+public class QuarksShieldAsyncResource {
+
+    private static final Logger LOGGER = Logger.getLogger(QuarksShieldAsyncResource.class);
+
+    private static final String NOTIFICATION_TYPE = "Notification";
+    private static final String SUBSCRIPTION_CONFIRMATION_TYPE = "SubscriptionConfirmation";
+    private static final String UNSUBSCRIPTION_CONFIRMATION_TYPE = "UnsubscribeConfirmation";
+
+    @Inject
+    SnsAsyncClient sns;
+
+    @ConfigProperty(name = "topic.arn")
+    String topicArn;
+
+    @ConfigProperty(name = "quarks.shield.base.url")
+    String quarksShieldBaseUrl;
+
+    private volatile String subscriptionArn;
+
+    static Map<Class<?>, ObjectReader> READERS = new HashMap<>();
+
+    static {
+        READERS.put(SnsNotification.class, new ObjectMapper().readerFor(SnsNotification.class));
+        READERS.put(SnsSubscriptionConfirmation.class, new ObjectMapper().readerFor(SnsSubscriptionConfirmation.class));
+        READERS.put(Quark.class, new ObjectMapper().readerFor(Quark.class));
+    }
+
+    @POST
+    @Consumes({MediaType.TEXT_PLAIN})
+    public Uni<Response> notificationEndpoint(@HeaderParam("x-amz-sns-message-type") String messageType, String message) {
+        if (messageType == null) {
+            return Uni.createFrom().item(Response.status(400).build());
+        }
+
+        if (messageType.equals(NOTIFICATION_TYPE)) {
+            return Uni.createFrom().item(readObject(SnsNotification.class, message))
+                .onItem().transform(notification -> readObject(Quark.class, notification.getMessage()))
+                .onItem().invoke(quark -> LOGGER.infov("Quark[{0}, {1}] collision with the shield.", quark.getFlavor(), quark.getSpin()))
+                .onItem().transform(quark -> Response.ok().build());
+        } else if (messageType.equals(SUBSCRIPTION_CONFIRMATION_TYPE)) {
+            return Uni.createFrom().item(readObject(SnsSubscriptionConfirmation.class, message))
+                .onItem().transformToUni(msg ->
+                    Uni.createFrom().completionStage(
+                        sns.confirmSubscription(confirm -> confirm.topicArn(topicArn).token(msg.getToken())))
+                )
+                .onItem().invoke(resp -> LOGGER.info("Subscription confirmed. Ready for quarks collisions."))
+                .onItem().transform(resp -> Response.ok().build());
+        } else if (messageType.equals(UNSUBSCRIPTION_CONFIRMATION_TYPE)) {
+            LOGGER.info("We are unsubscribed");
+            return Uni.createFrom().item(Response.ok().build());
+        }
+
+        return Uni.createFrom().item(Response.status(400).entity("Unknown messageType").build());
+    }
+
+    @POST
+    @Path("/subscribe")
+    public Uni<Response> subscribe() {
+        return Uni.createFrom()
+            .completionStage(sns.subscribe(s -> s.topicArn(topicArn).protocol("http").endpoint(notificationEndpoint())))
+            .onItem().transform(SubscribeResponse::subscriptionArn)
+            .onItem().invoke(this::setSubscriptionArn)
+            .onItem().invoke(arn -> LOGGER.infov("Subscribed Quarks shield with id = {0} ", arn))
+            .onItem().transform(arn -> Response.ok().entity(arn).build());
+    }
+
+    @POST
+    @Path("/unsubscribe")
+    public Uni<Response> unsubscribe() {
+        if (subscriptionArn != null) {
+            return Uni.createFrom()
+                .completionStage(sns.unsubscribe(s -> s.subscriptionArn(subscriptionArn)))
+                .onItem().invoke(arn -> LOGGER.infov("Unsubscribed quarks shield for id = {0}", subscriptionArn))
+                .onItem().invoke(arn -> subscriptionArn = null)
+                .onItem().transform(arn -> Response.ok().build());
+        } else {
+            return Uni.createFrom().item(Response.status(400).entity("Not subscribed yet").build());
+        }
+    }
+
+    private String notificationEndpoint() {
+        return quarksShieldBaseUrl + "/async/shield";
+    }
+
+    private void setSubscriptionArn(String arn) {
+        this.subscriptionArn = arn;
+    }
+
+    private <T> T readObject(Class<T> clazz, String message) {
+        T object = null;
+        try {
+            object = READERS.get(clazz).readValue(message);
+        } catch (JsonProcessingException e) {
+            LOGGER.errorv("Unable to deserialize message <{0}> to Class <{1}>", message, clazz.getSimpleName());
+            throw new RuntimeException(e);
+        }
+        return object;
+    }
+}
+
+
+
+

And we need to add Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.sns.async-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_SNS_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_SNS_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_SNS_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_SNS_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_SNS_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_SNS_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_SNS_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_SNS_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SNS_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SNS_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_SNS_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_SNS_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/dev/amazon-sqs.html b/quarkus-amazon-services/dev/amazon-sqs.html new file mode 100644 index 0000000000..043659d5e0 --- /dev/null +++ b/quarkus-amazon-services/dev/amazon-sqs.html @@ -0,0 +1,3529 @@ + + + + + + Amazon SQS Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon SQS Client

+
+
+
+

Amazon Simple Queue Service (SQS) is a fully managed message queuing service. +Using SQS, you can send, store, and receive messages between software components at any volume, without losing messages or requiring other +services to be available. +SQS offers two types of message queues. Standard queues offer maximum throughput, best-effort ordering and at-least-once delivery. +SQS FIFO queues are designed to guarantee that messages are processes exactly once, on the exact order that they were sent.

+
+
+

You can find more information about SQS at the Amazon SQS website.

+
+
+ + + + + +
+ + +The SQS extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client (by default) or the AWS CRT-based HTTP client

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use SQS locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 17+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    An AWS Account to access the SQS service

    +
  • +
  • +

    Docker for your system to run SQS locally for testing purposes

    +
  • +
+
+
+

Provision SQS locally via Dev Services

+
+

The easiest way to start working with SQS is to run a local instance using Dev Services.

+
+
+

You can optionally configure the queues that are created on startup with the quarkus.sqs.devservices.queues config property.

+
+
+
+

Provision SQS locally manually

+
+

You can also set up a local version of SQS manually, first start a LocalStack container:

+
+
+
+
docker run --rm --name local-sqs -p 4566:4566 -e SERVICES=sqs -e START_WEB=0 -d localstack/localstack:3.0.1
+
+
+
+

This starts a SQS instance that is accessible on port 4566.

+
+
+

Create an AWS profile for your local instance using AWS CLI:

+
+
+
+
$ aws configure --profile localstack
+AWS Access Key ID [None]: test-key
+AWS Secret Access Key [None]: test-secret
+Default region name [None]: us-east-1
+Default output format [None]: text
+
+
+
+
+

Create a SQS queue

+
+

Create a SQS queue using AWS CLI and store in QUEUE_URL environment variable.

+
+
+
+
QUEUE_URL=`aws sqs create-queue --queue-name=ColliderQueue --profile localstack --endpoint-url=http://localhost:4566`
+
+
+
+

Or, if you want to use your SQS queue on your AWS account create a queue using your default profile

+
+
+
+
QUEUE_URL=`aws sqs create-queue --queue-name=ColliderQueue`
+
+
+
+
+
+
+

Solution

+
+
+

The application built here allows shooting an elementary particles (quarks) into a ColliderQueue queue of the AWS SQS. +Additionally, we create a resource that allows receiving those quarks from the ColliderQueue queue in the order they were sent.

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step. +However, you can go right to the completed example.

+
+
+

Clone the Git repository: git clone https://github.com/quarkusio/quarkus-quickstarts.git, or download an archive.

+
+
+

The solution is located in the amazon-sqs-quickstart directory.

+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.8.0:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-sqs-quickstart \
+    -DclassName="org.acme.sqs.QuarksCannonSyncResource" \
+    -Dpath="/sync-cannon" \
+    -Dextensions="resteasy-reactive-jackson,amazon-sqs"
+cd amazon-sqs-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy Reactive and Amazon SQS Client extensions. +After this, the amazon-sqs extension has been added to your pom.xml as well as the Mutiny support for RESTEasy.

+
+
+
+
+

Creating JSON REST service

+
+
+

In this example, we will create an application that sends quarks via the queue. The example application will demonstrate the two programming models supported by the extension.

+
+
+

First, let’s create the Quark bean as follows:

+
+
+
+
package org.acme.sqs.model;
+
+import io.quarkus.runtime.annotations.RegisterForReflection;
+import java.util.Objects;
+
+@RegisterForReflection
+public class Quark {
+
+    private String flavor;
+    private String spin;
+
+    public Quark() {
+    }
+
+    public String getFlavor() {
+        return flavor;
+    }
+
+    public void setFlavor(String flavor) {
+        this.flavor = flavor;
+    }
+
+    public String getSpin() {
+        return spin;
+    }
+
+    public void setSpin(String spin) {
+        this.spin = spin;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (!(obj instanceof Quark)) {
+            return false;
+        }
+
+        Quark other = (Quark) obj;
+
+        return Objects.equals(other.flavor, this.flavor);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(this.flavor);
+    }
+}
+
+
+
+

Then, create a org.acme.sqs.QuarksCannonSyncResource that will provide an API to shoot quarks into the SQS queue using the synchronous client.

+
+
+ + + + + +
+ + +The @RegisterForReflection annotation instructs Quarkus to keep the class and its members during the native compilation. More details about the @RegisterForReflection annotation can be found on the native application tips page. +
+
+
+
+
package org.acme.sqs;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectWriter;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+import org.acme.sqs.model.Quark;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import org.jboss.logging.Logger;
+import software.amazon.awssdk.services.sqs.SqsClient;
+import software.amazon.awssdk.services.sqs.model.SendMessageResponse;
+
+@Path("/sync/cannon")
+@Produces(MediaType.TEXT_PLAIN)
+public class QuarksCannonSyncResource {
+
+    private static final Logger LOGGER = Logger.getLogger(QuarksCannonSyncResource.class);
+
+    @Inject
+    SqsClient sqs;
+
+    @ConfigProperty(name = "queue.url")
+    String queueUrl;
+
+    static ObjectWriter QUARK_WRITER = new ObjectMapper().writerFor(Quark.class);
+
+    @POST
+    @Path("/shoot")
+    @Consumes(MediaType.APPLICATION_JSON)
+    public Response sendMessage(Quark quark) throws Exception {
+        String message = QUARK_WRITER.writeValueAsString(quark);
+        SendMessageResponse response = sqs.sendMessage(m -> m.queueUrl(queueUrl).messageBody(message));
+        LOGGER.infov("Fired Quark[{0}, {1}}]", quark.getFlavor(), quark.getSpin());
+        return Response.ok().entity(response.messageId()).build();
+    }
+}
+
+
+
+

Because of the fact messages sent to the queue must be a String, we’re using Jackson’s ObjectWriter in order to serialize our Quark objects into a String.

+
+
+

Now, create the org.acme.QuarksShieldSyncResource REST resources that provides an endpoint to read the messages from the ColliderQueue queue.

+
+
+
+
package org.acme.sqs;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectReader;
+import java.util.List;
+import java.util.stream.Collectors;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import org.acme.sqs.model.Quark;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import org.jboss.logging.Logger;
+import software.amazon.awssdk.services.sqs.SqsClient;
+import software.amazon.awssdk.services.sqs.model.Message;
+
+@Path("/sync/shield")
+public class QuarksShieldSyncResource {
+
+    private static final Logger LOGGER = Logger.getLogger(QuarksShieldSyncResource.class);
+
+    @Inject
+    SqsClient sqs;
+
+    @ConfigProperty(name = "queue.url")
+    String queueUrl;
+
+    static ObjectReader QUARK_READER = new ObjectMapper().readerFor(Quark.class);
+
+    @GET
+    public List<Quark> receive() {
+        List<Message> messages = sqs.receiveMessage(m -> m.maxNumberOfMessages(10).queueUrl(queueUrl)).messages();
+
+        return messages.stream()
+            .map(Message::body)
+            .map(this::toQuark)
+            .collect(Collectors.toList());
+    }
+
+    private Quark toQuark(String message) {
+        Quark quark = null;
+        try {
+            quark = QUARK_READER.readValue(message);
+        } catch (Exception e) {
+            LOGGER.error("Error decoding message", e);
+            throw new RuntimeException(e);
+        }
+        return quark;
+    }
+}
+
+
+
+

We are using here a Jackson’s ObjectReader in order to deserialize queue messages into our Quark POJOs.

+
+
+
+
+

Configuring SQS clients

+
+
+

Both SQS clients (sync and async) are configurable via the application.properties file that can be provided in the src/main/resources directory. +Additionally, you need to add to the classpath a proper implementation of the sync client. By default the extension uses the URL connection HTTP client, so +you need to add a URL connection client dependency to the pom.xml file:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.sqs.sync-client.type=apache
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.sqs.sync-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+

If you’re going to use a local SQS instance, configure it as follows:

+
+
+
+
quarkus.sqs.endpoint-override=http://localhost:4566
+
+quarkus.sqs.aws.region=us-east-1
+quarkus.sqs.aws.credentials.type=static
+quarkus.sqs.aws.credentials.static-provider.access-key-id=test-key
+quarkus.sqs.aws.credentials.static-provider.secret-access-key=test-secret
+
+
+
+
    +
  • +

    quarkus.sqs.aws.region - It’s required by the client, but since you’re using a local SQS instance use us-east-1 as it’s a default region of LocalStack’s SQS.

    +
  • +
  • +

    quarkus.sqs.aws.credentials.type - Set static credentials provider with any values for access-key-id and secret-access-key

    +
  • +
  • +

    quarkus.sqs.endpoint-override - Override the SQS client to use a local instance instead of an AWS service

    +
  • +
+
+
+

If you want to work with an AWS account, you can simply remove or comment out all SQS related properties. By default, the SQS client extension +will use the default credentials provider chain that looks for credentials in this order:

+
+
+
    +
  • +

    Java System Properties - aws.accessKeyId and aws.secretAccessKey

    +
  • +
  • +

    Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

    +
  • +
  • +

    Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

    +
  • +
  • +

    Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

    +
  • +
  • +

    Instance profile credentials delivered through the Amazon EC2 metadata service

    +
  • +
+
+
+

And the region from your AWS CLI profile will be used.

+
+
+
+
+

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can be run with java -Dqueue.url=$QUEUE_URL -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

Create a org.acme.sqs.QuarksCannonAsyncResource REST resource that will be similar to our QuarksCannonSyncResource but using an asynchronous programming model.

+
+
+
+
package org.acme.sqs;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectWriter;
+import io.smallrye.mutiny.Uni;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+import org.acme.sqs.model.Quark;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import org.jboss.logging.Logger;
+import software.amazon.awssdk.services.sqs.SqsAsyncClient;
+import software.amazon.awssdk.services.sqs.model.SendMessageResponse;
+
+@Path("/async/cannon")
+@Produces(MediaType.APPLICATION_JSON)
+@Consumes(MediaType.APPLICATION_JSON)
+public class QuarksCannonAsyncResource {
+
+    private static final Logger LOGGER = Logger.getLogger(QuarksCannonAsyncResource.class);
+
+    @Inject
+    SqsAsyncClient sqs;
+
+    @ConfigProperty(name = "queue.url")
+    String queueUrl;
+
+    static ObjectWriter QUARK_WRITER = new ObjectMapper().writerFor(Quark.class);
+
+    @POST
+    @Path("/shoot")
+    @Consumes(MediaType.APPLICATION_JSON)
+    public Uni<Response> sendMessage(Quark quark) throws Exception {
+        String message = QUARK_WRITER.writeValueAsString(quark);
+        return Uni.createFrom()
+            .completionStage(sqs.sendMessage(m -> m.queueUrl(queueUrl).messageBody(message)))
+            .onItem().invoke(item -> LOGGER.infov("Fired Quark[{0}, {1}}]", quark.getFlavor(), quark.getSpin()))
+            .onItem().transform(SendMessageResponse::messageId)
+            .onItem().transform(id -> Response.ok().entity(id).build());
+    }
+}
+
+
+
+

We create Uni instances from the CompletionStage objects returned by the asynchronous SQS client, and then transform the emitted item.

+
+
+

And the corresponding async receiver of the queue messages org.acme.sqs.QuarksShieldAsyncResource

+
+
+
+
package org.acme.sqs;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectReader;
+import io.smallrye.mutiny.Uni;
+import java.util.List;
+import java.util.stream.Collectors;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import org.acme.sqs.model.Quark;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import org.jboss.logging.Logger;
+import software.amazon.awssdk.services.sqs.SqsAsyncClient;
+import software.amazon.awssdk.services.sqs.model.Message;
+import software.amazon.awssdk.services.sqs.model.ReceiveMessageResponse;
+
+@Path("/async/shield")
+public class QuarksShieldAsyncResource {
+
+    private static final Logger LOGGER = Logger.getLogger(QuarksShieldAsyncResource.class);
+
+    @Inject
+    SqsAsyncClient sqs;
+
+    @ConfigProperty(name = "queue.url")
+    String queueUrl;
+
+    static ObjectReader QUARK_READER = new ObjectMapper().readerFor(Quark.class);
+
+    @GET
+    public Uni<List<Quark>> receive() {
+        return Uni.createFrom()
+            .completionStage(sqs.receiveMessage(m -> m.maxNumberOfMessages(10).queueUrl(queueUrl)))
+            .onItem().transform(ReceiveMessageResponse::messages)
+            .onItem().transform(m -> m.stream().map(Message::body).map(this::toQuark).collect(Collectors.toList()));
+    }
+
+    private Quark toQuark(String message) {
+        Quark quark = null;
+        try {
+            quark = QUARK_READER.readValue(message);
+        } catch (Exception e) {
+            LOGGER.error("Error decoding message", e);
+            throw new RuntimeException(e);
+        }
+        return quark;
+    }
+}
+
+
+
+

And we need to add the Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.sqs.async-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_SQS_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_SQS_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_SQS_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_SQS_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_SQS_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_SQS_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

The queues to create on startup.

+
+
+

Environment variable: QUARKUS_SQS_DEVSERVICES_QUEUES

+
+
+

list of string

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_SQS_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_SQS_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SQS_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SQS_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_SQS_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_SQS_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/dev/amazon-ssm.html b/quarkus-amazon-services/dev/amazon-ssm.html new file mode 100644 index 0000000000..7028cac73c --- /dev/null +++ b/quarkus-amazon-services/dev/amazon-ssm.html @@ -0,0 +1,3417 @@ + + + + + + Amazon SSM Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon SSM Client

+
+
+
+

AWS Systems Manager (formerly Amazon Simple Systems Manager, or SSM) is a service that you can use to view and control your infrastructure on AWS. +One of the most useful features of SSM for microservices is the Parameter Store, which provides secure, hierarchical storage for configuration data management and secrets management..

+
+
+

You can find more information about SSM at the AWS Systems Manager website.

+
+
+ + + + + +
+ + +The SSM extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client (by default) or the AWS CRT-based HTTP client

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use SSM locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 17+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    An AWS Account to access the SSM service

    +
  • +
  • +

    Docker for your system to run SSM locally for testing purposes

    +
  • +
+
+
+

Provision SSM locally via Dev Services

+
+

The easiest way to start working with SSM is to run a local instance using Dev Services.

+
+
+
+

Provision SSM locally manually

+
+

You can also set up a local version of SSM manually, first start a LocalStack container:

+
+
+
+
docker run --rm --name local-ssm --publish 4566:4583 -e SERVICES=ssm -e START_WEB=0 -d localstack/localstack:3.0.1
+
+
+
+

This starts a SSM instance that is accessible on port 4566.

+
+
+

Create an AWS profile for your local instance using AWS CLI:

+
+
+
+
$ aws configure --profile localstack
+AWS Access Key ID [None]: test-key
+AWS Secret Access Key [None]: test-secret
+Default region name [None]: us-east-1
+Default output format [None]:
+
+
+
+
+
+
+

Solution

+
+
+

The application built here allows to store and retrieve parameters using the SSM parameter store.

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step. +However, you can go right to the completed example.

+
+
+

Clone the Git repository: git clone https://github.com/quarkusio/quarkus-quickstarts.git, or download an archive.

+
+
+

The solution is located in the amazon-ssm-quickstart directory.

+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.8.0:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-ssm-quickstart \
+    -DclassName="org.acme.ssm.QuarkusSsmSyncResource" \
+    -Dpath="/sync" \
+    -Dextensions="resteasy-reactive-jackson,amazon-ssm"
+cd amazon-ssm-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy Reactive/JAX-RS and Amazon SSM Client extensions. +After this, the amazon-ssm extension has been added to your pom.xml as well as the Mutiny support for RESTEasy.

+
+
+
+
+

Creating JSON REST service

+
+
+

In this example, we will create an application that allows us to store and retrieve parameters to and from SSM parameter store using a RESTful API. +The example application will demonstrate the two programming models supported by the extension.

+
+
+

Let’s start with an abstract org.acme.ssm.QuarkusSsmResource class to provide the common functionality we will need for both the synchronous and asynchrounous exposures.

+
+
+
+
package org.acme.ssm;
+
+import static java.lang.Boolean.TRUE;
+import static java.util.stream.Collectors.toMap;
+
+import java.util.Map;
+import java.util.stream.Collector;
+
+import jakarta.annotation.PostConstruct;
+
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+
+import software.amazon.awssdk.services.ssm.model.GetParameterRequest;
+import software.amazon.awssdk.services.ssm.model.GetParametersByPathRequest;
+import software.amazon.awssdk.services.ssm.model.Parameter;
+import software.amazon.awssdk.services.ssm.model.ParameterType;
+import software.amazon.awssdk.services.ssm.model.PutParameterRequest;
+
+public abstract class QuarkusSsmResource {
+
+    @ConfigProperty(name = "parameters.path") (1)
+    String parametersPath;
+
+    @PostConstruct (2)
+    void normalizePath() {
+        if (!parametersPath.startsWith("/")) {
+            parametersPath = "/" + parametersPath;
+        }
+        if (!parametersPath.endsWith("/")) {
+            parametersPath = parametersPath + "/";
+        }
+    }
+
+    protected Collector<Parameter, ?, Map<String, String>> parametersToMap() { (3)
+        return toMap(p -> p.name().substring(parametersPath.length()), Parameter::value);
+    }
+
+    protected GetParametersByPathRequest generateGetParametersByPathRequest() {
+        return GetParametersByPathRequest.builder() (4)
+                .path(parametersPath)
+                .withDecryption(TRUE)
+                .build();
+    }
+
+    protected PutParameterRequest generatePutParameterRequest(String name, String value, boolean secure) {
+        return PutParameterRequest.builder() (5)
+                .name(parametersPath + name)
+                .value(value)
+                .type(secure ? ParameterType.SECURE_STRING : ParameterType.STRING)
+                .overwrite(TRUE)
+                .build();
+    }
+
+    protected GetParameterRequest generateGetParameterRequest(String name) {
+        return GetParameterRequest.builder() (6)
+                .name(parametersPath + name)
+                .withDecryption(TRUE)
+                .build();
+    }
+}
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
1Inject a configured path under which to store parameters
2Ensure the path starts and ends with /
3Collect parameters into a map of simple names and values
4Generate a request for all parameters under the configured path
5Generate a request to set a specific parameter
6Generate a request to get a specific parameter value
+
+
+

Now, we can extend the class and create the synchronous implementation in the org.acme.ssm.QuarkusSsmSyncResource class.

+
+
+
+
package org.acme.ssm;
+
+import java.util.Map;
+
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.DefaultValue;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.PUT;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+
+import org.jboss.resteasy.reactive.RestQuery;
+
+import software.amazon.awssdk.services.ssm.SsmClient;
+
+@Path("/sync")
+public class QuarkusSsmSyncResource extends QuarkusSsmResource {
+
+    @Inject (1)
+    SsmClient ssm;
+
+    @GET
+    @Produces(MediaType.APPLICATION_JSON)
+    public Map<String, String> getParameters() {
+        return ssm.getParametersByPath(generateGetParametersByPathRequest())
+                .parameters().stream().collect(parametersToMap());
+    }
+
+    @PUT
+    @Path("/{name}")
+    @Consumes(MediaType.TEXT_PLAIN)
+    public void setParameter(String name,
+            @RestQuery("secure") @DefaultValue("false") boolean secure,
+            String value) {
+
+        ssm.putParameter(generatePutParameterRequest(name, value, secure));
+    }
+
+    @GET
+    @Path("/{name}")
+    @Produces(MediaType.TEXT_PLAIN)
+    public String getParameter(String name) {
+        return ssm.getParameter(generateGetParameterRequest(name))
+                .parameter().value();
+    }
+}
+
+
+
+ + + + + +
1Inject the client provided by the amazon-ssm extension
+
+
+

Using the Amazon SSM SDK, we can easily store and retrieve arbitrary name/value pairs, and we can optionally store the values in a secure manner.

+
+
+
+
+

Configuring SSM clients

+
+
+

Both SSM clients (sync and async) are configurable via the application.properties file that can be provided in the src/main/resources directory. +Additionally, you need to add to the classpath a proper implementation of the sync client. By default the extension uses the URL connection HTTP client, so +you need to add a URL connection client dependency to the pom.xml file:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.ssm.sync-client.type=apache
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.ssm.sync-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+

If you’re going to use a local SSM instance, configure it as follows:

+
+
+
+
quarkus.ssm.endpoint-override=http://localhost:4566 (1)
+
+quarkus.ssm.aws.region=us-east-1 (2)
+quarkus.ssm.aws.credentials.type=static (3)
+quarkus.ssm.aws.credentials.static-provider.access-key-id=test-key
+quarkus.ssm.aws.credentials.static-provider.secret-access-key=test-secret
+
+
+
+ + + + + + + + + + + + + +
1Override the SSM client to use LocalStack instead of the actual AWS service
2Localstack defaults to us-east-1
3The static credentials provider lets you set the access-key-id and secret-access-key directly
+
+
+

If you want to work with an AWS account, you can simply remove or comment out all Amazon SSM related properties. By default, the SSM client extension will use the default credentials provider chain that looks for credentials in this order:

+
+
+
    +
  • +

    Java System Properties - aws.accessKeyId and aws.secretAccessKey

    +
  • +
  • +

    Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

    +
  • +
  • +

    Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

    +
  • +
  • +

    Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

    +
  • +
  • +

    Instance profile credentials delivered through the Amazon EC2 metadata service

    +
  • +
+
+
+

And the region from your AWS CLI profile will be used.

+
+
+
+
+

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can then be run with java -Dparameters.path=/quarkus/is/awesome/ -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

Create a org.acme.ssm.QuarkusSsmAsyncResource REST resource that will be similar to our QuarkusSsmSyncResource but using an asynchronous programming model.

+
+
+
+
package org.acme.ssm;
+
+import java.util.Map;
+
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.DefaultValue;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.PUT;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+
+import io.smallrye.mutiny.Uni;
+import org.jboss.resteasy.reactive.RestQuery;
+import software.amazon.awssdk.services.ssm.SsmAsyncClient;
+
+@Path("/async")
+public class QuarkusSsmAsyncResource extends QuarkusSsmResource {
+
+    @Inject
+    SsmAsyncClient ssm;
+
+    @GET
+    @Produces(MediaType.APPLICATION_JSON)
+    public Uni<Map<String, String>> getParameters() {
+        return Uni.createFrom().completionStage(ssm.getParametersByPath(generateGetParametersByPathRequest()))
+                .onItem().transform(r -> r.parameters().stream().collect(parametersToMap()));
+    }
+
+    @PUT
+    @Path("/{name}")
+    @Consumes(MediaType.TEXT_PLAIN)
+    public Uni<Void> setParameter(String name,
+            @RestQuery("secure") @DefaultValue("false") boolean secure,
+            String value) {
+
+        return Uni.createFrom().completionStage(ssm.putParameter(generatePutParameterRequest(name, value, secure)))
+                .onItem().transform(r -> null);
+    }
+
+    @GET
+    @Path("/{name}")
+    @Produces(MediaType.TEXT_PLAIN)
+    public Uni<String> getParameter(String name) {
+        return Uni.createFrom().completionStage(ssm.getParameter(generateGetParameterRequest(name)))
+                .onItem().transform(r -> r.parameter().value());
+    }
+}
+
+
+
+

Note that the SsmAsyncClient behaves just like the SsmClient, but returns CompletionStage objects which we use to create Uni instances, and then transform the emitted item.

+
+
+

To enable the asynchronous client, we also need to add the Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.ssm.async-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_SSM_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_SSM_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_SSM_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_SSM_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_SSM_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_SSM_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_SSM_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_SSM_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SSM_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SSM_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_SSM_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_SSM_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/dev/amazon-sts.html b/quarkus-amazon-services/dev/amazon-sts.html new file mode 100644 index 0000000000..01a27f1010 --- /dev/null +++ b/quarkus-amazon-services/dev/amazon-sts.html @@ -0,0 +1,3169 @@ + + + + + + Amazon STS Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Amazon STS Client

+
+
+
+

AWS Security Token Service (AWS STS) is a web service that enables you to request temporary, limited-privilege credentials for users.

+
+
+

You can find more information about STS at AWS Security Token Service API Reference.

+
+
+ + + + + +
+ + +The STS extension is based on AWS Java SDK 2.x. +It’s a major rewrite of the 1.x code base that offers two programming models (Blocking & Async). +
+
+
+

The Quarkus extension supports two programming models:

+
+
+
    +
  • +

    Blocking access using URL Connection HTTP client (by default) or the Apache HTTP Client

    +
  • +
  • +

    Asynchronous programming based on JDK’s CompletableFuture objects and the Netty HTTP client.

    +
  • +
+
+
+

In this guide, we see how you can get your REST services to use STS locally and on AWS.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 17+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    An AWS Account to access the STS service

    +
  • +
  • +

    Docker for your system to run STS locally for testing purposes

    +
  • +
+
+
+

Provision STS locally via Dev Services

+
+

The easiest way to start working with STS is to run a local instance using Dev Services.

+
+
+
+

Provision STS locally manually

+
+

You can also set up a local version of STS manually, first start a LocalStack container:

+
+
+
+
docker run --rm --name local-sts --publish 4592:4592 -e SERVICES=sts -e START_WEB=0 -d localstack/localstack:3.0.1
+
+
+
+

This starts a STS instance that is accessible on port 4592.

+
+
+

Create an AWS profile for your local instance using AWS CLI:

+
+
+
+
$ aws configure --profile localstack
+AWS Access Key ID [None]: test-key
+AWS Secret Access Key [None]: test-secret
+Default region name [None]: us-east-1
+Default output format [None]:
+
+
+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.8.0:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=amazon-sts-quickstart \
+    -DclassName="org.acme.sts.QuarkusStsSyncResource" \
+    -Dpath="/sync" \
+    -Dextensions="resteasy-reactive-jackson,amazon-sts"
+cd amazon-sts-quickstart
+
+
+
+

This command generates a Maven structure importing the RESTEasy Reactive/JAX-RS and Amazon STS Client extensions. +After this, the amazon-sts extension has been added to your pom.xml as well as the Mutiny support for RESTEasy.

+
+
+
+
+

Configuring STS clients

+
+
+

Both STS clients (sync and async) are configurable via the application.properties file that can be provided in the src/main/resources directory. +Additionally, you need to add to the classpath a proper implementation of the sync client. By default the extension uses the URL connection HTTP client, so +you need to add a URL connection client dependency to the pom.xml file:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>url-connection-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the Apache HTTP client instead, configure it as follows:

+
+
+
+
quarkus.sts.sync-client.type=apache
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>apache-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.sts.sync-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+

If you’re going to use a local STS instance, configure it as follows:

+
+
+
+
quarkus.sts.endpoint-override=http://localhost:4592 (1)
+
+quarkus.sts.aws.region=us-east-1 (2)
+quarkus.sts.aws.credentials.type=static (3)
+quarkus.sts.aws.credentials.static-provider.access-key-id=test-key
+quarkus.sts.aws.credentials.static-provider.secret-access-key=test-secret
+
+
+
+ + + + + + + + + + + + + +
1Override the STS client to use LocalStack instead of the actual AWS service
2Localstack defaults to us-east-1
3The static credentials provider lets you set the access-key-id and secret-access-key directly
+
+
+

If you want to work with an AWS account, you can simply remove or comment out all Amazon STS related properties. By default, the ST client extension will use the default credentials provider chain that looks for credentials in this order:

+
+
+
    +
  • +

    Java System Properties - aws.accessKeyId and aws.secretAccessKey

    +
  • +
  • +

    Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

    +
  • +
  • +

    Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

    +
  • +
  • +

    Credentials delivered through the Amazon ECS if the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and the security manager has permission to access the variable,

    +
  • +
  • +

    Instance profile credentials delivered through the Amazon EC2 metadata service

    +
  • +
+
+
+

And the region from your AWS CLI profile will be used.

+
+
+
+
+

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can then be run with java -Dparameters.path=/quarkus/is/awesome/ -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Going asynchronous

+
+

Thanks to the AWS SDK v2.x used by the Quarkus extension, you can use the asynchronous programming model out of the box.

+
+
+

We need to add the Netty HTTP client dependency to the pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>netty-nio-client</artifactId>
+</dependency>
+
+
+
+

If you want to use the AWS CRT-based HTTP client instead, configure it as follows:

+
+
+
+
quarkus.sts.async-client.type=aws-crt
+
+
+
+

And add the following dependency to the application pom.xml:

+
+
+
+
<dependency>
+    <groupId>software.amazon.awssdk</groupId>
+    <artifactId>aws-crt-client</artifactId>
+</dependency>
+
+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_STS_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_STS_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_STS_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_STS_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_STS_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_STS_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_STS_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_STS_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_STS_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_STS_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_STS_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_STS_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/dev/dev-services.html b/quarkus-amazon-services/dev/dev-services.html new file mode 100644 index 0000000000..b6d4a3f1e6 --- /dev/null +++ b/quarkus-amazon-services/dev/dev-services.html @@ -0,0 +1,1379 @@ + + + + + + Dev services for Amazon Services :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Dev services for Amazon Services

+
+
+
+

Quarkus Amazon Services automatically starts a LocalStack container in dev mode and when running tests. So, you don’t have to start one manually. The extension client is configured automatically.

+
+
+
+
+

Enabling / Disabling Dev Services for Amazon Services

+
+
+

Dev Services for Amazon Services is automatically enabled for each extensions added to pom.xml except in the following situations:

+
+
+
    +
  • +

    quarkus.devservices.enabled is set to false

    +
  • +
  • +

    devservices.enabled is set to false per extension (eg. quarkus.s3.devservices.enabled=false)

    +
  • +
  • +

    the endpoint-override is configured (eg. quarkus.s3.endpoint-override=http://localhost:4566)

    +
  • +
  • +

    Your environment does not support Docker. In test mode, it will cause the test to fail. Either disable Dev Services or configure the endpoint-override.

    +
  • +
+
+
+
+
+

Shared services

+
+
+

By default, Dev Services for Amazon Services will start one LocalStack container with only the needed services.

+
+
+

If you need to share a particular service between applications, Dev Services for Amazon Services implements a service discovery mechanism for your multiple Quarkus applications running in dev mode to share a single container.

+
+
+

Dev Services for Amazon Services starts the container with the quarkus-dev-service-localstack label and service name as the value, which is used to identify the container. +If you need multiple (shared) container, you can configure the devservices.service-name attribute for a given extension (eg. quarkus.s3.devservices.service-name) and indicate the container name. It looks for a container with the same value, or starts a new one if none can be found. The default service name is localstack.

+
+
+

By default, to ease sharing containers across multiple applications, each service will be started in its own container (the value of the quarkus-dev-service-localstack label is suffixed by the extension name). However, sometimes, some services need to communicate with each other inside the same container (e.g., subscribing an Amazon SQS queue to an Amazon SNS topic). In this case, you can disable this behavior by setting the devservices.isolated attribute for a given extension to false.

+
+
+

Sharing is disabled by default in dev mode, and is always disabled in test mode. You can enable the sharing with devservices.shared=true for a given extension (e.g. quarkus.s3.devservices.shared=true). All other non-shared services will be grouped in another container.

+
+
+
+
+

Configuring the image

+
+
+

Dev Services for Amazon Services uses localstack/localstack image. You can configure the image and version using the quarkus.aws.devservices.localstack.image-name property:

+
+
+
+
quarkus.aws.devservices.localstack.image-name=localstack/localstack:3.0.1
+
+
+
+
+
+

Specific configuration

+
+
+

Dev Services for Amazon Services can support specific properties sent to the container. It can be globally applied to all containers or be specified per service as follows:

+
+
+
+
quarkus.aws.devservices.localstack.container-properties.START_WEB=0
+quarkus.dynamodb.devservices.container-properties.DYNAMODB_HEAP_SIZE=1G
+
+
+
+

Refer to the LocalStack documentation for more configuration : https://docs.localstack.cloud/localstack/configuration/#local-aws-services. Note that not all environment variables are supported and some may affect Dev Services for Amazon Services.

+
+
+
+
+

Additional services

+
+
+

To start additional services for which a Quarkus extension does not exist or is not imported in the project, use the additional-services property:

+
+
+
+
quarkus.aws.devservices.localstack.additional-services."kinesis".enabled=true
+quarkus.aws.devservices.localstack.additional-services."redshift".enabled=true
+
+
+
+

The key is the name of the service to enable and must be a valid LocalStack service name.

+
+
+
+
+

Additional setup

+
+
+

Some extensions support additional configuration to be applied at startup. Refer to the extension documentation.

+
+
+
+
+

Cognito

+
+
+

The Cognito extension is not using LocalStack but Moto.

+
+
+

Dev Services for Amazon Services uses the latest motoserver/moto image. You can configure the image and version using the quarkus.aws.devservices.moto.image-name property:

+
+
+
+
quarkus.aws.devservices.moto.image-name=motoserver/moto:3.0.2
+
+
+
+

Dev Services for Amazon Services can support specific properties sent to the container as follows:

+
+
+
+
quarkus.aws.devservices.moto.container-properties.MOTO_COGNITO_IDP_USER_POOL_ID_STRATEGY=HASH
+
+
+
+
+
+

Global DevServices Configuration Reference

+
+
+

LocalStack Configuration

+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The LocalStack container image to use.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_IMAGE_NAME

+
+
+

string

localstack/localstack:3.0.1

+
+
+
+

Path to init scripts folder executed during localstack startup.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_INIT_SCRIPTS_FOLDER

+
+
+

string

+
+
+
+

Classpath to init scripts folder executed during localstack startup. initScriptsFolder has higher precedence.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_INIT_SCRIPTS_CLASSPATH

+
+
+

string

+
+
+
+

Specific container log message to be waiting for localstack init scripts completion.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_INIT_COMPLETION_MSG

+
+
+

string

+
+
+
+

Optional fixed port localstack will listen to.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_PORT

+
+
+

int

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_ADDITIONAL_SERVICES__ADDITIONAL_SERVICES__ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_ADDITIONAL_SERVICES__ADDITIONAL_SERVICES__SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_ADDITIONAL_SERVICES__ADDITIONAL_SERVICES__ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_ADDITIONAL_SERVICES__ADDITIONAL_SERVICES__SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_ADDITIONAL_SERVICES__ADDITIONAL_SERVICES__CONTAINER_PROPERTIES

+
+
+

Map<String,String>

+
+
+

Moto Configuration

+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The Moto container image to use.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_MOTO_IMAGE_NAME

+
+
+

string

motoserver/moto

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_MOTO_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/dev/includes/attributes.html b/quarkus-amazon-services/dev/includes/attributes.html new file mode 100644 index 0000000000..611a28f919 --- /dev/null +++ b/quarkus-amazon-services/dev/includes/attributes.html @@ -0,0 +1,969 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/dev/includes/quarkus-amazon-cognitouserpools.html b/quarkus-amazon-services/dev/includes/quarkus-amazon-cognitouserpools.html new file mode 100644 index 0000000000..70dd776ffa --- /dev/null +++ b/quarkus-amazon-services/dev/includes/quarkus-amazon-cognitouserpools.html @@ -0,0 +1,2876 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_COGNITO_USER_POOLS_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/dev/includes/quarkus-amazon-dynamodb-enhanced.html b/quarkus-amazon-services/dev/includes/quarkus-amazon-dynamodb-enhanced.html new file mode 100644 index 0000000000..82188f57f6 --- /dev/null +++ b/quarkus-amazon-services/dev/includes/quarkus-amazon-dynamodb-enhanced.html @@ -0,0 +1,1025 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of extensions to load with the enhanced client.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClientExtension interface.

+
+
+

Environment variable: QUARKUS_DYNAMODBENHANCED_CLIENT_EXTENSIONS

+
+
+

list of string

+
+
+
+

Whether a TableSchema should be created at start up for DynamoDb mappable entities annotated with DynamoDbBean or DynamoDbImmutable

+
+
+

TableSchema are cached and can be retrieved later with TableSchema.fromClass()

+
+
+

Environment variable: QUARKUS_DYNAMODBENHANCED_CREATE_TABLE_SCHEMAS

+
+
+

boolean

true

+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/dev/includes/quarkus-amazon-dynamodb.html b/quarkus-amazon-services/dev/includes/quarkus-amazon-dynamodb.html new file mode 100644 index 0000000000..0ab641ada4 --- /dev/null +++ b/quarkus-amazon-services/dev/includes/quarkus-amazon-dynamodb.html @@ -0,0 +1,2893 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_DYNAMODB_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_DYNAMODB_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_DYNAMODB_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_DYNAMODB_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_DYNAMODB_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_DYNAMODB_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Enable DynamoDB service endpoint discovery.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ENABLE_ENDPOINT_DISCOVERY

+
+
+

boolean

false

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_DYNAMODB_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_DYNAMODB_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_DYNAMODB_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_DYNAMODB_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_DYNAMODB_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/dev/includes/quarkus-amazon-eventbridge.html b/quarkus-amazon-services/dev/includes/quarkus-amazon-eventbridge.html new file mode 100644 index 0000000000..59525aad00 --- /dev/null +++ b/quarkus-amazon-services/dev/includes/quarkus-amazon-eventbridge.html @@ -0,0 +1,2876 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_EVENTBRIDGE_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/dev/includes/quarkus-amazon-iam.html b/quarkus-amazon-services/dev/includes/quarkus-amazon-iam.html new file mode 100644 index 0000000000..2916c1d18f --- /dev/null +++ b/quarkus-amazon-services/dev/includes/quarkus-amazon-iam.html @@ -0,0 +1,2876 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_IAM_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_IAM_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_IAM_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_IAM_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_IAM_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_IAM_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_IAM_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_IAM_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_IAM_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_IAM_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_IAM_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_IAM_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_IAM_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_IAM_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_IAM_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/dev/includes/quarkus-amazon-kinesis.html b/quarkus-amazon-services/dev/includes/quarkus-amazon-kinesis.html new file mode 100644 index 0000000000..06811a38da --- /dev/null +++ b/quarkus-amazon-services/dev/includes/quarkus-amazon-kinesis.html @@ -0,0 +1,2876 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_KINESIS_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_KINESIS_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_KINESIS_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_KINESIS_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_KINESIS_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_KINESIS_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_KINESIS_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_KINESIS_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_KINESIS_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_KINESIS_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_KINESIS_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_KINESIS_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_KINESIS_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_KINESIS_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/dev/includes/quarkus-amazon-kms.html b/quarkus-amazon-services/dev/includes/quarkus-amazon-kms.html new file mode 100644 index 0000000000..da76dcd015 --- /dev/null +++ b/quarkus-amazon-services/dev/includes/quarkus-amazon-kms.html @@ -0,0 +1,2876 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_KMS_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_KMS_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_KMS_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_KMS_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_KMS_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_KMS_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_KMS_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_KMS_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_KMS_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_KMS_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_KMS_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_KMS_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_KMS_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_KMS_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_KMS_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/dev/includes/quarkus-amazon-lambda.html b/quarkus-amazon-services/dev/includes/quarkus-amazon-lambda.html new file mode 100644 index 0000000000..f39c10fd7f --- /dev/null +++ b/quarkus-amazon-services/dev/includes/quarkus-amazon-lambda.html @@ -0,0 +1,2876 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_LAMBDA_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_LAMBDA_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_LAMBDA_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_LAMBDA_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_LAMBDA_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_LAMBDA_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_LAMBDA_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_LAMBDA_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_LAMBDA_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_LAMBDA_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_LAMBDA_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_LAMBDA_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_LAMBDA_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_LAMBDA_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/dev/includes/quarkus-amazon-s3.html b/quarkus-amazon-services/dev/includes/quarkus-amazon-s3.html new file mode 100644 index 0000000000..96e551f02c --- /dev/null +++ b/quarkus-amazon-services/dev/includes/quarkus-amazon-s3.html @@ -0,0 +1,3091 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_S3_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_S3_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_S3_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_S3_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_S3_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_S3_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

The buckets to create on startup.

+
+
+

Environment variable: QUARKUS_S3_DEVSERVICES_BUCKETS

+
+
+

list of string

default

+
+
+
+

Enable using the accelerate endpoint when accessing S3.

+
+
+

Accelerate endpoints allow faster transfer of objects by using Amazon CloudFront’s globally distributed edge locations.

+
+
+

Environment variable: QUARKUS_S3_ACCELERATE_MODE

+
+
+

boolean

false

+
+
+
+

Enable doing a validation of the checksum of an object stored in S3.

+
+
+

Environment variable: QUARKUS_S3_CHECKSUM_VALIDATION

+
+
+

boolean

true

+
+
+
+

Enable using chunked encoding when signing the request payload for software.amazon.awssdk.services.s3.model.PutObjectRequest and software.amazon.awssdk.services.s3.model.UploadPartRequest.

+
+
+

Environment variable: QUARKUS_S3_CHUNKED_ENCODING

+
+
+

boolean

true

+
+
+
+

Enable dualstack mode for accessing S3. If you want to use IPv6 when accessing S3, dualstack must be enabled.

+
+
+

Environment variable: QUARKUS_S3_DUALSTACK

+
+
+

boolean

false

+
+
+
+

Enable using path style access for accessing S3 objects instead of DNS style access. DNS style access is preferred as it will result in better load balancing when accessing S3.

+
+
+

Environment variable: QUARKUS_S3_PATH_STYLE_ACCESS

+
+
+

boolean

false

+
+
+
+

Enable cross-region call to the region specified in the S3 resource ARN different than the region the client was configured with. If this flag is not set to 'true', the cross-region call will throw an exception.

+
+
+

Environment variable: QUARKUS_S3_USE_ARN_REGION_ENABLED

+
+
+

boolean

false

+
+
+
+

Define the profile name that should be consulted to determine the default value of use-arn-region-enabled. This is not used, if the use-arn-region-enabled is configured to 'true'.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_S3_PROFILE_NAME

+
+
+

string

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_S3_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_S3_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_S3_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_S3_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_S3_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_S3_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_S3_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_S3_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_S3_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

AWS CRT-based S3 client configurations

Type

Default

+
+
+
+

Configure the starting buffer size the client will use to buffer the parts downloaded from S3.

+
+
+

Environment variable: QUARKUS_S3_CRT_CLIENT_INITIAL_READ_BUFFER_SIZE_IN_BYTES

+
+
+

long

Equal to the resolved part size * 10

+
+
+
+

Specifies the maximum number of S3 connections that should be established during a transfer.

+
+
+

Environment variable: QUARKUS_S3_CRT_CLIENT_MAX_CONCURRENCY

+
+
+

int

+
+
+
+

Sets the minimum part size for transfer parts.

+
+
+

Environment variable: QUARKUS_S3_CRT_CLIENT_MINIMUM_PART_SIZE_IN_BYTES

+
+
+

long

8MB

+
+
+
+

The target throughput for transfer requests.

+
+
+

Environment variable: QUARKUS_S3_CRT_CLIENT_TARGET_THROUGHPUT_IN_GBPS

+
+
+

double

10

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/dev/includes/quarkus-amazon-secretsmanager.html b/quarkus-amazon-services/dev/includes/quarkus-amazon-secretsmanager.html new file mode 100644 index 0000000000..d3aa9b1534 --- /dev/null +++ b/quarkus-amazon-services/dev/includes/quarkus-amazon-secretsmanager.html @@ -0,0 +1,2876 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_SECRETSMANAGER_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/dev/includes/quarkus-amazon-ses.html b/quarkus-amazon-services/dev/includes/quarkus-amazon-ses.html new file mode 100644 index 0000000000..1e04833b8d --- /dev/null +++ b/quarkus-amazon-services/dev/includes/quarkus-amazon-ses.html @@ -0,0 +1,2876 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_SES_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_SES_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_SES_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_SES_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_SES_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_SES_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_SES_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_SES_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SES_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SES_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_SES_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_SES_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_SES_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SES_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_SES_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/dev/includes/quarkus-amazon-sfn.html b/quarkus-amazon-services/dev/includes/quarkus-amazon-sfn.html new file mode 100644 index 0000000000..0bb2dcc601 --- /dev/null +++ b/quarkus-amazon-services/dev/includes/quarkus-amazon-sfn.html @@ -0,0 +1,2876 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_SFN_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_SFN_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_SFN_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_SFN_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_SFN_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_SFN_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_SFN_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_SFN_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SFN_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SFN_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_SFN_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_SFN_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_SFN_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SFN_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_SFN_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/dev/includes/quarkus-amazon-sns.html b/quarkus-amazon-services/dev/includes/quarkus-amazon-sns.html new file mode 100644 index 0000000000..4df7dd6530 --- /dev/null +++ b/quarkus-amazon-services/dev/includes/quarkus-amazon-sns.html @@ -0,0 +1,2876 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_SNS_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_SNS_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_SNS_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_SNS_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_SNS_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_SNS_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_SNS_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_SNS_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SNS_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SNS_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_SNS_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_SNS_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_SNS_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SNS_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_SNS_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/dev/includes/quarkus-amazon-sqs.html b/quarkus-amazon-services/dev/includes/quarkus-amazon-sqs.html new file mode 100644 index 0000000000..a02c0a8743 --- /dev/null +++ b/quarkus-amazon-services/dev/includes/quarkus-amazon-sqs.html @@ -0,0 +1,2893 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_SQS_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_SQS_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_SQS_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_SQS_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_SQS_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_SQS_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

The queues to create on startup.

+
+
+

Environment variable: QUARKUS_SQS_DEVSERVICES_QUEUES

+
+
+

list of string

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_SQS_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_SQS_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SQS_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SQS_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_SQS_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_SQS_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_SQS_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SQS_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_SQS_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/dev/includes/quarkus-amazon-ssm.html b/quarkus-amazon-services/dev/includes/quarkus-amazon-ssm.html new file mode 100644 index 0000000000..a4e5122e17 --- /dev/null +++ b/quarkus-amazon-services/dev/includes/quarkus-amazon-ssm.html @@ -0,0 +1,2876 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_SSM_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_SSM_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_SSM_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_SSM_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_SSM_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_SSM_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_SSM_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_SSM_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SSM_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_SSM_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_SSM_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_SSM_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_SSM_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_SSM_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_SSM_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/dev/includes/quarkus-amazon-sts.html b/quarkus-amazon-services/dev/includes/quarkus-amazon-sts.html new file mode 100644 index 0000000000..d0efc94e30 --- /dev/null +++ b/quarkus-amazon-services/dev/includes/quarkus-amazon-sts.html @@ -0,0 +1,2876 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

List of execution interceptors that will have access to read and modify the request and response objects as they are processed by the AWS SDK.

+
+
+

The list should consists of class names which implements software.amazon.awssdk.core.interceptor.ExecutionInterceptor interface. Classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class.

+
+
+

Environment variable: QUARKUS_STS_INTERCEPTORS

+
+
+

list of string

+
+
+
+

OpenTelemetry AWS SDK instrumentation will be enabled if the OpenTelemetry extension is present and this value is true.

+
+
+

Environment variable: QUARKUS_STS_TELEMETRY_ENABLED

+
+
+

boolean

false

+
+
+
+

Type of the sync HTTP client implementation

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TYPE

+
+
+
+

url, apache, aws-crt

+

url

+
+
+
+

Type of the async HTTP client implementation

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TYPE

+
+
+
+

netty, aws-crt

+

netty

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_STS_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_STS_DEVSERVICES_SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_STS_DEVSERVICES_ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_STS_DEVSERVICES_SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_STS_DEVSERVICES_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

AWS SDK client configurations

Type

Default

+
+
+
+

The endpoint URI with which the SDK should communicate.

+
+
+

If not specified, an appropriate endpoint to be used for the given service and region.

+
+
+

Environment variable: QUARKUS_STS_ENDPOINT_OVERRIDE

+
+
+

URI

+
+
+
+

The amount of time to allow the client to complete the execution of an API call.

+
+
+

This timeout covers the entire client execution except for marshalling. This includes request handler execution, all HTTP requests including retries, unmarshalling, etc.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_STS_API_CALL_TIMEOUT

+
+
+

Duration +

+
+
+
+

The amount of time to wait for the HTTP request to complete before giving up and timing out.

+
+
+

This value should always be positive, if present.

+
+
+

Environment variable: QUARKUS_STS_API_CALL_ATTEMPT_TIMEOUT

+
+
+

Duration +

+
+
+
+

Whether the Quarkus thread pool should be used for scheduling tasks such as async retry attempts and timeout task.

+
+
+

When disabled, the default sdk behavior is to create a dedicated thread pool for each client, resulting in competition for CPU resources among these thread pools.

+
+
+

Environment variable: QUARKUS_STS_ADVANCED_USE_QUARKUS_SCHEDULED_EXECUTOR_SERVICE

+
+
+

boolean

true

AWS services configurations

Type

Default

+
+
+
+

An Amazon Web Services region that hosts the given service.

+
+
+

It overrides region provider chain with static value of +region with which the service client should communicate.

+
+
+

If not set, region is retrieved via the default providers chain in the following order:

+
+
+
    +
  • +

    aws.region system property

    +
  • +
  • +

    region property from the profile file

    +
  • +
  • +

    Instance profile file

    +
  • +
+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_STS_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_STS_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

Sync HTTP transport configurations

Type

Default

+
+
+
+

The maximum amount of time to establish a connection before timing out.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The amount of time to wait for data to be transferred over an established, open connection before the connection is timed out.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

Apache HTTP client specific configurations

Type

Default

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum number of connections allowed in the connection pool.

+
+
+

Each built HTTP client has its own private connection pool.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_MAX_CONNECTIONS

+
+
+

int

50

+
+
+
+

Whether the client should send an HTTP expect-continue handshake before each request.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_EXPECT_CONTINUE_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the idle connections in the connection pool should be closed asynchronously.

+
+
+

When enabled, connections left idling for longer than quarkus..sync-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_PASSWORD

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows domain name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_NTLM_DOMAIN

+
+
+

string

+
+
+
+

For NTLM proxies - the Windows workstation name to use when authenticating with the proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_NTLM_WORKSTATION

+
+
+

string

+
+
+
+

Whether to attempt to authenticate preemptively against the proxy server using basic authentication.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_PREEMPTIVE_BASIC_AUTHENTICATION_ENABLED

+
+
+

boolean

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_APACHE_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

AWS CRT-based HTTP client specific configurations

Type

Default

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_CRT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

60S

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_CRT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

Enable HTTP proxy

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_CRT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_CRT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The username to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_CRT_PROXY_USERNAME

+
+
+

string

+
+
+
+

The password to use when connecting through a proxy.

+
+
+

Environment variable: QUARKUS_STS_SYNC_CLIENT_CRT_PROXY_PASSWORD

+
+
+

string

Async HTTP transport configurations

Type

Default

+
+
+
+

The maximum number of allowed concurrent requests.

+
+
+

For HTTP/1.1 this is the same as max connections. For HTTP/2 the number of connections that will be used depends on the max streams allowed per connection.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_MAX_CONCURRENCY

+
+
+

int

50

+
+
+
+

The maximum number of pending acquires allowed.

+
+
+

Once this exceeds, acquire tries will be failed.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_MAX_PENDING_CONNECTION_ACQUIRES

+
+
+

int

10000

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_READ_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait for a write on a socket before an exception is thrown.

+
+
+

Specify 0 to disable.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_WRITE_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The amount of time to wait when acquiring a connection from the pool before giving up and timing out.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

2S

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open, regardless of usage frequency.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_CONNECTION_TIME_TO_LIVE

+
+
+

Duration +

+
+
+
+

The maximum amount of time that a connection should be allowed to remain open while idle.

+
+
+

Currently has no effect if quarkus..async-client.use-idle-connection-reaper is false.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_CONNECTION_MAX_IDLE_TIME

+
+
+

Duration +

5S

+
+
+
+

Whether the idle connections in the connection pool should be closed.

+
+
+

When enabled, connections left idling for longer than quarkus..async-client.connection-max-idle-time will be closed. This will not close connections currently in use.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_USE_IDLE_CONNECTION_REAPER

+
+
+

boolean

true

+
+
+
+

Configure whether to enable or disable TCP KeepAlive.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TCP_KEEP_ALIVE

+
+
+

boolean

false

+
+
+
+

The HTTP protocol to use.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_PROTOCOL

+
+
+
+

http1-1, http2

+

http1-1

+
+
+
+

The SSL Provider to be used in the Netty client.

+
+
+

Default is OPENSSL if available, JDK otherwise.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_SSL_PROVIDER

+
+
+
+

jdk, openssl, openssl-refcnt

+
+
+
+
+

The maximum number of concurrent streams for an HTTP/2 connection.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_HTTP2_MAX_STREAMS

+
+
+

long

4294967295

+
+
+
+

The initial window size for an HTTP/2 stream.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_HTTP2_INITIAL_WINDOW_SIZE

+
+
+

int

1048576

+
+
+
+

Sets the period that the Netty client will send PING frames to the remote endpoint to check the health of the connection. To disable this feature, set a duration of 0.

+
+
+

This setting is only respected when the HTTP/2 protocol is used.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_HTTP2_HEALTH_CHECK_PING_PERIOD

+
+
+

Duration +

5

+
+
+
+

Enable HTTP proxy.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_PROXY_ENABLED

+
+
+

boolean

false

+
+
+
+

The endpoint of the proxy server that the SDK should connect through.

+
+
+

Currently, the endpoint is limited to a host and port. Any other URI components will result in an exception being raised.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_PROXY_ENDPOINT

+
+
+

URI

+
+
+
+

The hosts that the client is allowed to access without going through the proxy.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_PROXY_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

TLS key managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    none - Use this provider if you don’t want the client to present any certificates to the remote TLS host.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_TYPE

+
+
+
+

none, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_KEY_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

TLS trust managers provider type.

+
+
+

Available providers:

+
+
+
    +
  • +

    trust-all - Use this provider to disable the validation of servers certificates and therefore trust all server certificates.

    +
  • +
  • +

    system-property - Provider checks the standard javax.net.ssl.keyStore, javax.net.ssl.keyStorePassword, and +javax.net.ssl.keyStoreType properties defined by the + JSSE.

    +
  • +
  • +

    file-store - Provider that loads the key store from a file.

    +
  • +
+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_TYPE

+
+
+
+

trust-all, system-property, file-store

+

system-property

+
+
+
+

Path to the key store.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PATH

+
+
+

path

+
+
+
+

Key store type.

+
+
+

See the KeyStore section in the https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore[Java Cryptography Architecture Standard Algorithm Name Documentation] for information about standard keystore types.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_TYPE

+
+
+

string

+
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_TLS_TRUST_MANAGERS_PROVIDER_FILE_STORE_PASSWORD

+
+
+

string

+
+
+
+

Enable the custom configuration of the Netty event loop group.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_EVENT_LOOP_OVERRIDE

+
+
+

boolean

false

+
+
+
+

Number of threads to use for the event loop group.

+
+
+

If not set, the default Netty thread count is used (which is double the number of available processors unless the io.netty.eventLoopThreads system property is set.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_EVENT_LOOP_NUMBER_OF_THREADS

+
+
+

int

+
+
+
+

The thread name prefix for threads created by this thread factory used by event loop group.

+
+
+

The prefix will be appended with a number unique to the thread factory and a number unique to the thread.

+
+
+

If not specified it defaults to aws-java-sdk-NettyEventLoop

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_EVENT_LOOP_THREAD_NAME_PREFIX

+
+
+

string

+
+
+
+

Whether the default thread pool should be used to complete the futures returned from the HTTP client request.

+
+
+

When disabled, futures will be completed on the Netty event loop thread.

+
+
+

Environment variable: QUARKUS_STS_ASYNC_CLIENT_ADVANCED_USE_FUTURE_COMPLETION_THREAD_POOL

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/dev/includes/quarkus-aws-devservices-localstack-local-stack-dev-services-build-time-config.html b/quarkus-amazon-services/dev/includes/quarkus-aws-devservices-localstack-local-stack-dev-services-build-time-config.html new file mode 100644 index 0000000000..ca1b9a4eac --- /dev/null +++ b/quarkus-amazon-services/dev/includes/quarkus-aws-devservices-localstack-local-stack-dev-services-build-time-config.html @@ -0,0 +1,1181 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The LocalStack container image to use.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_IMAGE_NAME

+
+
+

string

localstack/localstack:3.0.1

+
+
+
+

Path to init scripts folder executed during localstack startup.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_INIT_SCRIPTS_FOLDER

+
+
+

string

+
+
+
+

Classpath to init scripts folder executed during localstack startup. initScriptsFolder has higher precedence.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_INIT_SCRIPTS_CLASSPATH

+
+
+

string

+
+
+
+

Specific container log message to be waiting for localstack init scripts completion.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_INIT_COMPLETION_MSG

+
+
+

string

+
+
+
+

Optional fixed port localstack will listen to.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_PORT

+
+
+

int

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

+
+
+
+

If a local AWS stack should be used. (default to true) If this is true and endpoint-override is not configured then a local AWS stack will be started and will be used instead of the given configuration. For all services but Cognito, the local AWS stack will be provided by LocalStack. Otherwise, it will be provided by Moto

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_ADDITIONAL_SERVICES__ADDITIONAL_SERVICES__ENABLED

+
+
+

boolean

+
+
+
+

Indicates if the LocalStack container managed by Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-localstack label. The value is configured using the service-name property.

+
+
+

Sharing is not supported for the Cognito extension.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_ADDITIONAL_SERVICES__ADDITIONAL_SERVICES__SHARED

+
+
+

boolean

false

+
+
+
+

Indicates if shared LocalStack services managed by Dev Services should be isolated. When true, the service will be started in its own container and the value of the quarkus-dev-service-localstack label will be suffixed by the service name (s3, sqs, …​)

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_ADDITIONAL_SERVICES__ADDITIONAL_SERVICES__ISOLATED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-localstack label attached to the started container. In dev mode, when shared is set to true, before starting a container, Dev Services looks for a container with the quarkus-dev-service-localstack label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-localstack label set to the specified value. In test mode, Dev Services will group services with the same service-name value in one container instance.

+
+
+

This property is used when you need multiple shared LocalStack instances.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_ADDITIONAL_SERVICES__ADDITIONAL_SERVICES__SERVICE_NAME

+
+
+

string

localstack

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_LOCALSTACK_ADDITIONAL_SERVICES__ADDITIONAL_SERVICES__CONTAINER_PROPERTIES

+
+
+

Map<String,String>

+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/dev/includes/quarkus-aws-devservices-moto-moto-dev-services-build-time-config.html b/quarkus-amazon-services/dev/includes/quarkus-aws-devservices-moto-moto-dev-services-build-time-config.html new file mode 100644 index 0000000000..545cd8a2dd --- /dev/null +++ b/quarkus-amazon-services/dev/includes/quarkus-aws-devservices-moto-moto-dev-services-build-time-config.html @@ -0,0 +1,1019 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The Moto container image to use.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_MOTO_IMAGE_NAME

+
+
+

string

motoserver/moto

+
+
+
+

Generic properties that are pass for additional container configuration.

+
+
+

Environment variable: QUARKUS_AWS_DEVSERVICES_MOTO_CONTAINER_PROPERTIES

+
+
+

Map<String,String>

+
+
+
+
+ + + + + + + diff --git a/quarkus-amazon-services/dev/index.html b/quarkus-amazon-services/dev/index.html new file mode 100644 index 0000000000..816864568f --- /dev/null +++ b/quarkus-amazon-services/dev/index.html @@ -0,0 +1,979 @@ + + + + + + Quarkus Amazon Services :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Amazon Services

+
+

This set of extensions expose AWS services through configuration properties and CDI injection.

+
+
+

You can find the full set of supported services and documentation for each of them in the navigation on the left.

+
+
+
+
+
+ + + + + + + diff --git a/quarkus-antivirus/dev/_images/antivirus-card.png b/quarkus-antivirus/dev/_images/antivirus-card.png new file mode 100644 index 0000000000..2ac187cb88 Binary files /dev/null and b/quarkus-antivirus/dev/_images/antivirus-card.png differ diff --git a/quarkus-antivirus/dev/_images/antivirus-devservice.png b/quarkus-antivirus/dev/_images/antivirus-devservice.png new file mode 100644 index 0000000000..95c77273c6 Binary files /dev/null and b/quarkus-antivirus/dev/_images/antivirus-devservice.png differ diff --git a/quarkus-antivirus/dev/_images/antivirus-logs.png b/quarkus-antivirus/dev/_images/antivirus-logs.png new file mode 100644 index 0000000000..e3047cfdd3 Binary files /dev/null and b/quarkus-antivirus/dev/_images/antivirus-logs.png differ diff --git a/quarkus-antivirus/dev/_images/antivirus-protection-icon.svg b/quarkus-antivirus/dev/_images/antivirus-protection-icon.svg new file mode 100644 index 0000000000..c037c351b1 --- /dev/null +++ b/quarkus-antivirus/dev/_images/antivirus-protection-icon.svg @@ -0,0 +1,6 @@ + \ No newline at end of file diff --git a/quarkus-antivirus/dev/_images/plus-sign.svg b/quarkus-antivirus/dev/_images/plus-sign.svg new file mode 100644 index 0000000000..ea94fe7b0c --- /dev/null +++ b/quarkus-antivirus/dev/_images/plus-sign.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + image/svg+xml + + + + + + + + diff --git a/quarkus-antivirus/dev/_images/quarkus.svg b/quarkus-antivirus/dev/_images/quarkus.svg new file mode 100644 index 0000000000..1969e1e886 --- /dev/null +++ b/quarkus-antivirus/dev/_images/quarkus.svg @@ -0,0 +1 @@ +quarkus_icon_rgb_1024px_reverse \ No newline at end of file diff --git a/quarkus-antivirus/dev/includes/attributes.html b/quarkus-antivirus/dev/includes/attributes.html new file mode 100644 index 0000000000..1675999cba --- /dev/null +++ b/quarkus-antivirus/dev/includes/attributes.html @@ -0,0 +1,912 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-antivirus/dev/includes/quarkus-antivirus.html b/quarkus-antivirus/dev/includes/quarkus-antivirus.html new file mode 100644 index 0000000000..f802690bf7 --- /dev/null +++ b/quarkus-antivirus/dev/includes/quarkus-antivirus.html @@ -0,0 +1,1243 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

If Dev Services for ClamAV has been explicitly enabled or disabled. Dev Services are generally enabled by default, unless there is an existing configuration present.

+
+
+

Environment variable: QUARKUS_ANTIVIRUS_CLAMAV_DEVSERVICE_ENABLED

+
+
+

boolean

true

+
+
+
+

The ClamAV container image to use.

+
+
+

Environment variable: QUARKUS_ANTIVIRUS_CLAMAV_DEVSERVICE_IMAGE_NAME

+
+
+

string

clamav/clamav

+
+
+
+

Indicates if the ClamAV server managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for ClamAV starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-clamav label. The value is configured using the service-name property.

+
+
+

Container sharing is only used in dev mode.

+
+
+

Environment variable: QUARKUS_ANTIVIRUS_CLAMAV_DEVSERVICE_SHARED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-clamav label attached to the started container. This property is used when shared is set to true. In this case, before starting a container, Dev Services for Minio looks for a container with the quarkus-dev-service-clamav label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise, it starts a new container with the quarkus-dev-service-clamav label set to the specified value.

+
+
+

This property is used when you need multiple shared ClamAV servers.

+
+
+

Environment variable: QUARKUS_ANTIVIRUS_CLAMAV_DEVSERVICE_SERVICE_NAME

+
+
+

string

clamav

+
+
+
+

The ClamAV container image to use.

+
+
+

Environment variable: QUARKUS_ANTIVIRUS_CLAMAV_DEVSERVICE_STARTUP_TIMEOUT

+
+
+

int

1800

+
+
+
+

Flag to enable the FreshClam daemon to update the virus database daily. Default it is disabled.

+
+
+

Environment variable: QUARKUS_ANTIVIRUS_CLAMAV_DEVSERVICE_FRESH_CLAM

+
+
+

boolean

false

+
+
+
+

Enable or disable ClamAV container logging

+
+
+

Environment variable: QUARKUS_ANTIVIRUS_CLAMAV_DEVSERVICE_LOGGING

+
+
+

boolean

true

+
+
+
+

If ClamAv registers in the health check by pinging the service.

+
+
+

Environment variable: QUARKUS_ANTIVIRUS_CLAMAV_HEALTH_ENABLED

+
+
+

boolean

true

+
+
+
+

Property to enable or disable the virus scanner. Useful for developers who don’t want to scan files locally.

+
+
+

Environment variable: QUARKUS_ANTIVIRUS_CLAMAV_ENABLED

+
+
+

boolean

false

+
+
+
+

The IP Address of the machine where ClamAV is running.

+
+
+

Environment variable: QUARKUS_ANTIVIRUS_CLAMAV_HOST

+
+
+

string

+
+
+
+

The Port of the machine where ClamAV is running.

+
+
+

Environment variable: QUARKUS_ANTIVIRUS_CLAMAV_PORT

+
+
+

int

3310

+
+
+
+

The timeout of how much time to give CLamAV to scan the virus before failing.

+
+
+

Environment variable: QUARKUS_ANTIVIRUS_CLAMAV_SCAN_TIMEOUT

+
+
+

int

60000

+
+
+
+

Size in bytes of the chunks of data to stream to the scanner at a time.

+
+
+

Environment variable: QUARKUS_ANTIVIRUS_CLAMAV_CHUNK_SIZE

+
+
+

int

10240

+
+
+
+

The timeout of how much time to give CLamAV to scan the virus before failing.

+
+
+

Environment variable: QUARKUS_ANTIVIRUS_CLAMAV_PING_TIMEOUT

+
+
+

int

2000

+
+
+
+

Property to enable or disable the virus scanner. Useful for developers who don’t want to scan files locally.

+
+
+

Environment variable: QUARKUS_ANTIVIRUS_VIRUSTOTAL_ENABLED

+
+
+

boolean

false

+
+
+
+

The API endpoint for VirusTotal.

+
+
+

Environment variable: QUARKUS_ANTIVIRUS_VIRUSTOTAL_URL

+
+
+

string

https://www.virustotal.com/api/v3/files/%s

+
+
+
+

The API key for VirusTotal.

+
+
+

Environment variable: QUARKUS_ANTIVIRUS_VIRUSTOTAL_KEY

+
+
+

string

+
+
+
+

VirusTotal checks over 70+ different engine for virus and collates a count of how many of those 70 reported a file as malicious. This number lets you control how many engines have to report a file is malicious to raise an exception.

+
+
+

Environment variable: QUARKUS_ANTIVIRUS_VIRUSTOTAL_MINIMUM_VOTES

+
+
+

int

1

+
+
+
+
+ + + + + + + diff --git a/quarkus-antivirus/dev/index.html b/quarkus-antivirus/dev/index.html new file mode 100644 index 0000000000..7370d65f07 --- /dev/null +++ b/quarkus-antivirus/dev/index.html @@ -0,0 +1,1434 @@ + + + + + + Quarkus Antivirus :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Antivirus

+
+
+
+

A Quarkus extension that lets you scan files for viruses using a pluggable engine architecture.

+
+
+

Out of the box these engines are supported by this extension:

+
+
+
    +
  • +

    ClamAV which is a Linux Native antivirus server

    +
  • +
  • +

    VirusTotal which is a REST API to check the Hash of a file to see if it has already been reported for viruses

    +
  • +
+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.antivirus:quarkus-antivirus extension first to your build file.

+
+
+

For instance, with Maven, add the following dependency to your POM file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.antivirus</groupId>
+    <artifactId>quarkus-antivirus</artifactId>
+    <version>0.0.5</version>
+</dependency>
+
+
+
+
+
+

Configuration

+
+
+

Now that you configured your POM to use the service, now you need to configure which scanner(s) you want to use in application.properties:

+
+
+

ClamAV

+
+

ClamAV is an open source Linux based virus scanning engine. If you configure quarkus.antivirus.clamav.devservice.enabled=true a DevService will start a ClamAV instance for you on TCP port 3310, so you can test locally during development.

+
+
+
+
quarkus.antivirus.clamav.enabled=true
+quarkus.antivirus.clamav.health.enabled=true
+%dev.quarkus.antivirus.clamav.devservice.enabled=true
+%dev.quarkus.antivirus.clamav.host=localhost
+%dev.quarkus.antivirus.clamav.port=3310
+
+
+
+
+

VirusTotal

+
+

VirusTotal is a REST API that analyses suspicious files to detect malware using over 70 antivirus scanners. VirusTotal checks the hash of a file to see if it has been scanned and what the results are. You can set the threshold of how many of the 70+ engines you want to report the file as malicious before you consider it a malicious file using the minimum-votes property.

+
+
+
+
quarkus.antivirus.virustotal.enabled=true
+quarkus.antivirus.virustotal.key=<YOUR API KEY>
+quarkus.antivirus.virustotal.minimum-votes=1
+
+
+
+
+
+
+

Usage

+
+
+

Simply inject the Antivirus service, and it will run the scan against all configured services. It works against InputStream so it can be used in any Quarkus application it is not constrained to REST applications only.

+
+
+
+
@Path("/antivirus")
+@ApplicationScoped
+public class AntivirusResource {
+
+    @Inject
+    Antivirus antivirus;
+
+    @PUT
+    @Consumes(MediaType.MULTIPART_FORM_DATA)
+    @Produces(MediaType.TEXT_PLAIN)
+    @Path("/upload")
+    public Response upload(@MultipartForm @Valid final UploadRequest fileUploadRequest) {
+        final String fileName = fileUploadRequest.getFileName();
+        final InputStream data = fileUploadRequest.getData();
+        try {
+            // copy the stream to make it resettable
+            final ByteArrayInputStream inputStream = new ByteArrayInputStream(
+                    IOUtils.toBufferedInputStream(data).readAllBytes());
+
+            // scan the file and check the results
+            List<AntivirusScanResult> results = antivirus.scan(fileName, inputStream);
+            for (AntivirusScanResult result : results) {
+                if (result.getStatus() != Response.Status.OK.getStatusCode()) {
+                    throw new WebApplicationException(result.getMessage(), result.getStatus());
+                }
+            }
+
+            // reset the stream
+            inputStream.reset();
+
+            // write the file out to disk
+            final File tempFile = File.createTempFile("fileName", "tmp");
+            IOUtils.copy(inputStream, new FileOutputStream(tempFile));
+        } catch (AntivirusException | IOException e) {
+            throw new BadRequestException(e);
+        }
+
+        return Response.ok().build();
+    }
+}
+
+
+
+
+
+

Pluggable

+
+
+

We can’t anticipate every antivirus engine out there and some may be proprietary. However, the architecture is designed to be pluggable, so you can plug your own engine in. Simply produce a bean that extends the AntivirusEngine interface, and it will be picked up and used.

+
+
+
+
@ApplicationScoped
+public class MyCustomEngine implements AntivirusEngine {
+
+    @Override
+    public boolean isEnabled() {
+        return true;
+    }
+
+    @Override
+    public AntivirusScanResult scan(final String filename, final InputStream inputStream) {
+        // scan your file here
+    }
+}
+
+
+
+
+
+

Dev UI

+
+
+

The Dev UI will let you inspect the running ClamAV Dev Service.

+
+
+
+Antivirus DevUI Card +
+
+
+

You can also inspect the container image that was started under Dev Services:

+
+
+
+Antivirus Dev Service +
+
+
+

You can view all of ClamAV’s container logs right in the DevUI log.

+
+
+
+Antivirus Logs +
+
+
+
+
+

Extension Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

If Dev Services for ClamAV has been explicitly enabled or disabled. Dev Services are generally enabled by default, unless there is an existing configuration present.

+
+
+

Environment variable: QUARKUS_ANTIVIRUS_CLAMAV_DEVSERVICE_ENABLED

+
+
+

boolean

true

+
+
+
+

The ClamAV container image to use.

+
+
+

Environment variable: QUARKUS_ANTIVIRUS_CLAMAV_DEVSERVICE_IMAGE_NAME

+
+
+

string

clamav/clamav

+
+
+
+

Indicates if the ClamAV server managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for ClamAV starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-clamav label. The value is configured using the service-name property.

+
+
+

Container sharing is only used in dev mode.

+
+
+

Environment variable: QUARKUS_ANTIVIRUS_CLAMAV_DEVSERVICE_SHARED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-clamav label attached to the started container. This property is used when shared is set to true. In this case, before starting a container, Dev Services for Minio looks for a container with the quarkus-dev-service-clamav label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise, it starts a new container with the quarkus-dev-service-clamav label set to the specified value.

+
+
+

This property is used when you need multiple shared ClamAV servers.

+
+
+

Environment variable: QUARKUS_ANTIVIRUS_CLAMAV_DEVSERVICE_SERVICE_NAME

+
+
+

string

clamav

+
+
+
+

The ClamAV container image to use.

+
+
+

Environment variable: QUARKUS_ANTIVIRUS_CLAMAV_DEVSERVICE_STARTUP_TIMEOUT

+
+
+

int

1800

+
+
+
+

Flag to enable the FreshClam daemon to update the virus database daily. Default it is disabled.

+
+
+

Environment variable: QUARKUS_ANTIVIRUS_CLAMAV_DEVSERVICE_FRESH_CLAM

+
+
+

boolean

false

+
+
+
+

Enable or disable ClamAV container logging

+
+
+

Environment variable: QUARKUS_ANTIVIRUS_CLAMAV_DEVSERVICE_LOGGING

+
+
+

boolean

true

+
+
+
+

If ClamAv registers in the health check by pinging the service.

+
+
+

Environment variable: QUARKUS_ANTIVIRUS_CLAMAV_HEALTH_ENABLED

+
+
+

boolean

true

+
+
+
+

Property to enable or disable the virus scanner. Useful for developers who don’t want to scan files locally.

+
+
+

Environment variable: QUARKUS_ANTIVIRUS_CLAMAV_ENABLED

+
+
+

boolean

false

+
+
+
+

The IP Address of the machine where ClamAV is running.

+
+
+

Environment variable: QUARKUS_ANTIVIRUS_CLAMAV_HOST

+
+
+

string

+
+
+
+

The Port of the machine where ClamAV is running.

+
+
+

Environment variable: QUARKUS_ANTIVIRUS_CLAMAV_PORT

+
+
+

int

3310

+
+
+
+

The timeout of how much time to give CLamAV to scan the virus before failing.

+
+
+

Environment variable: QUARKUS_ANTIVIRUS_CLAMAV_SCAN_TIMEOUT

+
+
+

int

60000

+
+
+
+

Size in bytes of the chunks of data to stream to the scanner at a time.

+
+
+

Environment variable: QUARKUS_ANTIVIRUS_CLAMAV_CHUNK_SIZE

+
+
+

int

10240

+
+
+
+

The timeout of how much time to give CLamAV to scan the virus before failing.

+
+
+

Environment variable: QUARKUS_ANTIVIRUS_CLAMAV_PING_TIMEOUT

+
+
+

int

2000

+
+
+
+

Property to enable or disable the virus scanner. Useful for developers who don’t want to scan files locally.

+
+
+

Environment variable: QUARKUS_ANTIVIRUS_VIRUSTOTAL_ENABLED

+
+
+

boolean

false

+
+
+
+

The API endpoint for VirusTotal.

+
+
+

Environment variable: QUARKUS_ANTIVIRUS_VIRUSTOTAL_URL

+
+
+

string

https://www.virustotal.com/api/v3/files/%s

+
+
+
+

The API key for VirusTotal.

+
+
+

Environment variable: QUARKUS_ANTIVIRUS_VIRUSTOTAL_KEY

+
+
+

string

+
+
+
+

VirusTotal checks over 70+ different engine for virus and collates a count of how many of those 70 reported a file as malicious. This number lets you control how many engines have to report a file is malicious to raise an exception.

+
+
+

Environment variable: QUARKUS_ANTIVIRUS_VIRUSTOTAL_MINIMUM_VOTES

+
+
+

int

1

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-apistax/dev/includes/attributes.html b/quarkus-apistax/dev/includes/attributes.html new file mode 100644 index 0000000000..32441e79bb --- /dev/null +++ b/quarkus-apistax/dev/includes/attributes.html @@ -0,0 +1,912 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-apistax/dev/includes/quarkus-apistax.html b/quarkus-apistax/dev/includes/quarkus-apistax.html new file mode 100644 index 0000000000..b8865faf4a --- /dev/null +++ b/quarkus-apistax/dev/includes/quarkus-apistax.html @@ -0,0 +1,963 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The APIstax API key. Get one via https://apistax.io

+
+
+

Environment variable: QUARKUS_APISTAX_API_KEY

+
+
+

string

required

+
+
+
+

Enables the mock mode. +When enabled, requests are not send. Instead, fake data is returned.

+
+
+

Environment variable: QUARKUS_APISTAX_MOCK

+
+
+

boolean

false

+
+
+
+
+ + + + + + + diff --git a/quarkus-apistax/dev/index.html b/quarkus-apistax/dev/index.html new file mode 100644 index 0000000000..d28937870a --- /dev/null +++ b/quarkus-apistax/dev/index.html @@ -0,0 +1,1037 @@ + + + + + + Quarkus APIstax :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus APIstax

+
+
+
+

Quarkus APIstax is a complete Java client implementation for the APIstax platform.

+
+
+
+
+

Usage

+
+
+

Add the following dependency to your build file:

+
+
+

Maven pom.xml

+
+
+
<dependency>
+    <groupId>io.quarkiverse.apistax</groupId>
+    <artifactId>quarkus-apistax</artifactId>
+    <version>2.2.1</version>
+</dependency>
+
+
+
+
+

Gradle build.gradle

+
+
+
implementation("io.quarkiverse.apistax:quarkus-apistax:2.2.1")
+
+
+
+

Get your APIstax API key here and add it to your application.properties file:

+
+
+
+
quarkus.apistax.api-key=API-KEY
+
+
+
+

Inject an APIstaxClient and start using it.

+
+
+
+
@ApplicationScoped
+public class VatService {
+
+    @Inject
+    APIstaxClient client;
+
+    public boolean isValid(String vatId) {
+        VatVerificationResult result = client.verifyVatId(vatId);
+        return result.getValid() == true;
+    }
+}
+
+
+
+

The further information and documentation about the APIs can be found on APIstax documentation page.

+
+
+
+
+
+

Extension Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The APIstax API key. Get one via https://apistax.io

+
+
+

Environment variable: QUARKUS_APISTAX_API_KEY

+
+
+

string

required

+
+
+
+

Enables the mock mode. +When enabled, requests are not send. Instead, fake data is returned.

+
+
+

Environment variable: QUARKUS_APISTAX_MOCK

+
+
+

boolean

false

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-arangodb-client-ext/dev/includes/attributes.html b/quarkus-arangodb-client-ext/dev/includes/attributes.html new file mode 100644 index 0000000000..e13d498985 --- /dev/null +++ b/quarkus-arangodb-client-ext/dev/includes/attributes.html @@ -0,0 +1,912 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-arangodb-client-ext/dev/includes/quarkus-arangodb.html b/quarkus-arangodb-client-ext/dev/includes/quarkus-arangodb.html new file mode 100644 index 0000000000..3ba347357e --- /dev/null +++ b/quarkus-arangodb-client-ext/dev/includes/quarkus-arangodb.html @@ -0,0 +1,1255 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

communication protocol, possible values are: VST, HTTP_JSON, HTTP_VPACK, HTTP2_JSON, HTTP2_VPACK, (default: HTTP2_JSON)

+
+
+

Environment variable: QUARKUS_ARANGODB_PROTOCOL

+
+
+
+

vst, http-json, http-vpack, http2-json, http2-vpack

+
+
+
+
+

connection and request timeout (ms), (default 0, no timeout)

+
+
+

Environment variable: QUARKUS_ARANGODB_TIMEOUT

+
+
+

int

+
+
+
+

username for authentication, (default: root)

+
+
+

Environment variable: QUARKUS_ARANGODB_USER

+
+
+

string

required

+
+
+
+

password for authentication

+
+
+

Environment variable: QUARKUS_ARANGODB_PASSWORD

+
+
+

string

required

+
+
+
+

use SSL connection, (default: false)

+
+
+

Environment variable: QUARKUS_ARANGODB_USE_SSL

+
+
+

boolean

false

+
+
+
+

enable hostname verification, (HTTP only, default: true)

+
+
+

Environment variable: QUARKUS_ARANGODB_VERIFY_HOST

+
+
+

boolean

+
+
+
+

VST chunk size in bytes, (default: 30000)

+
+
+

Environment variable: QUARKUS_ARANGODB_CHUNK_SIZE

+
+
+

int

+
+
+
+

max number of connections per host, (default: 1 VST, 1 HTTP/2, 20 HTTP/1.1)

+
+
+

Environment variable: QUARKUS_ARANGODB_MAX_CONNECTIONS

+
+
+

int

+
+
+
+

max lifetime of a connection (ms), (default: no ttl)

+
+
+

Environment variable: QUARKUS_ARANGODB_CONNECTION_TTL

+
+
+

long

+
+
+
+

VST keep-alive interval (s), (default: no keep-alive probes will be sent)

+
+
+

Environment variable: QUARKUS_ARANGODB_KEEP_ALIVE_INTERVAL

+
+
+

int

+
+
+
+

acquire the list of available hosts, (default: false)

+
+
+

Environment variable: QUARKUS_ARANGODB_ACQUIRE_HOST_LIST

+
+
+

boolean

+
+
+
+

acquireHostList interval (ms), (default: 3_600_000, 1 hour)

+
+
+

Environment variable: QUARKUS_ARANGODB_ACQUIRE_HOST_LIST_INTERVAL

+
+
+

int

+
+
+
+

load balancing strategy, possible values are: NONE, ROUND_ROBIN, ONE_RANDOM, (default: NONE)

+
+
+

Environment variable: QUARKUS_ARANGODB_LOAD_BALANCING_STRATEGY

+
+
+
+

none, round-robin, one-random

+
+
+
+
+

amount of samples kept for queue time metrics, (default: 10)

+
+
+

Environment variable: QUARKUS_ARANGODB_RESPONSE_QUEUE_TIME_SAMPLES

+
+
+

int

list of hosts to connect on

Type

Default

+ +
+
+
+

host hostname

+
+
+

Environment variable: QUARKUS_ARANGODB_HOSTS_HOSTNAME

+
+
+

string

required

+ +
+
+
+

host port

+
+
+

Environment variable: QUARKUS_ARANGODB_HOSTS_PORT

+
+
+

int

required

sslTruststore configuration +This configuration section is optional

Type

Default

+
+
+
+

location where to find the cert file

+
+
+

Environment variable: QUARKUS_ARANGODB_SSL_TRUSTSTORE_LOCATION

+
+
+

path

required

+
+
+
+

trustStore password

+
+
+

Environment variable: QUARKUS_ARANGODB_SSL_TRUSTSTORE_PASSWORD

+
+
+

string

required

+
+
+
+
+ + + + + + + diff --git a/quarkus-arangodb-client-ext/dev/index.html b/quarkus-arangodb-client-ext/dev/index.html new file mode 100644 index 0000000000..b0d1d6df9d --- /dev/null +++ b/quarkus-arangodb-client-ext/dev/index.html @@ -0,0 +1,1672 @@ + + + + + + Quarkus ArangoDB Client Extension :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus ArangoDB Client Extension

+
+
+
+

ArangoDB is a scalable graph database system to drive value from connected data, faster. Native graphs, an integrated search engine, and JSON support, via a single query language.

+
+
+ + + + + +
+ + +This extension has been developed following samples presents in ArangoDB Java Driver +
+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.arangodb-client-ext:quarkus-arangodb-client-ext extension first to your build file.

+
+
+

For instance, with Maven, add the following dependency to your POM file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.arangodb-client-ext</groupId>
+    <artifactId>quarkus-arangodb-client-ext</artifactId>
+    <version>1.0.1</version>
+</dependency>
+
+
+
+
+
+

Configuring

+
+
+

The Arangodb driver can be configured with standard Quarkus properties.

+
+
+

Connection

+
+

Configuration support multiple hosts. If you have only one host you can default empty host naming can be used.

+
+
+
    +
  1. +

    Single Host configuration

    +
    +
    src/main/resources/application.properties
    +
    +
    quarkus.arangodb.hosts.hostname = localhost
    +quarkus.arangodb.hosts.port = 8529
    +
    +
    +
    +
    src/main/resources/application.properties
    +
    +
    quarkus.arangodb.hosts.host1.hostname = host1
    +quarkus.arangodb.hosts.host1.port = 8529
    +quarkus.arangodb.hosts.host2.hostname = host2
    +quarkus.arangodb.hosts.host2.port = 8529
    +
    +
    +
  2. +
+
+
+
+

Authentication

+
+

Standard username / password authentication

+
+
src/main/resources/application.properties
+
+
quarkus.arangodb.user = root
+quarkus.arangodb.password = password
+
+
+
+
+

JWT authentication

+
+

ArangoDB Java Driver provide JWT based authentication. This kind of authentication is not implemented because no use case has been determined.

+
+
+
+
+

SSL secure connection

+
+

To activate ssl secure connection please add these properties:

+
+
+
src/main/resources/application.properties
+
+
quarkus.arangodb.use-ssl = true
+quarkus.arangodb.ssl-truststore.location = example.truststore
+quarkus.arangodb.ssl-truststore.password = 12345678
+
+
+
+ + + + + +
+ + +The truststore muse be generated using the PEM certificate used on Arangodb server side. The truststore location can refer to resources folder or on an external one. It is preferable to use an external one to better handle certificate renewal or revocation without repackaging the application. +
+
+
+ + + + + +
+ + +If you want to add, setup SSL using a PEM certificate on Arangodb side you could have a look to ArangodbContainer inside this project. It can give you good insights for producing custom container image regarding embedding certificate and updating arangodb.conf. You can easily produce an image based on official arangodb image and use /docker-entrypoint-initdb.d/ folder to add your custom shell or javascript scripts. +
+
+
+ + + + + +
+ + +PEM certificate and example.truststore using password 12345678 used in this extension are coming from the ArangoDB Java Driver +
+
+
+
+

Dev Services

+
+

Quarkus supports a feature called Dev Services that allows you to create various datasources without any config. +Dev Services will bring up an Arangodb container if you didn’t explicit add the default values or configured custom values for any of quarkus.arangodb.hosts.*, quarkus.arangodb.user or quarkus.arangodb.password.

+
+
+

Otherwise, Quarkus will automatically start an Arangodb container when running tests or dev-mode, and automatically configure the connection.

+
+
+

When running the production version of the application, the Arangodb connection need to be configured as normal, so if you want to include a production database config in your application.properties and continue to use Dev Services we recommend that you use the %prod. profile to define your Neo4j settings.

+
+
+
+

Customization

+
+

For the following paragraph the Person object will be used as sample to describe many ways to use, implement custom serializer / deserializer.

+
+
+
+
import java.util.Objects;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public final class Person {
+    private final String name;
+
+    @JsonCreator
+    public Person(@JsonProperty("name") final String name) {
+        this.name = Objects.requireNonNull(name);
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o)
+            return true;
+        if (o == null || getClass() != o.getClass())
+            return false;
+        Person person = (Person) o;
+        return Objects.equals(name, person.name);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(name);
+    }
+
+    @Override
+    public String toString() {
+        return "Person{" +
+                "name='" + name + '\'' +
+                '}';
+    }
+}
+
+
+
+

Serializer / Deserializer

+
+

By default, if jackson is not added as a dependency in the application, the shaded Jackson version present inside the driver will be used. +In this case the configuration will be automatic. It works fine, however custom ObjectMapper configuration is not supported.

+
+
+

To define custom Jackson configuration you can do it in several ways.

+
+
+
    +
  1. +

    Using Quarkus jackson

    +
    +

    Add this dependency in pom.xml

    +
    +
    +
    pom.xml
    +
    +
    <dependency>
    +    <groupId>io.quarkus</groupId>
    +    <artifactId>quarkus-jackson</artifactId>
    +</dependency>
    +
    +
    +
    +

    Next you can define a custom ObjectMapperCustomizer. This customizer is common across all the application.

    +
    +
    +
    +
    import java.io.IOException;
    +
    +import jakarta.inject.Singleton;
    +
    +import com.fasterxml.jackson.core.JsonGenerator;
    +import com.fasterxml.jackson.core.JsonParser;
    +import com.fasterxml.jackson.databind.*;
    +import com.fasterxml.jackson.databind.module.SimpleModule;
    +
    +import io.quarkus.jackson.ObjectMapperCustomizer;
    +
    +@Singleton
    +public final class RegisterCustomModuleCustomizer implements ObjectMapperCustomizer {
    +    private static final String PERSON_SERIALIZER_ADDED_PREFIX = "MyNameIs";
    +    private static final String PERSON_DESERIALIZER_ADDED_PREFIX = "Hello";
    +
    +    @Override
    +    public void customize(final ObjectMapper mapper) {
    +        final SimpleModule module = new SimpleModule("PersonModule");
    +        module.addDeserializer(Person.class, new PersonDeserializer());
    +        module.addSerializer(Person.class, new PersonSerializer());
    +        mapper.registerModule(module);
    +    }
    +
    +    private static class PersonSerializer extends JsonSerializer<Person> {
    +        @Override
    +        public void serialize(final Person value, final JsonGenerator gen, final SerializerProvider serializers)
    +                throws IOException {
    +            gen.writeStartObject();
    +            gen.writeFieldName("name");
    +            gen.writeString(PERSON_SERIALIZER_ADDED_PREFIX + value.getName());
    +            gen.writeEndObject();
    +        }
    +    }
    +
    +    private static class PersonDeserializer extends JsonDeserializer<Person> {
    +        @Override
    +        public Person deserialize(final JsonParser parser, final DeserializationContext ctx) throws IOException {
    +            final JsonNode rootNode = parser.getCodec().readTree(parser);
    +            final JsonNode nameNode = rootNode.get("name");
    +            final String name;
    +            if (nameNode != null && nameNode.isTextual()) {
    +                name = PERSON_DESERIALIZER_ADDED_PREFIX + nameNode.asText();
    +            } else {
    +                name = null;
    +            }
    +            return new Person(name);
    +        }
    +    }
    +}
    +
    +
    +
  2. +
  3. +

    Custom ArangodbSerde

    +
    +

    If you want to define ObjectMapper behaviors only for Arangodb you can do it by providing a custom ArangoSerde. Only one can be defined on the application.

    +
    +
    +
    +
    import static com.fasterxml.jackson.databind.DeserializationFeature.USE_BIG_INTEGER_FOR_INTS;
    +import static com.fasterxml.jackson.databind.SerializationFeature.WRITE_SINGLE_ELEM_ARRAYS_UNWRAPPED;
    +
    +import java.io.IOException;
    +
    +import jakarta.enterprise.inject.Produces;
    +import jakarta.inject.Singleton;
    +
    +import com.arangodb.ContentType;
    +import com.arangodb.serde.ArangoSerde;
    +import com.arangodb.serde.jackson.JacksonSerde;
    +import com.fasterxml.jackson.core.JsonGenerator;
    +import com.fasterxml.jackson.core.JsonParser;
    +import com.fasterxml.jackson.databind.*;
    +import com.fasterxml.jackson.databind.module.SimpleModule;
    +
    +@Singleton
    +public final class CustomArangodbSerde {
    +    private static final String PERSON_SERIALIZER_ADDED_PREFIX = "MyNameIs";
    +    private static final String PERSON_DESERIALIZER_ADDED_PREFIX = "Hello";
    +
    +    @Singleton
    +    @Produces
    +    public ArangoSerde arangodbSerdeProducer() {
    +        return JacksonSerde.of(ContentType.JSON)
    +                .configure(mapper -> {
    +                    mapper.configure(WRITE_SINGLE_ELEM_ARRAYS_UNWRAPPED, true);
    +                    mapper.configure(USE_BIG_INTEGER_FOR_INTS, true);
    +                    final SimpleModule module = new SimpleModule("PersonModule");
    +                    module.addDeserializer(Person.class, new CustomArangodbSerde.PersonDeserializer());
    +                    module.addSerializer(Person.class, new CustomArangodbSerde.PersonSerializer());
    +                    mapper.registerModule(module);
    +                });
    +    }
    +
    +    private static class PersonSerializer extends JsonSerializer<Person> {
    +        @Override
    +        public void serialize(final Person value, final JsonGenerator gen, final SerializerProvider serializers)
    +                throws IOException {
    +            gen.writeStartObject();
    +            gen.writeFieldName("name");
    +            gen.writeString(PERSON_SERIALIZER_ADDED_PREFIX + value.getName());
    +            gen.writeEndObject();
    +        }
    +    }
    +
    +    private static class PersonDeserializer extends JsonDeserializer<Person> {
    +        @Override
    +        public Person deserialize(final JsonParser parser, final DeserializationContext ctx) throws IOException {
    +            final JsonNode rootNode = parser.getCodec().readTree(parser);
    +            final JsonNode nameNode = rootNode.get("name");
    +            final String name;
    +            if (nameNode != null && nameNode.isTextual()) {
    +                name = PERSON_DESERIALIZER_ADDED_PREFIX + nameNode.asText();
    +            } else {
    +                name = null;
    +            }
    +            return new Person(name);
    +        }
    +    }
    +}
    +
    +
    +
  4. +
+
+
+
+

SSLContext

+
+

By default, the SSLContext implementation use this example SslExampleTest defined in ArangoDB Java Driver.

+
+
+

It is convenient for most SSL use case. It can use certificate embedded inside the application or outside.

+
+
+

If you want to provide your own implementation returning the SSLContext you can do it by implementing your own ArangodbSSLContextProvider.

+
+
+
+
import javax.net.ssl.SSLContext;
+
+import jakarta.enterprise.inject.Produces;
+import jakarta.inject.Singleton;
+
+import io.quarkiverse.arangodb.client.ext.runtime.ArangodbClientConfig;
+import io.quarkiverse.arangodb.client.ext.runtime.ArangodbSSLContextException;
+import io.quarkiverse.arangodb.client.ext.runtime.ArangodbSSLContextProvider;
+
+@Singleton
+public final class CustomArangodbSSLContextProviderProducer {
+    static final class CustomArangodbSSLContextProvider implements ArangodbSSLContextProvider {
+
+        @Override
+        public SSLContext provide() throws ArangodbSSLContextException {
+            throw new RuntimeException("TODO");
+        }
+
+    }
+
+    @Singleton
+    @Produces
+    public ArangodbSSLContextProvider customArangodbSSLContextProviderProducer(
+            final ArangodbClientConfig arangodbClientConfig) {
+        return new CustomArangodbSSLContextProvider();
+    }
+}
+
+
+
+
+
+
+
+

Extension Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

communication protocol, possible values are: VST, HTTP_JSON, HTTP_VPACK, HTTP2_JSON, HTTP2_VPACK, (default: HTTP2_JSON)

+
+
+

Environment variable: QUARKUS_ARANGODB_PROTOCOL

+
+
+
+

vst, http-json, http-vpack, http2-json, http2-vpack

+
+
+
+
+

connection and request timeout (ms), (default 0, no timeout)

+
+
+

Environment variable: QUARKUS_ARANGODB_TIMEOUT

+
+
+

int

+
+
+
+

username for authentication, (default: root)

+
+
+

Environment variable: QUARKUS_ARANGODB_USER

+
+
+

string

required

+
+
+
+

password for authentication

+
+
+

Environment variable: QUARKUS_ARANGODB_PASSWORD

+
+
+

string

required

+
+
+
+

use SSL connection, (default: false)

+
+
+

Environment variable: QUARKUS_ARANGODB_USE_SSL

+
+
+

boolean

false

+
+
+
+

enable hostname verification, (HTTP only, default: true)

+
+
+

Environment variable: QUARKUS_ARANGODB_VERIFY_HOST

+
+
+

boolean

+
+
+
+

VST chunk size in bytes, (default: 30000)

+
+
+

Environment variable: QUARKUS_ARANGODB_CHUNK_SIZE

+
+
+

int

+
+
+
+

max number of connections per host, (default: 1 VST, 1 HTTP/2, 20 HTTP/1.1)

+
+
+

Environment variable: QUARKUS_ARANGODB_MAX_CONNECTIONS

+
+
+

int

+
+
+
+

max lifetime of a connection (ms), (default: no ttl)

+
+
+

Environment variable: QUARKUS_ARANGODB_CONNECTION_TTL

+
+
+

long

+
+
+
+

VST keep-alive interval (s), (default: no keep-alive probes will be sent)

+
+
+

Environment variable: QUARKUS_ARANGODB_KEEP_ALIVE_INTERVAL

+
+
+

int

+
+
+
+

acquire the list of available hosts, (default: false)

+
+
+

Environment variable: QUARKUS_ARANGODB_ACQUIRE_HOST_LIST

+
+
+

boolean

+
+
+
+

acquireHostList interval (ms), (default: 3_600_000, 1 hour)

+
+
+

Environment variable: QUARKUS_ARANGODB_ACQUIRE_HOST_LIST_INTERVAL

+
+
+

int

+
+
+
+

load balancing strategy, possible values are: NONE, ROUND_ROBIN, ONE_RANDOM, (default: NONE)

+
+
+

Environment variable: QUARKUS_ARANGODB_LOAD_BALANCING_STRATEGY

+
+
+
+

none, round-robin, one-random

+
+
+
+
+

amount of samples kept for queue time metrics, (default: 10)

+
+
+

Environment variable: QUARKUS_ARANGODB_RESPONSE_QUEUE_TIME_SAMPLES

+
+
+

int

list of hosts to connect on

Type

Default

+ +
+
+
+

host hostname

+
+
+

Environment variable: QUARKUS_ARANGODB_HOSTS_HOSTNAME

+
+
+

string

required

+ +
+
+
+

host port

+
+
+

Environment variable: QUARKUS_ARANGODB_HOSTS_PORT

+
+
+

int

required

sslTruststore configuration +This configuration section is optional

Type

Default

+
+
+
+

location where to find the cert file

+
+
+

Environment variable: QUARKUS_ARANGODB_SSL_TRUSTSTORE_LOCATION

+
+
+

path

required

+
+
+
+

trustStore password

+
+
+

Environment variable: QUARKUS_ARANGODB_SSL_TRUSTSTORE_PASSWORD

+
+
+

string

required

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-artemis/2.x/includes/attributes.html b/quarkus-artemis/2.x/includes/attributes.html new file mode 100644 index 0000000000..0d7155a169 --- /dev/null +++ b/quarkus-artemis/2.x/includes/attributes.html @@ -0,0 +1,921 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-artemis/2.x/includes/quarkus-artemis-core.html b/quarkus-artemis/2.x/includes/quarkus-artemis-core.html new file mode 100644 index 0000000000..b861c02488 --- /dev/null +++ b/quarkus-artemis/2.x/includes/quarkus-artemis-core.html @@ -0,0 +1,1490 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Whether to enable this configuration. +Is enabled by default.

+
+
+

Environment variable: QUARKUS_ARTEMIS_ENABLED

+
+
+

boolean

+
+
+
+

Enable or disable Dev Services explicitly. Dev Services are automatically enabled unless quarkus.artemis.url is set.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Optional fixed port the dev service will listen to. +If not defined, the port will be chosen randomly.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_PORT

+
+
+

int

+
+
+
+

The ActiveMQ Artemis container image to use. +Defaults to quay.io/artemiscloud/activemq-artemis-broker:artemis.2.32.0

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_IMAGE_NAME

+
+
+

string

+
+
+
+

Indicates if the ActiveMQ Artemis broker managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for ActiveMQ Artemis starts a new container. Is activated by default when not set. +The discovery uses the quarkus-dev-service-artemis label. The value is configured using the service-name property. +Container sharing is only used in dev mode.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_SHARED

+
+
+

boolean

+
+
+
+

The value of the quarkus-dev-service-artemis label attached to the started container. This property is used when shared is set to true. It defaults to artemis when not set. In this case, before starting a container, Dev Services for ActiveMQ Artemis looks for a container with the quarkus-dev-service-artemis label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-artemis label set to the specified value. +This property is used when you need multiple shared ActiveMQ Artemis brokers.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_SERVICE_NAME

+
+
+

string

+
+
+
+

User to start artemis broker. Defaults to admin if not set.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_USER

+
+
+

string

+
+
+
+

Password to start artemis broker. Defaults to admin whne not set.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_PASSWORD

+
+
+

string

+
+
+
+

The value of the AMQ_EXTRA_ARGS environment variable to pass to the container. Defaults to --no-autotune --mapped --no-fsync when not set.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_EXTRA_ARGS

+
+
+

string

+
+
+
+

Whether this particular data source should be excluded from the health check if the general health check for data sources is enabled. +By default, the health check includes all configured data sources (if it is enabled).

+
+
+

Environment variable: QUARKUS_ARTEMIS_HEALTH_EXCLUDE

+
+
+

boolean

+
+
+
+

Support to expose javax.jms.XAConnectionFactory. Is not activated by default.

+
+
+

Environment variable: QUARKUS_ARTEMIS_XA_ENABLED

+
+
+

boolean

+
+
+
+

Whether a health check is published in case the smallrye-health extension is present. +This is a global setting and is not specific to a datasource.

+
+
+

Environment variable: QUARKUS_ARTEMIS_HEALTH_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether camel context enhancement should be enabled. +If enabled, all javax.jms.ConnectionFactory s annotated with io.smallrye.common.annotation.Identifier are registered as named beans in the camel context.

+
+
+

Environment variable: QUARKUS_ARTEMIS_CAMEL_QUARKUS_ENHANCE_ENABLED

+
+
+

boolean

false

+
+
+
+

Artemis connection url

+
+
+

Environment variable: QUARKUS_ARTEMIS_URL

+
+
+

string

+
+
+
+

Username for authentication, only used with JMS

+
+
+

Environment variable: QUARKUS_ARTEMIS_USERNAME

+
+
+

string

+
+
+
+

Password for authentication, only used with JMS

+
+
+

Environment variable: QUARKUS_ARTEMIS_PASSWORD

+
+
+

string

+
+
+
+

Whether configurations (org.apache.activemq.artemis.api.core.client.ServerLocator`s in case of the `artemis-core extension, javax.jms.ConnectionFactory`s in case of the `artemis-jms extension) should be included in the health check. Defaults to true if not set.

+
+
+

Environment variable: QUARKUS_ARTEMIS_HEALTH_EXTERNAL_ENABLED

+
+
+

boolean

Additional named configs

Type

Default

+
+
+
+

Whether to enable this configuration. +Is enabled by default.

+
+
+

Environment variable: QUARKUS_ARTEMIS__CONFIGURATION_NAME__ENABLED

+
+
+

boolean

+
+
+
+

Enable or disable Dev Services explicitly. Dev Services are automatically enabled unless quarkus.artemis.url is set.

+
+
+

Environment variable: QUARKUS_ARTEMIS__CONFIGURATION_NAME__DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Optional fixed port the dev service will listen to. +If not defined, the port will be chosen randomly.

+
+
+

Environment variable: QUARKUS_ARTEMIS__CONFIGURATION_NAME__DEVSERVICES_PORT

+
+
+

int

+
+
+
+

The ActiveMQ Artemis container image to use. +Defaults to quay.io/artemiscloud/activemq-artemis-broker:artemis.2.32.0

+
+
+

Environment variable: QUARKUS_ARTEMIS__CONFIGURATION_NAME__DEVSERVICES_IMAGE_NAME

+
+
+

string

+
+
+
+

Indicates if the ActiveMQ Artemis broker managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for ActiveMQ Artemis starts a new container. Is activated by default when not set. +The discovery uses the quarkus-dev-service-artemis label. The value is configured using the service-name property. +Container sharing is only used in dev mode.

+
+
+

Environment variable: QUARKUS_ARTEMIS__CONFIGURATION_NAME__DEVSERVICES_SHARED

+
+
+

boolean

+
+
+
+

The value of the quarkus-dev-service-artemis label attached to the started container. This property is used when shared is set to true. It defaults to artemis when not set. In this case, before starting a container, Dev Services for ActiveMQ Artemis looks for a container with the quarkus-dev-service-artemis label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-artemis label set to the specified value. +This property is used when you need multiple shared ActiveMQ Artemis brokers.

+
+
+

Environment variable: QUARKUS_ARTEMIS__CONFIGURATION_NAME__DEVSERVICES_SERVICE_NAME

+
+
+

string

+
+
+
+

User to start artemis broker. Defaults to admin if not set.

+
+
+

Environment variable: QUARKUS_ARTEMIS__CONFIGURATION_NAME__DEVSERVICES_USER

+
+
+

string

+
+
+
+

Password to start artemis broker. Defaults to admin whne not set.

+
+
+

Environment variable: QUARKUS_ARTEMIS__CONFIGURATION_NAME__DEVSERVICES_PASSWORD

+
+
+

string

+
+
+
+

The value of the AMQ_EXTRA_ARGS environment variable to pass to the container. Defaults to --no-autotune --mapped --no-fsync when not set.

+
+
+

Environment variable: QUARKUS_ARTEMIS__CONFIGURATION_NAME__DEVSERVICES_EXTRA_ARGS

+
+
+

string

+
+
+
+

Whether this particular data source should be excluded from the health check if the general health check for data sources is enabled. +By default, the health check includes all configured data sources (if it is enabled).

+
+
+

Environment variable: QUARKUS_ARTEMIS__CONFIGURATION_NAME__HEALTH_EXCLUDE

+
+
+

boolean

+
+
+
+

Support to expose javax.jms.XAConnectionFactory. Is not activated by default.

+
+
+

Environment variable: QUARKUS_ARTEMIS__CONFIGURATION_NAME__XA_ENABLED

+
+
+

boolean

Additional named configuration

Type

Default

+
+
+
+

Artemis connection url

+
+
+

Environment variable: QUARKUS_ARTEMIS__CONFIGURATION_NAME__URL

+
+
+

string

+
+
+
+

Username for authentication, only used with JMS

+
+
+

Environment variable: QUARKUS_ARTEMIS__CONFIGURATION_NAME__USERNAME

+
+
+

string

+
+
+
+

Password for authentication, only used with JMS

+
+
+

Environment variable: QUARKUS_ARTEMIS__CONFIGURATION_NAME__PASSWORD

+
+
+

string

+
+
+
+
+ + + + + + + diff --git a/quarkus-artemis/2.x/index.html b/quarkus-artemis/2.x/index.html new file mode 100644 index 0000000000..21b9cf1b9e --- /dev/null +++ b/quarkus-artemis/2.x/index.html @@ -0,0 +1,2220 @@ + + + + + + Quarkus Artemis JMS :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Artemis JMS

+
+
+
+

This extension enables the use of the Apache ActiveMQ Artemis JMS client in Quarkus.

+
+
+

It provides configuration properties to configure the JMS client and native executable support.

+
+
+

For general considerations about the JMS support in Quarkus, it is recommended to read the JMS guide.

+
+
+
+
+

Compatibility

+
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1. Compatibility Table
Quarkus versionQuarkus JMS versionEnd of Life
+

2.x

+
+

latest 2.x

+
+

2024-04-30

+
+

3.0.x
+3.1.x
+3.2.x

+
+

latest 3.0.x

+
+

TBD

+
+

3.3.x
+3.4.x
+3.5.x
+3.6.x
+3.7.x

+
+

3.1.x

+
+

TBD

+
+

3.8.x

+
+

3.2.x

+
+

TBD

+
+ + +++++ + + + + + + + + + + + + + + + + + + + +
Table 2. LTS Support
Quarkus LTS versionQuarkus JMS versionEnd of Life
+

3.2.x

+
+

3.0.x

+
+

TBD

+
+

3.8.x

+
+

3.2.x

+
+

TBD

+
+
+
+
+

Installation

+
+
+

To benefit from a consistent definition of the Artemis dependencies (including artemis-server often used in the tests), +it is recommended to add the following BOM to your project, below the Quarkus BOM:

+
+
+
+
<dependencyManagement>
+    <dependencies>
+        <dependency>
+            <groupId>io.quarkus.platform</groupId>
+            <artifactId>quarkus-bom</artifactId>
+            <version>${quarkus.version}</version>
+            <type>pom</type>
+            <scope>import</scope>
+        </dependency>
+        <dependency>
+            <groupId>io.quarkiverse.artemis</groupId>
+            <artifactId>quarkus-artemis-bom</artifactId>
+            <version>2.1.3</version>
+            <type>pom</type>
+            <scope>import</scope>
+        </dependency>
+    </dependencies>
+</dependencyManagement>
+
+
+
+

Once the BOM is added, simply add the io.quarkiverse.artemis:quarkus-artemis-jms extension:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.artemis</groupId>
+    <artifactId>quarkus-artemis-jms</artifactId>
+</dependency>
+<dependency>
+    <groupId>io.quarkiverse.artemis</groupId>
+    <artifactId>quarkus-test-artemis</artifactId>
+    <scope>test</scope>
+</dependency>
+
+
+
+

We recommend to set properties quarkus.version and artemis.version to the versions you are using/need to use. We also recommend to align artemis.version with the artemis server version used.

+
+
+

If you are using camel-quarkus, we also recommend setting camel-quarkus.platform.version to the version of camel used.

+
+
+
+
+

Named configurations

+
+
+

As with quarkus.datasource, we can configure multiple, named configuration. If a configuration is configured under the root quarkus.artemis, then this is the default or unnamed configuration.

+
+
+
Default configuration
+
+
quarkus.artemis.url=...
+quarkus.artemis.username=...
+quarkus.artemis.password=...
+
+
+
+

This corresponding bean is registered as the @Default bean and can be injected without additional qualifiers.

+
+
+ + + + + +
+ + +There must be some build-time configuration, otherwise the bean will not be available. Having only run-time configuration (e.g. environment variables) is not enough. Please see section Configuration detection at build-time for details. +
+
+
+
Injection of default ServerLocator when using quarkus-artemis-core
+
+
public class MyClass {
+    ...
+    private final ServerLocator serverLocator;
+    ...
+
+    public MyClass (
+            ...
+            ServerLocator serverLocator,
+            ...
+    ) {
+        ...
+        this.serverLocator = serverLocator;
+        ...
+    }
+}
+
+
+
+
Injection of default ConnectionFactory when using quarkus-artemis-jms
+
+
public class MyClass {
+    ...
+    private final ConnectionFactory connectionFactory;
+    ...
+
+    public MyClass (
+            ...
+            ConnectionFactory connectionFactory,
+            ...
+    ) {
+        ...
+        this.connectionFactory = connectionFactory;
+        ...
+    }
+}
+
+
+
+

It is also registered with @Identifier("<default>"), so we can inject it with

+
+
+
Injection of default ServerLocator by its explicit name when using quarkus-artemis-core
+
+
public class MyClass {
+    ...
+    private final ServerLocator serverLocator;
+    ...
+
+    public MyClass (
+            ...
+            @Identifier("<default>") ServerLocator serverLocator,
+            ...
+    ) {
+        ...
+        this.serverLocator = serverLocator;
+        ...
+    }
+}
+
+
+
+
Injection of default ConnectionFactory by its explicit name when using quarkus-artemis-jms
+
+
public class MyClass {
+    ...
+    private final ConnectionFactory connectionFactory;
+    ...
+
+    public MyClass (
+            ...
+            @Identifier("<default>") ConnectionFactory connectionFactory,
+            ...
+    ) {
+        ...
+        this.connectionFactory = connectionFactory;
+        ...
+    }
+}
+
+
+
+

Named configurations, on the other hand, are not configured as @Default beans and must therefore be injected by name. The name of the bean is the name of the configuration, and @Identifier(…​) is used to qualify the name. So for example, if we define a configuration "named-1":

+
+
+
Named configuration "named-1"
+
+
quarkus.artemis."named-1".url=...
+quarkus.artemis."named-1".username=...
+quarkus.artemis."named-1".password=...
+
+
+
+

we can inject it with:

+
+
+
Injection of named ServerLocator "named-1" when using extension quarkus-artemis-core
+
+
public class MyClass {
+    ...
+    private final ServerLocator serverLocator;
+    ...
+
+    public MyClass (
+            ...
+            @Identifier("named-1") ServerLocator serverLocator,
+            ...
+    ) {
+        ...
+        this.serverLocator = serverLocator;
+        ...
+    }
+}
+
+
+
+
Injection of named ConnectionFactory "named-1" when using extension quarkus-artemis-jms
+
+
public class MyClass {
+    ...
+    private final ConnectionFactory connectionFactory;
+    ...
+
+    public MyClass (
+            ...
+            @Identifier("named-1") ConnectionFactory connectionFactory,
+            ...
+    ) {
+        ...
+        this.connectionFactory = connectionFactory;
+        ...
+    }
+}
+
+
+
+ + + + + +
+ + +We strongly recommend the usage of @Identifier annotation instead of the @Named annotation. Some other feature rely on the usage of @Identifier. Please see section Health checks for details. +
+
+
+
+
+

@Default Bean

+
+
+

When an unnamed configuration is provided, this configuration will be registered as @Default bean. Otherwise, if only a single configuration is provided, this configuration will be registered as @Default bean. This mechanism allows us to inject this bean without any qualifier.

+
+
+
+
+

Setting properties at runtime results in a warning

+
+
+

When we override the properties url, username or password of a configuration at runtime - either through the implicit environment variable (QUARKUS_ARTEMIS_URL, QUARKUS_ARTEMIS__CONNECTION_NAME__URL), a custom environment variable (quarkus.artemis.url=${ARTEMIS_URL:tcp://dummy:12345}) or a runtime-provided .properties-/.yaml files, we will see a warning at startup similar to this one:

+
+
+
Warning at startup
+
+
2022-11-03 00:53:17,060 WARN  [io.qua.run.con.ConfigRecorder] (main) Build time property cannot be changed at runtime:
+ - quarkus.artemis.url is set to 'tcp://localhost:61616' but it is build time fixed to 'tcp://dummy:12345'. Did you change the property quarkus.artemis.url after building the application?
+
+
+
+

This is expected. We bind some properties twice: once as build-time property, once as run time property. We do so to analyze the (run time-)configuration at build time to get a list of named connections. The overwritten configuration will take effect. The correct behaviour is enforced by two different tests. The above example is taken from the logs of those tests.

+
+
+
+
+

Configuration detection at build-time

+
+
+

We took special care so the configurations behave "as intuitively as possible". This means that if no connection-related configuration (enabled, url, username, password, devservices…​, health-exclude, xa-enabled) is present at build-time, it is assumed that the configuration is not used and disabled. Therefore, if we want to use any configuration, but not configure it, we should set quarkus.artemis.enabled / quarkus.artemis."named-configuration".enabled to true to explicitly enable the configuration. Due to the fact how the configuration system works in quarkus, we are only able to analyze properties defined in the default profile, i.e. properties without a prefix (%dev, %text, …​). If in doubt, we recommend setting quarkus.artemis.enabled/quarkus.artemis."named-configuration".enabled to true.

+
+
+ + + + + +
+ + +This is also the case if we bind properties in the default profile to environment variables, without a default value. For example, quarkus.artemis.url=${ARTEMIS_URL} has no value at build-time, thus this property is "invisible" at build time. +
+
+
+ + + + + +
+ + +Binding a property to an environment variable, like quarkus.artemis.url=${ARTEMIS_URL} is sufficient, so the extension can pick up the configuration at build-time. +
+
+
+ + + + + +
+ + +If we want to configure a connection solely through the implicit environment variables QUARKUS_ARTEMIS_…​, we should enable the configuration by setting quarkus.artemis.enabled / quarkus.artemis."named-configuration".enabled to true. For example, if we want to configure connection quarkus.artemis."named-1" through the implicit environment variables, we would set quarkus.artemis."named-1".enabled=true and then configure the connection through environment variables QUARKUS_ARTEMIS__NAMED_1__…​. +
+
+
+

Table Visibility of configuration values gives an overview when a property is visible at build time, and when it is not.

+
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 3. Visibility of configuration values
DescriptionExampleVisible?
+

configuration property belonging to a specific profile

+
+
    +
  • +

    %dev.quarkus.artemis.url=tcp://localhost:61616

    +
  • +
  • +

    %test.quarkus.artemis.password=${ARTEMIS_PASSWORD:artemis}

    +
  • +
+
+

+
+

configuration property bound to constant value

+
+
    +
  • +

    quarkus.artemis.url=tcp://localhost:61616

    +
  • +
  • +

    quarkus.artemis.username=artems

    +
  • +
+
+

✔️

+
+

configuration property bound to environment variable

+
+
    +
  • +

    quarkus.artemis."named".url=${ARTEMIS_NAMED_URL}

    +
  • +
  • +

    quarkus.artemis.password=${ARTEMIS_PASSWORD}

    +
  • +
+
+

+
+

configuration property bound to environment variable with default value

+
+
    +
  • +

    quarkus.artemis."named".url=${ARTEMIS_NAMED_URL:tcp://localhost:61616}

    +
  • +
  • +

    quarkus.artemis.password=${ARTEMIS_PASSWORD:artemis}

    +
  • +
+
+

✔️

+
+
+

Please do not try to configure a configuration purely through environment variables, without having any indication of its present in the application’s configuration file. We specifically rely on the presence of some configuration fragment at build-time to detect configurations.

+
+
+
+
+

XA-capable Connection Factories

+
+
+

To get XA-capable connection factories, we can set quarkus.artemis.xa-enabled / quarkus.artemis."named-configuration".xa-enabled to true. We can then inject the corresponding bean as XAConnectionFactory.

+
+
+

To use XA transactions and integrate with a transaction manager, we recommend using the quarkus-pooled-jms quarkiverse extension.

+
+
+
+
+

URL as optional configuration

+
+
+

The url configuration property is optional. But in general, without a url property, we cannot create a connection. In case of tests with embedded resources or devservices, the corresponding annotation/service injects a url. But if the application starts up and no url property is found, the creation of the bean will throw a RuntimeException with a corresponding error message. Notice that this will happen when the bean is created. If the bean is never used (and thus never created), the exception will not occur.

+
+
+
+
+

Health checks

+
+
+

By default, all configurations are added to the health check endpoint when extension quarkus-smallrye-health is loaded.

+
+
+

We can disable health checks for all ServerLocator s (extension quarkus-artemis-core) or ConnectionFactory s (extension quarkus-artemis-jms) by setting quarkus.artemis.health.enabled to false.

+
+
+

We can disable health checks for individual configurations by setting quarkus.artemis.health-exclude / quarkus.artemis."named-configuration".health-exclude to true

+
+
+ + + + + +
+ + +Note that we can only enable health checks through the above configuration if quarkus.artemis.health.enabled is true. Otherwise, setting quarkus.artemis.health-exclude / quarkus.artemis."named-connection".health-exclude has no effect. +
+
+
+

If we create ServerLocator- (extension quarkus-artemis-core) or ConnectionFactory- (extension quarkus-artemis-jms) beans within our application (i.e. outside of this extension), we can include them in the health check by using the @Identifier annotation, e.g.:

+
+
+
Defining a ServerLocator-bean that is picked up automatically by health checks
+
+
public class MyBeanProvider {
+    @ApplicationScoped
+    @Identified("my-server-locator") // this annotation makes it so the bean is picked up by the health endpoint
+    public ServerLocator mySeverLocator(...) {
+        ServerLocator myServerLocator = ...;
+        ...
+        return myServerLocator;
+    }
+}
+
+
+
+
Defining a ConnectionFactory-bean that is picked up automatically by health checks
+
+
public class MyBeanProvider {
+    @ApplicationScoped
+    @Identified("my-connection-factory") // this annotation makes it so the bean is picked up by the health endpoint
+    public ConnectionFactory myConnectionFactory(...) {
+        ConnectionFactory myConnectionFactory = ...;
+        ...
+        return myConnectionFactory;
+    }
+}
+
+
+
+

If we do not want that beans created within our application is picked up by the health endpoint, we can set quarkus.artemis.health.external.enabled to false.

+
+
+ + + + + +
+ + +Note that ServerLocator s / ConnectionFactory s are only picked up when quarkus.artemis.health.enabled is true. +
+
+
+
+
+

Camel support

+
+
+

All connection factories that are configured through quarkus-artemis-jms are automatically registered in the camel context, if the program uses camel. This allows us to reference the connection factories by name, e.g.:

+
+
+
Referencing ConnectionFactory s in a camel route by their bean name
+
+
from(jms("queue:in").connectionFactory("<default>"))
+    .to(jms("queue:out").connectionFactory("named"));
+
+
+
+

In camel-quarkus, an externally defined ConnectionFactory can only be referenced by its name in a route configuration if it has a @Named(…​) annotation (documentation). This conflicts somewhat with the philosophy of the quarkus-artemis extensions, since it uses @Identifier instead. We bridge this gap by allowing to register all ConnectionFactory s annotated with @Identifier with the camel context. To enable this feature, we can set configuration property quarkus.artemis.camel-quarkus-enhance-enabled to true. This property is set to false by default.

+
+
+

With this in place, we can define a ConnectionFactory, e.g. through a method annotated with @Produces and, for example, @Identifier("externally-defined"):

+
+
+
Defining an externally defined ConnectionFactory-bean through a @Produces method
+
+
@Produces
+@Typed({ ConnectionFactory.class })
+@ApplicationScoped
+@Identifier("externally-defined")
+ActiveMQConnectionFactory externallyDefinedConnectionFactory(
+        @ConfigProperty(name = "artemis.externally-defined.url") String externallyDefinedUrl) {
+    return new ActiveMQConnectionFactory(externallyDefinedUrl);
+}
+
+
+
+

We can then use this ConnectionFactory as follows:

+
+
+
Referencing an externally defined ConnectionFactory-bean by its name
+
+
from(jms("queue:in").connectionFactory("externally-defined"))
+    .to(jms("queue:out").connectionFactory("externally-defined"));
+
+
+
+

Finally, if only a single ConnectionFactory is defined through quarkus-artemis-jms, this ConnectionFactory is always registered as @Default bean (see Section @Default Bean). This allows us to use this ConnectionFactory implicitly in a camel route, without setting it explicitly:

+
+
+
Implicitly use the only ConnectionFactory-bean defined in the application
+
+
from(jms("queue:in"))
+    .to(jms("queue:out"));
+
+
+
+

This also works for an externally defined ConnectionFactory, as long as it is defined as @Default (remember that all beans that do not have any qualifier annotation are automatically @Default beans). For an externally defined ConnectionFactory, this does not require to set quarkus.artemis.camel-context-enhance-enable to be true.

+
+
+

This mechanism stops working as soon as more than one ConnectionFactory bean is defined in the application.

+
+
+
+
+

Artemis DevServices

+
+
+

Artemis DevServices are automatically enabled unless quarkus.artemis.url / quarkus.artemis."named-configuration".url is set or quarkus.artemis.devservices.enabled / quarkus.artemis."named-configuration".enabled is false explicitly. And if you still want to use ArtemisTestResource in the test, you need to disable artemis devservices.

+
+
+
+
+

Test framework

+
+
+

To facilitate testing, we provide a dedicated testing framework that can start an in-memory artemis instance For the default configuration, we can start an in-memory instance of artemis by annotating our tests with @QuarkusTestResource(ArtemisTestResource.class). The embedded artemis can be configured through a broker.xml, located under src/test/resources.

+
+
+

To start an in-memory artemis for a named configuration, we can define our own test annotation by extending ArtemisTestResource.class:

+
+
+
Annotation to start an in-memory artemis instance for the named configuration "named-1"
+
+
public class NamedOneArtemisTestResource extends ArtemisTestResource {
+    public NamedOneArtemisTestResource() {
+        super("named-1");
+    }
+}
+
+
+
+

We can then annotate our test with @QuarkusTestResource(NamedOneArtemisTestResource.class).

+
+
+

This instance can be configured by placing a broker-named-1.xml in src/test/resources. In general, for a configuration with name <name>, we can configure the corresponding in-memory artemis through file src/test/resources/broker-<name>.xml.

+
+
+

For an in-depth explanation of what can be configured in a broker.xml, please see the official Artemis documentation.

+
+
+
+
+

Examples

+
+
+

Examples can be found in the integration-tests module, e.g. +The Apache ActiveMQ Artemis Core integration with default configuration tests module

+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Whether to enable this configuration. +Is enabled by default.

+
+
+

Environment variable: QUARKUS_ARTEMIS_ENABLED

+
+
+

boolean

+
+
+
+

Enable or disable Dev Services explicitly. Dev Services are automatically enabled unless quarkus.artemis.url is set.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Optional fixed port the dev service will listen to. +If not defined, the port will be chosen randomly.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_PORT

+
+
+

int

+
+
+
+

The ActiveMQ Artemis container image to use. +Defaults to quay.io/artemiscloud/activemq-artemis-broker:artemis.2.32.0

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_IMAGE_NAME

+
+
+

string

+
+
+
+

Indicates if the ActiveMQ Artemis broker managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for ActiveMQ Artemis starts a new container. Is activated by default when not set. +The discovery uses the quarkus-dev-service-artemis label. The value is configured using the service-name property. +Container sharing is only used in dev mode.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_SHARED

+
+
+

boolean

+
+
+
+

The value of the quarkus-dev-service-artemis label attached to the started container. This property is used when shared is set to true. It defaults to artemis when not set. In this case, before starting a container, Dev Services for ActiveMQ Artemis looks for a container with the quarkus-dev-service-artemis label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-artemis label set to the specified value. +This property is used when you need multiple shared ActiveMQ Artemis brokers.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_SERVICE_NAME

+
+
+

string

+
+
+
+

User to start artemis broker. Defaults to admin if not set.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_USER

+
+
+

string

+
+
+
+

Password to start artemis broker. Defaults to admin whne not set.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_PASSWORD

+
+
+

string

+
+
+
+

The value of the AMQ_EXTRA_ARGS environment variable to pass to the container. Defaults to --no-autotune --mapped --no-fsync when not set.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_EXTRA_ARGS

+
+
+

string

+
+
+
+

Whether this particular data source should be excluded from the health check if the general health check for data sources is enabled. +By default, the health check includes all configured data sources (if it is enabled).

+
+
+

Environment variable: QUARKUS_ARTEMIS_HEALTH_EXCLUDE

+
+
+

boolean

+
+
+
+

Support to expose javax.jms.XAConnectionFactory. Is not activated by default.

+
+
+

Environment variable: QUARKUS_ARTEMIS_XA_ENABLED

+
+
+

boolean

+
+
+
+

Whether a health check is published in case the smallrye-health extension is present. +This is a global setting and is not specific to a datasource.

+
+
+

Environment variable: QUARKUS_ARTEMIS_HEALTH_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether camel context enhancement should be enabled. +If enabled, all javax.jms.ConnectionFactory s annotated with io.smallrye.common.annotation.Identifier are registered as named beans in the camel context.

+
+
+

Environment variable: QUARKUS_ARTEMIS_CAMEL_QUARKUS_ENHANCE_ENABLED

+
+
+

boolean

false

+
+
+
+

Artemis connection url

+
+
+

Environment variable: QUARKUS_ARTEMIS_URL

+
+
+

string

+
+
+
+

Username for authentication, only used with JMS

+
+
+

Environment variable: QUARKUS_ARTEMIS_USERNAME

+
+
+

string

+
+
+
+

Password for authentication, only used with JMS

+
+
+

Environment variable: QUARKUS_ARTEMIS_PASSWORD

+
+
+

string

+
+
+
+

Whether configurations (org.apache.activemq.artemis.api.core.client.ServerLocator`s in case of the `artemis-core extension, javax.jms.ConnectionFactory`s in case of the `artemis-jms extension) should be included in the health check. Defaults to true if not set.

+
+
+

Environment variable: QUARKUS_ARTEMIS_HEALTH_EXTERNAL_ENABLED

+
+
+

boolean

Additional named configs

Type

Default

+
+
+
+

Whether to enable this configuration. +Is enabled by default.

+
+
+

Environment variable: QUARKUS_ARTEMIS__CONFIGURATION_NAME__ENABLED

+
+
+

boolean

+
+
+
+

Enable or disable Dev Services explicitly. Dev Services are automatically enabled unless quarkus.artemis.url is set.

+
+
+

Environment variable: QUARKUS_ARTEMIS__CONFIGURATION_NAME__DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Optional fixed port the dev service will listen to. +If not defined, the port will be chosen randomly.

+
+
+

Environment variable: QUARKUS_ARTEMIS__CONFIGURATION_NAME__DEVSERVICES_PORT

+
+
+

int

+
+
+
+

The ActiveMQ Artemis container image to use. +Defaults to quay.io/artemiscloud/activemq-artemis-broker:artemis.2.32.0

+
+
+

Environment variable: QUARKUS_ARTEMIS__CONFIGURATION_NAME__DEVSERVICES_IMAGE_NAME

+
+
+

string

+
+
+
+

Indicates if the ActiveMQ Artemis broker managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for ActiveMQ Artemis starts a new container. Is activated by default when not set. +The discovery uses the quarkus-dev-service-artemis label. The value is configured using the service-name property. +Container sharing is only used in dev mode.

+
+
+

Environment variable: QUARKUS_ARTEMIS__CONFIGURATION_NAME__DEVSERVICES_SHARED

+
+
+

boolean

+
+
+
+

The value of the quarkus-dev-service-artemis label attached to the started container. This property is used when shared is set to true. It defaults to artemis when not set. In this case, before starting a container, Dev Services for ActiveMQ Artemis looks for a container with the quarkus-dev-service-artemis label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-artemis label set to the specified value. +This property is used when you need multiple shared ActiveMQ Artemis brokers.

+
+
+

Environment variable: QUARKUS_ARTEMIS__CONFIGURATION_NAME__DEVSERVICES_SERVICE_NAME

+
+
+

string

+
+
+
+

User to start artemis broker. Defaults to admin if not set.

+
+
+

Environment variable: QUARKUS_ARTEMIS__CONFIGURATION_NAME__DEVSERVICES_USER

+
+
+

string

+
+
+
+

Password to start artemis broker. Defaults to admin whne not set.

+
+
+

Environment variable: QUARKUS_ARTEMIS__CONFIGURATION_NAME__DEVSERVICES_PASSWORD

+
+
+

string

+
+
+
+

The value of the AMQ_EXTRA_ARGS environment variable to pass to the container. Defaults to --no-autotune --mapped --no-fsync when not set.

+
+
+

Environment variable: QUARKUS_ARTEMIS__CONFIGURATION_NAME__DEVSERVICES_EXTRA_ARGS

+
+
+

string

+
+
+
+

Whether this particular data source should be excluded from the health check if the general health check for data sources is enabled. +By default, the health check includes all configured data sources (if it is enabled).

+
+
+

Environment variable: QUARKUS_ARTEMIS__CONFIGURATION_NAME__HEALTH_EXCLUDE

+
+
+

boolean

+
+
+
+

Support to expose javax.jms.XAConnectionFactory. Is not activated by default.

+
+
+

Environment variable: QUARKUS_ARTEMIS__CONFIGURATION_NAME__XA_ENABLED

+
+
+

boolean

Additional named configuration

Type

Default

+
+
+
+

Artemis connection url

+
+
+

Environment variable: QUARKUS_ARTEMIS__CONFIGURATION_NAME__URL

+
+
+

string

+
+
+
+

Username for authentication, only used with JMS

+
+
+

Environment variable: QUARKUS_ARTEMIS__CONFIGURATION_NAME__USERNAME

+
+
+

string

+
+
+
+

Password for authentication, only used with JMS

+
+
+

Environment variable: QUARKUS_ARTEMIS__CONFIGURATION_NAME__PASSWORD

+
+
+

string

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-artemis/3.0.x/includes/attributes.html b/quarkus-artemis/3.0.x/includes/attributes.html new file mode 100644 index 0000000000..2abd092348 --- /dev/null +++ b/quarkus-artemis/3.0.x/includes/attributes.html @@ -0,0 +1,924 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-artemis/3.0.x/includes/quarkus-artemis-core.html b/quarkus-artemis/3.0.x/includes/quarkus-artemis-core.html new file mode 100644 index 0000000000..ea7fdda359 --- /dev/null +++ b/quarkus-artemis/3.0.x/includes/quarkus-artemis-core.html @@ -0,0 +1,1283 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Whether a health check is published in case the smallrye-health extension is present.

+
+
+

This is a global setting and is not specific to a datasource.

+
+
+

Environment variable: QUARKUS_ARTEMIS_HEALTH_ENABLED

+
+
+

boolean

+
+
+
+

Whether configurations (org.apache.activemq.artemis.api.core.client.ServerLocator`s in case of the `artemis-core extension, jakarta.jms.ConnectionFactory`s in case of the `artemis-jms extension) should be included in the health check. Defaults to true if not set.

+
+
+

Environment variable: QUARKUS_ARTEMIS_HEALTH_EXTERNAL_ENABLED

+
+
+

boolean

Configurations

Type

Default

+ +
+
+
+

Whether to enable this configuration.

+
+
+

Is enabled by default.

+
+
+

Environment variable: QUARKUS_ARTEMIS_ENABLED

+
+
+

boolean

+ +
+
+
+

Enable or disable Dev Services explicitly. Dev Services are automatically enabled unless quarkus.artemis.url is set.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_ENABLED

+
+
+

boolean

+ +
+
+
+

Optional fixed port the dev service will listen to.

+
+
+

If not defined, the port will be chosen randomly.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_PORT

+
+
+

int

+ +
+
+
+

The ActiveMQ Artemis container image to use.

+
+
+

Defaults to quay.io/artemiscloud/activemq-artemis-broker:artemis.2.32.0

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_IMAGE_NAME

+
+
+

string

+ +
+
+
+

Indicates if the ActiveMQ Artemis broker managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for ActiveMQ Artemis starts a new container. Is activated by default when not set.

+
+
+

The discovery uses the quarkus-dev-service-artemis label. The value is configured using the service-name property.

+
+
+

Container sharing is only used in dev mode.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_SHARED

+
+
+

boolean

+ +
+
+
+

The value of the quarkus-dev-service-artemis label attached to the started container. This property is used when shared is set to true. It defaults to artemis when not set. In this case, before starting a container, Dev Services for ActiveMQ Artemis looks for a container with the quarkus-dev-service-artemis label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-artemis label set to the specified value.

+
+
+

This property is used when you need multiple shared ActiveMQ Artemis brokers.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_SERVICE_NAME

+
+
+

string

+ +
+
+
+

User to start artemis broker. Defaults to admin if not set.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_USER

+
+
+

string

+ +
+
+
+

Password to start artemis broker. Defaults to admin whne not set.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_PASSWORD

+
+
+

string

+ +
+
+
+

The value of the AMQ_EXTRA_ARGS environment variable to pass to the container. Defaults to --no-autotune --mapped --no-fsync when not set.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_EXTRA_ARGS

+
+
+

string

+ +
+
+
+

Support to expose jakarta.jms.XAConnectionFactory. Is not activated by default.

+
+
+

Environment variable: QUARKUS_ARTEMIS_XA_ENABLED

+
+
+

boolean

+ +
+
+
+

Artemis connection url.

+
+
+

Environment variable: QUARKUS_ARTEMIS_URL

+
+
+

string

+ +
+
+
+

Username for authentication, only used with JMS.

+
+
+

Environment variable: QUARKUS_ARTEMIS_USERNAME

+
+
+

string

+ +
+
+
+

Password for authentication, only used with JMS.

+
+
+

Environment variable: QUARKUS_ARTEMIS_PASSWORD

+
+
+

string

+ +
+
+
+

Whether this particular data source should be excluded from the health check if the general health check for data sources is enabled.

+
+
+

By default, the health check includes all configured data sources (if it is enabled).

+
+
+

Environment variable: QUARKUS_ARTEMIS_HEALTH_EXCLUDE

+
+
+

boolean

+
+
+
+
+ + + + + + + diff --git a/quarkus-artemis/3.0.x/index.html b/quarkus-artemis/3.0.x/index.html new file mode 100644 index 0000000000..c502c1498b --- /dev/null +++ b/quarkus-artemis/3.0.x/index.html @@ -0,0 +1,934 @@ + + + + + + Quarkus Artemis extensions :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Artemis extensions

+
+

This set of extensions enable Artemis JMS Client and Artemis JMS Resource Adapter in Quarkus.

+
+
+

You can find the full set of support and documentation for both of them in the navigation on the left.

+
+
+
+
+
+ + + + + + + diff --git a/quarkus-artemis/3.0.x/quarkus-artemis-jms.html b/quarkus-artemis/3.0.x/quarkus-artemis-jms.html new file mode 100644 index 0000000000..2b95ca1143 --- /dev/null +++ b/quarkus-artemis/3.0.x/quarkus-artemis-jms.html @@ -0,0 +1,1898 @@ + + + + + + Quarkus Artemis JMS :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Artemis JMS

+
+
+
+

This extension enables the use of the Apache ActiveMQ Artemis JMS client in Quarkus.

+
+
+

It provides configuration properties to configure the JMS client and native executable support.

+
+
+

For general considerations about the JMS support in Quarkus, it is recommended to read the JMS guide.

+
+
+
+
+

Compatibility

+
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1. Compatibility Table
Quarkus versionQuarkus JMS versionEnd of Life
+

2.x

+
+

latest 2.x

+
+

2024-04-30

+
+

3.0.x
+3.1.x
+3.2.x

+
+

latest 3.0.x

+
+

TBD

+
+

3.3.x
+3.4.x
+3.5.x
+3.6.x
+3.7.x

+
+

3.1.x

+
+

TBD

+
+

3.8.x

+
+

3.2.x

+
+

TBD

+
+ + +++++ + + + + + + + + + + + + + + + + + + + +
Table 2. LTS Support
Quarkus LTS versionQuarkus JMS versionEnd of Life
+

3.2.x

+
+

3.0.x

+
+

TBD

+
+

3.8.x

+
+

3.2.x

+
+

TBD

+
+
+
+
+

Installation

+
+
+

To benefit from a consistent definition of the Artemis dependencies (including artemis-server often used in the tests), +it is recommended to add the following BOM to your project, below the Quarkus BOM:

+
+
+
+
<dependencyManagement>
+    <dependencies>
+        <dependency>
+            <groupId>io.quarkus.platform</groupId>
+            <artifactId>quarkus-bom</artifactId>
+            <version>${quarkus.version}</version>
+            <type>pom</type>
+            <scope>import</scope>
+        </dependency>
+        <dependency>
+            <groupId>io.quarkiverse.artemis</groupId>
+            <artifactId>quarkus-artemis-bom</artifactId>
+            <version>3.0.5</version>
+            <type>pom</type>
+            <scope>import</scope>
+        </dependency>
+    </dependencies>
+</dependencyManagement>
+
+
+
+

Once the BOM is added, simply add the io.quarkiverse.artemis:quarkus-artemis-jms extension:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.artemis</groupId>
+    <artifactId>quarkus-artemis-jms</artifactId>
+</dependency>
+<dependency>
+    <groupId>io.quarkiverse.artemis</groupId>
+    <artifactId>quarkus-test-artemis</artifactId>
+    <scope>test</scope>
+</dependency>
+
+
+
+

We recommend to set properties quarkus.version and artemis.version to the versions you are using/need to use. We also recommend to align artemis.version with the artemis server version used.

+
+
+

If you are using camel-quarkus, we also recommend setting camel-quarkus.platform.version to the version of camel used.

+
+
+
+
+

Named configurations

+
+
+

As with quarkus.datasource, we can configure multiple, named configuration. If a configuration is configured under the root quarkus.artemis, then this is the default or unnamed configuration.

+
+
+
Default configuration
+
+
quarkus.artemis.url=...
+quarkus.artemis.username=...
+quarkus.artemis.password=...
+
+
+
+

This corresponding bean is registered as the @Default bean and can be injected without additional qualifiers.

+
+
+ + + + + +
+ + +There must be some build-time configuration, otherwise the bean will not be available. Having only run-time configuration (e.g. environment variables) is not enough. Please see section Configuration detection at build-time for details. +
+
+
+
Injection of default ServerLocator when using quarkus-artemis-core
+
+
public class MyClass {
+    ...
+    private final ServerLocator serverLocator;
+    ...
+
+    public MyClass (
+            ...
+            ServerLocator serverLocator,
+            ...
+    ) {
+        ...
+        this.serverLocator = serverLocator;
+        ...
+    }
+}
+
+
+
+
Injection of default ConnectionFactory when using quarkus-artemis-jms
+
+
public class MyClass {
+    ...
+    private final ConnectionFactory connectionFactory;
+    ...
+
+    public MyClass (
+            ...
+            ConnectionFactory connectionFactory,
+            ...
+    ) {
+        ...
+        this.connectionFactory = connectionFactory;
+        ...
+    }
+}
+
+
+
+

It is also registered with @Identifier("<default>"), so we can inject it with

+
+
+
Injection of default ServerLocator by its explicit name when using quarkus-artemis-core
+
+
public class MyClass {
+    ...
+    private final ServerLocator serverLocator;
+    ...
+
+    public MyClass (
+            ...
+            @Identifier("<default>") ServerLocator serverLocator,
+            ...
+    ) {
+        ...
+        this.serverLocator = serverLocator;
+        ...
+    }
+}
+
+
+
+
Injection of default ConnectionFactory by its explicit name when using quarkus-artemis-jms
+
+
public class MyClass {
+    ...
+    private final ConnectionFactory connectionFactory;
+    ...
+
+    public MyClass (
+            ...
+            @Identifier("<default>") ConnectionFactory connectionFactory,
+            ...
+    ) {
+        ...
+        this.connectionFactory = connectionFactory;
+        ...
+    }
+}
+
+
+
+

Named configurations, on the other hand, are not configured as @Default beans and must therefore be injected by name. The name of the bean is the name of the configuration, and @Identifier(…​) is used to qualify the name. So for example, if we define a configuration "named-1":

+
+
+
Named configuration "named-1"
+
+
quarkus.artemis."named-1".url=...
+quarkus.artemis."named-1".username=...
+quarkus.artemis."named-1".password=...
+
+
+
+

we can inject it with:

+
+
+
Injection of named ServerLocator "named-1" when using extension quarkus-artemis-core
+
+
public class MyClass {
+    ...
+    private final ServerLocator serverLocator;
+    ...
+
+    public MyClass (
+            ...
+            @Identifier("named-1") ServerLocator serverLocator,
+            ...
+    ) {
+        ...
+        this.serverLocator = serverLocator;
+        ...
+    }
+}
+
+
+
+
Injection of named ConnectionFactory "named-1" when using extension quarkus-artemis-jms
+
+
public class MyClass {
+    ...
+    private final ConnectionFactory connectionFactory;
+    ...
+
+    public MyClass (
+            ...
+            @Identifier("named-1") ConnectionFactory connectionFactory,
+            ...
+    ) {
+        ...
+        this.connectionFactory = connectionFactory;
+        ...
+    }
+}
+
+
+
+ + + + + +
+ + +We strongly recommend the usage of @Identifier annotation instead of the @Named annotation. Some other feature rely on the usage of @Identifier. Please see section Health checks for details. +
+
+
+
+
+

Setting properties at runtime results in a warning

+
+
+

When we override the properties url, username or password of a configuration at runtime - either through the implicit environment variable (QUARKUS_ARTEMIS_URL, QUARKUS_ARTEMIS__CONNECTION_NAME__URL), a custom environment variable (quarkus.artemis.url=${ARTEMIS_URL:tcp://dummy:12345}) or a runtime-provided .properties files, we will see a warning at startup similar to this one:

+
+
+
Warning at startup
+
+
2022-11-03 00:53:17,060 WARN  [io.qua.run.con.ConfigRecorder] (main) Build time property cannot be changed at runtime:
+ - quarkus.artemis.url is set to 'tcp://localhost:61616' but it is build time fixed to 'tcp://dummy:12345'. Did you change the property quarkus.artemis.url after building the application?
+
+
+
+

This is expected. We bind some properties twice: once as build-time property, once as run time property. We do so to analyze the (run time-)configuration at build time to get a list of named connections. The overwritten configuration will take effect. The correct behaviour enforced by two different tests. The above example is taken from the logs of our tests.

+
+
+
+
+

Configuration detection at build-time

+
+
+

We took special care so the configurations behave "as intuitively as possible". This means that if no connection-related configuration (enabled, url, username, password, devservices…​, health-exclude, xa-enabled) is present at build-time, it is assumed that the configuration is not used and disabled. Therefore, if we want to use any configuration, but not configure it, we should set quarkus.artemis.enabled / quarkus.artemis."named-configuration".enabled to true to explicitly enable the configuration.

+
+
+ + + + + +
+ + +binding a property to an environment variable, like quarkus.artemis.url=${ARTEMIS_URL} is sufficient, so the extension can pick up the configuration at build-time. +
+
+
+ + + + + +
+ + +If we want to configure a connection solely through the implicit environment variables QUARKUS_ARTEMIS_…​, we should enable the configuration by setting quarkus.artemis.enabled / quarkus.artemis."named-configuration".enabled to true. For example, if we want to configure connection quarkus.artemis."named-1" through the implicit environment variables, we would set quarkus.artemis."named-1".enabled=true and then configure the connection through environment variables QUARKUS_ARTEMIS__NAMED_1__…​. +
+
+
+

Please do not try to configure a configuration purely through environment variables, without having any indication of its presence in the application’s configuration file. We specifically rely on the presence of some configuration fragment at build-time to detect configurations.

+
+
+
+
+

XA-capable Connection Factories

+
+
+

To get XA-capable connection factories, we can set quarkus.artemis.xa-enabled / quarkus.artemis."named-configuration".xa-enabled to true. We can then inject the corresponding bean as XAConnectionFactory.

+
+
+

To use XA transactions and integrate with a transaction manager, we recommend using the quarkus-pooled-jms quarkiverse extension.

+
+
+
+
+

URL as optional configuration

+
+
+

The url configuration property is optional. But in general, without a url property, we cannot create a connection. In case of tests with embedded resources or devservices, the corresponding annotation/service injects a url. But if the application starts up and no url property is found, the creation of the bean will throw a RuntimeException with a corresponding error message. Notice that this will happen when the bean is created. If the bean is never used (and thus never created), the exception will not occur.

+
+
+
+
+

Health checks

+
+
+

By default, all configurations are added to the health check endpoint when extension quarkus-smallrye-health is loaded.

+
+
+

We can disable health checks for all ServerLocator s (extension quarkus-artemis-core) or ConnectionFactory s (extension quarkus-artemis-jms) by setting quarkus.artemis.health.enabled to false.

+
+
+

We can disable health checks for individual configurations by setting quarkus.artemis.health-exclude / quarkus.artemis."named-configuration".health-exclude to true

+
+
+ + + + + +
+ + +Note that we can only enable health checks through the above configuration if quarkus.artemis.health.enabled is true. Otherwise, setting quarkus.artemis.health-exclude / quarkus.artemis."named-connection".health-exclude has no effect. +
+
+
+

If we create ServerLocator- (extension quarkus-artemis-core) or ConnectionFactory- (extension quarkus-artemis-jms) beans within our application (i.e. outside of this extension), we can include them in the health check by using the Identifier annotation, e.g.:

+
+
+
Defining a ServerLocator-bean that is picked up automatically by health checks
+
+
public class MyBeanProvider {
+    @ApplicationScoped
+    @Identifier("my-server-locator") // this annotation makes it so the bean is picked up by the health endpoint
+    public ServerLocator mySeverLocator(...) {
+        ServerLocator myServerLocator = ...;
+        ...
+        return myServerLocator;
+    }
+}
+
+
+
+
Defining a ConnectionFactory-bean that is picked up automatically by health checks
+
+
public class MyBeanProvider {
+    @ApplicationScoped
+    @Identifier("my-connection-factory") // this annotation makes it so the bean is picked up by the health endpoint
+    public ConnectionFactory myConnectionFactory(...) {
+        ConnectionFactory myConnectionFactory = ...;
+        ...
+        return myConnectionFactory;
+    }
+}
+
+
+
+

If we do not want that beans created within our application is picked up by the health endpoint, we can set quarkus.artemis.health.external.enabled to false.

+
+
+ + + + + +
+ + +Note that ServerLocator s / ConnectionFactory s are only picked up when quarkus.artemis.health.enabled is true. +
+
+
+
+
+

Camel support

+
+
+

All connection factories that are configured through quarkus-artemis-jms are automatically registered in the camel context, if the program uses camel. This allows us to reference the connection factories by name, e.g.:

+
+
+
Referencing ConnectionFactory s in a camel route by their bean name
+
+
from(jms("queue:in").connectionFactory("<default>"))
+    .to(jms("queue:out").connectionFactory("named"));
+
+
+
+

In camel-quarkus, an externally defined ConnectionFactory can only be referenced by its name in a route configuration if it has either a @Named(…​) or the @Identifier(…​) annotation. However, as mentioned above, the usage of @Identifier(…​) should be preferred when using this extension.

+
+
+
Defining an externally defined ConnectionFactory-bean through a @Produces method
+
+
@Produces
+@Typed({ ConnectionFactory.class })
+@ApplicationScoped
+@Identifier("externally-defined")
+ActiveMQConnectionFactory externallyDefinedConnectionFactory(
+        @ConfigProperty(name = "artemis.externally-defined.url") String externallyDefinedUrl) {
+    return new ActiveMQConnectionFactory(externallyDefinedUrl);
+}
+
+
+
+

We can then use this ConnectionFactory as follows:

+
+
+
Referencing an externally defined ConnectionFactory-bean by its name
+
+
from(jms("queue:in").connectionFactory("externally-defined"))
+    .to(jms("queue:out").connectionFactory("externally-defined"));
+
+
+
+

Finally, if only a single ConnectionFactory is defined through quarkus-artemis-jms, this ConnectionFactory is always registered as @Default bean. This allows us to use this ConnectionFactory implicitly in a camel route, without setting it explicitly:

+
+
+
Implicitly use the only ConnectionFactory-bean defined in the application
+
+
from(jms("queue:in"))
+    .to(jms("queue:out"));
+
+
+
+

This also works for an externally defined ConnectionFactory, as long as it is defined as @Default (remember that all beans that do not have any qualifier annotation are automatically @Default beans).

+
+
+

This mechanism stops working as soon as more than one ConnectionFactory bean is defined in the application.

+
+
+
+
+

Artemis DevServices

+
+
+

Artemis DevServices are automatically enabled unless quarkus.artemis.url / quarkus.artemis."named-configuration".url is set or quarkus.artemis.devservices.enabled / quarkus.artemis."named-configuration".enabled is false explicitly. And if you still want to use ArtemisTestResource in the test, you need to disable artemis devservices.

+
+
+
+
+

Test framework

+
+
+

To facilitate testing, we provide a dedicated testing framework that can start an in-memory artemis instance For the default configuration, we can start an in-memory instance of artemis by annotating our tests with @QuarkusTestResource(ArtemisTestResource.class). The embedded artemis can be configured through a broker.xml, located under src/test/resources.

+
+
+

To start an in-memory artemis for a named configuration, we can define our own test annotation by extending ArtemisTestResource.class:

+
+
+
Annotation to start an in-memory artemis instance for the named configuration "named-1"
+
+
public class NamedOneArtemisTestResource extends ArtemisTestResource {
+    public NamedOneArtemisTestResource() {
+        super("named-1");
+    }
+}
+
+
+
+

We can then annotate our test with @QuarkusTestResource(NamedOneArtemisTestResource.class).

+
+
+

This instance can be configured by placing a broker-named-1.xml in src/test/resources. In general, for a configuration with name <name>, we can configure the corresponding in-memory artemis through file src/test/resources/broker-<name>.xml.

+
+
+

For an in-depth explanation of what can be configured in a broker.xml, please see the official Artemis documentation.

+
+
+
+
+

Examples

+
+
+

Examples can be found in the integration-tests module, e.g. +The Apache ActiveMQ Artemis Core integration with default configuration tests module

+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Whether a health check is published in case the smallrye-health extension is present.

+
+
+

This is a global setting and is not specific to a datasource.

+
+
+

Environment variable: QUARKUS_ARTEMIS_HEALTH_ENABLED

+
+
+

boolean

+
+
+
+

Whether configurations (org.apache.activemq.artemis.api.core.client.ServerLocator`s in case of the `artemis-core extension, jakarta.jms.ConnectionFactory`s in case of the `artemis-jms extension) should be included in the health check. Defaults to true if not set.

+
+
+

Environment variable: QUARKUS_ARTEMIS_HEALTH_EXTERNAL_ENABLED

+
+
+

boolean

Configurations

Type

Default

+ +
+
+
+

Whether to enable this configuration.

+
+
+

Is enabled by default.

+
+
+

Environment variable: QUARKUS_ARTEMIS_ENABLED

+
+
+

boolean

+ +
+
+
+

Enable or disable Dev Services explicitly. Dev Services are automatically enabled unless quarkus.artemis.url is set.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_ENABLED

+
+
+

boolean

+ +
+
+
+

Optional fixed port the dev service will listen to.

+
+
+

If not defined, the port will be chosen randomly.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_PORT

+
+
+

int

+ +
+
+
+

The ActiveMQ Artemis container image to use.

+
+
+

Defaults to quay.io/artemiscloud/activemq-artemis-broker:artemis.2.32.0

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_IMAGE_NAME

+
+
+

string

+ +
+
+
+

Indicates if the ActiveMQ Artemis broker managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for ActiveMQ Artemis starts a new container. Is activated by default when not set.

+
+
+

The discovery uses the quarkus-dev-service-artemis label. The value is configured using the service-name property.

+
+
+

Container sharing is only used in dev mode.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_SHARED

+
+
+

boolean

+ +
+
+
+

The value of the quarkus-dev-service-artemis label attached to the started container. This property is used when shared is set to true. It defaults to artemis when not set. In this case, before starting a container, Dev Services for ActiveMQ Artemis looks for a container with the quarkus-dev-service-artemis label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-artemis label set to the specified value.

+
+
+

This property is used when you need multiple shared ActiveMQ Artemis brokers.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_SERVICE_NAME

+
+
+

string

+ +
+
+
+

User to start artemis broker. Defaults to admin if not set.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_USER

+
+
+

string

+ +
+
+
+

Password to start artemis broker. Defaults to admin whne not set.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_PASSWORD

+
+
+

string

+ +
+
+
+

The value of the AMQ_EXTRA_ARGS environment variable to pass to the container. Defaults to --no-autotune --mapped --no-fsync when not set.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_EXTRA_ARGS

+
+
+

string

+ +
+
+
+

Support to expose jakarta.jms.XAConnectionFactory. Is not activated by default.

+
+
+

Environment variable: QUARKUS_ARTEMIS_XA_ENABLED

+
+
+

boolean

+ +
+
+
+

Artemis connection url.

+
+
+

Environment variable: QUARKUS_ARTEMIS_URL

+
+
+

string

+ +
+
+
+

Username for authentication, only used with JMS.

+
+
+

Environment variable: QUARKUS_ARTEMIS_USERNAME

+
+
+

string

+ +
+
+
+

Password for authentication, only used with JMS.

+
+
+

Environment variable: QUARKUS_ARTEMIS_PASSWORD

+
+
+

string

+ +
+
+
+

Whether this particular data source should be excluded from the health check if the general health check for data sources is enabled.

+
+
+

By default, the health check includes all configured data sources (if it is enabled).

+
+
+

Environment variable: QUARKUS_ARTEMIS_HEALTH_EXCLUDE

+
+
+

boolean

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-artemis/3.0.x/quarkus-artemis-ra.html b/quarkus-artemis/3.0.x/quarkus-artemis-ra.html new file mode 100644 index 0000000000..054c4e0d47 --- /dev/null +++ b/quarkus-artemis/3.0.x/quarkus-artemis-ra.html @@ -0,0 +1,1088 @@ + + + + + + Quarkus Artemis Resource Adapter :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Artemis Resource Adapter

+
+
+
+

This extension enables the use of the Apache ActiveMQ Artemis JMS Resource Adapter in Quarkus.

+
+
+

And it leverages on Quarkus IronJacamar

+
+
+
+
+

Installation

+
+
+

To benefit from a consistent definition of the Artemis dependencies (including artemis-server often used in the tests), +it is recommended to add the following BOM to your project, below the Quarkus BOM:

+
+
+
+
<dependencyManagement>
+    <dependencies>
+        <dependency>
+            <groupId>io.quarkus.platform</groupId>
+            <artifactId>quarkus-bom</artifactId>
+            <version>${quarkus.version}</version>
+            <type>pom</type>
+            <scope>import</scope>
+        </dependency>
+        <dependency>
+            <groupId>io.quarkiverse.artemis</groupId>
+            <artifactId>quarkus-artemis-bom</artifactId>
+            <version>3.0.5</version>
+            <type>pom</type>
+            <scope>import</scope>
+        </dependency>
+    </dependencies>
+</dependencyManagement>
+
+
+
+

Once the BOM is added, simply add the io.quarkiverse.artemis:quarkus-artemis-ra extension:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.artemis</groupId>
+    <artifactId>quarkus-artemis-ra</artifactId>
+</dependency>
+
+
+
+

We recommend to set properties quarkus.version and artemis.version to the versions you are using/need to use. We also recommend to align artemis.version with the artemis server version used.

+
+
+
+
+

Configuration

+
+
+

In your application

+
+
+
quarkus.ironjacamar.ra.kind=artemis (1)
+
+quarkus.ironjacamar.ra.config.connection-parameters=host=localhost;port=5445;protocols=HORNETQ (2)
+quarkus.ironjacamar.ra.config.protocol-manager-factory=org.apache.activemq.artemis.core.protocol.hornetq.client.HornetQClientProtocolManagerFactory
+quarkus.ironjacamar.ra.config.user=guest
+quarkus.ironjacamar.ra.config.password=guest
+quarkus.ironjacamar.ra.config.client-id=Quarkus
+
+quarkus.ironjacamar.activation-spec.myqueue.config.destination-type=jakarta.jms.Queue (3)
+quarkus.ironjacamar.activation-spec.myqueue.config.destination=jms.queue.MyQueue
+quarkus.ironjacamar.activation-spec.myqueue.config.max-session=2
+quarkus.ironjacamar.activation-spec.myqueue.config.rebalance-connections=true
+
+
+
+ + + + + + + + + + + + + +
1This is the resource adapter kind. +It must match the value of the @ResourceAdapterKind annotation in the ResourceAdapterFactory implementation.
2(Optional) You can specify the resource adapter configuration that will be passed to your ResourceAdapterFactory#createResourceAdapter implementation method.
3(Optional) You can specify optional activation spec configuration ResourceAdapterFactory#createActivationSpec implementation method.
+
+
+
+
+
+

Multiple Resource Adapters

+
+
+

You can configure more than one ResourceAdapter instance in your application. +Just name the resource adapter in the configuration:

+
+
+
+
quarkus.ironjacamar.main.ra.kind=artemis (1)
+quarkus.ironjacamar.other.ra.kind=artemis
+
+
+
+

To reference in the code, you must use the @io.smallrye.common.annotation.Identifier annotation:

+
+
+
+
import io.quarkiverse.ironjacamar.ResourceEndpoint;
+import io.smallrye.common.annotation.Identifier;
+
+import jakarta.inject.Inject;
+
+import jakarta.jms.ConnectionFactory;
+import jakarta.jms.Message;
+import jakarta.jms.MessageListener;
+
+@ResourceEndpoint(activationSpecConfigKey="myqueue")
+@Identifier("other") (1)
+public class MyResourceEndpoint implements MessageListener {
+
+    @Inject
+    @Identifier("main")
+    ConnectionFactory connectionFactory; (2)
+
+    @Override
+    public void onMessage(Message message) {
+        //...
+    }
+}
+
+
+
+ + + + + + + + + +
1This MessageListener will be activated by the other resource adapter configured above.
2This ConnectionFactory will be the one configured in the main resource adapter.
+
+
+
+
+

Configuration Reference

+
+
+

For more details about Quarkus IronJacamar Configuration, please refer to the documents.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-artemis/3.1.x/includes/attributes.html b/quarkus-artemis/3.1.x/includes/attributes.html new file mode 100644 index 0000000000..f8c40e8a0e --- /dev/null +++ b/quarkus-artemis/3.1.x/includes/attributes.html @@ -0,0 +1,924 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-artemis/3.1.x/includes/quarkus-artemis-core.html b/quarkus-artemis/3.1.x/includes/quarkus-artemis-core.html new file mode 100644 index 0000000000..44f7a54529 --- /dev/null +++ b/quarkus-artemis/3.1.x/includes/quarkus-artemis-core.html @@ -0,0 +1,1283 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Whether a health check is published in case the smallrye-health extension is present.

+
+
+

This is a global setting and is not specific to a datasource.

+
+
+

Environment variable: QUARKUS_ARTEMIS_HEALTH_ENABLED

+
+
+

boolean

+
+
+
+

Whether configurations (org.apache.activemq.artemis.api.core.client.ServerLocator`s in case of the `artemis-core extension, jakarta.jms.ConnectionFactory`s in case of the `artemis-jms extension) should be included in the health check. Defaults to true if not set.

+
+
+

Environment variable: QUARKUS_ARTEMIS_HEALTH_EXTERNAL_ENABLED

+
+
+

boolean

Configurations

Type

Default

+ +
+
+
+

Whether to enable this configuration.

+
+
+

Is enabled by default.

+
+
+

Environment variable: QUARKUS_ARTEMIS_ENABLED

+
+
+

boolean

+ +
+
+
+

Enable or disable Dev Services explicitly. Dev Services are automatically enabled unless quarkus.artemis.url is set.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_ENABLED

+
+
+

boolean

+ +
+
+
+

Optional fixed port the dev service will listen to.

+
+
+

If not defined, the port will be chosen randomly.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_PORT

+
+
+

int

+ +
+
+
+

The ActiveMQ Artemis container image to use.

+
+
+

Defaults to quay.io/artemiscloud/activemq-artemis-broker:artemis.2.32.0

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_IMAGE_NAME

+
+
+

string

+ +
+
+
+

Indicates if the ActiveMQ Artemis broker managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for ActiveMQ Artemis starts a new container. Is activated by default when not set.

+
+
+

The discovery uses the quarkus-dev-service-artemis label. The value is configured using the service-name property.

+
+
+

Container sharing is only used in dev mode.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_SHARED

+
+
+

boolean

+ +
+
+
+

The value of the quarkus-dev-service-artemis label attached to the started container. This property is used when shared is set to true. It defaults to artemis when not set. In this case, before starting a container, Dev Services for ActiveMQ Artemis looks for a container with the quarkus-dev-service-artemis label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-artemis label set to the specified value.

+
+
+

This property is used when you need multiple shared ActiveMQ Artemis brokers.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_SERVICE_NAME

+
+
+

string

+ +
+
+
+

User to start artemis broker. Defaults to admin if not set.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_USER

+
+
+

string

+ +
+
+
+

Password to start artemis broker. Defaults to admin whne not set.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_PASSWORD

+
+
+

string

+ +
+
+
+

The value of the AMQ_EXTRA_ARGS environment variable to pass to the container. Defaults to --no-autotune --mapped --no-fsync when not set.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_EXTRA_ARGS

+
+
+

string

+ +
+
+
+

Support to expose jakarta.jms.XAConnectionFactory. Is not activated by default.

+
+
+

Environment variable: QUARKUS_ARTEMIS_XA_ENABLED

+
+
+

boolean

+ +
+
+
+

Artemis connection url.

+
+
+

Environment variable: QUARKUS_ARTEMIS_URL

+
+
+

string

+ +
+
+
+

Username for authentication, only used with JMS.

+
+
+

Environment variable: QUARKUS_ARTEMIS_USERNAME

+
+
+

string

+ +
+
+
+

Password for authentication, only used with JMS.

+
+
+

Environment variable: QUARKUS_ARTEMIS_PASSWORD

+
+
+

string

+ +
+
+
+

Whether this particular data source should be excluded from the health check if the general health check for data sources is enabled.

+
+
+

By default, the health check includes all configured data sources (if it is enabled).

+
+
+

Environment variable: QUARKUS_ARTEMIS_HEALTH_EXCLUDE

+
+
+

boolean

+
+
+
+
+ + + + + + + diff --git a/quarkus-artemis/3.1.x/index.html b/quarkus-artemis/3.1.x/index.html new file mode 100644 index 0000000000..b56fc3a937 --- /dev/null +++ b/quarkus-artemis/3.1.x/index.html @@ -0,0 +1,934 @@ + + + + + + Quarkus Artemis extensions :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Artemis extensions

+
+

This set of extensions enable Artemis JMS Client and Artemis JMS Resource Adapter in Quarkus.

+
+
+

You can find the full set of support and documentation for both of them in the navigation on the left.

+
+
+
+
+
+ + + + + + + diff --git a/quarkus-artemis/3.1.x/quarkus-artemis-jms.html b/quarkus-artemis/3.1.x/quarkus-artemis-jms.html new file mode 100644 index 0000000000..017e3623e6 --- /dev/null +++ b/quarkus-artemis/3.1.x/quarkus-artemis-jms.html @@ -0,0 +1,1898 @@ + + + + + + Quarkus Artemis JMS :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Artemis JMS

+
+
+
+

This extension enables the use of the Apache ActiveMQ Artemis JMS client in Quarkus.

+
+
+

It provides configuration properties to configure the JMS client and native executable support.

+
+
+

For general considerations about the JMS support in Quarkus, it is recommended to read the JMS guide.

+
+
+
+
+

Compatibility

+
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1. Compatibility Table
Quarkus versionQuarkus JMS versionEnd of Life
+

2.x

+
+

latest 2.x

+
+

2024-04-30

+
+

3.0.x
+3.1.x
+3.2.x

+
+

latest 3.0.x

+
+

TBD

+
+

3.3.x
+3.4.x
+3.5.x
+3.6.x
+3.7.x

+
+

3.1.x

+
+

TBD

+
+

3.8.x

+
+

3.2.x

+
+

TBD

+
+ + +++++ + + + + + + + + + + + + + + + + + + + +
Table 2. LTS Support
Quarkus LTS versionQuarkus JMS versionEnd of Life
+

3.2.x

+
+

3.0.x

+
+

TBD

+
+

3.8.x

+
+

3.2.x

+
+

TBD

+
+
+
+
+

Installation

+
+
+

To benefit from a consistent definition of the Artemis dependencies (including artemis-server often used in the tests), +it is recommended to add the following BOM to your project, below the Quarkus BOM:

+
+
+
+
<dependencyManagement>
+    <dependencies>
+        <dependency>
+            <groupId>io.quarkus.platform</groupId>
+            <artifactId>quarkus-bom</artifactId>
+            <version>${quarkus.version}</version>
+            <type>pom</type>
+            <scope>import</scope>
+        </dependency>
+        <dependency>
+            <groupId>io.quarkiverse.artemis</groupId>
+            <artifactId>quarkus-artemis-bom</artifactId>
+            <version>3.1.4</version>
+            <type>pom</type>
+            <scope>import</scope>
+        </dependency>
+    </dependencies>
+</dependencyManagement>
+
+
+
+

Once the BOM is added, simply add the io.quarkiverse.artemis:quarkus-artemis-jms extension:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.artemis</groupId>
+    <artifactId>quarkus-artemis-jms</artifactId>
+</dependency>
+<dependency>
+    <groupId>io.quarkiverse.artemis</groupId>
+    <artifactId>quarkus-test-artemis</artifactId>
+    <scope>test</scope>
+</dependency>
+
+
+
+

We recommend to set properties quarkus.version and artemis.version to the versions you are using/need to use. We also recommend to align artemis.version with the artemis server version used.

+
+
+

If you are using camel-quarkus, we also recommend setting camel-quarkus.platform.version to the version of camel used.

+
+
+
+
+

Named configurations

+
+
+

As with quarkus.datasource, we can configure multiple, named configuration. If a configuration is configured under the root quarkus.artemis, then this is the default or unnamed configuration.

+
+
+
Default configuration
+
+
quarkus.artemis.url=...
+quarkus.artemis.username=...
+quarkus.artemis.password=...
+
+
+
+

This corresponding bean is registered as the @Default bean and can be injected without additional qualifiers.

+
+
+ + + + + +
+ + +There must be some build-time configuration, otherwise the bean will not be available. Having only run-time configuration (e.g. environment variables) is not enough. Please see section Configuration detection at build-time for details. +
+
+
+
Injection of default ServerLocator when using quarkus-artemis-core
+
+
public class MyClass {
+    ...
+    private final ServerLocator serverLocator;
+    ...
+
+    public MyClass (
+            ...
+            ServerLocator serverLocator,
+            ...
+    ) {
+        ...
+        this.serverLocator = serverLocator;
+        ...
+    }
+}
+
+
+
+
Injection of default ConnectionFactory when using quarkus-artemis-jms
+
+
public class MyClass {
+    ...
+    private final ConnectionFactory connectionFactory;
+    ...
+
+    public MyClass (
+            ...
+            ConnectionFactory connectionFactory,
+            ...
+    ) {
+        ...
+        this.connectionFactory = connectionFactory;
+        ...
+    }
+}
+
+
+
+

It is also registered with @Identifier("<default>"), so we can inject it with

+
+
+
Injection of default ServerLocator by its explicit name when using quarkus-artemis-core
+
+
public class MyClass {
+    ...
+    private final ServerLocator serverLocator;
+    ...
+
+    public MyClass (
+            ...
+            @Identifier("<default>") ServerLocator serverLocator,
+            ...
+    ) {
+        ...
+        this.serverLocator = serverLocator;
+        ...
+    }
+}
+
+
+
+
Injection of default ConnectionFactory by its explicit name when using quarkus-artemis-jms
+
+
public class MyClass {
+    ...
+    private final ConnectionFactory connectionFactory;
+    ...
+
+    public MyClass (
+            ...
+            @Identifier("<default>") ConnectionFactory connectionFactory,
+            ...
+    ) {
+        ...
+        this.connectionFactory = connectionFactory;
+        ...
+    }
+}
+
+
+
+

Named configurations, on the other hand, are not configured as @Default beans and must therefore be injected by name. The name of the bean is the name of the configuration, and @Identifier(…​) is used to qualify the name. So for example, if we define a configuration "named-1":

+
+
+
Named configuration "named-1"
+
+
quarkus.artemis."named-1".url=...
+quarkus.artemis."named-1".username=...
+quarkus.artemis."named-1".password=...
+
+
+
+

we can inject it with:

+
+
+
Injection of named ServerLocator "named-1" when using extension quarkus-artemis-core
+
+
public class MyClass {
+    ...
+    private final ServerLocator serverLocator;
+    ...
+
+    public MyClass (
+            ...
+            @Identifier("named-1") ServerLocator serverLocator,
+            ...
+    ) {
+        ...
+        this.serverLocator = serverLocator;
+        ...
+    }
+}
+
+
+
+
Injection of named ConnectionFactory "named-1" when using extension quarkus-artemis-jms
+
+
public class MyClass {
+    ...
+    private final ConnectionFactory connectionFactory;
+    ...
+
+    public MyClass (
+            ...
+            @Identifier("named-1") ConnectionFactory connectionFactory,
+            ...
+    ) {
+        ...
+        this.connectionFactory = connectionFactory;
+        ...
+    }
+}
+
+
+
+ + + + + +
+ + +We strongly recommend the usage of @Identifier annotation instead of the @Named annotation. Some other feature rely on the usage of @Identifier. Please see section Health checks for details. +
+
+
+
+
+

Setting properties at runtime results in a warning

+
+
+

When we override the properties url, username or password of a configuration at runtime - either through the implicit environment variable (QUARKUS_ARTEMIS_URL, QUARKUS_ARTEMIS__CONNECTION_NAME__URL), a custom environment variable (quarkus.artemis.url=${ARTEMIS_URL:tcp://dummy:12345}) or a runtime-provided .properties files, we will see a warning at startup similar to this one:

+
+
+
Warning at startup
+
+
2022-11-03 00:53:17,060 WARN  [io.qua.run.con.ConfigRecorder] (main) Build time property cannot be changed at runtime:
+ - quarkus.artemis.url is set to 'tcp://localhost:61616' but it is build time fixed to 'tcp://dummy:12345'. Did you change the property quarkus.artemis.url after building the application?
+
+
+
+

This is expected. We bind some properties twice: once as build-time property, once as run time property. We do so to analyze the (run time-)configuration at build time to get a list of named connections. The overwritten configuration will take effect. The correct behaviour enforced by two different tests. The above example is taken from the logs of our tests.

+
+
+
+
+

Configuration detection at build-time

+
+
+

We took special care so the configurations behave "as intuitively as possible". This means that if no connection-related configuration (enabled, url, username, password, devservices…​, health-exclude, xa-enabled) is present at build-time, it is assumed that the configuration is not used and disabled. Therefore, if we want to use any configuration, but not configure it, we should set quarkus.artemis.enabled / quarkus.artemis."named-configuration".enabled to true to explicitly enable the configuration.

+
+
+ + + + + +
+ + +binding a property to an environment variable, like quarkus.artemis.url=${ARTEMIS_URL} is sufficient, so the extension can pick up the configuration at build-time. +
+
+
+ + + + + +
+ + +If we want to configure a connection solely through the implicit environment variables QUARKUS_ARTEMIS_…​, we should enable the configuration by setting quarkus.artemis.enabled / quarkus.artemis."named-configuration".enabled to true. For example, if we want to configure connection quarkus.artemis."named-1" through the implicit environment variables, we would set quarkus.artemis."named-1".enabled=true and then configure the connection through environment variables QUARKUS_ARTEMIS__NAMED_1__…​. +
+
+
+

Please do not try to configure a configuration purely through environment variables, without having any indication of its presence in the application’s configuration file. We specifically rely on the presence of some configuration fragment at build-time to detect configurations.

+
+
+
+
+

XA-capable Connection Factories

+
+
+

To get XA-capable connection factories, we can set quarkus.artemis.xa-enabled / quarkus.artemis."named-configuration".xa-enabled to true. We can then inject the corresponding bean as XAConnectionFactory.

+
+
+

To use XA transactions and integrate with a transaction manager, we recommend using the quarkus-pooled-jms quarkiverse extension.

+
+
+
+
+

URL as optional configuration

+
+
+

The url configuration property is optional. But in general, without a url property, we cannot create a connection. In case of tests with embedded resources or devservices, the corresponding annotation/service injects a url. But if the application starts up and no url property is found, the creation of the bean will throw a RuntimeException with a corresponding error message. Notice that this will happen when the bean is created. If the bean is never used (and thus never created), the exception will not occur.

+
+
+
+
+

Health checks

+
+
+

By default, all configurations are added to the health check endpoint when extension quarkus-smallrye-health is loaded.

+
+
+

We can disable health checks for all ServerLocator s (extension quarkus-artemis-core) or ConnectionFactory s (extension quarkus-artemis-jms) by setting quarkus.artemis.health.enabled to false.

+
+
+

We can disable health checks for individual configurations by setting quarkus.artemis.health-exclude / quarkus.artemis."named-configuration".health-exclude to true

+
+
+ + + + + +
+ + +Note that we can only enable health checks through the above configuration if quarkus.artemis.health.enabled is true. Otherwise, setting quarkus.artemis.health-exclude / quarkus.artemis."named-connection".health-exclude has no effect. +
+
+
+

If we create ServerLocator- (extension quarkus-artemis-core) or ConnectionFactory- (extension quarkus-artemis-jms) beans within our application (i.e. outside of this extension), we can include them in the health check by using the Identifier annotation, e.g.:

+
+
+
Defining a ServerLocator-bean that is picked up automatically by health checks
+
+
public class MyBeanProvider {
+    @ApplicationScoped
+    @Identifier("my-server-locator") // this annotation makes it so the bean is picked up by the health endpoint
+    public ServerLocator mySeverLocator(...) {
+        ServerLocator myServerLocator = ...;
+        ...
+        return myServerLocator;
+    }
+}
+
+
+
+
Defining a ConnectionFactory-bean that is picked up automatically by health checks
+
+
public class MyBeanProvider {
+    @ApplicationScoped
+    @Identifier("my-connection-factory") // this annotation makes it so the bean is picked up by the health endpoint
+    public ConnectionFactory myConnectionFactory(...) {
+        ConnectionFactory myConnectionFactory = ...;
+        ...
+        return myConnectionFactory;
+    }
+}
+
+
+
+

If we do not want that beans created within our application is picked up by the health endpoint, we can set quarkus.artemis.health.external.enabled to false.

+
+
+ + + + + +
+ + +Note that ServerLocator s / ConnectionFactory s are only picked up when quarkus.artemis.health.enabled is true. +
+
+
+
+
+

Camel support

+
+
+

All connection factories that are configured through quarkus-artemis-jms are automatically registered in the camel context, if the program uses camel. This allows us to reference the connection factories by name, e.g.:

+
+
+
Referencing ConnectionFactory s in a camel route by their bean name
+
+
from(jms("queue:in").connectionFactory("<default>"))
+    .to(jms("queue:out").connectionFactory("named"));
+
+
+
+

In camel-quarkus, an externally defined ConnectionFactory can only be referenced by its name in a route configuration if it has either a @Named(…​) or the @Identifier(…​) annotation. However, as mentioned above, the usage of @Identifier(…​) should be preferred when using this extension.

+
+
+
Defining an externally defined ConnectionFactory-bean through a @Produces method
+
+
@Produces
+@Typed({ ConnectionFactory.class })
+@ApplicationScoped
+@Identifier("externally-defined")
+ActiveMQConnectionFactory externallyDefinedConnectionFactory(
+        @ConfigProperty(name = "artemis.externally-defined.url") String externallyDefinedUrl) {
+    return new ActiveMQConnectionFactory(externallyDefinedUrl);
+}
+
+
+
+

We can then use this ConnectionFactory as follows:

+
+
+
Referencing an externally defined ConnectionFactory-bean by its name
+
+
from(jms("queue:in").connectionFactory("externally-defined"))
+    .to(jms("queue:out").connectionFactory("externally-defined"));
+
+
+
+

Finally, if only a single ConnectionFactory is defined through quarkus-artemis-jms, this ConnectionFactory is always registered as @Default bean. This allows us to use this ConnectionFactory implicitly in a camel route, without setting it explicitly:

+
+
+
Implicitly use the only ConnectionFactory-bean defined in the application
+
+
from(jms("queue:in"))
+    .to(jms("queue:out"));
+
+
+
+

This also works for an externally defined ConnectionFactory, as long as it is defined as @Default (remember that all beans that do not have any qualifier annotation are automatically @Default beans).

+
+
+

This mechanism stops working as soon as more than one ConnectionFactory bean is defined in the application.

+
+
+
+
+

Artemis DevServices

+
+
+

Artemis DevServices are automatically enabled unless quarkus.artemis.url / quarkus.artemis."named-configuration".url is set or quarkus.artemis.devservices.enabled / quarkus.artemis."named-configuration".enabled is false explicitly. And if you still want to use ArtemisTestResource in the test, you need to disable artemis devservices.

+
+
+
+
+

Test framework

+
+
+

To facilitate testing, we provide a dedicated testing framework that can start an in-memory artemis instance For the default configuration, we can start an in-memory instance of artemis by annotating our tests with @QuarkusTestResource(ArtemisTestResource.class). The embedded artemis can be configured through a broker.xml, located under src/test/resources.

+
+
+

To start an in-memory artemis for a named configuration, we can define our own test annotation by extending ArtemisTestResource.class:

+
+
+
Annotation to start an in-memory artemis instance for the named configuration "named-1"
+
+
public class NamedOneArtemisTestResource extends ArtemisTestResource {
+    public NamedOneArtemisTestResource() {
+        super("named-1");
+    }
+}
+
+
+
+

We can then annotate our test with @QuarkusTestResource(NamedOneArtemisTestResource.class).

+
+
+

This instance can be configured by placing a broker-named-1.xml in src/test/resources. In general, for a configuration with name <name>, we can configure the corresponding in-memory artemis through file src/test/resources/broker-<name>.xml.

+
+
+

For an in-depth explanation of what can be configured in a broker.xml, please see the official Artemis documentation.

+
+
+
+
+

Examples

+
+
+

Examples can be found in the integration-tests module, e.g. +The Apache ActiveMQ Artemis Core integration with default configuration tests module

+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Whether a health check is published in case the smallrye-health extension is present.

+
+
+

This is a global setting and is not specific to a datasource.

+
+
+

Environment variable: QUARKUS_ARTEMIS_HEALTH_ENABLED

+
+
+

boolean

+
+
+
+

Whether configurations (org.apache.activemq.artemis.api.core.client.ServerLocator`s in case of the `artemis-core extension, jakarta.jms.ConnectionFactory`s in case of the `artemis-jms extension) should be included in the health check. Defaults to true if not set.

+
+
+

Environment variable: QUARKUS_ARTEMIS_HEALTH_EXTERNAL_ENABLED

+
+
+

boolean

Configurations

Type

Default

+ +
+
+
+

Whether to enable this configuration.

+
+
+

Is enabled by default.

+
+
+

Environment variable: QUARKUS_ARTEMIS_ENABLED

+
+
+

boolean

+ +
+
+
+

Enable or disable Dev Services explicitly. Dev Services are automatically enabled unless quarkus.artemis.url is set.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_ENABLED

+
+
+

boolean

+ +
+
+
+

Optional fixed port the dev service will listen to.

+
+
+

If not defined, the port will be chosen randomly.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_PORT

+
+
+

int

+ +
+
+
+

The ActiveMQ Artemis container image to use.

+
+
+

Defaults to quay.io/artemiscloud/activemq-artemis-broker:artemis.2.32.0

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_IMAGE_NAME

+
+
+

string

+ +
+
+
+

Indicates if the ActiveMQ Artemis broker managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for ActiveMQ Artemis starts a new container. Is activated by default when not set.

+
+
+

The discovery uses the quarkus-dev-service-artemis label. The value is configured using the service-name property.

+
+
+

Container sharing is only used in dev mode.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_SHARED

+
+
+

boolean

+ +
+
+
+

The value of the quarkus-dev-service-artemis label attached to the started container. This property is used when shared is set to true. It defaults to artemis when not set. In this case, before starting a container, Dev Services for ActiveMQ Artemis looks for a container with the quarkus-dev-service-artemis label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-artemis label set to the specified value.

+
+
+

This property is used when you need multiple shared ActiveMQ Artemis brokers.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_SERVICE_NAME

+
+
+

string

+ +
+
+
+

User to start artemis broker. Defaults to admin if not set.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_USER

+
+
+

string

+ +
+
+
+

Password to start artemis broker. Defaults to admin whne not set.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_PASSWORD

+
+
+

string

+ +
+
+
+

The value of the AMQ_EXTRA_ARGS environment variable to pass to the container. Defaults to --no-autotune --mapped --no-fsync when not set.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_EXTRA_ARGS

+
+
+

string

+ +
+
+
+

Support to expose jakarta.jms.XAConnectionFactory. Is not activated by default.

+
+
+

Environment variable: QUARKUS_ARTEMIS_XA_ENABLED

+
+
+

boolean

+ +
+
+
+

Artemis connection url.

+
+
+

Environment variable: QUARKUS_ARTEMIS_URL

+
+
+

string

+ +
+
+
+

Username for authentication, only used with JMS.

+
+
+

Environment variable: QUARKUS_ARTEMIS_USERNAME

+
+
+

string

+ +
+
+
+

Password for authentication, only used with JMS.

+
+
+

Environment variable: QUARKUS_ARTEMIS_PASSWORD

+
+
+

string

+ +
+
+
+

Whether this particular data source should be excluded from the health check if the general health check for data sources is enabled.

+
+
+

By default, the health check includes all configured data sources (if it is enabled).

+
+
+

Environment variable: QUARKUS_ARTEMIS_HEALTH_EXCLUDE

+
+
+

boolean

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-artemis/3.1.x/quarkus-artemis-ra.html b/quarkus-artemis/3.1.x/quarkus-artemis-ra.html new file mode 100644 index 0000000000..44356bd780 --- /dev/null +++ b/quarkus-artemis/3.1.x/quarkus-artemis-ra.html @@ -0,0 +1,1088 @@ + + + + + + Quarkus Artemis Resource Adapter :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Artemis Resource Adapter

+
+
+
+

This extension enables the use of the Apache ActiveMQ Artemis JMS Resource Adapter in Quarkus.

+
+
+

And it leverages on Quarkus IronJacamar

+
+
+
+
+

Installation

+
+
+

To benefit from a consistent definition of the Artemis dependencies (including artemis-server often used in the tests), +it is recommended to add the following BOM to your project, below the Quarkus BOM:

+
+
+
+
<dependencyManagement>
+    <dependencies>
+        <dependency>
+            <groupId>io.quarkus.platform</groupId>
+            <artifactId>quarkus-bom</artifactId>
+            <version>${quarkus.version}</version>
+            <type>pom</type>
+            <scope>import</scope>
+        </dependency>
+        <dependency>
+            <groupId>io.quarkiverse.artemis</groupId>
+            <artifactId>quarkus-artemis-bom</artifactId>
+            <version>3.1.4</version>
+            <type>pom</type>
+            <scope>import</scope>
+        </dependency>
+    </dependencies>
+</dependencyManagement>
+
+
+
+

Once the BOM is added, simply add the io.quarkiverse.artemis:quarkus-artemis-ra extension:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.artemis</groupId>
+    <artifactId>quarkus-artemis-ra</artifactId>
+</dependency>
+
+
+
+

We recommend to set properties quarkus.version and artemis.version to the versions you are using/need to use. We also recommend to align artemis.version with the artemis server version used.

+
+
+
+
+

Configuration

+
+
+

In your application

+
+
+
quarkus.ironjacamar.ra.kind=artemis (1)
+
+quarkus.ironjacamar.ra.config.connection-parameters=host=localhost;port=5445;protocols=HORNETQ (2)
+quarkus.ironjacamar.ra.config.protocol-manager-factory=org.apache.activemq.artemis.core.protocol.hornetq.client.HornetQClientProtocolManagerFactory
+quarkus.ironjacamar.ra.config.user=guest
+quarkus.ironjacamar.ra.config.password=guest
+quarkus.ironjacamar.ra.config.client-id=Quarkus
+
+quarkus.ironjacamar.activation-spec.myqueue.config.destination-type=jakarta.jms.Queue (3)
+quarkus.ironjacamar.activation-spec.myqueue.config.destination=jms.queue.MyQueue
+quarkus.ironjacamar.activation-spec.myqueue.config.max-session=2
+quarkus.ironjacamar.activation-spec.myqueue.config.rebalance-connections=true
+
+
+
+ + + + + + + + + + + + + +
1This is the resource adapter kind. +It must match the value of the @ResourceAdapterKind annotation in the ResourceAdapterFactory implementation.
2(Optional) You can specify the resource adapter configuration that will be passed to your ResourceAdapterFactory#createResourceAdapter implementation method.
3(Optional) You can specify optional activation spec configuration ResourceAdapterFactory#createActivationSpec implementation method.
+
+
+
+
+
+

Multiple Resource Adapters

+
+
+

You can configure more than one ResourceAdapter instance in your application. +Just name the resource adapter in the configuration:

+
+
+
+
quarkus.ironjacamar.main.ra.kind=artemis (1)
+quarkus.ironjacamar.other.ra.kind=artemis
+
+
+
+

To reference in the code, you must use the @io.smallrye.common.annotation.Identifier annotation:

+
+
+
+
import io.quarkiverse.ironjacamar.ResourceEndpoint;
+import io.smallrye.common.annotation.Identifier;
+
+import jakarta.inject.Inject;
+
+import jakarta.jms.ConnectionFactory;
+import jakarta.jms.Message;
+import jakarta.jms.MessageListener;
+
+@ResourceEndpoint(activationSpecConfigKey="myqueue")
+@Identifier("other") (1)
+public class MyResourceEndpoint implements MessageListener {
+
+    @Inject
+    @Identifier("main")
+    ConnectionFactory connectionFactory; (2)
+
+    @Override
+    public void onMessage(Message message) {
+        //...
+    }
+}
+
+
+
+ + + + + + + + + +
1This MessageListener will be activated by the other resource adapter configured above.
2This ConnectionFactory will be the one configured in the main resource adapter.
+
+
+
+
+

Configuration Reference

+
+
+

For more details about Quarkus IronJacamar Configuration, please refer to the documents.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-artemis/dev/includes/attributes.html b/quarkus-artemis/dev/includes/attributes.html new file mode 100644 index 0000000000..0001184fc7 --- /dev/null +++ b/quarkus-artemis/dev/includes/attributes.html @@ -0,0 +1,924 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-artemis/dev/includes/quarkus-artemis-core.html b/quarkus-artemis/dev/includes/quarkus-artemis-core.html new file mode 100644 index 0000000000..ad4dc424ce --- /dev/null +++ b/quarkus-artemis/dev/includes/quarkus-artemis-core.html @@ -0,0 +1,1283 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Whether a health check is published in case the smallrye-health extension is present.

+
+
+

This is a global setting and is not specific to a datasource.

+
+
+

Environment variable: QUARKUS_ARTEMIS_HEALTH_ENABLED

+
+
+

boolean

+
+
+
+

Whether configurations (org.apache.activemq.artemis.api.core.client.ServerLocator`s in case of the `artemis-core extension, jakarta.jms.ConnectionFactory`s in case of the `artemis-jms extension) should be included in the health check. Defaults to true if not set.

+
+
+

Environment variable: QUARKUS_ARTEMIS_HEALTH_EXTERNAL_ENABLED

+
+
+

boolean

Configurations

Type

Default

+ +
+
+
+

Whether to enable this configuration.

+
+
+

Is enabled by default.

+
+
+

Environment variable: QUARKUS_ARTEMIS_ENABLED

+
+
+

boolean

+ +
+
+
+

Enable or disable Dev Services explicitly. Dev Services are automatically enabled unless quarkus.artemis.url is set.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_ENABLED

+
+
+

boolean

+ +
+
+
+

Optional fixed port the dev service will listen to.

+
+
+

If not defined, the port will be chosen randomly.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_PORT

+
+
+

int

+ +
+
+
+

The ActiveMQ Artemis container image to use.

+
+
+

Defaults to quay.io/artemiscloud/activemq-artemis-broker:artemis.2.32.0

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_IMAGE_NAME

+
+
+

string

+ +
+
+
+

Indicates if the ActiveMQ Artemis broker managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for ActiveMQ Artemis starts a new container. Is activated by default when not set.

+
+
+

The discovery uses the quarkus-dev-service-artemis label. The value is configured using the service-name property.

+
+
+

Container sharing is only used in dev mode.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_SHARED

+
+
+

boolean

+ +
+
+
+

The value of the quarkus-dev-service-artemis label attached to the started container. This property is used when shared is set to true. It defaults to artemis when not set. In this case, before starting a container, Dev Services for ActiveMQ Artemis looks for a container with the quarkus-dev-service-artemis label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-artemis label set to the specified value.

+
+
+

This property is used when you need multiple shared ActiveMQ Artemis brokers.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_SERVICE_NAME

+
+
+

string

+ +
+
+
+

User to start artemis broker. Defaults to admin if not set.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_USER

+
+
+

string

+ +
+
+
+

Password to start artemis broker. Defaults to admin whne not set.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_PASSWORD

+
+
+

string

+ +
+
+
+

The value of the AMQ_EXTRA_ARGS environment variable to pass to the container. Defaults to --no-autotune --mapped --no-fsync when not set.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_EXTRA_ARGS

+
+
+

string

+ +
+
+
+

Support to expose jakarta.jms.XAConnectionFactory. Is not activated by default.

+
+
+

Environment variable: QUARKUS_ARTEMIS_XA_ENABLED

+
+
+

boolean

+ +
+
+
+

Artemis connection url.

+
+
+

Environment variable: QUARKUS_ARTEMIS_URL

+
+
+

string

+ +
+
+
+

Username for authentication, only used with JMS.

+
+
+

Environment variable: QUARKUS_ARTEMIS_USERNAME

+
+
+

string

+ +
+
+
+

Password for authentication, only used with JMS.

+
+
+

Environment variable: QUARKUS_ARTEMIS_PASSWORD

+
+
+

string

+ +
+
+
+

Whether this particular data source should be excluded from the health check if the general health check for data sources is enabled.

+
+
+

By default, the health check includes all configured data sources (if it is enabled).

+
+
+

Environment variable: QUARKUS_ARTEMIS_HEALTH_EXCLUDE

+
+
+

boolean

+
+
+
+
+ + + + + + + diff --git a/quarkus-artemis/dev/index.html b/quarkus-artemis/dev/index.html new file mode 100644 index 0000000000..3e43c299d7 --- /dev/null +++ b/quarkus-artemis/dev/index.html @@ -0,0 +1,934 @@ + + + + + + Quarkus Artemis extensions :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Artemis extensions

+
+

This set of extensions enable Artemis JMS Client and Artemis JMS Resource Adapter in Quarkus.

+
+
+

You can find the full set of support and documentation for both of them in the navigation on the left.

+
+
+
+
+
+ + + + + + + diff --git a/quarkus-artemis/dev/quarkus-artemis-jms.html b/quarkus-artemis/dev/quarkus-artemis-jms.html new file mode 100644 index 0000000000..f5c8967c16 --- /dev/null +++ b/quarkus-artemis/dev/quarkus-artemis-jms.html @@ -0,0 +1,1898 @@ + + + + + + Quarkus Artemis JMS :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Artemis JMS

+
+
+
+

This extension enables the use of the Apache ActiveMQ Artemis JMS client in Quarkus.

+
+
+

It provides configuration properties to configure the JMS client and native executable support.

+
+
+

For general considerations about the JMS support in Quarkus, it is recommended to read the JMS guide.

+
+
+
+
+

Compatibility

+
+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1. Compatibility Table
Quarkus versionQuarkus JMS versionEnd of Life
+

2.x

+
+

latest 2.x

+
+

2024-04-30

+
+

3.0.x
+3.1.x
+3.2.x

+
+

latest 3.0.x

+
+

TBD

+
+

3.3.x
+3.4.x
+3.5.x
+3.6.x
+3.7.x

+
+

3.1.x

+
+

TBD

+
+

3.8.x

+
+

3.2.x

+
+

TBD

+
+ + +++++ + + + + + + + + + + + + + + + + + + + +
Table 2. LTS Support
Quarkus LTS versionQuarkus JMS versionEnd of Life
+

3.2.x

+
+

3.0.x

+
+

TBD

+
+

3.8.x

+
+

3.2.x

+
+

TBD

+
+
+
+
+

Installation

+
+
+

To benefit from a consistent definition of the Artemis dependencies (including artemis-server often used in the tests), +it is recommended to add the following BOM to your project, below the Quarkus BOM:

+
+
+
+
<dependencyManagement>
+    <dependencies>
+        <dependency>
+            <groupId>io.quarkus.platform</groupId>
+            <artifactId>quarkus-bom</artifactId>
+            <version>${quarkus.version}</version>
+            <type>pom</type>
+            <scope>import</scope>
+        </dependency>
+        <dependency>
+            <groupId>io.quarkiverse.artemis</groupId>
+            <artifactId>quarkus-artemis-bom</artifactId>
+            <version>3.2.0</version>
+            <type>pom</type>
+            <scope>import</scope>
+        </dependency>
+    </dependencies>
+</dependencyManagement>
+
+
+
+

Once the BOM is added, simply add the io.quarkiverse.artemis:quarkus-artemis-jms extension:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.artemis</groupId>
+    <artifactId>quarkus-artemis-jms</artifactId>
+</dependency>
+<dependency>
+    <groupId>io.quarkiverse.artemis</groupId>
+    <artifactId>quarkus-test-artemis</artifactId>
+    <scope>test</scope>
+</dependency>
+
+
+
+

We recommend to set properties quarkus.version and artemis.version to the versions you are using/need to use. We also recommend to align artemis.version with the artemis server version used.

+
+
+

If you are using camel-quarkus, we also recommend setting camel-quarkus.platform.version to the version of camel used.

+
+
+
+
+

Named configurations

+
+
+

As with quarkus.datasource, we can configure multiple, named configuration. If a configuration is configured under the root quarkus.artemis, then this is the default or unnamed configuration.

+
+
+
Default configuration
+
+
quarkus.artemis.url=...
+quarkus.artemis.username=...
+quarkus.artemis.password=...
+
+
+
+

This corresponding bean is registered as the @Default bean and can be injected without additional qualifiers.

+
+
+ + + + + +
+ + +There must be some build-time configuration, otherwise the bean will not be available. Having only run-time configuration (e.g. environment variables) is not enough. Please see section Configuration detection at build-time for details. +
+
+
+
Injection of default ServerLocator when using quarkus-artemis-core
+
+
public class MyClass {
+    ...
+    private final ServerLocator serverLocator;
+    ...
+
+    public MyClass (
+            ...
+            ServerLocator serverLocator,
+            ...
+    ) {
+        ...
+        this.serverLocator = serverLocator;
+        ...
+    }
+}
+
+
+
+
Injection of default ConnectionFactory when using quarkus-artemis-jms
+
+
public class MyClass {
+    ...
+    private final ConnectionFactory connectionFactory;
+    ...
+
+    public MyClass (
+            ...
+            ConnectionFactory connectionFactory,
+            ...
+    ) {
+        ...
+        this.connectionFactory = connectionFactory;
+        ...
+    }
+}
+
+
+
+

It is also registered with @Identifier("<default>"), so we can inject it with

+
+
+
Injection of default ServerLocator by its explicit name when using quarkus-artemis-core
+
+
public class MyClass {
+    ...
+    private final ServerLocator serverLocator;
+    ...
+
+    public MyClass (
+            ...
+            @Identifier("<default>") ServerLocator serverLocator,
+            ...
+    ) {
+        ...
+        this.serverLocator = serverLocator;
+        ...
+    }
+}
+
+
+
+
Injection of default ConnectionFactory by its explicit name when using quarkus-artemis-jms
+
+
public class MyClass {
+    ...
+    private final ConnectionFactory connectionFactory;
+    ...
+
+    public MyClass (
+            ...
+            @Identifier("<default>") ConnectionFactory connectionFactory,
+            ...
+    ) {
+        ...
+        this.connectionFactory = connectionFactory;
+        ...
+    }
+}
+
+
+
+

Named configurations, on the other hand, are not configured as @Default beans and must therefore be injected by name. The name of the bean is the name of the configuration, and @Identifier(…​) is used to qualify the name. So for example, if we define a configuration "named-1":

+
+
+
Named configuration "named-1"
+
+
quarkus.artemis."named-1".url=...
+quarkus.artemis."named-1".username=...
+quarkus.artemis."named-1".password=...
+
+
+
+

we can inject it with:

+
+
+
Injection of named ServerLocator "named-1" when using extension quarkus-artemis-core
+
+
public class MyClass {
+    ...
+    private final ServerLocator serverLocator;
+    ...
+
+    public MyClass (
+            ...
+            @Identifier("named-1") ServerLocator serverLocator,
+            ...
+    ) {
+        ...
+        this.serverLocator = serverLocator;
+        ...
+    }
+}
+
+
+
+
Injection of named ConnectionFactory "named-1" when using extension quarkus-artemis-jms
+
+
public class MyClass {
+    ...
+    private final ConnectionFactory connectionFactory;
+    ...
+
+    public MyClass (
+            ...
+            @Identifier("named-1") ConnectionFactory connectionFactory,
+            ...
+    ) {
+        ...
+        this.connectionFactory = connectionFactory;
+        ...
+    }
+}
+
+
+
+ + + + + +
+ + +We strongly recommend the usage of @Identifier annotation instead of the @Named annotation. Some other feature rely on the usage of @Identifier. Please see section Health checks for details. +
+
+
+
+
+

Setting properties at runtime results in a warning

+
+
+

When we override the properties url, username or password of a configuration at runtime - either through the implicit environment variable (QUARKUS_ARTEMIS_URL, QUARKUS_ARTEMIS__CONNECTION_NAME__URL), a custom environment variable (quarkus.artemis.url=${ARTEMIS_URL:tcp://dummy:12345}) or a runtime-provided .properties files, we will see a warning at startup similar to this one:

+
+
+
Warning at startup
+
+
2022-11-03 00:53:17,060 WARN  [io.qua.run.con.ConfigRecorder] (main) Build time property cannot be changed at runtime:
+ - quarkus.artemis.url is set to 'tcp://localhost:61616' but it is build time fixed to 'tcp://dummy:12345'. Did you change the property quarkus.artemis.url after building the application?
+
+
+
+

This is expected. We bind some properties twice: once as build-time property, once as run time property. We do so to analyze the (run time-)configuration at build time to get a list of named connections. The overwritten configuration will take effect. The correct behaviour enforced by two different tests. The above example is taken from the logs of our tests.

+
+
+
+
+

Configuration detection at build-time

+
+
+

We took special care so the configurations behave "as intuitively as possible". This means that if no connection-related configuration (enabled, url, username, password, devservices…​, health-exclude, xa-enabled) is present at build-time, it is assumed that the configuration is not used and disabled. Therefore, if we want to use any configuration, but not configure it, we should set quarkus.artemis.enabled / quarkus.artemis."named-configuration".enabled to true to explicitly enable the configuration.

+
+
+ + + + + +
+ + +binding a property to an environment variable, like quarkus.artemis.url=${ARTEMIS_URL} is sufficient, so the extension can pick up the configuration at build-time. +
+
+
+ + + + + +
+ + +If we want to configure a connection solely through the implicit environment variables QUARKUS_ARTEMIS_…​, we should enable the configuration by setting quarkus.artemis.enabled / quarkus.artemis."named-configuration".enabled to true. For example, if we want to configure connection quarkus.artemis."named-1" through the implicit environment variables, we would set quarkus.artemis."named-1".enabled=true and then configure the connection through environment variables QUARKUS_ARTEMIS__NAMED_1__…​. +
+
+
+

Please do not try to configure a configuration purely through environment variables, without having any indication of its presence in the application’s configuration file. We specifically rely on the presence of some configuration fragment at build-time to detect configurations.

+
+
+
+
+

XA-capable Connection Factories

+
+
+

To get XA-capable connection factories, we can set quarkus.artemis.xa-enabled / quarkus.artemis."named-configuration".xa-enabled to true. We can then inject the corresponding bean as XAConnectionFactory.

+
+
+

To use XA transactions and integrate with a transaction manager, we recommend using the quarkus-pooled-jms quarkiverse extension.

+
+
+
+
+

URL as optional configuration

+
+
+

The url configuration property is optional. But in general, without a url property, we cannot create a connection. In case of tests with embedded resources or devservices, the corresponding annotation/service injects a url. But if the application starts up and no url property is found, the creation of the bean will throw a RuntimeException with a corresponding error message. Notice that this will happen when the bean is created. If the bean is never used (and thus never created), the exception will not occur.

+
+
+
+
+

Health checks

+
+
+

By default, all configurations are added to the health check endpoint when extension quarkus-smallrye-health is loaded.

+
+
+

We can disable health checks for all ServerLocator s (extension quarkus-artemis-core) or ConnectionFactory s (extension quarkus-artemis-jms) by setting quarkus.artemis.health.enabled to false.

+
+
+

We can disable health checks for individual configurations by setting quarkus.artemis.health-exclude / quarkus.artemis."named-configuration".health-exclude to true

+
+
+ + + + + +
+ + +Note that we can only enable health checks through the above configuration if quarkus.artemis.health.enabled is true. Otherwise, setting quarkus.artemis.health-exclude / quarkus.artemis."named-connection".health-exclude has no effect. +
+
+
+

If we create ServerLocator- (extension quarkus-artemis-core) or ConnectionFactory- (extension quarkus-artemis-jms) beans within our application (i.e. outside of this extension), we can include them in the health check by using the Identifier annotation, e.g.:

+
+
+
Defining a ServerLocator-bean that is picked up automatically by health checks
+
+
public class MyBeanProvider {
+    @ApplicationScoped
+    @Identifier("my-server-locator") // this annotation makes it so the bean is picked up by the health endpoint
+    public ServerLocator mySeverLocator(...) {
+        ServerLocator myServerLocator = ...;
+        ...
+        return myServerLocator;
+    }
+}
+
+
+
+
Defining a ConnectionFactory-bean that is picked up automatically by health checks
+
+
public class MyBeanProvider {
+    @ApplicationScoped
+    @Identifier("my-connection-factory") // this annotation makes it so the bean is picked up by the health endpoint
+    public ConnectionFactory myConnectionFactory(...) {
+        ConnectionFactory myConnectionFactory = ...;
+        ...
+        return myConnectionFactory;
+    }
+}
+
+
+
+

If we do not want that beans created within our application is picked up by the health endpoint, we can set quarkus.artemis.health.external.enabled to false.

+
+
+ + + + + +
+ + +Note that ServerLocator s / ConnectionFactory s are only picked up when quarkus.artemis.health.enabled is true. +
+
+
+
+
+

Camel support

+
+
+

All connection factories that are configured through quarkus-artemis-jms are automatically registered in the camel context, if the program uses camel. This allows us to reference the connection factories by name, e.g.:

+
+
+
Referencing ConnectionFactory s in a camel route by their bean name
+
+
from(jms("queue:in").connectionFactory("<default>"))
+    .to(jms("queue:out").connectionFactory("named"));
+
+
+
+

In camel-quarkus, an externally defined ConnectionFactory can only be referenced by its name in a route configuration if it has either a @Named(…​) or the @Identifier(…​) annotation. However, as mentioned above, the usage of @Identifier(…​) should be preferred when using this extension.

+
+
+
Defining an externally defined ConnectionFactory-bean through a @Produces method
+
+
@Produces
+@Typed({ ConnectionFactory.class })
+@ApplicationScoped
+@Identifier("externally-defined")
+ActiveMQConnectionFactory externallyDefinedConnectionFactory(
+        @ConfigProperty(name = "artemis.externally-defined.url") String externallyDefinedUrl) {
+    return new ActiveMQConnectionFactory(externallyDefinedUrl);
+}
+
+
+
+

We can then use this ConnectionFactory as follows:

+
+
+
Referencing an externally defined ConnectionFactory-bean by its name
+
+
from(jms("queue:in").connectionFactory("externally-defined"))
+    .to(jms("queue:out").connectionFactory("externally-defined"));
+
+
+
+

Finally, if only a single ConnectionFactory is defined through quarkus-artemis-jms, this ConnectionFactory is always registered as @Default bean. This allows us to use this ConnectionFactory implicitly in a camel route, without setting it explicitly:

+
+
+
Implicitly use the only ConnectionFactory-bean defined in the application
+
+
from(jms("queue:in"))
+    .to(jms("queue:out"));
+
+
+
+

This also works for an externally defined ConnectionFactory, as long as it is defined as @Default (remember that all beans that do not have any qualifier annotation are automatically @Default beans).

+
+
+

This mechanism stops working as soon as more than one ConnectionFactory bean is defined in the application.

+
+
+
+
+

Artemis DevServices

+
+
+

Artemis DevServices are automatically enabled unless quarkus.artemis.url / quarkus.artemis."named-configuration".url is set or quarkus.artemis.devservices.enabled / quarkus.artemis."named-configuration".enabled is false explicitly. And if you still want to use ArtemisTestResource in the test, you need to disable artemis devservices.

+
+
+
+
+

Test framework

+
+
+

To facilitate testing, we provide a dedicated testing framework that can start an in-memory artemis instance For the default configuration, we can start an in-memory instance of artemis by annotating our tests with @QuarkusTestResource(ArtemisTestResource.class). The embedded artemis can be configured through a broker.xml, located under src/test/resources.

+
+
+

To start an in-memory artemis for a named configuration, we can define our own test annotation by extending ArtemisTestResource.class:

+
+
+
Annotation to start an in-memory artemis instance for the named configuration "named-1"
+
+
public class NamedOneArtemisTestResource extends ArtemisTestResource {
+    public NamedOneArtemisTestResource() {
+        super("named-1");
+    }
+}
+
+
+
+

We can then annotate our test with @QuarkusTestResource(NamedOneArtemisTestResource.class).

+
+
+

This instance can be configured by placing a broker-named-1.xml in src/test/resources. In general, for a configuration with name <name>, we can configure the corresponding in-memory artemis through file src/test/resources/broker-<name>.xml.

+
+
+

For an in-depth explanation of what can be configured in a broker.xml, please see the official Artemis documentation.

+
+
+
+
+

Examples

+
+
+

Examples can be found in the integration-tests module, e.g. +The Apache ActiveMQ Artemis Core integration with default configuration tests module

+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Whether a health check is published in case the smallrye-health extension is present.

+
+
+

This is a global setting and is not specific to a datasource.

+
+
+

Environment variable: QUARKUS_ARTEMIS_HEALTH_ENABLED

+
+
+

boolean

+
+
+
+

Whether configurations (org.apache.activemq.artemis.api.core.client.ServerLocator`s in case of the `artemis-core extension, jakarta.jms.ConnectionFactory`s in case of the `artemis-jms extension) should be included in the health check. Defaults to true if not set.

+
+
+

Environment variable: QUARKUS_ARTEMIS_HEALTH_EXTERNAL_ENABLED

+
+
+

boolean

Configurations

Type

Default

+ +
+
+
+

Whether to enable this configuration.

+
+
+

Is enabled by default.

+
+
+

Environment variable: QUARKUS_ARTEMIS_ENABLED

+
+
+

boolean

+ +
+
+
+

Enable or disable Dev Services explicitly. Dev Services are automatically enabled unless quarkus.artemis.url is set.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_ENABLED

+
+
+

boolean

+ +
+
+
+

Optional fixed port the dev service will listen to.

+
+
+

If not defined, the port will be chosen randomly.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_PORT

+
+
+

int

+ +
+
+
+

The ActiveMQ Artemis container image to use.

+
+
+

Defaults to quay.io/artemiscloud/activemq-artemis-broker:artemis.2.32.0

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_IMAGE_NAME

+
+
+

string

+ +
+
+
+

Indicates if the ActiveMQ Artemis broker managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for ActiveMQ Artemis starts a new container. Is activated by default when not set.

+
+
+

The discovery uses the quarkus-dev-service-artemis label. The value is configured using the service-name property.

+
+
+

Container sharing is only used in dev mode.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_SHARED

+
+
+

boolean

+ +
+
+
+

The value of the quarkus-dev-service-artemis label attached to the started container. This property is used when shared is set to true. It defaults to artemis when not set. In this case, before starting a container, Dev Services for ActiveMQ Artemis looks for a container with the quarkus-dev-service-artemis label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-artemis label set to the specified value.

+
+
+

This property is used when you need multiple shared ActiveMQ Artemis brokers.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_SERVICE_NAME

+
+
+

string

+ +
+
+
+

User to start artemis broker. Defaults to admin if not set.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_USER

+
+
+

string

+ +
+
+
+

Password to start artemis broker. Defaults to admin whne not set.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_PASSWORD

+
+
+

string

+ +
+
+
+

The value of the AMQ_EXTRA_ARGS environment variable to pass to the container. Defaults to --no-autotune --mapped --no-fsync when not set.

+
+
+

Environment variable: QUARKUS_ARTEMIS_DEVSERVICES_EXTRA_ARGS

+
+
+

string

+ +
+
+
+

Support to expose jakarta.jms.XAConnectionFactory. Is not activated by default.

+
+
+

Environment variable: QUARKUS_ARTEMIS_XA_ENABLED

+
+
+

boolean

+ +
+
+
+

Artemis connection url.

+
+
+

Environment variable: QUARKUS_ARTEMIS_URL

+
+
+

string

+ +
+
+
+

Username for authentication, only used with JMS.

+
+
+

Environment variable: QUARKUS_ARTEMIS_USERNAME

+
+
+

string

+ +
+
+
+

Password for authentication, only used with JMS.

+
+
+

Environment variable: QUARKUS_ARTEMIS_PASSWORD

+
+
+

string

+ +
+
+
+

Whether this particular data source should be excluded from the health check if the general health check for data sources is enabled.

+
+
+

By default, the health check includes all configured data sources (if it is enabled).

+
+
+

Environment variable: QUARKUS_ARTEMIS_HEALTH_EXCLUDE

+
+
+

boolean

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-artemis/dev/quarkus-artemis-ra.html b/quarkus-artemis/dev/quarkus-artemis-ra.html new file mode 100644 index 0000000000..1c0125e77f --- /dev/null +++ b/quarkus-artemis/dev/quarkus-artemis-ra.html @@ -0,0 +1,1088 @@ + + + + + + Quarkus Artemis Resource Adapter :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Artemis Resource Adapter

+
+
+
+

This extension enables the use of the Apache ActiveMQ Artemis JMS Resource Adapter in Quarkus.

+
+
+

And it leverages on Quarkus IronJacamar

+
+
+
+
+

Installation

+
+
+

To benefit from a consistent definition of the Artemis dependencies (including artemis-server often used in the tests), +it is recommended to add the following BOM to your project, below the Quarkus BOM:

+
+
+
+
<dependencyManagement>
+    <dependencies>
+        <dependency>
+            <groupId>io.quarkus.platform</groupId>
+            <artifactId>quarkus-bom</artifactId>
+            <version>${quarkus.version}</version>
+            <type>pom</type>
+            <scope>import</scope>
+        </dependency>
+        <dependency>
+            <groupId>io.quarkiverse.artemis</groupId>
+            <artifactId>quarkus-artemis-bom</artifactId>
+            <version>3.2.0</version>
+            <type>pom</type>
+            <scope>import</scope>
+        </dependency>
+    </dependencies>
+</dependencyManagement>
+
+
+
+

Once the BOM is added, simply add the io.quarkiverse.artemis:quarkus-artemis-ra extension:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.artemis</groupId>
+    <artifactId>quarkus-artemis-ra</artifactId>
+</dependency>
+
+
+
+

We recommend to set properties quarkus.version and artemis.version to the versions you are using/need to use. We also recommend to align artemis.version with the artemis server version used.

+
+
+
+
+

Configuration

+
+
+

In your application

+
+
+
quarkus.ironjacamar.ra.kind=artemis (1)
+
+quarkus.ironjacamar.ra.config.connection-parameters=host=localhost;port=5445;protocols=HORNETQ (2)
+quarkus.ironjacamar.ra.config.protocol-manager-factory=org.apache.activemq.artemis.core.protocol.hornetq.client.HornetQClientProtocolManagerFactory
+quarkus.ironjacamar.ra.config.user=guest
+quarkus.ironjacamar.ra.config.password=guest
+quarkus.ironjacamar.ra.config.client-id=Quarkus
+
+quarkus.ironjacamar.activation-spec.myqueue.config.destination-type=jakarta.jms.Queue (3)
+quarkus.ironjacamar.activation-spec.myqueue.config.destination=jms.queue.MyQueue
+quarkus.ironjacamar.activation-spec.myqueue.config.max-session=2
+quarkus.ironjacamar.activation-spec.myqueue.config.rebalance-connections=true
+
+
+
+ + + + + + + + + + + + + +
1This is the resource adapter kind. +It must match the value of the @ResourceAdapterKind annotation in the ResourceAdapterFactory implementation.
2(Optional) You can specify the resource adapter configuration that will be passed to your ResourceAdapterFactory#createResourceAdapter implementation method.
3(Optional) You can specify optional activation spec configuration ResourceAdapterFactory#createActivationSpec implementation method.
+
+
+
+
+
+

Multiple Resource Adapters

+
+
+

You can configure more than one ResourceAdapter instance in your application. +Just name the resource adapter in the configuration:

+
+
+
+
quarkus.ironjacamar.main.ra.kind=artemis (1)
+quarkus.ironjacamar.other.ra.kind=artemis
+
+
+
+

To reference in the code, you must use the @io.smallrye.common.annotation.Identifier annotation:

+
+
+
+
import io.quarkiverse.ironjacamar.ResourceEndpoint;
+import io.smallrye.common.annotation.Identifier;
+
+import jakarta.inject.Inject;
+
+import jakarta.jms.ConnectionFactory;
+import jakarta.jms.Message;
+import jakarta.jms.MessageListener;
+
+@ResourceEndpoint(activationSpecConfigKey="myqueue")
+@Identifier("other") (1)
+public class MyResourceEndpoint implements MessageListener {
+
+    @Inject
+    @Identifier("main")
+    ConnectionFactory connectionFactory; (2)
+
+    @Override
+    public void onMessage(Message message) {
+        //...
+    }
+}
+
+
+
+ + + + + + + + + +
1This MessageListener will be activated by the other resource adapter configured above.
2This ConnectionFactory will be the one configured in the main resource adapter.
+
+
+
+
+

Configuration Reference

+
+
+

For more details about Quarkus IronJacamar Configuration, please refer to the documents.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-asyncapi/dev/includes/attributes.html b/quarkus-asyncapi/dev/includes/attributes.html new file mode 100644 index 0000000000..f96018d674 --- /dev/null +++ b/quarkus-asyncapi/dev/includes/attributes.html @@ -0,0 +1,918 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-asyncapi/dev/includes/config-group-io-quarkiverse-asyncapi-annotation-scanner-config-channel.html b/quarkus-asyncapi/dev/includes/config-group-io-quarkiverse-asyncapi-annotation-scanner-config-channel.html new file mode 100644 index 0000000000..109eff2b6a --- /dev/null +++ b/quarkus-asyncapi/dev/includes/config-group-io-quarkiverse-asyncapi-annotation-scanner-config-channel.html @@ -0,0 +1,951 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ + +
+
+
+ + + + + + + diff --git a/quarkus-asyncapi/dev/includes/config-group-io-quarkiverse-asyncapi-annotation-scanner-config-server.html b/quarkus-asyncapi/dev/includes/config-group-io-quarkiverse-asyncapi-annotation-scanner-config-server.html new file mode 100644 index 0000000000..f55c0cefc9 --- /dev/null +++ b/quarkus-asyncapi/dev/includes/config-group-io-quarkiverse-asyncapi-annotation-scanner-config-server.html @@ -0,0 +1,968 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Url

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_SERVER__SERVER__URL

+
+
+

string

required

+
+
+
+

Protocol

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_SERVER__SERVER__PROTOCOL

+
+
+

string

kafka

+
+
+
+
+ + + + + + + diff --git a/quarkus-asyncapi/dev/includes/quarkus-asyncapi-annotation-scanner-general-config-items.html b/quarkus-asyncapi/dev/includes/quarkus-asyncapi-annotation-scanner-general-config-items.html new file mode 100644 index 0000000000..acc24ffeaa --- /dev/null +++ b/quarkus-asyncapi/dev/includes/quarkus-asyncapi-annotation-scanner-general-config-items.html @@ -0,0 +1,985 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Url

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_SERVER__SERVER__URL

+
+
+

string

required

+
+
+
+

Protocol

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_SERVER__SERVER__PROTOCOL

+
+
+

string

kafka

+
+
+
+

Description

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_CHANNEL__CHANNEL__DESCRIPTION

+
+
+

string

+
+
+
+
+ + + + + + + diff --git a/quarkus-asyncapi/dev/includes/quarkus-asyncapi-annotation-scanner-io-quarkiverse-asyncapi-annotation-scanner-config-async-api-runtime-config.html b/quarkus-asyncapi/dev/includes/quarkus-asyncapi-annotation-scanner-io-quarkiverse-asyncapi-annotation-scanner-config-async-api-runtime-config.html new file mode 100644 index 0000000000..72a9aa97ee --- /dev/null +++ b/quarkus-asyncapi/dev/includes/quarkus-asyncapi-annotation-scanner-io-quarkiverse-asyncapi-annotation-scanner-config-async-api-runtime-config.html @@ -0,0 +1,1206 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Enable AysncApi-Scanning

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_ENABLED

+
+
+

boolean

true

+
+
+
+

Version of the WebComponent to be used in html-view to be found at [HOST]/asyncapi.html

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_WEBCOMPONENTVERSION

+
+
+

string

1.0.0-next.47

+
+
+
+

Full qualified name of the implementing AsyncApiFilter

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_FILTER

+
+
+

string

+
+
+
+

AsyncApi specification version

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_VERSION

+
+
+

string

2.6.0

+
+
+
+

Default ContentType

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_DEFAULT_CONTENT_TYPE

+
+
+

string

application/json

+
+
+
+

Title

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_INFO_TITLE

+
+
+

string

AsyncApi

+
+
+
+

Project-version

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_INFO_VERSION

+
+
+

string

1.0.0

+
+
+
+

Project-description

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_INFO_DESCRIPTION

+
+
+

string

+
+
+
+

Contact-Name

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_INFO_CONTACT_NAME

+
+
+

string

+
+
+
+

Contact-Email

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_INFO_CONTACT_EMAIL

+
+
+

string

you@mail.org

+
+
+
+

Contact-URL

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_INFO_CONTACT_URL

+
+
+

string

+
+
+
+

License-Name

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_INFO_LICENSE_NAME

+
+
+

string

Commercial

+
+
+
+

License-URL

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_INFO_LICENSE_URL

+
+
+

string

+
+
+
+

Url

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_SERVER__SERVER__URL

+
+
+

string

required

+
+
+
+

Protocol

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_SERVER__SERVER__PROTOCOL

+
+
+

string

kafka

+
+
+
+

Description

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_CHANNEL__CHANNEL__DESCRIPTION

+
+
+

string

+
+
+
+
+ + + + + + + diff --git a/quarkus-asyncapi/dev/includes/quarkus-asyncapi-annotation-scanner.html b/quarkus-asyncapi/dev/includes/quarkus-asyncapi-annotation-scanner.html new file mode 100644 index 0000000000..f9ba5485da --- /dev/null +++ b/quarkus-asyncapi/dev/includes/quarkus-asyncapi-annotation-scanner.html @@ -0,0 +1,1206 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Enable AysncApi-Scanning

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_ENABLED

+
+
+

boolean

true

+
+
+
+

Version of the WebComponent to be used in html-view to be found at [HOST]/asyncapi.html

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_WEBCOMPONENTVERSION

+
+
+

string

1.0.0-next.47

+
+
+
+

Full qualified name of the implementing AsyncApiFilter

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_FILTER

+
+
+

string

+
+
+
+

AsyncApi specification version

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_VERSION

+
+
+

string

2.6.0

+
+
+
+

Default ContentType

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_DEFAULT_CONTENT_TYPE

+
+
+

string

application/json

+
+
+
+

Title

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_INFO_TITLE

+
+
+

string

AsyncApi

+
+
+
+

Project-version

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_INFO_VERSION

+
+
+

string

1.0.0

+
+
+
+

Project-description

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_INFO_DESCRIPTION

+
+
+

string

+
+
+
+

Contact-Name

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_INFO_CONTACT_NAME

+
+
+

string

+
+
+
+

Contact-Email

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_INFO_CONTACT_EMAIL

+
+
+

string

you@mail.org

+
+
+
+

Contact-URL

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_INFO_CONTACT_URL

+
+
+

string

+
+
+
+

License-Name

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_INFO_LICENSE_NAME

+
+
+

string

Commercial

+
+
+
+

License-URL

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_INFO_LICENSE_URL

+
+
+

string

+
+
+
+

Url

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_SERVER__SERVER__URL

+
+
+

string

required

+
+
+
+

Protocol

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_SERVER__SERVER__PROTOCOL

+
+
+

string

kafka

+
+
+
+

Description

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_CHANNEL__CHANNEL__DESCRIPTION

+
+
+

string

+
+
+
+
+ + + + + + + diff --git a/quarkus-asyncapi/dev/index.html b/quarkus-asyncapi/dev/index.html new file mode 100644 index 0000000000..b583ecfceb --- /dev/null +++ b/quarkus-asyncapi/dev/index.html @@ -0,0 +1,937 @@ + + + + + + Quarkus AsyncAPI Extensions :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus AsyncAPI Extensions

+
+

There are two extensions:

+
+
+

The AsyncApi-Extension scans a given asyncapi-file +and provides the infos found there as Microprofile-configuration (Kafka-topics, server-url, etc.). +So it can be used by someone who has already an existing AsyncApi-Definition and wants to create a service according to it.

+
+
+

The AsyncApi-Scanner-Extension follows a "code first" approach. +An annotation-scanner scans the existing code, combines it with the given mp-config and creates an AsyncApi-description with this infos.

+
+
+

You can find documentation for each of them in the navigation on the left.

+
+
+
+
+
+ + + + + + + diff --git a/quarkus-asyncapi/dev/reader.html b/quarkus-asyncapi/dev/reader.html new file mode 100644 index 0000000000..2012187b1a --- /dev/null +++ b/quarkus-asyncapi/dev/reader.html @@ -0,0 +1,975 @@ + + + + + + Quarkus Asyncapi :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Asyncapi

+
+
+
+ + + + + +
+ + +Describe what the extension does here. +
+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.asyncapi:quarkus-asyncapi extension first to your build file.

+
+
+

For instance, with Maven, add the following dependency to your POM file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.asyncapi</groupId>
+    <artifactId>quarkus-asyncapi</artifactId>
+    <version>0.3.0</version>
+</dependency>
+
+
+
+
+
+

Extension Configuration Reference

+
+
+ + + + + +
+ + +Remove this section if you don’t have Quarkus configuration properties in your extension. +
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-asyncapi/dev/scanner.html b/quarkus-asyncapi/dev/scanner.html new file mode 100644 index 0000000000..6134c02075 --- /dev/null +++ b/quarkus-asyncapi/dev/scanner.html @@ -0,0 +1,1274 @@ + + + + + + Quarkus Asyncapi Scanner :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Asyncapi Scanner

+
+
+
+

This extension creates an AsyncApi-document, describing data your server publishes/subscribes to/from Kafka-topics.

+
+
+

It does this by

+
+
+
    +
  • +

    scanning for annotations @Channel, @Outgoing and @Incoming in your project,

    +
  • +
  • +

    reading topics and descriptions from microprofile-configuration and

    +
  • +
  • +

    reading data from running kafka

    +
  • +
+
+
+

The result can be viewed as html or svg or downloaded as yaml, json or plant-uml (localhost://[quarkus.http.root-path]/asyncapi.[html|svg|yaml|json|puml]).

+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.asyncapi:quarkus-asyncapi extension first to your build file.

+
+
+

For instance, with Maven, add the following dependency to your POM file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.asyncapi</groupId>
+    <artifactId>quarkus-asyncapi-scanner</artifactId>
+    <version>0.3.0</version>
+</dependency>
+
+
+
+
+
+

Extension Configuration Reference

+
+
+ + + + + +
+ + +For more information about the extension configuration please refer to the Configuration Reference. +
+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Enable AysncApi-Scanning

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_ENABLED

+
+
+

boolean

true

+
+
+
+

Version of the WebComponent to be used in html-view to be found at [HOST]/asyncapi.html

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_WEBCOMPONENTVERSION

+
+
+

string

1.0.0-next.47

+
+
+
+

Full qualified name of the implementing AsyncApiFilter

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_FILTER

+
+
+

string

+
+
+
+

AsyncApi specification version

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_VERSION

+
+
+

string

2.6.0

+
+
+
+

Default ContentType

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_DEFAULT_CONTENT_TYPE

+
+
+

string

application/json

+
+
+
+

Title

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_INFO_TITLE

+
+
+

string

AsyncApi

+
+
+
+

Project-version

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_INFO_VERSION

+
+
+

string

1.0.0

+
+
+
+

Project-description

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_INFO_DESCRIPTION

+
+
+

string

+
+
+
+

Contact-Name

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_INFO_CONTACT_NAME

+
+
+

string

+
+
+
+

Contact-Email

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_INFO_CONTACT_EMAIL

+
+
+

string

you@mail.org

+
+
+
+

Contact-URL

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_INFO_CONTACT_URL

+
+
+

string

+
+
+
+

License-Name

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_INFO_LICENSE_NAME

+
+
+

string

Commercial

+
+
+
+

License-URL

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_INFO_LICENSE_URL

+
+
+

string

+
+
+
+

Url

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_SERVER__SERVER__URL

+
+
+

string

required

+
+
+
+

Protocol

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_SERVER__SERVER__PROTOCOL

+
+
+

string

kafka

+
+
+
+

Description

+
+
+

Environment variable: QUARKUS_ASYNCAPI_ANNOTATION_SCANNER_CHANNEL__CHANNEL__DESCRIPTION

+
+
+

string

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-azure-services/dev/_images/Azure-A-48px-product.svg b/quarkus-azure-services/dev/_images/Azure-A-48px-product.svg new file mode 100755 index 0000000000..f655dea04f --- /dev/null +++ b/quarkus-azure-services/dev/_images/Azure-A-48px-product.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/quarkus-azure-services/dev/_images/quarkus-azure-app-configuration-portal.png b/quarkus-azure-services/dev/_images/quarkus-azure-app-configuration-portal.png new file mode 100644 index 0000000000..a2294ca04b Binary files /dev/null and b/quarkus-azure-services/dev/_images/quarkus-azure-app-configuration-portal.png differ diff --git a/quarkus-azure-services/dev/_images/quarkus-azure-storage-blob-azure-portal1.png b/quarkus-azure-services/dev/_images/quarkus-azure-storage-blob-azure-portal1.png new file mode 100644 index 0000000000..1d7e73cbe1 Binary files /dev/null and b/quarkus-azure-services/dev/_images/quarkus-azure-storage-blob-azure-portal1.png differ diff --git a/quarkus-azure-services/dev/_images/quarkus-azure-storage-blob-azure-portal2.png b/quarkus-azure-services/dev/_images/quarkus-azure-storage-blob-azure-portal2.png new file mode 100644 index 0000000000..aae3563437 Binary files /dev/null and b/quarkus-azure-services/dev/_images/quarkus-azure-storage-blob-azure-portal2.png differ diff --git a/quarkus-azure-services/dev/includes/attributes.html b/quarkus-azure-services/dev/includes/attributes.html new file mode 100644 index 0000000000..9993424695 --- /dev/null +++ b/quarkus-azure-services/dev/includes/attributes.html @@ -0,0 +1,915 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-azure-services/dev/includes/azure-setup-environment.html b/quarkus-azure-services/dev/includes/azure-setup-environment.html new file mode 100644 index 0000000000..5023449f44 --- /dev/null +++ b/quarkus-azure-services/dev/includes/azure-setup-environment.html @@ -0,0 +1,922 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

First thing first. +For this sample to work, you need to have an Azure account as well as Azure CLI installed. +The Azure CLI is available to install in Windows, macOS and Linux environments. +Checkout the installation guide. +Then, you need an Azure subscription and log into it by using the az login command. +You can run az version to find the version and az upgrade to upgrade to the latest version.

+
+
+
+
+
+ + + + + + + diff --git a/quarkus-azure-services/dev/includes/quarkus-azure-app-configuration.html b/quarkus-azure-services/dev/includes/quarkus-azure-app-configuration.html new file mode 100644 index 0000000000..0a7e46b0ac --- /dev/null +++ b/quarkus-azure-services/dev/includes/quarkus-azure-app-configuration.html @@ -0,0 +1,999 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The endpoint of the app configuration

+
+
+

Environment variable: QUARKUS_AZURE_APP_CONFIGURATION_ENDPOINT

+
+
+

string

required

+
+
+
+

The id of the app configuration

+
+
+

Environment variable: QUARKUS_AZURE_APP_CONFIGURATION_ID

+
+
+

string

required

+
+
+
+

The secret of the app configuration

+
+
+

Environment variable: QUARKUS_AZURE_APP_CONFIGURATION_SECRET

+
+
+

string

required

+
+
+
+

The label filter of the app configuration. Use comma as separator for multiple label names

+
+
+

Environment variable: QUARKUS_AZURE_APP_CONFIGURATION_LABELS

+
+
+

string

+
+
+
+
+ + + + + + + diff --git a/quarkus-azure-services/dev/includes/quarkus-azure-storage-blob.html b/quarkus-azure-services/dev/includes/quarkus-azure-storage-blob.html new file mode 100644 index 0000000000..1f50f7bcd0 --- /dev/null +++ b/quarkus-azure-services/dev/includes/quarkus-azure-storage-blob.html @@ -0,0 +1,1065 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Whether a health check is published in case the smallrye-health extension is present.

+
+
+

Environment variable: QUARKUS_AZURE_STORAGE_BLOB_HEALTH_ENABLED

+
+
+

boolean

true

+
+
+
+

If DevServices has been explicitly enabled or disabled. DevServices is generally enabled by default, unless there is an existing configuration present.

+
+
+

When DevServices is enabled Quarkus will attempt to automatically configure and start an azurite instance when running in Dev or Test mode and when Docker is running.

+
+
+

Environment variable: QUARKUS_AZURE_STORAGE_BLOB_DEVSERVICES_ENABLED

+
+
+

boolean

true

+
+
+
+

The container image name to use, for container based DevServices providers.

+
+
+

Environment variable: QUARKUS_AZURE_STORAGE_BLOB_DEVSERVICES_IMAGE_NAME

+
+
+

string

mcr.microsoft.com/azure-storage/azurite:3.28.0

+
+
+
+

Optional fixed port the Dev services will listen to.

+
+
+

If not defined, the port will be chosen randomly.

+
+
+

Environment variable: QUARKUS_AZURE_STORAGE_BLOB_DEVSERVICES_PORT

+
+
+

int

+
+
+
+

Indicates if the azurite instance managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for Azure Storage Blob starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-azure-storage-blob label. The value is configured using the service-name property.

+
+
+

Container sharing is only used in dev mode.

+
+
+

Environment variable: QUARKUS_AZURE_STORAGE_BLOB_DEVSERVICES_SHARED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-azure-storage-blob label attached to the started container. This property is used when shared is set to true. In this case, before starting a container, Dev Services for Azure Storage Blob looks for a container with the quarkus-dev-service-azure-storage-blob label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-azure-storage-blob label set to the specified value.

+
+
+

This property is used when you need multiple shared azurite instances.

+
+
+

Environment variable: QUARKUS_AZURE_STORAGE_BLOB_DEVSERVICES_SERVICE_NAME

+
+
+

string

default-storage-blob

+
+
+
+

The connection string of Azure Storage Account.

+
+
+

Environment variable: QUARKUS_AZURE_STORAGE_BLOB_CONNECTION_STRING

+
+
+

string

required

+
+
+
+
+ + + + + + + diff --git a/quarkus-azure-services/dev/includes/support.html b/quarkus-azure-services/dev/includes/support.html new file mode 100644 index 0000000000..9e4f3d1459 --- /dev/null +++ b/quarkus-azure-services/dev/includes/support.html @@ -0,0 +1,917 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Quarkus Azure Services Extensions are developed and supported by Microsoft as part of their commitment to Open Standard Enterprise Java. For more information, see Jakarta EE on Azure.

+
+
+
+
+
+ + + + + + + diff --git a/quarkus-azure-services/dev/index.html b/quarkus-azure-services/dev/index.html new file mode 100644 index 0000000000..834dd0e2ad --- /dev/null +++ b/quarkus-azure-services/dev/index.html @@ -0,0 +1,1534 @@ + + + + + + Quarkus Azure Services Extensions :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Microsoft Azure logo Quarkus Azure Services Extensions

+
+

Quarkus Azure App Configuration Extension

+
+
+

Quarkus Azure Services Extensions are developed and supported by Microsoft as part of their commitment to Open Standard Enterprise Java. For more information, see Jakarta EE on Azure.

+
+
+

Azure App Configuration is a fast, scalable parameter storage for app configuration. +This extension allows to inject a io.smallrye.config.SmallRyeConfig object inside your Quarkus application so you can access the app configuration stored in Azure.

+
+
+

Installation

+
+

If you want to use this extension, you need to add the io.quarkiverse.azureservices:quarkus-azure-services extension first to your build file.

+
+
+

For instance, with Maven, add the following dependency to your POM file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.azureservices</groupId>
+    <artifactId>quarkus-azure-app-configuration</artifactId>
+    <version>1.0.2</version>
+</dependency>
+
+
+
+
+

How to Use It

+
+

Once you have added the extension to your project, follow the next steps, so you can inject io.smallrye.config.SmallRyeConfig object in your application to store and read blobs.

+
+
+

Setup your Azure Environment

+
+

First thing first. +For this sample to work, you need to have an Azure account as well as Azure CLI installed. +The Azure CLI is available to install in Windows, macOS and Linux environments. +Checkout the installation guide. +Then, you need an Azure subscription and log into it by using the az login command. +You can run az version to find the version and az upgrade to upgrade to the latest version.

+
+
+

Create an Azure resource group with the az group create command. +A resource group is a logical container into which Azure resources are deployed and managed.

+
+
+
+
az group create \
+    --name rg-quarkus-azure-app-configuration \
+    --location eastus
+
+
+
+

Create an Azure App Configuration store with the following command:

+
+
+
+
az appconfig create \
+    --name appcs-quarkus-azure-app-configuration \
+    --resource-group rg-quarkus-azure-app-configuration \
+    --location eastus
+
+
+
+

Then create some key-value properties with the following commands:

+
+
+
+
az appconfig kv set --name appcs-quarkus-azure-app-configuration --yes --key myKeyOne --value "Value 1"
+az appconfig kv set --name appcs-quarkus-azure-app-configuration --yes --key myKeyTwo --value "Value 2"
+
+
+
+

You can list the key-value properties with the following command:

+
+
+
+
az appconfig kv list --name appcs-quarkus-azure-app-configuration
+
+
+
+

If you log into the Azure portal, you can see the resource group and the key-value you created.

+
+
+
+Azure Portal showing the app configuration +
+
+
+
+

Configure the Azure App Configuration Client

+
+

As you can see below in the Configuration Reference section, this extension has several configuration options. +To be able to connect to the Azure App Configuration that we’ve just created, you must get the URL of the endpoing, it’s id and secret. +For that, execute the following Azure CLI command:

+
+
+
+
az appconfig credential list --name appcs-quarkus-azure-app-configuration
+
+
+
+

You’ll get the following output:

+
+
+
+
{
+  "connectionString": "Endpoint=https://appcs-quarkus-azure-app-configuration.azconfig.io;Id=xxxxxx;Secret=xxxxxx",
+  "id": "xxxxxx",
+  "name": "Primary",
+  "readOnly": false,
+  "value": "xxxxxx"
+}
+
+
+
+

Then, in the application.properties file, add the following property according to the output of the previous command:

+
+
+
+
quarkus.azure.app.configuration.endpoint=https://appcs-quarkus-azure-app-configuration.azconfig.io
+quarkus.azure.app.configuration.id=xxxxxx
+quarkus.azure.app.configuration.secret=xxxxxx
+
+
+
+
+

Inject the SmallRyeConfig

+
+

Now that your Azure environment is ready and that you have configured the extension, you can inject the SmallRyeConfig object in your application, so you can interact with Azure App Configuration.

+
+
+
+
@Path("/config")
+@Produces(MediaType.APPLICATION_JSON)
+public class ConfigResource {
+
+  @Inject
+  SmallRyeConfig config;
+
+  @GET
+  @Path("/{name}")
+  public Response configValue(@PathParam("name") final String name) {
+      return Response.ok(config.getConfigValue(name)).build();
+  }
+}
+
+
+
+

To execute this sample you can run the following cURL commands:

+
+
+
    +
  • +

    curl -X GET localhost:8080/config/myKeyOne

    +
  • +
  • +

    curl -X GET localhost:8080/config/myKeyTwo

    +
  • +
+
+
+
+
+

Extension Configuration Reference

+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The endpoint of the app configuration

+
+
+

Environment variable: QUARKUS_AZURE_APP_CONFIGURATION_ENDPOINT

+
+
+

string

required

+
+
+
+

The id of the app configuration

+
+
+

Environment variable: QUARKUS_AZURE_APP_CONFIGURATION_ID

+
+
+

string

required

+
+
+
+

The secret of the app configuration

+
+
+

Environment variable: QUARKUS_AZURE_APP_CONFIGURATION_SECRET

+
+
+

string

required

+
+
+
+

The label filter of the app configuration. Use comma as separator for multiple label names

+
+
+

Environment variable: QUARKUS_AZURE_APP_CONFIGURATION_LABELS

+
+
+

string

+
+
+
+
+

Quarkus Azure Blob Storage Extension

+
+
+

Quarkus Azure Services Extensions are developed and supported by Microsoft as part of their commitment to Open Standard Enterprise Java. For more information, see Jakarta EE on Azure.

+
+
+

Azure Blob Storage is a massively scalable and secure object storage for cloud-native workloads, archives, data lakes, high-performance computing, and machine learning. +This extension allows you to store and retrieve blobs from Azure Blob Storage by injecting a com.azure.storage.blob.BlobServiceClient object inside your Quarkus application.

+
+
+

Installation

+
+

If you want to use this extension, you need to add the io.quarkiverse.azureservices:quarkus-azure-services extension first to your build file.

+
+
+

For instance, with Maven, add the following dependency to your POM file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.azureservices</groupId>
+    <artifactId>quarkus-azure-storage-blob</artifactId>
+    <version>1.0.2</version>
+</dependency>
+
+
+
+
+

How to Use It

+
+

Once you have added the extension to your project, follow the next steps, so you can inject com.azure.storage.blob.BlobServiceClient object in your application to store and read blobs.

+
+
+

Setup your Azure Environment

+
+

First thing first. +For this sample to work, you need to have an Azure account as well as Azure CLI installed. +The Azure CLI is available to install in Windows, macOS and Linux environments. +Checkout the installation guide. +Then, you need an Azure subscription and log into it by using the az login command. +You can run az version to find the version and az upgrade to upgrade to the latest version.

+
+
+

Create an Azure resource group with the az group create command. +A resource group is a logical container into which Azure resources are deployed and managed.

+
+
+
+
az group create \
+    --name rg-quarkus-azure-storage-blob \
+    --location eastus
+
+
+
+

Create a general-purpose storage account with the following command:

+
+
+
+
az storage account create \
+    --name stquarkusazurestorageblo \
+    --resource-group rg-quarkus-azure-storage-blob \
+    --location eastus \
+    --sku Standard_ZRS \
+    --encryption-services blob
+
+
+
+

Blobs are always uploaded into a container. +You can organize groups of blobs in containers similar to the way you organize your files on your computer in folders. +The following command uses your Azure AD account to authorize the operation to create the container. +Before you create the container, assign the Storage Blob Data Contributor role to yourself. +Even if you are the account owner, you need explicit permissions to perform data operations against the storage account. +For that, get your subscription id with:

+
+
+
+
az account show \
+    --query id
+
+
+
+

Then, assign the role to yourself with (change <subscription> with your subscription id):

+
+
+
+
az ad signed-in-user show --query id -o tsv | az role assignment create \
+    --role "Storage Blob Data Contributor" \
+    --assignee @- \
+    --scope "/subscriptions/<subscription>/resourceGroups/rg-quarkus-azure-storage-blob/providers/Microsoft.Storage/storageAccounts/stquarkusazurestorageblo"
+
+
+
+
+
az storage container create \
+    --account-name stquarkusazurestorageblo \
+    --name container-quarkus-azure-storage-blob \
+    --auth-mode login
+
+
+
+

If you log into the Azure portal, you can see the resource group and the storage account you created.

+
+
+
+Azure Portal showing the blob container +
+
+
+
+

Configure the Azure Storage Blob Client

+
+

As you can see below in the Configuration Reference section, this extension has several configuration options. +But one of them is mandatory, and that is the quarkus.azure.storage.blob.connection-string. +To get the connection string, execute the following Azure CLI command:

+
+
+
+
az storage account show-connection-string \
+    --resource-group rg-quarkus-azure-storage-blob \
+    --name stquarkusazurestorageblo \
+    --output tsv
+
+
+
+

Then, in the application.properties file, add the following property:

+
+
+
+
quarkus.azure.storage.blob.connection-string=DefaultEndpointsProtocol=https;EndpointSuffix=core.windows.net;AccountName=stquarkusazurestorageblo;AccountKey=xxxxxxx==;BlobEndpoint=https://stquarkusazurestorageblo.blob.core.windows.net/;FileEndpoint=https://stquarkusazurestorageblo.file.core.windows.net/;QueueEndpoint=https://stquarkusazurestorageblo.queue.core.windows.net/;TableEndpoint=https://stquarkusazurestorageblo.table.core.windows.net/
+
+
+
+
+

Inject the Azure Storage Blob Client

+
+

Now that your Azure environment is ready and that you have configured the extension, you can inject the com.azure.storage.blob.BlobServiceClient object in your application, so you can interact with Azure Blob Storage.

+
+
+

The uploadBlob method first gets the container that we’ve created (`container-quarkus-azure-storage-blob), sets some text to a text file, and then uploads the text to the container. +The `downloadBlob method downloads the text file from the container and prints the text to the console.

+
+
+

To execute this sample you can run the following cURL commands:

+
+
+
    +
  • +

    curl -X POST localhost:8080/quarkus-azure-storage-blob

    +
  • +
  • +

    curl localhost:8080/quarkus-azure-storage-blob

    +
  • +
+
+
+
+
@Path("/quarkus-azure-storage-blob")
+@ApplicationScoped
+public class StorageBlobResource {
+
+    @Inject
+    BlobServiceClient blobServiceClient;
+
+    @POST
+    public Response uploadBlob() {
+        BlobContainerClient blobContainerClient = blobServiceClient
+                .createBlobContainerIfNotExists("container-quarkus-azure-storage-blob");
+        BlobClient blobClient = blobContainerClient.getBlobClient("quarkus-azure-storage-blob.txt");
+        blobClient.upload(BinaryData.fromString("Hello quarkus-azure-storage-blob at " + LocalDateTime.now()), true);
+
+        return Response.status(CREATED).build();
+    }
+
+    @GET
+    public String downloadBlob() {
+        BlobContainerClient blobContainerClient = blobServiceClient
+                .createBlobContainerIfNotExists("container-quarkus-azure-storage-blob");
+        BlobClient blobClient = blobContainerClient.getBlobClient("quarkus-azure-storage-blob.txt");
+
+        return blobClient.downloadContent().toString();
+    }
+}
+
+
+
+

You can go back to the Azure portal and see the container and the blob that you’ve created.

+
+
+
+Azure Portal showing the containt of the file +
+
+
+
+

Reactive code pitfall

+
+

In case you plan to use BlobServiceClient (that provides all other clients for interacting with Azure BlobStore), note that it cannot be used within the reactive code as it blocks the event loop due to the fact that BlobServiceClient is a wrapper around the BlobServiceAsyncClient and it uses blocking calls such as blockingGet.

+
+
+

Using it in reactive code such as RestEasy Reactive or Reactive Messaging will cause indefinite hang of the application that prevents it from further functioning or shutdown.

+
+
+
+
+

Extension Configuration Reference

+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Whether a health check is published in case the smallrye-health extension is present.

+
+
+

Environment variable: QUARKUS_AZURE_STORAGE_BLOB_HEALTH_ENABLED

+
+
+

boolean

true

+
+
+
+

If DevServices has been explicitly enabled or disabled. DevServices is generally enabled by default, unless there is an existing configuration present.

+
+
+

When DevServices is enabled Quarkus will attempt to automatically configure and start an azurite instance when running in Dev or Test mode and when Docker is running.

+
+
+

Environment variable: QUARKUS_AZURE_STORAGE_BLOB_DEVSERVICES_ENABLED

+
+
+

boolean

true

+
+
+
+

The container image name to use, for container based DevServices providers.

+
+
+

Environment variable: QUARKUS_AZURE_STORAGE_BLOB_DEVSERVICES_IMAGE_NAME

+
+
+

string

mcr.microsoft.com/azure-storage/azurite:3.28.0

+
+
+
+

Optional fixed port the Dev services will listen to.

+
+
+

If not defined, the port will be chosen randomly.

+
+
+

Environment variable: QUARKUS_AZURE_STORAGE_BLOB_DEVSERVICES_PORT

+
+
+

int

+
+
+
+

Indicates if the azurite instance managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for Azure Storage Blob starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-azure-storage-blob label. The value is configured using the service-name property.

+
+
+

Container sharing is only used in dev mode.

+
+
+

Environment variable: QUARKUS_AZURE_STORAGE_BLOB_DEVSERVICES_SHARED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-azure-storage-blob label attached to the started container. This property is used when shared is set to true. In this case, before starting a container, Dev Services for Azure Storage Blob looks for a container with the quarkus-dev-service-azure-storage-blob label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-azure-storage-blob label set to the specified value.

+
+
+

This property is used when you need multiple shared azurite instances.

+
+
+

Environment variable: QUARKUS_AZURE_STORAGE_BLOB_DEVSERVICES_SERVICE_NAME

+
+
+

string

default-storage-blob

+
+
+
+

The connection string of Azure Storage Account.

+
+
+

Environment variable: QUARKUS_AZURE_STORAGE_BLOB_CONNECTION_STRING

+
+
+

string

required

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-azure-services/dev/quarkus-azure-app-configuration.html b/quarkus-azure-services/dev/quarkus-azure-app-configuration.html new file mode 100644 index 0000000000..19487adea8 --- /dev/null +++ b/quarkus-azure-services/dev/quarkus-azure-app-configuration.html @@ -0,0 +1,1179 @@ + + + + + + Quarkus Azure App Configuration Extension :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Azure App Configuration Extension

+
+
+
+

Quarkus Azure Services Extensions are developed and supported by Microsoft as part of their commitment to Open Standard Enterprise Java. For more information, see Jakarta EE on Azure.

+
+
+

Azure App Configuration is a fast, scalable parameter storage for app configuration. +This extension allows to inject a io.smallrye.config.SmallRyeConfig object inside your Quarkus application so you can access the app configuration stored in Azure.

+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.azureservices:quarkus-azure-services extension first to your build file.

+
+
+

For instance, with Maven, add the following dependency to your POM file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.azureservices</groupId>
+    <artifactId>quarkus-azure-app-configuration</artifactId>
+    <version>1.0.2</version>
+</dependency>
+
+
+
+
+
+

How to Use It

+
+
+

Once you have added the extension to your project, follow the next steps, so you can inject io.smallrye.config.SmallRyeConfig object in your application to store and read blobs.

+
+
+

Setup your Azure Environment

+
+

First thing first. +For this sample to work, you need to have an Azure account as well as Azure CLI installed. +The Azure CLI is available to install in Windows, macOS and Linux environments. +Checkout the installation guide. +Then, you need an Azure subscription and log into it by using the az login command. +You can run az version to find the version and az upgrade to upgrade to the latest version.

+
+
+

Create an Azure resource group with the az group create command. +A resource group is a logical container into which Azure resources are deployed and managed.

+
+
+
+
az group create \
+    --name rg-quarkus-azure-app-configuration \
+    --location eastus
+
+
+
+

Create an Azure App Configuration store with the following command:

+
+
+
+
az appconfig create \
+    --name appcs-quarkus-azure-app-configuration \
+    --resource-group rg-quarkus-azure-app-configuration \
+    --location eastus
+
+
+
+

Then create some key-value properties with the following commands:

+
+
+
+
az appconfig kv set --name appcs-quarkus-azure-app-configuration --yes --key myKeyOne --value "Value 1"
+az appconfig kv set --name appcs-quarkus-azure-app-configuration --yes --key myKeyTwo --value "Value 2"
+
+
+
+

You can list the key-value properties with the following command:

+
+
+
+
az appconfig kv list --name appcs-quarkus-azure-app-configuration
+
+
+
+

If you log into the Azure portal, you can see the resource group and the key-value you created.

+
+
+
+Azure Portal showing the app configuration +
+
+
+
+

Configure the Azure App Configuration Client

+
+

As you can see below in the Configuration Reference section, this extension has several configuration options. +To be able to connect to the Azure App Configuration that we’ve just created, you must get the URL of the endpoing, it’s id and secret. +For that, execute the following Azure CLI command:

+
+
+
+
az appconfig credential list --name appcs-quarkus-azure-app-configuration
+
+
+
+

You’ll get the following output:

+
+
+
+
{
+  "connectionString": "Endpoint=https://appcs-quarkus-azure-app-configuration.azconfig.io;Id=xxxxxx;Secret=xxxxxx",
+  "id": "xxxxxx",
+  "name": "Primary",
+  "readOnly": false,
+  "value": "xxxxxx"
+}
+
+
+
+

Then, in the application.properties file, add the following property according to the output of the previous command:

+
+
+
+
quarkus.azure.app.configuration.endpoint=https://appcs-quarkus-azure-app-configuration.azconfig.io
+quarkus.azure.app.configuration.id=xxxxxx
+quarkus.azure.app.configuration.secret=xxxxxx
+
+
+
+
+

Inject the SmallRyeConfig

+
+

Now that your Azure environment is ready and that you have configured the extension, you can inject the SmallRyeConfig object in your application, so you can interact with Azure App Configuration.

+
+
+
+
@Path("/config")
+@Produces(MediaType.APPLICATION_JSON)
+public class ConfigResource {
+
+  @Inject
+  SmallRyeConfig config;
+
+  @GET
+  @Path("/{name}")
+  public Response configValue(@PathParam("name") final String name) {
+      return Response.ok(config.getConfigValue(name)).build();
+  }
+}
+
+
+
+

To execute this sample you can run the following cURL commands:

+
+
+
    +
  • +

    curl -X GET localhost:8080/config/myKeyOne

    +
  • +
  • +

    curl -X GET localhost:8080/config/myKeyTwo

    +
  • +
+
+
+
+
+
+

Extension Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The endpoint of the app configuration

+
+
+

Environment variable: QUARKUS_AZURE_APP_CONFIGURATION_ENDPOINT

+
+
+

string

required

+
+
+
+

The id of the app configuration

+
+
+

Environment variable: QUARKUS_AZURE_APP_CONFIGURATION_ID

+
+
+

string

required

+
+
+
+

The secret of the app configuration

+
+
+

Environment variable: QUARKUS_AZURE_APP_CONFIGURATION_SECRET

+
+
+

string

required

+
+
+
+

The label filter of the app configuration. Use comma as separator for multiple label names

+
+
+

Environment variable: QUARKUS_AZURE_APP_CONFIGURATION_LABELS

+
+
+

string

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-azure-services/dev/quarkus-azure-storage-blob.html b/quarkus-azure-services/dev/quarkus-azure-storage-blob.html new file mode 100644 index 0000000000..41291e4ac2 --- /dev/null +++ b/quarkus-azure-services/dev/quarkus-azure-storage-blob.html @@ -0,0 +1,1284 @@ + + + + + + Quarkus Azure Blob Storage Extension :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Azure Blob Storage Extension

+
+
+
+

Quarkus Azure Services Extensions are developed and supported by Microsoft as part of their commitment to Open Standard Enterprise Java. For more information, see Jakarta EE on Azure.

+
+
+

Azure Blob Storage is a massively scalable and secure object storage for cloud-native workloads, archives, data lakes, high-performance computing, and machine learning. +This extension allows you to store and retrieve blobs from Azure Blob Storage by injecting a com.azure.storage.blob.BlobServiceClient object inside your Quarkus application.

+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.azureservices:quarkus-azure-services extension first to your build file.

+
+
+

For instance, with Maven, add the following dependency to your POM file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.azureservices</groupId>
+    <artifactId>quarkus-azure-storage-blob</artifactId>
+    <version>1.0.2</version>
+</dependency>
+
+
+
+
+
+

How to Use It

+
+
+

Once you have added the extension to your project, follow the next steps, so you can inject com.azure.storage.blob.BlobServiceClient object in your application to store and read blobs.

+
+
+

Setup your Azure Environment

+
+

First thing first. +For this sample to work, you need to have an Azure account as well as Azure CLI installed. +The Azure CLI is available to install in Windows, macOS and Linux environments. +Checkout the installation guide. +Then, you need an Azure subscription and log into it by using the az login command. +You can run az version to find the version and az upgrade to upgrade to the latest version.

+
+
+

Create an Azure resource group with the az group create command. +A resource group is a logical container into which Azure resources are deployed and managed.

+
+
+
+
az group create \
+    --name rg-quarkus-azure-storage-blob \
+    --location eastus
+
+
+
+

Create a general-purpose storage account with the following command:

+
+
+
+
az storage account create \
+    --name stquarkusazurestorageblo \
+    --resource-group rg-quarkus-azure-storage-blob \
+    --location eastus \
+    --sku Standard_ZRS \
+    --encryption-services blob
+
+
+
+

Blobs are always uploaded into a container. +You can organize groups of blobs in containers similar to the way you organize your files on your computer in folders. +The following command uses your Azure AD account to authorize the operation to create the container. +Before you create the container, assign the Storage Blob Data Contributor role to yourself. +Even if you are the account owner, you need explicit permissions to perform data operations against the storage account. +For that, get your subscription id with:

+
+
+
+
az account show \
+    --query id
+
+
+
+

Then, assign the role to yourself with (change <subscription> with your subscription id):

+
+
+
+
az ad signed-in-user show --query id -o tsv | az role assignment create \
+    --role "Storage Blob Data Contributor" \
+    --assignee @- \
+    --scope "/subscriptions/<subscription>/resourceGroups/rg-quarkus-azure-storage-blob/providers/Microsoft.Storage/storageAccounts/stquarkusazurestorageblo"
+
+
+
+
+
az storage container create \
+    --account-name stquarkusazurestorageblo \
+    --name container-quarkus-azure-storage-blob \
+    --auth-mode login
+
+
+
+

If you log into the Azure portal, you can see the resource group and the storage account you created.

+
+
+
+Azure Portal showing the blob container +
+
+
+
+

Configure the Azure Storage Blob Client

+
+

As you can see below in the Configuration Reference section, this extension has several configuration options. +But one of them is mandatory, and that is the quarkus.azure.storage.blob.connection-string. +To get the connection string, execute the following Azure CLI command:

+
+
+
+
az storage account show-connection-string \
+    --resource-group rg-quarkus-azure-storage-blob \
+    --name stquarkusazurestorageblo \
+    --output tsv
+
+
+
+

Then, in the application.properties file, add the following property:

+
+
+
+
quarkus.azure.storage.blob.connection-string=DefaultEndpointsProtocol=https;EndpointSuffix=core.windows.net;AccountName=stquarkusazurestorageblo;AccountKey=xxxxxxx==;BlobEndpoint=https://stquarkusazurestorageblo.blob.core.windows.net/;FileEndpoint=https://stquarkusazurestorageblo.file.core.windows.net/;QueueEndpoint=https://stquarkusazurestorageblo.queue.core.windows.net/;TableEndpoint=https://stquarkusazurestorageblo.table.core.windows.net/
+
+
+
+
+

Inject the Azure Storage Blob Client

+
+

Now that your Azure environment is ready and that you have configured the extension, you can inject the com.azure.storage.blob.BlobServiceClient object in your application, so you can interact with Azure Blob Storage.

+
+
+

The uploadBlob method first gets the container that we’ve created (`container-quarkus-azure-storage-blob), sets some text to a text file, and then uploads the text to the container. +The `downloadBlob method downloads the text file from the container and prints the text to the console.

+
+
+

To execute this sample you can run the following cURL commands:

+
+
+
    +
  • +

    curl -X POST localhost:8080/quarkus-azure-storage-blob

    +
  • +
  • +

    curl localhost:8080/quarkus-azure-storage-blob

    +
  • +
+
+
+
+
@Path("/quarkus-azure-storage-blob")
+@ApplicationScoped
+public class StorageBlobResource {
+
+    @Inject
+    BlobServiceClient blobServiceClient;
+
+    @POST
+    public Response uploadBlob() {
+        BlobContainerClient blobContainerClient = blobServiceClient
+                .createBlobContainerIfNotExists("container-quarkus-azure-storage-blob");
+        BlobClient blobClient = blobContainerClient.getBlobClient("quarkus-azure-storage-blob.txt");
+        blobClient.upload(BinaryData.fromString("Hello quarkus-azure-storage-blob at " + LocalDateTime.now()), true);
+
+        return Response.status(CREATED).build();
+    }
+
+    @GET
+    public String downloadBlob() {
+        BlobContainerClient blobContainerClient = blobServiceClient
+                .createBlobContainerIfNotExists("container-quarkus-azure-storage-blob");
+        BlobClient blobClient = blobContainerClient.getBlobClient("quarkus-azure-storage-blob.txt");
+
+        return blobClient.downloadContent().toString();
+    }
+}
+
+
+
+

You can go back to the Azure portal and see the container and the blob that you’ve created.

+
+
+
+Azure Portal showing the containt of the file +
+
+
+
+

Reactive code pitfall

+
+

In case you plan to use BlobServiceClient (that provides all other clients for interacting with Azure BlobStore), note that it cannot be used within the reactive code as it blocks the event loop due to the fact that BlobServiceClient is a wrapper around the BlobServiceAsyncClient and it uses blocking calls such as blockingGet.

+
+
+

Using it in reactive code such as RestEasy Reactive or Reactive Messaging will cause indefinite hang of the application that prevents it from further functioning or shutdown.

+
+
+
+
+
+

Extension Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Whether a health check is published in case the smallrye-health extension is present.

+
+
+

Environment variable: QUARKUS_AZURE_STORAGE_BLOB_HEALTH_ENABLED

+
+
+

boolean

true

+
+
+
+

If DevServices has been explicitly enabled or disabled. DevServices is generally enabled by default, unless there is an existing configuration present.

+
+
+

When DevServices is enabled Quarkus will attempt to automatically configure and start an azurite instance when running in Dev or Test mode and when Docker is running.

+
+
+

Environment variable: QUARKUS_AZURE_STORAGE_BLOB_DEVSERVICES_ENABLED

+
+
+

boolean

true

+
+
+
+

The container image name to use, for container based DevServices providers.

+
+
+

Environment variable: QUARKUS_AZURE_STORAGE_BLOB_DEVSERVICES_IMAGE_NAME

+
+
+

string

mcr.microsoft.com/azure-storage/azurite:3.28.0

+
+
+
+

Optional fixed port the Dev services will listen to.

+
+
+

If not defined, the port will be chosen randomly.

+
+
+

Environment variable: QUARKUS_AZURE_STORAGE_BLOB_DEVSERVICES_PORT

+
+
+

int

+
+
+
+

Indicates if the azurite instance managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for Azure Storage Blob starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-azure-storage-blob label. The value is configured using the service-name property.

+
+
+

Container sharing is only used in dev mode.

+
+
+

Environment variable: QUARKUS_AZURE_STORAGE_BLOB_DEVSERVICES_SHARED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-azure-storage-blob label attached to the started container. This property is used when shared is set to true. In this case, before starting a container, Dev Services for Azure Storage Blob looks for a container with the quarkus-dev-service-azure-storage-blob label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-azure-storage-blob label set to the specified value.

+
+
+

This property is used when you need multiple shared azurite instances.

+
+
+

Environment variable: QUARKUS_AZURE_STORAGE_BLOB_DEVSERVICES_SERVICE_NAME

+
+
+

string

default-storage-blob

+
+
+
+

The connection string of Azure Storage Account.

+
+
+

Environment variable: QUARKUS_AZURE_STORAGE_BLOB_CONNECTION_STRING

+
+
+

string

required

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-bucket4j/dev/includes/attributes.html b/quarkus-bucket4j/dev/includes/attributes.html new file mode 100644 index 0000000000..7fda307fe6 --- /dev/null +++ b/quarkus-bucket4j/dev/includes/attributes.html @@ -0,0 +1,912 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-bucket4j/dev/includes/quarkus-rate-limiter.html b/quarkus-bucket4j/dev/includes/quarkus-rate-limiter.html new file mode 100644 index 0000000000..b7c395162b --- /dev/null +++ b/quarkus-bucket4j/dev/includes/quarkus-rate-limiter.html @@ -0,0 +1,1030 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

rate limiter will be completely disabled if false

+
+
+

Environment variable: QUARKUS_RATE_LIMITER_ENABLED

+
+
+

boolean

true

+
+
+
+

Maximum number of entries in the underlying cache

+
+
+

Environment variable: QUARKUS_RATE_LIMITER_MAX_SIZE

+
+
+

int

1000

+
+
+
+

Duration during which the bucket is kept after last refill if untouched

+
+
+

Environment variable: QUARKUS_RATE_LIMITER_KEEP_AFTER_REFILL

+
+
+

Duration

1H

+
+
+
+

Identity resolver allow to segment the population. Each resolved identity key will have its own quota. this must be a valid CDI bean implementing IdentityResolver.

+
+
+

Environment variable: QUARKUS_RATE_LIMITER_BUCKETS__BUCKET_ID__IDENTITY_RESOLVER

+
+
+

string

io.quarkiverse.bucket4j.runtime.resolver.ConstantResolver

+
+
+
+

limits enforced for this bucket

+
+
+

Environment variable: QUARKUS_RATE_LIMITER_BUCKETS__BUCKET_ID__LIMITS

+
+
+

list of Limit

required

+
+
+
+

If true, permitted uses are shared for all methods using the same bucket id. If false, each method has its own quota.

+
+
+

Environment variable: QUARKUS_RATE_LIMITER_BUCKETS__BUCKET_ID__SHARED

+
+
+

boolean

false

+
+
+
+
+ + + + + + + diff --git a/quarkus-bucket4j/dev/index.html b/quarkus-bucket4j/dev/index.html new file mode 100644 index 0000000000..3fd68ba28c --- /dev/null +++ b/quarkus-bucket4j/dev/index.html @@ -0,0 +1,1179 @@ + + + + + + Quarkus Bucket4j :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Bucket4j

+
+
+
+

Bucket4J is a Java rate-limiting library based on the token-bucket algorithm. Bucket4j is a thread-safe library that can be used in either a standalone JVM application, or a clustered environment. It also supports in-memory or distributed caching via the JCache (JSR107) specification. +This extension allow you to control the request rate sent to your application by using a dead simple API.

+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.bucket4j:quarkus-bucket4j extension first to your build file.

+
+
+

For instance, with Maven, add the following dependency to your POM file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.bucket4j</groupId>
+    <artifactId>quarkus-bucket4j</artifactId>
+    <version>1.0.3</version>
+</dependency>
+
+
+
+
+
+

Getting Started

+
+
+

Throttling a Method

+
+

Annotate the method that need to be throttled with @RateLimited

+
+
+
+
@ApplicationScoped
+public static class RateLimitedMethods {
+
+    @RateLimited(bucket = "group1")
+    public String limited() {
+        return "LIMITED";
+    }
+
+}
+
+
+
+

You can also annotate a class, in that case all methods in the class are throttled

+
+
+
+
@ApplicationScoped
+@RateLimited(bucket = "group1")
+public static class RateLimitedMethods {
+
+    public String limited() {
+        return "LIMITED";
+    }
+
+}
+
+
+
+

And add a limit group using the same bucket id in the configuration:

+
+
+
+
# burst protection
+quarkus.rate-limiter.buckets.group1.limits[0].permitted-uses: 10
+quarkus.rate-limiter.buckets.group1.limits[0].period: 1S
+# fair use
+quarkus.rate-limiter.buckets.group1.limits[1].permitted-uses: 100
+quarkus.rate-limiter.buckets.group1.limits[1].period: 5M
+
+
+
+

or with yaml:

+
+
+
+
quarkus:
+  rate-limiter:
+    buckets:
+      group1:
+        limits:
+          - permitted-uses: 10
+            period: 1S
+          - permitted-uses: 100
+            period: 5M
+
+
+
+

The bucket can contain multiple limits that will all be enforced.

+
+
+
+

Bucket Sharing

+
+

By default, if multiple methods share the same bucket id, each method has its own quota. +You can change this behaviour by enabling the shared option in the configuration.

+
+
+
+
# burst protection
+quarkus.rate-limiter.buckets.group1.shared: true
+quarkus.rate-limiter.buckets.group1.limits[0].permitted-uses: 10
+quarkus.rate-limiter.buckets.group1.limits[0].period: 1S
+
+
+
+
+

Population Segmentation

+
+

If you want to perform the throttling per user, simply specify an IdentityKeyResolver either in the bucket config or in the RateLimited annotation. +If a value is specified in the annotation, it will take precedence over the config. +The default one is the ConstantResolver, which will cause the segmentation to be disabled.

+
+
+
+
@ApplicationScoped
+public static class RateLimitedMethods {
+
+    @RateLimited(bucket = "group1", identityResolver = IpResolver.class)
+    public String limitedByIp() {
+        return "LIMITED";
+    }
+}
+
+
+
+

IpResolver is provided out of the box. if you want a more complex segmentation, you can implement your own resolver. +A custom resolver must be a valid CDI Bean.

+
+
+
+
+
+

Extension Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

rate limiter will be completely disabled if false

+
+
+

Environment variable: QUARKUS_RATE_LIMITER_ENABLED

+
+
+

boolean

true

+
+
+
+

Maximum number of entries in the underlying cache

+
+
+

Environment variable: QUARKUS_RATE_LIMITER_MAX_SIZE

+
+
+

int

1000

+
+
+
+

Duration during which the bucket is kept after last refill if untouched

+
+
+

Environment variable: QUARKUS_RATE_LIMITER_KEEP_AFTER_REFILL

+
+
+

Duration

1H

+
+
+
+

Identity resolver allow to segment the population. Each resolved identity key will have its own quota. this must be a valid CDI bean implementing IdentityResolver.

+
+
+

Environment variable: QUARKUS_RATE_LIMITER_BUCKETS__BUCKET_ID__IDENTITY_RESOLVER

+
+
+

string

io.quarkiverse.bucket4j.runtime.resolver.ConstantResolver

+
+
+
+

limits enforced for this bucket

+
+
+

Environment variable: QUARKUS_RATE_LIMITER_BUCKETS__BUCKET_ID__LIMITS

+
+
+

list of Limit

required

+
+
+
+

If true, permitted uses are shared for all methods using the same bucket id. If false, each method has its own quota.

+
+
+

Environment variable: QUARKUS_RATE_LIMITER_BUCKETS__BUCKET_ID__SHARED

+
+
+

boolean

false

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-certmanager/dev/includes/attributes.html b/quarkus-certmanager/dev/includes/attributes.html new file mode 100644 index 0000000000..c1e3d43665 --- /dev/null +++ b/quarkus-certmanager/dev/includes/attributes.html @@ -0,0 +1,912 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-certmanager/dev/includes/quarkus-certificate.html b/quarkus-certmanager/dev/includes/quarkus-certificate.html new file mode 100644 index 0000000000..b82b0db0af --- /dev/null +++ b/quarkus-certmanager/dev/includes/quarkus-certificate.html @@ -0,0 +1,1917 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

If enable/disable the Cert-Manager extension.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_ENABLED

+
+
+

boolean

true

+
+
+
+

The name of the certificate resource to be generated. If not provided, it will use the default name for the application resources.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_NAME

+
+
+

string

+
+
+
+

SecretName is the name of the secret resource that will be automatically created and managed by this Certificate resource. It will be populated with a private key and certificate, signed by the denoted issuer.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_SECRET_NAME

+
+
+

string

required

+
+
+
+

CommonName is a common name to be used on the Certificate. The CommonName should have a length of 64 characters or fewer to avoid generating invalid CSRs.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_COMMON_NAME

+
+
+

string

+
+
+
+

The lifetime of the Certificate.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_DURATION

+
+
+

string

+
+
+
+

How long before the currently issued certificate’s expiry cert-manager should renew the certificate. The default is 2⁄3 of the issued certificate’s duration.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_RENEW_BEFORE

+
+
+

string

+
+
+
+

The list of Subject Alternative Names.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_DNS_NAMES

+
+
+

list of string

+
+
+
+

The list of IP address subjectAltNames to be set on the Certificate.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_IP_ADDRESSES

+
+
+

list of string

+
+
+
+

The list of URI subjectAltNames to be set on the Certificate.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_URIS

+
+
+

list of string

+
+
+
+

The list of email subjectAltNames to be set on the Certificate.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_EMAIL_ADDRESSES

+
+
+

list of string

+
+
+
+

If true, it will mark this Certificate as valid for certificate signing.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_IS_CA

+
+
+

boolean

+
+
+
+

The set of x509 usages that are requested for the certificate.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_USAGES

+
+
+

list of string

+
+
+
+

Environment variable: QUARKUS_CERTIFICATE_ENCODE_USAGES_IN_REQUEST

+
+
+

boolean

false

+
+
+
+

Environment variable: QUARKUS_CERTIFICATE_VOLUME_MOUNT_PATH

+
+
+

string

/etc/certs

+
+
+
+

Environment variable: QUARKUS_CERTIFICATE_AUTOCONFIGURE

+
+
+
+

none, automatic, all, https-only, cluster-only

+

automatic

The reference to the issuer for this certificate +This configuration section is optional

Type

Default

+
+
+
+

The name of the resource being referred to.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_ISSUER_REF_NAME

+
+
+

string

required

+
+
+
+

The kind of the resource being referred to.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_ISSUER_REF_KIND

+
+
+

string

+
+
+
+

The group of the resource being referred to.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_ISSUER_REF_GROUP

+
+
+

string

The CA issuer configuration +This configuration section is optional

Type

Default

+
+
+
+

The name of the secret used to sign Certificates issued by this Issuer.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_CA_SECRET_NAME

+
+
+

string

required

+
+
+
+

The CRL distribution points is an X.509 v3 certificate extension which identifies the location of the CRL from which the revocation of this certificate can be checked.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_CA_CRL_DISTRIBUTION_POINTS

+
+
+

list of string

The Vault issuer configuration +This configuration section is optional

Type

Default

+
+
+
+

The connection address for the Vault server, e.g: “https://vault.example.com:8200”.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_VAULT_SERVER

+
+
+

string

required

+
+
+
+

The mount path of the Vault PKI backend’s sign endpoint, e.g: “my_pki_mount/sign/my-role-name”.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_VAULT_PATH

+
+
+

string

required

+
+
+
+

Environment variable: QUARKUS_CERTIFICATE_VAULT_NAMESPACE

+
+
+

string

+
+
+
+

The PEM-encoded CA bundle (base64-encoded) used to validate Vault server certificate.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_VAULT_CA_BUNDLE

+
+
+

string

required

The reference where to retrieve the Vault token +This configuration section is optional

Type

Default

+
+
+
+

The name of the resource being referred to.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_VAULT_AUTH_TOKEN_SECRET_REF_NAME

+
+
+

string

required

+
+
+
+

The key of the entry in the Secret resource’s data field to be used.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_VAULT_AUTH_TOKEN_SECRET_REF_KEY

+
+
+

string

required

The Vault authentication using App Role auth mechanism +This configuration section is optional

Type

Default

+
+
+
+

The App Role authentication backend is mounted in Vault, e.g: “approle”

+
+
+

Environment variable: QUARKUS_CERTIFICATE_VAULT_AUTH_APP_ROLE_PATH

+
+
+

string

required

+
+
+
+

The App Role authentication backend when setting up the authentication backend in Vault.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_VAULT_AUTH_APP_ROLE_ROLE_ID

+
+
+

string

required

The reference to a key in a Secret that contains the App Role secret used to authenticate with Vault +This configuration section is optional

Type

Default

+
+
+
+

The name of the resource being referred to.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_VAULT_AUTH_APP_ROLE_SECRET_REF_NAME

+
+
+

string

required

+
+
+
+

The key of the entry in the Secret resource’s data field to be used.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_VAULT_AUTH_APP_ROLE_SECRET_REF_KEY

+
+
+

string

required

The Vault authentication using Kubernetes service account +This configuration section is optional

Type

Default

+
+
+
+

The mount path to use when authenticating with Vault.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_VAULT_AUTH_KUBERNETES_MOUNT_PATH

+
+
+

string

required

+
+
+
+

The required Secret field containing a Kubernetes ServiceAccount JWT used for authenticating with Vault.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_VAULT_AUTH_KUBERNETES_ROLE

+
+
+

string

required

The reference to a key in a Secret that contains the App Role secret used to authenticate with Vault +This configuration section is optional

Type

Default

+
+
+
+

The name of the resource being referred to.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_VAULT_AUTH_KUBERNETES_SECRET_REF_NAME

+
+
+

string

required

+
+
+
+

The key of the entry in the Secret resource’s data field to be used.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_VAULT_AUTH_KUBERNETES_SECRET_REF_KEY

+
+
+

string

required

The self-signed issuer configuration +This configuration section is optional

Type

Default

+
+
+
+

If the self-signed issuer should be generated.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_SELF_SIGNED_ENABLED

+
+
+

boolean

false

+
+
+
+

The CRL distribution points is an X.509 v3 certificate extension which identifies the location of the CRL from which the revocation of this certificate can be checked.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_SELF_SIGNED_CRL_DISTRIBUTION_POINTS

+
+
+

list of string

Full X509 name specification (https://golang +This configuration section is optional

Type

Default

+
+
+
+

The organizations to be used on the Certificate.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_SUBJECT_ORGANIZATIONS

+
+
+

list of string

+
+
+
+

The countries to be used on the Certificate.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_SUBJECT_COUNTRIES

+
+
+

list of string

+
+
+
+

The organizational Units to be used on the Certificate.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_SUBJECT_ORGANIZATIONAL_UNITS

+
+
+

list of string

+
+
+
+

The cities to be used on the Certificate.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_SUBJECT_LOCALITIES

+
+
+

list of string

+
+
+
+

The State/Provinces to be used on the Certificate.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_SUBJECT_PROVINCES

+
+
+

list of string

+
+
+
+

The street addresses to be used on the Certificate.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_SUBJECT_STREET_ADDRESSES

+
+
+

list of string

+
+
+
+

The postal codes to be used on the Certificate.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_SUBJECT_POSTAL_CODES

+
+
+

list of string

+
+
+
+

The serial number to be used on the Certificate.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_SUBJECT_SERIAL_NUMBER

+
+
+

string

The Keystores generation configuration +This configuration section is optional

Type

Default

JKS configures options for storing a JKS keystore in the spec +This configuration section is optional

Type

Default

+
+
+
+

Create enables keystore creation for the Certificate.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_KEYSTORES_JKS_CREATE

+
+
+

boolean

false

+
+
+
+

The name of the resource being referred to.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_KEYSTORES_JKS_PASSWORD_SECRET_REF_NAME

+
+
+

string

required

+
+
+
+

The key of the entry in the Secret resource’s data field to be used.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_KEYSTORES_JKS_PASSWORD_SECRET_REF_KEY

+
+
+

string

required

PKCS12 configures options for storing a PKCS12 keystore in the spec +This configuration section is optional

Type

Default

+
+
+
+

Create enables keystore creation for the Certificate.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_KEYSTORES_PKCS12_CREATE

+
+
+

boolean

false

+
+
+
+

The name of the resource being referred to.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_KEYSTORES_PKCS12_PASSWORD_SECRET_REF_NAME

+
+
+

string

required

+
+
+
+

The key of the entry in the Secret resource’s data field to be used.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_KEYSTORES_PKCS12_PASSWORD_SECRET_REF_KEY

+
+
+

string

required

#quarkus-certificate_quarkus.certificate.private-key +This configuration section is optional

Type

Default

+
+
+
+

RotationPolicy controls how private keys should be regenerated when a re-issuance is being processed.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_PRIVATE_KEY_ROTATION_POLICY

+
+
+
+

unset, never, always

+

unset

+
+
+
+

Environment variable: QUARKUS_CERTIFICATE_PRIVATE_KEY_ENCODING

+
+
+
+

unset, pkcs1, pkcs8

+

unset

+
+
+
+

Environment variable: QUARKUS_CERTIFICATE_PRIVATE_KEY_ALGORITHM

+
+
+
+

unset, rsa, ed25519, ecdsa

+

unset

+
+
+
+

Environment variable: QUARKUS_CERTIFICATE_PRIVATE_KEY_SIZE

+
+
+

int

-1

+
+
+
+
+ + + + + + + diff --git a/quarkus-certmanager/dev/index.html b/quarkus-certmanager/dev/index.html new file mode 100644 index 0000000000..777c2a7715 --- /dev/null +++ b/quarkus-certmanager/dev/index.html @@ -0,0 +1,2316 @@ + + + + + + Using Quarkus Cert-Manager :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Using Quarkus Cert-Manager

+
+
+
+

The Quarkus Cert-Manager extension supports generating an X.509 certificate with the help of the Certificate and Issuer CRD resources handled by the Cert-Manager. When these CRD resources are deployed on the cluster, the Cert-Manager will process them to populate a Secret containing for example a: CA certificate, private key, server certificate, or java keystores, etc.

+
+
+

Under the hood, this extension uses Dekorate to generate all the Cert-Manager manifests at build time.

+
+
+

Before getting started, make sure you’re using the right Quarkus Helm version that is compatible with the Quarkus version you’re using in your project. See the following table to see the compatibility among versions:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + +
Quarkus Cert-Manager VersionQuarkus Version

1.0.1

Quarkus 3+

1.0.0

Quarkus 3+

0.0.2

Quarkus 2.12+

0.0.1

Quarkus 2.12+

+
+
+
+

Create a Quarkus application with the Cert-Manager extension

+
+
+

In this example, we’ll create a Quarkus application with the Quarkus Cert-Manager and the Quarkus Kubernetes extensions by running the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.7.0:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=certmanager-quickstart \
+    -DclassName="org.acme.quickstart.GreetingResource" \
+    -Dpath="/hello" \
+    -Dextensions="resteasy-reactive,kubernetes,certmanager"
+cd certmanager-quickstart
+
+
+
+

If you already have your Quarkus project configured, you can add the certmanager extension to your project by running the following command in your project base directory:

+
+
+
+
./mvnw quarkus:add-extension -Dextensions="certmanager"
+
+
+
+

This command will add the following dependency to your pom.xml file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.certmanager</groupId>
+    <artifactId>quarkus-certmanager</artifactId>
+    <version>1.0.2</version>
+</dependency>
+
+
+
+

Once we add the Quarkus Cert-Manager extension to your project, you can now generate the resources by running the following Maven command:

+
+
+
+
./mvnw clean package
+
+
+
+

And next, we need to provide the certificate configuration. The minimal information that the extension needs is: +* secretName: the name of the Kubernetes Secret resource that will include the Cert-Manager generated files. +* the Issuer that represents the certificate authority (CA). See all the supported options in the Issuer section.

+
+
+

For all the configuration options, please go to the Configuration guide.

+
+
+

The minimal configuration can be provided using the properties file and the following keys:

+
+
+
+
quarkus.certificate.secret-name=tls-secret
+# The selfSigned issuer:
+quarkus.certificate.self-signed.enabled=true
+
+
+
+

This configuration will generate up to two resources under the target/kubernetes/kubernetes.yml file that should look like this:

+
+
+
+
apiVersion: cert-manager.io/v1
+kind: Issuer
+metadata:
+  name: kubernetes-example
+spec:
+  selfSigned: {}
+---
+apiVersion: cert-manager.io/v1
+kind: Certificate
+metadata:
+  name: kubernetes-example
+spec:
+  encodeUsagesInRequest: false
+  isCA: false
+  issuerRef:
+    name: kubernetes-example
+  secretName: tls-secret
+
+
+
+

The Quarkus Cert-Manager extension will add, part of the Deployment, a volume mounted from the secret that contains the Cert-Manager generated files to allow the application to access them and to configure the HTTPS/TLS endpoint:

+
+
+
+
apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: kubernetes-example
+spec:
+  replicas: 1
+  template:
+    spec:
+      containers:
+        - name: kubernetes-example
+          volumeMounts:
+            - mountPath: /etc/certs
+              name: volume-certs
+              readOnly: true
+      volumes:
+        - name: volume-certs
+          secret:
+            optional: false
+            secretName: tls-secret
+
+
+
+

Moreover, the Quarkus Cert-Manager extension will also autoconfigure the application to accept SSL connections. By default, it will autoconfigure only the Ingress/Route resource if exposed, otherwise, it will enable the HTTPS/TLS configuration for the internal communications of the application. This configuration can be controlled using the property quarkus.certificate.autoconfigure which values:

+
+
+
    +
  • +

    (Default) AUTOMATIC: It will secure Ingress/Route resources if exposed, otherwise the HTTP endpoints.

    +
  • +
  • +

    NONE: It won’t autoconfigure anything.

    +
  • +
  • +

    ALL: It will secure the HTTP endpoints and also the Ingress/Route resources if exposed.

    +
  • +
  • +

    HTTPS_ONLY: It will secure only the HTTP endpoints.

    +
  • +
  • +

    CLUSTER_ONLY: It will secure only the Ingress/Route resources. It will throw an exception if it was not exposed.

    +
  • +
+
+
+

For example, if you want to secure both the internal HTTPs connections and the ingress resource by setting the property quarkus.certificate.autoconfigure=ALL, it will update the Ingress resource as follows if the property quarkus.kubernetes.ingress.expose is true:

+
+
+
+
apiVersion: networking.k8s.io/v1
+kind: Ingress
+metadata:
+  ...
+spec:
+  rules:
+    ...
+  tls:
+    - hosts:
+        - kubernetes-example.com
+        - localhost
+      secretName: tls-secret
+
+
+
+

And it will also autoconfigure the HTTP SSL configuration part of the Deployment resource:

+
+
+
+
apiVersion: apps/v1
+kind: Deployment
+metadata:
+  ...
+  name: quarkus-certmanager-integration-tests-certmanager-ssl
+spec:
+  replicas: 1
+  selector:
+    ...
+  template:
+    ...
+    spec:
+      containers:
+        - env:
+            - name: KUBERNETES_NAMESPACE
+              valueFrom:
+                fieldRef:
+                  fieldPath: metadata.namespace
+            - name: QUARKUS_HTTP_SSL_CERTIFICATE_KEY_STORE_FILE_TYPE
+              value: PKCS12
+            - name: QUARKUS_HTTP_SSL_CERTIFICATE_KEY_STORE_PASSWORD
+              valueFrom:
+                secretKeyRef:
+                  key: password
+                  name: pkcs12-pass
+            - name: QUARKUS_HTTP_SSL_CERTIFICATE_KEY_STORE_FILE
+              value: /etc/certs/keystore.p12
+
+
+
+
+
+

Securing Resources

+
+
+

When securing your resources, it’s important to validate that the requests are coming from known host names. For this purpose, we can use the dnsNames property which is part of the certificate configuration. For example, by adding the following quarkus.certificate.dns-names property (it’s a comma separated list of strings):

+
+
+
+
quarkus.certificate.dns-names=foo.bar.com
+
+
+
+

The certificate will only allow requests accessing the server host foo.bar.com. Remark: If the DNS Host name does not exist, then you will get an error.

+
+
+

Note that the applications in Kubernetes can be publicly exposed using Ingress resources, for example:

+
+
+
+
apiVersion: networking.k8s.io/v1
+kind: Ingress
+metadata:
+  name: kubernetes-example
+spec:
+  rules:
+  - host: foo.bar.com
+    http:
+      paths:
+      - pathType: Prefix
+        path: "/"
+        backend:
+          service:
+            name: kubernetes-example
+            port:
+              name: http
+  tls:
+    - hosts:
+        - foo.bar.com
+      secretName: tls-secret # < cert-manager will store the created certificate in this secret.
+
+
+
+
+
+

Issuers

+
+
+

The Issuer is a Kubernetes resource that represents a certificate issuing authority that can generate signed certificates by honoring certificate signing requests. All cert-manager certificates require a referenced issuer to attempt to honor the request.

+
+
+

The supported issuers of this extension are SelfSigned, CA, Vault, and IssuerRef.

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

Only one issuer must be set between selfSigned, ca, vault, and issuerRef.

+
+
+
+
+

SelfSigned

+
+

Using the SelfSigned issuer, the certificate will sign itself using the given private key. +To use the SelfSigned issuer, you need to add the following key property:

+
+
+
+
quarkus.certificate.self-signed.enabled=true
+
+
+
+
+

CA

+
+

Using the CA issuer, the certificate and private key are stored inside the cluster as a Kubernetes Secret and will be used to sign incoming certificate requests. +To use the CA issuer, you need to add the following key properties:

+
+
+
+
quarkus.certificate.ca.secret-name=ca-key-pair
+
+
+
+

When this certificate is installed in the cluster, Cert-Manager will issue the certificate and generate the CA secret resource ca-key-pair which the following content:

+
+
+
+
apiVersion: v1
+kind: Secret
+metadata:
+  name: ca-key-pair
+data:
+  tls.crt: <auto generated encrypted data>
+  tls.key: <auto generated encrypted data>
+
+
+
+
+

Vault

+
+

Using the Vault issuer, the certificate will be issued by the certificate authority Vault. +To use the Vault issuer, you need the following key properties:

+
+
+
+
quarkus.certificate.vault.server=https://vault.example.com:8200
+quarkus.certificate.vault.path=my_pki_mount/sign/my-role-name
+# Any of the auth mechanisms to login into Vault:
+## 1.- Via token secret resource reference:
+quarkus.certificate.vault.auth-token-secret-ref...
+## 2.- Via using Application Role:
+quarkus.certificate.vault.auth-app-role...
+## 3.- Via using Kubernetes service account:
+quarkus.certificate.vault.auth-kubernetes...
+
+
+
+
+

Using a pre-existing issuer

+
+

To use a pre-existing issuer type that is separately installed in the cluster, you can use the issuerRef type. For example:

+
+
+
+
quarkus.certificate.issuer-ref.name=my-issuer
+quarkus.certificate.issuer-ref.kind=ClusterIssuer
+
+
+
+

In this example, we are using a ClusterIssuer resource that is part of the Cert-Manager API and that should have previously been installed in the cluster.

+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

If enable/disable the Cert-Manager extension.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_ENABLED

+
+
+

boolean

true

+
+
+
+

The name of the certificate resource to be generated. If not provided, it will use the default name for the application resources.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_NAME

+
+
+

string

+
+
+
+

SecretName is the name of the secret resource that will be automatically created and managed by this Certificate resource. It will be populated with a private key and certificate, signed by the denoted issuer.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_SECRET_NAME

+
+
+

string

required

+
+
+
+

CommonName is a common name to be used on the Certificate. The CommonName should have a length of 64 characters or fewer to avoid generating invalid CSRs.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_COMMON_NAME

+
+
+

string

+
+
+
+

The lifetime of the Certificate.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_DURATION

+
+
+

string

+
+
+
+

How long before the currently issued certificate’s expiry cert-manager should renew the certificate. The default is 2⁄3 of the issued certificate’s duration.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_RENEW_BEFORE

+
+
+

string

+
+
+
+

The list of Subject Alternative Names.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_DNS_NAMES

+
+
+

list of string

+
+
+
+

The list of IP address subjectAltNames to be set on the Certificate.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_IP_ADDRESSES

+
+
+

list of string

+
+
+
+

The list of URI subjectAltNames to be set on the Certificate.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_URIS

+
+
+

list of string

+
+
+
+

The list of email subjectAltNames to be set on the Certificate.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_EMAIL_ADDRESSES

+
+
+

list of string

+
+
+
+

If true, it will mark this Certificate as valid for certificate signing.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_IS_CA

+
+
+

boolean

+
+
+
+

The set of x509 usages that are requested for the certificate.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_USAGES

+
+
+

list of string

+
+
+
+

Environment variable: QUARKUS_CERTIFICATE_ENCODE_USAGES_IN_REQUEST

+
+
+

boolean

false

+
+
+
+

Environment variable: QUARKUS_CERTIFICATE_VOLUME_MOUNT_PATH

+
+
+

string

/etc/certs

+
+
+
+

Environment variable: QUARKUS_CERTIFICATE_AUTOCONFIGURE

+
+
+
+

none, automatic, all, https-only, cluster-only

+

automatic

The reference to the issuer for this certificate +This configuration section is optional

Type

Default

+
+
+
+

The name of the resource being referred to.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_ISSUER_REF_NAME

+
+
+

string

required

+
+
+
+

The kind of the resource being referred to.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_ISSUER_REF_KIND

+
+
+

string

+
+
+
+

The group of the resource being referred to.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_ISSUER_REF_GROUP

+
+
+

string

The CA issuer configuration +This configuration section is optional

Type

Default

+
+
+
+

The name of the secret used to sign Certificates issued by this Issuer.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_CA_SECRET_NAME

+
+
+

string

required

+
+
+
+

The CRL distribution points is an X.509 v3 certificate extension which identifies the location of the CRL from which the revocation of this certificate can be checked.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_CA_CRL_DISTRIBUTION_POINTS

+
+
+

list of string

The Vault issuer configuration +This configuration section is optional

Type

Default

+
+
+
+

The connection address for the Vault server, e.g: “https://vault.example.com:8200”.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_VAULT_SERVER

+
+
+

string

required

+
+
+
+

The mount path of the Vault PKI backend’s sign endpoint, e.g: “my_pki_mount/sign/my-role-name”.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_VAULT_PATH

+
+
+

string

required

+
+
+
+

Environment variable: QUARKUS_CERTIFICATE_VAULT_NAMESPACE

+
+
+

string

+
+
+
+

The PEM-encoded CA bundle (base64-encoded) used to validate Vault server certificate.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_VAULT_CA_BUNDLE

+
+
+

string

required

The reference where to retrieve the Vault token +This configuration section is optional

Type

Default

+
+
+
+

The name of the resource being referred to.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_VAULT_AUTH_TOKEN_SECRET_REF_NAME

+
+
+

string

required

+
+
+
+

The key of the entry in the Secret resource’s data field to be used.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_VAULT_AUTH_TOKEN_SECRET_REF_KEY

+
+
+

string

required

The Vault authentication using App Role auth mechanism +This configuration section is optional

Type

Default

+
+
+
+

The App Role authentication backend is mounted in Vault, e.g: “approle”

+
+
+

Environment variable: QUARKUS_CERTIFICATE_VAULT_AUTH_APP_ROLE_PATH

+
+
+

string

required

+
+
+
+

The App Role authentication backend when setting up the authentication backend in Vault.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_VAULT_AUTH_APP_ROLE_ROLE_ID

+
+
+

string

required

The reference to a key in a Secret that contains the App Role secret used to authenticate with Vault +This configuration section is optional

Type

Default

+
+
+
+

The name of the resource being referred to.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_VAULT_AUTH_APP_ROLE_SECRET_REF_NAME

+
+
+

string

required

+
+
+
+

The key of the entry in the Secret resource’s data field to be used.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_VAULT_AUTH_APP_ROLE_SECRET_REF_KEY

+
+
+

string

required

The Vault authentication using Kubernetes service account +This configuration section is optional

Type

Default

+
+
+
+

The mount path to use when authenticating with Vault.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_VAULT_AUTH_KUBERNETES_MOUNT_PATH

+
+
+

string

required

+
+
+
+

The required Secret field containing a Kubernetes ServiceAccount JWT used for authenticating with Vault.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_VAULT_AUTH_KUBERNETES_ROLE

+
+
+

string

required

The reference to a key in a Secret that contains the App Role secret used to authenticate with Vault +This configuration section is optional

Type

Default

+
+
+
+

The name of the resource being referred to.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_VAULT_AUTH_KUBERNETES_SECRET_REF_NAME

+
+
+

string

required

+
+
+
+

The key of the entry in the Secret resource’s data field to be used.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_VAULT_AUTH_KUBERNETES_SECRET_REF_KEY

+
+
+

string

required

The self-signed issuer configuration +This configuration section is optional

Type

Default

+
+
+
+

If the self-signed issuer should be generated.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_SELF_SIGNED_ENABLED

+
+
+

boolean

false

+
+
+
+

The CRL distribution points is an X.509 v3 certificate extension which identifies the location of the CRL from which the revocation of this certificate can be checked.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_SELF_SIGNED_CRL_DISTRIBUTION_POINTS

+
+
+

list of string

Full X509 name specification (https://golang +This configuration section is optional

Type

Default

+
+
+
+

The organizations to be used on the Certificate.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_SUBJECT_ORGANIZATIONS

+
+
+

list of string

+
+
+
+

The countries to be used on the Certificate.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_SUBJECT_COUNTRIES

+
+
+

list of string

+
+
+
+

The organizational Units to be used on the Certificate.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_SUBJECT_ORGANIZATIONAL_UNITS

+
+
+

list of string

+
+
+
+

The cities to be used on the Certificate.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_SUBJECT_LOCALITIES

+
+
+

list of string

+
+
+
+

The State/Provinces to be used on the Certificate.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_SUBJECT_PROVINCES

+
+
+

list of string

+
+
+
+

The street addresses to be used on the Certificate.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_SUBJECT_STREET_ADDRESSES

+
+
+

list of string

+
+
+
+

The postal codes to be used on the Certificate.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_SUBJECT_POSTAL_CODES

+
+
+

list of string

+
+
+
+

The serial number to be used on the Certificate.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_SUBJECT_SERIAL_NUMBER

+
+
+

string

The Keystores generation configuration +This configuration section is optional

Type

Default

JKS configures options for storing a JKS keystore in the spec +This configuration section is optional

Type

Default

+
+
+
+

Create enables keystore creation for the Certificate.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_KEYSTORES_JKS_CREATE

+
+
+

boolean

false

+
+
+
+

The name of the resource being referred to.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_KEYSTORES_JKS_PASSWORD_SECRET_REF_NAME

+
+
+

string

required

+
+
+
+

The key of the entry in the Secret resource’s data field to be used.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_KEYSTORES_JKS_PASSWORD_SECRET_REF_KEY

+
+
+

string

required

PKCS12 configures options for storing a PKCS12 keystore in the spec +This configuration section is optional

Type

Default

+
+
+
+

Create enables keystore creation for the Certificate.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_KEYSTORES_PKCS12_CREATE

+
+
+

boolean

false

+
+
+
+

The name of the resource being referred to.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_KEYSTORES_PKCS12_PASSWORD_SECRET_REF_NAME

+
+
+

string

required

+
+
+
+

The key of the entry in the Secret resource’s data field to be used.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_KEYSTORES_PKCS12_PASSWORD_SECRET_REF_KEY

+
+
+

string

required

#quarkus-certificate_quarkus.certificate.private-key +This configuration section is optional

Type

Default

+
+
+
+

RotationPolicy controls how private keys should be regenerated when a re-issuance is being processed.

+
+
+

Environment variable: QUARKUS_CERTIFICATE_PRIVATE_KEY_ROTATION_POLICY

+
+
+
+

unset, never, always

+

unset

+
+
+
+

Environment variable: QUARKUS_CERTIFICATE_PRIVATE_KEY_ENCODING

+
+
+
+

unset, pkcs1, pkcs8

+

unset

+
+
+
+

Environment variable: QUARKUS_CERTIFICATE_PRIVATE_KEY_ALGORITHM

+
+
+
+

unset, rsa, ed25519, ecdsa

+

unset

+
+
+
+

Environment variable: QUARKUS_CERTIFICATE_PRIVATE_KEY_SIZE

+
+
+

int

-1

+
+
+
+

References

+
+
+ +
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-config-extensions/dev/consul.html b/quarkus-config-extensions/dev/consul.html new file mode 100644 index 0000000000..35bcc96e4c --- /dev/null +++ b/quarkus-config-extensions/dev/consul.html @@ -0,0 +1,1496 @@ + + + + + + Quarkus Consul Config :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Consul Config

+
+
+
+

This guide explains how your Quarkus application can read configuration properties at runtime from HashiCorp Consul.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    less than 15 minutes

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    JDK 17+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
+
+
+
+
+

Solution

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step.

+
+
+
+
+

Introduction

+
+
+

Consul is a versatile system which among other things, provides a distributed Key-Value store that is used in many architectures as a source of configuration for services. +This Key-Value store is what the quarkus-config-consul extension interacts with in order to allow Quarkus applications to read runtime configuration properties from Consul.

+
+
+
+
+

Starting Consul

+
+
+

There are various ways to start Consul that vary in complexity, but for the purposes of this guide, we elect to start a single Consul server with no persistence via Docker, like so:

+
+
+
+
docker run --rm --name consul -p 8500:8500 -p 8501:8501 consul:1.7 agent -dev -ui -client=0.0.0.0 -bind=0.0.0.0 --https-port=8501
+
+
+
+

Please consult the documentation to learn more about the various Consul installation options.

+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.7.2:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=config-consul-quickstart \
+    -DclassName="org.acme.consul.config.GreetingResource" \
+    -Dpath="/greeting" \
+    -Dextensions="config-consul"
+cd config-consul-quickstart
+
+
+
+

This command generates a Maven project with a REST endpoint and imports the config-consul extension.

+
+
+

If you already have your Quarkus project configured, you can add the config-consul extension +to your project by running the following command in your project base directory:

+
+
+
+
./mvnw quarkus:add-extension -Dextensions="config-consul"
+
+
+
+

This will add the following to your pom.xml:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.config</groupId>
+    <artifactId>quarkus-config-consul</artifactId>
+    <version>2.3.1</version>
+</dependency>
+
+
+
+
+
+

GreetingController

+
+
+

The Quarkus Maven plugin automatically generated a GreetingResource JAX-RS resource in the +src/main/java/org/acme/consul/config/client/GreetingResource.java file that looks like:

+
+
+
+
package org.acme.consul.config.client;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+@Path("/greeting")
+public class GreetingResource {
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public String hello() {
+        return "hello";
+    }
+}
+
+
+
+

As we want to use configuration properties obtained from the Config Server, we will update the GreetingResource to inject the message property. The updated code will look like this:

+
+
+
+
package org.acme.consul.config.client;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+@Path("/greeting")
+public class GreetingResource {
+    @ConfigProperty(name = "greeting.message", defaultValue="Hello from default")
+    String message;
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public String hello() {
+        return message;
+    }
+}
+
+
+
+
+
+

Configuring the application

+
+
+

Quarkus provides various configuration knobs under the quarkus.consul-config root. For the purposes of this guide, our Quarkus application is going to be configured in application.properties as follows:

+
+
+
+
# use the same name as the application name that was configured when standing up the Config Server
+quarkus.application.name=consul-test
+# enable retrieval of configuration from Consul - this is off by default
+quarkus.consul-config.enabled=true
+# this is a key in Consul's KV store that the Quarkus application will read and try to extract properties from
+quarkus.consul-config.properties-value-keys=config/${quarkus.application.name}
+
+
+
+
+
+

Add Configuration to Consul

+
+
+

For the previous application configuration to work, we need to add a config/consul-test key under Consul’s Key Value store. The value of this key will essentially be a properties "file" containing the application configuration. +In this case we want to add the following data to the config/consul-test key:

+
+
+
+
greeting.message=Hello from Consul
+
+
+
+

When adding this configuration from the UI, Consul will automatically convert the data into the necessary base64 encoding. If you instead add the configuration via the Consul’s REST API, +make sure to first encode the previous data into base64.

+
+
+ + + + + +
+ + +In this use case we made the value of the key as a properties "file", because we used quarkus.consul-config.properties-value-keys in the application. The +extension also provides the ability to use the raw values of keys when quarkus.consul-config.raw-value-keys is used. Furthermore, these two properties can be used +simultaneously, while each one also supports setting multiple keys. +
+
+
+
+
+

Package and run the application

+
+
+

Run the application with: ./mvnw compile quarkus:dev. +Open your browser to http://localhost:8080/greeting.

+
+
+

The result should be: Hello from Consul as it is the value obtained from the Consul Key Value store.

+
+
+
+
+

Run the application as a native executable

+
+
+

You can of course create a native image using the instructions of the +Building a native executable guide.

+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

If set to true, the application will attempt to look up the configuration from Consul

+
+
+

Environment variable: QUARKUS_CONSUL_CONFIG_ENABLED

+
+
+

boolean

false

+
+
+
+

Consul agent host

+
+
+

Environment variable: QUARKUS_CONSUL_CONFIG_AGENT_HOST_PORT

+
+
+

InetSocketAddress

localhost:8500

+
+
+
+

Whether or not to use HTTPS when communicating with the agent

+
+
+

Environment variable: QUARKUS_CONSUL_CONFIG_AGENT_USE_HTTPS

+
+
+

boolean

false

+
+
+
+

Consul token to be provided when authentication is enabled

+
+
+

Environment variable: QUARKUS_CONSUL_CONFIG_AGENT_TOKEN

+
+
+

string

+
+
+
+

TrustStore to be used containing the SSL certificate used by Consul agent Can be either a classpath resource or a file system path

+
+
+

Environment variable: QUARKUS_CONSUL_CONFIG_AGENT_TRUST_STORE

+
+
+

path

+
+
+
+

Password of TrustStore to be used containing the SSL certificate used by Consul agent

+
+
+

Environment variable: QUARKUS_CONSUL_CONFIG_AGENT_TRUST_STORE_PASSWORD

+
+
+

string

+
+
+
+

KeyStore to be used containing the SSL certificate for authentication with Consul agent Can be either a classpath resource or a file system path

+
+
+

Environment variable: QUARKUS_CONSUL_CONFIG_AGENT_KEY_STORE

+
+
+

path

+
+
+
+

Password of KeyStore to be used containing the SSL certificate for authentication with Consul agent

+
+
+

Environment variable: QUARKUS_CONSUL_CONFIG_AGENT_KEY_STORE_PASSWORD

+
+
+

string

+
+
+
+

Password to recover key from KeyStore for SSL client authentication with Consul agent If no value is provided, the key-store-password will be used

+
+
+

Environment variable: QUARKUS_CONSUL_CONFIG_AGENT_KEY_PASSWORD

+
+
+

string

+
+
+
+

When using HTTPS and no keyStore has been specified, whether or not to trust all certificates

+
+
+

Environment variable: QUARKUS_CONSUL_CONFIG_AGENT_TRUST_CERTS

+
+
+

boolean

false

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Specify 0 to wait indefinitely.

+
+
+

Environment variable: QUARKUS_CONSUL_CONFIG_AGENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10s

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to wait indefinitely.

+
+
+

Environment variable: QUARKUS_CONSUL_CONFIG_AGENT_READ_TIMEOUT

+
+
+

Duration +

60s

+
+
+
+

Common prefix that all keys share when looking up the keys from Consul. The prefix is not included in the keys of the user configuration

+
+
+

Environment variable: QUARKUS_CONSUL_CONFIG_PREFIX

+
+
+

string

+
+
+
+

Keys whose value is a raw string. When this is used, the keys that end up in the user configuration are the keys specified her with '/' replaced by '.'

+
+
+

Environment variable: QUARKUS_CONSUL_CONFIG_RAW_VALUE_KEYS

+
+
+

list of string

+
+
+
+

Keys whose value represents a properties file. When this is used, the keys that end up in the user configuration are the keys of the properties file, not these keys

+
+
+

Environment variable: QUARKUS_CONSUL_CONFIG_PROPERTIES_VALUE_KEYS

+
+
+

list of string

+
+
+
+

If set to true, the application will not start if any of the configured config sources cannot be located

+
+
+

Environment variable: QUARKUS_CONSUL_CONFIG_FAIL_ON_MISSING_KEY

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-config-extensions/dev/includes/attributes.html b/quarkus-config-extensions/dev/includes/attributes.html new file mode 100644 index 0000000000..44653a45fa --- /dev/null +++ b/quarkus-config-extensions/dev/includes/attributes.html @@ -0,0 +1,921 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-config-extensions/dev/includes/quarkus-consul-config.html b/quarkus-config-extensions/dev/includes/quarkus-consul-config.html new file mode 100644 index 0000000000..9f55c61f45 --- /dev/null +++ b/quarkus-config-extensions/dev/includes/quarkus-consul-config.html @@ -0,0 +1,1259 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

If set to true, the application will attempt to look up the configuration from Consul

+
+
+

Environment variable: QUARKUS_CONSUL_CONFIG_ENABLED

+
+
+

boolean

false

+
+
+
+

Consul agent host

+
+
+

Environment variable: QUARKUS_CONSUL_CONFIG_AGENT_HOST_PORT

+
+
+

InetSocketAddress

localhost:8500

+
+
+
+

Whether or not to use HTTPS when communicating with the agent

+
+
+

Environment variable: QUARKUS_CONSUL_CONFIG_AGENT_USE_HTTPS

+
+
+

boolean

false

+
+
+
+

Consul token to be provided when authentication is enabled

+
+
+

Environment variable: QUARKUS_CONSUL_CONFIG_AGENT_TOKEN

+
+
+

string

+
+
+
+

TrustStore to be used containing the SSL certificate used by Consul agent Can be either a classpath resource or a file system path

+
+
+

Environment variable: QUARKUS_CONSUL_CONFIG_AGENT_TRUST_STORE

+
+
+

path

+
+
+
+

Password of TrustStore to be used containing the SSL certificate used by Consul agent

+
+
+

Environment variable: QUARKUS_CONSUL_CONFIG_AGENT_TRUST_STORE_PASSWORD

+
+
+

string

+
+
+
+

KeyStore to be used containing the SSL certificate for authentication with Consul agent Can be either a classpath resource or a file system path

+
+
+

Environment variable: QUARKUS_CONSUL_CONFIG_AGENT_KEY_STORE

+
+
+

path

+
+
+
+

Password of KeyStore to be used containing the SSL certificate for authentication with Consul agent

+
+
+

Environment variable: QUARKUS_CONSUL_CONFIG_AGENT_KEY_STORE_PASSWORD

+
+
+

string

+
+
+
+

Password to recover key from KeyStore for SSL client authentication with Consul agent If no value is provided, the key-store-password will be used

+
+
+

Environment variable: QUARKUS_CONSUL_CONFIG_AGENT_KEY_PASSWORD

+
+
+

string

+
+
+
+

When using HTTPS and no keyStore has been specified, whether or not to trust all certificates

+
+
+

Environment variable: QUARKUS_CONSUL_CONFIG_AGENT_TRUST_CERTS

+
+
+

boolean

false

+
+
+
+

The amount of time to wait when initially establishing a connection before giving up and timing out.

+
+
+

Specify 0 to wait indefinitely.

+
+
+

Environment variable: QUARKUS_CONSUL_CONFIG_AGENT_CONNECTION_TIMEOUT

+
+
+

Duration +

10s

+
+
+
+

The amount of time to wait for a read on a socket before an exception is thrown.

+
+
+

Specify 0 to wait indefinitely.

+
+
+

Environment variable: QUARKUS_CONSUL_CONFIG_AGENT_READ_TIMEOUT

+
+
+

Duration +

60s

+
+
+
+

Common prefix that all keys share when looking up the keys from Consul. The prefix is not included in the keys of the user configuration

+
+
+

Environment variable: QUARKUS_CONSUL_CONFIG_PREFIX

+
+
+

string

+
+
+
+

Keys whose value is a raw string. When this is used, the keys that end up in the user configuration are the keys specified her with '/' replaced by '.'

+
+
+

Environment variable: QUARKUS_CONSUL_CONFIG_RAW_VALUE_KEYS

+
+
+

list of string

+
+
+
+

Keys whose value represents a properties file. When this is used, the keys that end up in the user configuration are the keys of the properties file, not these keys

+
+
+

Environment variable: QUARKUS_CONSUL_CONFIG_PROPERTIES_VALUE_KEYS

+
+
+

list of string

+
+
+
+

If set to true, the application will not start if any of the configured config sources cannot be located

+
+
+

Environment variable: QUARKUS_CONSUL_CONFIG_FAIL_ON_MISSING_KEY

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-config-extensions/dev/includes/quarkus-jdbc-config.html b/quarkus-config-extensions/dev/includes/quarkus-jdbc-config.html new file mode 100644 index 0000000000..ab9e8af729 --- /dev/null +++ b/quarkus-config-extensions/dev/includes/quarkus-jdbc-config.html @@ -0,0 +1,1142 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

If set to true, the application will attempt to look up the configuration from DB

+
+
+

boolean

true

+
+
+
+

If set to true, the application will cache all looked up the configuration from DB in memory +If set to false, the application will always get the latest values from the DB

+
+
+

boolean

true

+
+
+
+

Table name for configuration records

+
+
+

string

configuration

+
+
+
+

Name of the column containing the key

+
+
+

string

configuration_key

+
+
+
+

Name of the column containing the value

+
+
+

string

configuration_value

+
+
+
+

The datasource username, if not defined the usename of the default datasource is used

+
+
+

string

value of quarkus.datasource.username

+
+
+
+

The datasource password, if not defined the password of the default datasource is used

+
+
+

string

value of quarkus.datasource.password

+
+
+
+

The datasource URL, if not defined the URL of the default datasource is used

+
+
+

string

value of quarkus.datasource..jdbc.url

+
+
+
+

The datasource driver, if not defined the driver of the default datasource is used

+
+
+

string

value of quarkus.datasource..jdbc.driver

+
+
+
+

The initial size of the pool. Usually you will want to set the initial size to match at least the minimal size, but this is not enforced so to allow for architectures which prefer a lazy initialization of the connections on boot, while being able to sustain a minimal pool size after boot.

+
+
+

int

0

+
+
+
+

The int pool minimum size

+
+
+

int

0

+
+
+
+

The datasource pool maximum size

+
+
+

int

5

+
+
+
+

The timeout before cancelling the acquisition of a new connection

+
+
+

Duration +

5

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-config-extensions/dev/index.html b/quarkus-config-extensions/dev/index.html new file mode 100644 index 0000000000..671d1484e2 --- /dev/null +++ b/quarkus-config-extensions/dev/index.html @@ -0,0 +1,936 @@ + + + + + + Quarkus Config Extensions :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Config Extensions

+
+

Introduction

+
+
+

This set of extensions allows reading Quarkus configuration properties from various sources.

+
+
+

See the navigation at the left of your screen for additional information about each extension.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-config-extensions/dev/jasypt.html b/quarkus-config-extensions/dev/jasypt.html new file mode 100644 index 0000000000..6e7229d125 --- /dev/null +++ b/quarkus-config-extensions/dev/jasypt.html @@ -0,0 +1,1056 @@ + + + + + + Quarkus Jasypt Secret Keys Expressions :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Jasypt Secret Keys Expressions

+
+
+
+

This guide explains how your Quarkus application can read configuration properties using +Jasypt encryption.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    less than 15 minutes

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    JDK 17+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
+
+
+
+
+

Solution

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step.

+
+
+
+
+

Introduction

+
+
+

Jasypt is a java library which allows the developer to add basic encryption capabilities.

+
+
+
+
+

Add the Extension

+
+
+

Add the config-jasypt extension to your project by running the following command in your project base directory:

+
+
+
+
./mvnw quarkus:add-extension -Dextensions="config-jasypt"
+
+
+
+

This will add the following to your pom.xml:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.config</groupId>
+    <artifactId>quarkus-config-jasypt</artifactId>
+    <version>2.3.1</version>
+</dependency>
+
+
+
+ + + + + +
+ + +The Jasypt Quarkus Extension is required to native mode. There is no difference in features to the +SmallRye Config Jasypt. +
+
+
+
+
+

Expressions

+
+
+

A secret configuration may be expressed as ${jasypt::value}. The ${jasypt::…​} SecretKeyHandler requires both +smallrye.config.secret-handler.jasypt.password and smallrye.config.secret-handler.jasypt.algorithm configurations +to state the password and the algorithm to be used by the Jasypt encryptor.

+
+
+
+
application.properties
+
+smallrye.config.secret-handler.jasypt.password=jasypt
+smallrye.config.secret-handler.jasypt.algorithm=PBEWithHMACSHA512AndAES_256
+
+my.secret=${jasypt::ENC(wqp8zDeiCQ5JaFvwDtoAcr2WMLdlD0rjwvo8Rh0thG5qyTQVGxwJjBIiW26y0dtU)}
+
+
+
+

Jasypt encrypted values must be set with the handler expression as ${jasypt::ENC(value)}. Note +that the encrypted value must be generated using the proper Jasypt encryptor with the same password and algorithm set +in the configuration.

+
+
+

A possible encrypted value for 12345678 is ENC(wqp8zDeiCQ5JaFvwDtoAcr2WMLdlD0rjwvo8Rh0thG5qyTQVGxwJjBIiW26y0dtU)

+
+
+

Lookups to the configuration my.secret will automatically decrypt the value with Jasypt and +provide the original 12345678 string.

+
+
+ + + + + +
+ + +It is possible to generate the encrypted secret with the following JBang script: +jbang https://raw.githubusercontent.com/smallrye/smallrye-config/main/documentation/src/main/docs/config/secret-handlers/jasypt.java -s=<secret> -p=<password> +
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-config-extensions/dev/jdbc.html b/quarkus-config-extensions/dev/jdbc.html new file mode 100644 index 0000000000..e5b6560a79 --- /dev/null +++ b/quarkus-config-extensions/dev/jdbc.html @@ -0,0 +1,1344 @@ + + + + + + Quarkus JDBC Config :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus JDBC Config

+
+
+
+

This guide explains how your Quarkus application can read configuration properties from a database using JDBC

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    less than 15 minutes

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    JDK 17+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
+
+
+
+
+

Solution

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step.

+
+
+
+
+

Introduction

+
+
+

A database table can be used as a Key-Value store as a source of configuration for services. +This table is what the quarkus-config-jsbc extension interacts with in order to allow Quarkus applications to read configuration properties from.

+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.7.2:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=config-jdbc-quickstart \
+    -DclassName="org.acme.jdbc.config.GreetingResource" \
+    -Dpath="/greeting" \
+    -Dextensions="config-jdbc"
+cd config-jdbc-quickstart
+
+
+
+

This command generates a Maven project with a REST endpoint and imports the config-jdbc extension.

+
+
+

If you already have your Quarkus project configured, you can add the config-jdbc extension +to your project by running the following command in your project base directory:

+
+
+
+
./mvnw quarkus:add-extension -Dextensions="config-jdbc"
+
+
+
+

This will add the following to your pom.xml:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.config</groupId>
+    <artifactId>quarkus-config-jdbc</artifactId>
+    <version>2.3.1</version>
+</dependency>
+
+
+
+
+
+

GreetingController

+
+
+

The Quarkus Maven plugin automatically generated a GreetingResource JAX-RS resource in the +src/main/java/org/acme/consul/config/client/GreetingResource.java file that looks like:

+
+
+
+
package org.acme.consul.config.client;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+@Path("/greeting")
+public class GreetingResource {
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public String hello() {
+        return "hello";
+    }
+}
+
+
+
+

As we want to use configuration properties obtained from the Config Server, we will update the GreetingResource to inject the message property. The updated code will look like this:

+
+
+
+
package org.acme.consul.config.client;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+@Path("/greeting")
+public class GreetingResource {
+    @ConfigProperty(name = "greeting.message", defaultValue="Hello from default")
+    String message;
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public String hello() {
+        return message;
+    }
+}
+
+
+
+
+
+

Configuring the application

+
+
+

Quarkus provides various configuration knobs under the quarkus.config.source.jdbc root. For the purposes of this guide, our Quarkus application is going to be configured in application.properties as follows:

+
+
+
+
quarkus.config.source.jdbc.username=sa
+quarkus.config.source.jdbc.password=sa
+quarkus.config.source.jdbc.url=jdbc:h2:tcp://localhost/mem:test
+
+
+
+
+
+

Add Configuration to Database

+
+
+

For the previous application configuration to work, we need to have a table named configuration with two columns key and value with a record inserted into it

+
+
+
+
CREATE TABLE IF NOT EXISTS configuration (key varchar(255), value varchar(255));
+
+INSERT INTO configuration (key, value)
+VALUES ('greeting.message', 'Hello from DB');
+
+
+
+
+
+

Package and run the application

+
+
+

Run the application with: ./mvnw compile quarkus:dev. +Open your browser to http://localhost:8080/greeting.

+
+
+

The result should be: Hello from DB as it is the value obtained from the database.

+
+
+
+
+

Run the application as a native executable

+
+
+

You can of course create a native image using the instructions of the +Building a native executable guide.

+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

If set to true, the application will attempt to look up the configuration from DB

+
+
+

boolean

true

+
+
+
+

If set to true, the application will cache all looked up the configuration from DB in memory +If set to false, the application will always get the latest values from the DB

+
+
+

boolean

true

+
+
+
+

Table name for configuration records

+
+
+

string

configuration

+
+
+
+

Name of the column containing the key

+
+
+

string

configuration_key

+
+
+
+

Name of the column containing the value

+
+
+

string

configuration_value

+
+
+
+

The datasource username, if not defined the usename of the default datasource is used

+
+
+

string

value of quarkus.datasource.username

+
+
+
+

The datasource password, if not defined the password of the default datasource is used

+
+
+

string

value of quarkus.datasource.password

+
+
+
+

The datasource URL, if not defined the URL of the default datasource is used

+
+
+

string

value of quarkus.datasource..jdbc.url

+
+
+
+

The datasource driver, if not defined the driver of the default datasource is used

+
+
+

string

value of quarkus.datasource..jdbc.driver

+
+
+
+

The initial size of the pool. Usually you will want to set the initial size to match at least the minimal size, but this is not enforced so to allow for architectures which prefer a lazy initialization of the connections on boot, while being able to sustain a minimal pool size after boot.

+
+
+

int

0

+
+
+
+

The int pool minimum size

+
+
+

int

0

+
+
+
+

The datasource pool maximum size

+
+
+

int

5

+
+
+
+

The timeout before cancelling the acquisition of a new connection

+
+
+

Duration +

5

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-couchbase/dev/index.html b/quarkus-couchbase/dev/index.html new file mode 100644 index 0000000000..28cd1be910 --- /dev/null +++ b/quarkus-couchbase/dev/index.html @@ -0,0 +1,1022 @@ + + + + + + Quarkus Couchbase :: Quarkiverse Documentation + + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Couchbase

+
+
+
+

Integrates Couchbase into Quarkus.

+
+
+

This extension is currently in alpha status. It supports:

+
+
+
    +
  • +

    Dependency injecting a Couchbase Cluster.

    +
  • +
  • +

    Configuring the Cluster through application.properties. Currently a minimal set of configuration options is provided.

    +
  • +
  • +

    Graal/native-image, though so far it has been minimally tested with basic cases.

    +
  • +
+
+
+

Please try it out and provide feedback, ideas and bug reports on Github.

+
+
+
+
+

Usage

+
+
+

Add it to your project:

+
+
+
+
<dependency>
+  <groupId>com.couchbase</groupId>
+  <artifactId>quarkus-couchbase</artifactId>
+  <version>1.0.0-alpha.1</version>
+</dependency>
+
+
+
+

(Note this will soon be updated to the new groupId of io.quarkiverse.couchbase, but it has not yet been published to Maven under this.)

+
+
+

Provide the Couchbase configuration in application.properties:

+
+
+
+
quarkus.couchbase.connection-string=localhost
+quarkus.couchbase.username=username
+quarkus.couchbase.password=password
+
+
+
+

Now you can @Inject a Couchbase Cluster into your project:

+
+
+
+
@Path("/couchbase")
+public class TestCouchbaseResource {
+    @Inject
+    Cluster cluster;
+
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    @Path("/test")
+    public String run() {
+        // Get a reference to a particular Couchbase bucket and its default collection
+        var bucket = cluster.bucket("travel-sample");
+        var collection = bucket.defaultCollection() ;
+
+        // Upsert a new document
+        collection.upsert("test", JsonObject.create().put("foo", "bar"));
+
+        // Fetch and print a document
+        var doc = bucket.defaultCollection().get("test");
+        System.out.println("Got doc " + doc.contentAsObject().toString());
+
+        // Perform a N1QL query
+        var queryResult = cluster.query("select * from `travel-sample` where url like 'http://marriot%' and country = 'United States';");
+
+        queryResult.rowsAsObject().forEach(row -> {
+            System.out.println(row.toString());
+        });
+
+        return "success!";
+    }
+}
+
+
+ +
+
+
+

Limitations

+
+
+

In this early alpha release the configuration options are limited to the three shown above. +This means that a Couchbase cluster configured securely and requiring TLS or a client or server certificate, cannot currently be connected to.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cucumber/dev/_images/run-cucumber-inside-intellij.gif b/quarkus-cucumber/dev/_images/run-cucumber-inside-intellij.gif new file mode 100644 index 0000000000..fecd39f513 Binary files /dev/null and b/quarkus-cucumber/dev/_images/run-cucumber-inside-intellij.gif differ diff --git a/quarkus-cucumber/dev/includes/attributes.html b/quarkus-cucumber/dev/includes/attributes.html new file mode 100644 index 0000000000..561d223026 --- /dev/null +++ b/quarkus-cucumber/dev/includes/attributes.html @@ -0,0 +1,912 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-cucumber/dev/index.html b/quarkus-cucumber/dev/index.html new file mode 100644 index 0000000000..8c48b9f7c0 --- /dev/null +++ b/quarkus-cucumber/dev/index.html @@ -0,0 +1,991 @@ + + + + + + Quarkus Cucumber :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Cucumber

+
+
+
+

This extension allows you to use Cucumber to test your Quarkus application.

+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.cucumber:quarkus-cucumber extension first. +In your pom.xml file, add:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.cucumber</groupId>
+    <artifactId>quarkus-cucumber</artifactId>
+    <version>1.0.0</version>
+</dependency>
+
+
+
+
+
+

Usage

+
+
+

To bootstrap Cucumber add the following class to your test suite:

+
+
+
+
import io.quarkiverse.cucumber.CucumberQuarkusTest;
+
+public class MyTest extends CucumberQuarkusTest {
+
+}
+
+
+
+

This will automatically bootstrap Cucumber, and discover any .feature files and step classes that provide glue code.

+
+
+
+
+

IDE Integration

+
+
+

The test class can by run by any IDE with support for JUnit5.

+
+
+

In IntelliJ it is possible to directly run feature files:

+
+
+
+run cucumber inside intellij +
+
+
+

You need to add the following main method to your test class:

+
+
+
+
import io.quarkiverse.cucumber.CucumberQuarkusTest;
+
+public class MyTest extends CucumberQuarkusTest {
+    public static void main(String[] args) {
+        runMain(MyTest.class, args);
+    }
+}
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/1.5/_images/code.quarkus.io.png b/quarkus-cxf/1.5/_images/code.quarkus.io.png new file mode 100644 index 0000000000..6a5cfed3a5 Binary files /dev/null and b/quarkus-cxf/1.5/_images/code.quarkus.io.png differ diff --git a/quarkus-cxf/1.5/includes/quarkus-cxf.html b/quarkus-cxf/1.5/includes/quarkus-cxf.html new file mode 100644 index 0000000000..3c1dd50da3 --- /dev/null +++ b/quarkus-cxf/1.5/includes/quarkus-cxf.html @@ -0,0 +1,1871 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The default path for CXF resources. +⚠️ Note that the default value before 3.0.0 was /.

+
+
+

Environment variable: QUARKUS_CXF_PATH

+
+
+

string

/

+
+
+
+

If true wsdl2java code generation is run whenever there are WSDL resources found on default or custom defined locations; otherwise wsdl2java is not executed.

+
+
+

Environment variable: QUARKUS_CXF_CODEGEN_WSDL2JAVA_ENABLED

+
+
+

boolean

true

+
+
+
+

A comma separated list of glob patterns for selecting WSDL files which should be processed with wsdl2java tool. The paths are relative to src/main/resources or src/test/resources directories of the current Maven or Gradle module. The glob syntax is specified in io.quarkus.util.GlobUtil. +Examples: + - calculator.wsdl,fruits.wsdl will match src/main/resources/calculator.wsdl and src/main/resources/fruits.wsdl under the current Maven or Gradle module, but will not match anything like src/main/resources/subdir/calculator.wsdl + - my-*-service.wsdl will match src/main/resources/my-foo-service.wsdl and src/main/resources/my-bar-service.wsdl + - **.wsdl will match any of the above There is a separate wsdl2java execution for each of the matching WSDL files. If you need different additional-params for each WSDL file, you may want to define a separate named parameter set for each one of them. Here is an example: # Parameters for foo.wsdl quarkus.cxf.codegen.wsdl2java.foo-params.includes = wsdl/foo.wsdl quarkus.cxf.codegen.wsdl2java.foo-params.additional-params = -wsdlLocation,wsdl/foo.wsdl # Parameters for bar.wsdl quarkus.cxf.codegen.wsdl2java.bar-params.includes = wsdl/bar.wsdl quarkus.cxf.codegen.wsdl2java.bar-params.additional-params = -wsdlLocation,wsdl/bar.wsdl,-xjc-Xts +Note that file extensions other than .wsdl will work during normal builds, but changes in the matching files may get overseen in Quarkus dev mode. Always using the .wsdl extension is thus recommended. +There is no default value for this option, so wsdl2java code generation is disabled by default. +Specifying quarkus.cxf.codegen.wsdl2java.my-name.excludes without setting any includes will cause a build time error. +Make sure that the file sets selected by quarkus.cxf.codegen.wsdl2java.includes and quarkus.cxf.codegen.wsdl2java.[whatever-name].includes do not overlap. Otherwise a build time exception will be thrown. +The files from src/main/resources selected by includes and excludes are automatically included in native image and therefore you do not need to include them via quarkus.cxf.wsdl-path (deprecated) or quarkus.native.resources.includes/excludes.

+
+
+

Environment variable: QUARKUS_CXF_CODEGEN_WSDL2JAVA_INCLUDES

+
+
+

list of string

+
+
+
+

A comma separated list of path patterns for selecting WSDL files which should not be processed with wsdl2java tool. The paths are relative to src/main/resources or src/test/resources directories of the current Maven or Gradle module. Same syntax as includes.

+
+
+

Environment variable: QUARKUS_CXF_CODEGEN_WSDL2JAVA_EXCLUDES

+
+
+

list of string

+
+
+
+

A comma separated list of additional command line parameters that should passed to CXF wsdl2java tool along with the files selected by includes and excludes. Example: -wsdlLocation,classpath:wsdl/CalculatorService.wsdl. Check wsdl2java documentation for all supported options. +You need to add io.quarkiverse.cxf:quarkus-cxf-xjc-plugins dependency to your project to be able to use -xjc-Xbg, -xjc-Xdv, -xjc-Xjavadoc, -xjc-Xproperty-listener, -xjc-Xts or -xjc-Xwsdlextension.

+
+
+

Environment variable: QUARKUS_CXF_CODEGEN_WSDL2JAVA_ADDITIONAL_PARAMS

+
+
+

list of string

+
+
+
+

If true java2ws WSDL generation is run whenever there are Java classes selected via includes and excludes options; otherwise java2ws is not executed.

+
+
+

Environment variable: QUARKUS_CXF_JAVA2WS_ENABLED

+
+
+

boolean

true

+
+
+
+

A comma separated list of glob patterns for selecting class names which should be processed with java2ws tool. The glob syntax is specified in io.quarkus.util.GlobUtil. The patterns are matched against fully qualified class names, such as org.acme.MyClass. +The universe of class names to which includes and excludes are applied is defined as follows: 1. Only classes visible in Jandex are considered. 2. From those, only the ones annotated with @WebService are selected. +Examples: +Let’s say that the application contains two classes annotated with @WebService and that both are visible in Jandex. Their names are org.foo.FruitWebService and org.bar.HelloWebService. +Then + - quarkus.cxf.java2ws.includes = **.*WebService will match both class names + - quarkus.cxf.java2ws.includes = org.foo.* will match only org.foo.FruitWebService There is a separate java2ws execution for each of the matching class names. If you need different additional-params for each class, you may want to define a separate named parameter set for each one of them. Here is an example: # Parameters for the foo package quarkus.cxf.java2ws.foo-params.includes = org.foo.* quarkus.cxf.java2ws.foo-params.additional-params = -servicename,FruitService # Parameters for the bar package quarkus.cxf.java2ws.bar-params.includes = org.bar.* quarkus.cxf.java2ws.bar-params.additional-params = -servicename,HelloService +There is no default value for this option, so java2ws WSDL generation is effectively disabled by default. +Specifying quarkus.cxf.java2ws.excludes without setting any includes will cause a build time error. +Make sure that the class names selected by quarkus.cxf.java2ws.includes and quarkus.cxf.java2ws.[whatever-name].includes do not overlap. Otherwise a build time exception will be thrown. +If you would like to include the generated WSDL files in native image, you need to add them yourself using quarkus.native.resources.includes/excludes.

+
+
+

Environment variable: QUARKUS_CXF_JAVA2WS_INCLUDES

+
+
+

list of string

+
+
+
+

A comma separated list of glob patterns for selecting java class names which should not be processed with java2ws tool. Same syntax as includes.

+
+
+

Environment variable: QUARKUS_CXF_JAVA2WS_EXCLUDES

+
+
+

list of string

+
+
+
+

A comma separated list of additional command line parameters that should be passed to CXF java2ws tool along with the files selected by includes and excludes. Example: -portname,12345. Check java2ws documentation for all supported options. +Note that only options related to generation of WSDL from Java are supported currently.

+
+
+

Environment variable: QUARKUS_CXF_JAVA2WS_ADDITIONAL_PARAMS

+
+
+

list of string

+
+
+
+

A template for the names of generated WSDL files. +There are 4 place holders, which can be used in the template: + - %SIMPLE_CLASS_NAME% - the simple class name of the Java class from which we are generating + - %FULLY_QUALIFIED_CLASS_NAME% - the fully qualified name from which we are generating with all dots are replaced replaced by underscores + - %TARGET_DIR% - the target directory of the current module of the current build tool; typically target for Maven and build for Gradle. + - %CLASSES_DIR% - the compiler output directory of the current module of the current build tool; typically target/classes for Maven and build/classes for Gradle.

+
+
+

Environment variable: QUARKUS_CXF_JAVA2WS_WSDL_NAME_TEMPLATE

+
+
+

string

%CLASSES_DIR%/wsdl/%SIMPLE_CLASS_NAME%.wsdl

+
+
+
+

A comma separated list of glob patterns for selecting WSDL files which should be processed with wsdl2java tool. The paths are relative to src/main/resources or src/test/resources directories of the current Maven or Gradle module. The glob syntax is specified in io.quarkus.util.GlobUtil. +Examples: + - calculator.wsdl,fruits.wsdl will match src/main/resources/calculator.wsdl and src/main/resources/fruits.wsdl under the current Maven or Gradle module, but will not match anything like src/main/resources/subdir/calculator.wsdl + - my-*-service.wsdl will match src/main/resources/my-foo-service.wsdl and src/main/resources/my-bar-service.wsdl + - **.wsdl will match any of the above There is a separate wsdl2java execution for each of the matching WSDL files. If you need different additional-params for each WSDL file, you may want to define a separate named parameter set for each one of them. Here is an example: # Parameters for foo.wsdl quarkus.cxf.codegen.wsdl2java.foo-params.includes = wsdl/foo.wsdl quarkus.cxf.codegen.wsdl2java.foo-params.additional-params = -wsdlLocation,wsdl/foo.wsdl # Parameters for bar.wsdl quarkus.cxf.codegen.wsdl2java.bar-params.includes = wsdl/bar.wsdl quarkus.cxf.codegen.wsdl2java.bar-params.additional-params = -wsdlLocation,wsdl/bar.wsdl,-xjc-Xts +Note that file extensions other than .wsdl will work during normal builds, but changes in the matching files may get overseen in Quarkus dev mode. Always using the .wsdl extension is thus recommended. +There is no default value for this option, so wsdl2java code generation is disabled by default. +Specifying quarkus.cxf.codegen.wsdl2java.my-name.excludes without setting any includes will cause a build time error. +Make sure that the file sets selected by quarkus.cxf.codegen.wsdl2java.includes and quarkus.cxf.codegen.wsdl2java.[whatever-name].includes do not overlap. Otherwise a build time exception will be thrown. +The files from src/main/resources selected by includes and excludes are automatically included in native image and therefore you do not need to include them via quarkus.cxf.wsdl-path (deprecated) or quarkus.native.resources.includes/excludes.

+
+
+

Environment variable: QUARKUS_CXF_CODEGEN_WSDL2JAVA__NAMED_PARAMETER_SETS__INCLUDES

+
+
+

list of string

+
+
+
+

A comma separated list of path patterns for selecting WSDL files which should not be processed with wsdl2java tool. The paths are relative to src/main/resources or src/test/resources directories of the current Maven or Gradle module. Same syntax as includes.

+
+
+

Environment variable: QUARKUS_CXF_CODEGEN_WSDL2JAVA__NAMED_PARAMETER_SETS__EXCLUDES

+
+
+

list of string

+
+
+
+

A comma separated list of additional command line parameters that should passed to CXF wsdl2java tool along with the files selected by includes and excludes. Example: -wsdlLocation,classpath:wsdl/CalculatorService.wsdl. Check wsdl2java documentation for all supported options. +You need to add io.quarkiverse.cxf:quarkus-cxf-xjc-plugins dependency to your project to be able to use -xjc-Xbg, -xjc-Xdv, -xjc-Xjavadoc, -xjc-Xproperty-listener, -xjc-Xts or -xjc-Xwsdlextension.

+
+
+

Environment variable: QUARKUS_CXF_CODEGEN_WSDL2JAVA__NAMED_PARAMETER_SETS__ADDITIONAL_PARAMS

+
+
+

list of string

+
+
+
+

A comma separated list of glob patterns for selecting class names which should be processed with java2ws tool. The glob syntax is specified in io.quarkus.util.GlobUtil. The patterns are matched against fully qualified class names, such as org.acme.MyClass. +The universe of class names to which includes and excludes are applied is defined as follows: 1. Only classes visible in Jandex are considered. 2. From those, only the ones annotated with @WebService are selected. +Examples: +Let’s say that the application contains two classes annotated with @WebService and that both are visible in Jandex. Their names are org.foo.FruitWebService and org.bar.HelloWebService. +Then + - quarkus.cxf.java2ws.includes = **.*WebService will match both class names + - quarkus.cxf.java2ws.includes = org.foo.* will match only org.foo.FruitWebService There is a separate java2ws execution for each of the matching class names. If you need different additional-params for each class, you may want to define a separate named parameter set for each one of them. Here is an example: # Parameters for the foo package quarkus.cxf.java2ws.foo-params.includes = org.foo.* quarkus.cxf.java2ws.foo-params.additional-params = -servicename,FruitService # Parameters for the bar package quarkus.cxf.java2ws.bar-params.includes = org.bar.* quarkus.cxf.java2ws.bar-params.additional-params = -servicename,HelloService +There is no default value for this option, so java2ws WSDL generation is effectively disabled by default. +Specifying quarkus.cxf.java2ws.excludes without setting any includes will cause a build time error. +Make sure that the class names selected by quarkus.cxf.java2ws.includes and quarkus.cxf.java2ws.[whatever-name].includes do not overlap. Otherwise a build time exception will be thrown. +If you would like to include the generated WSDL files in native image, you need to add them yourself using quarkus.native.resources.includes/excludes.

+
+
+

Environment variable: QUARKUS_CXF_JAVA2WS__NAMED_PARAMETER_SETS__INCLUDES

+
+
+

list of string

+
+
+
+

A comma separated list of glob patterns for selecting java class names which should not be processed with java2ws tool. Same syntax as includes.

+
+
+

Environment variable: QUARKUS_CXF_JAVA2WS__NAMED_PARAMETER_SETS__EXCLUDES

+
+
+

list of string

+
+
+
+

A comma separated list of additional command line parameters that should be passed to CXF java2ws tool along with the files selected by includes and excludes. Example: -portname,12345. Check java2ws documentation for all supported options. +Note that only options related to generation of WSDL from Java are supported currently.

+
+
+

Environment variable: QUARKUS_CXF_JAVA2WS__NAMED_PARAMETER_SETS__ADDITIONAL_PARAMS

+
+
+

list of string

+
+
+
+

A template for the names of generated WSDL files. +There are 4 place holders, which can be used in the template: + - %SIMPLE_CLASS_NAME% - the simple class name of the Java class from which we are generating + - %FULLY_QUALIFIED_CLASS_NAME% - the fully qualified name from which we are generating with all dots are replaced replaced by underscores + - %TARGET_DIR% - the target directory of the current module of the current build tool; typically target for Maven and build for Gradle. + - %CLASSES_DIR% - the compiler output directory of the current module of the current build tool; typically target/classes for Maven and build/classes for Gradle.

+
+
+

Environment variable: QUARKUS_CXF_JAVA2WS__NAMED_PARAMETER_SETS__WSDL_NAME_TEMPLATE

+
+
+

string

%CLASSES_DIR%/wsdl/%SIMPLE_CLASS_NAME%.wsdl

+
+
+
+

The client service interface class name

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SERVICE_INTERFACE

+
+
+

string

+
+
+
+

Indicates whether this is an alternative proxy client configuration. If true, then this configuration is ignored when configuring a client without annotation @CXFClient.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__ALTERNATIVE

+
+
+

boolean

false

+
+
+
+

If true, the client dynamic proxy class generated by native compiler will be initialized at runtime; otherwise the proxy class will be initialized at build time. +Setting this to true makes sense if your service endpoint interface references some class initialized at runtime in its method signatures. E.g. Say, your service interface has method int add(Operands o) and the Operands class was requested to be initialized at runtime. Then, without setting this configuration parameter to true, the native compiler will throw an exception saying something like Classes that should be initialized at run time got initialized during image building: org.acme.Operands …​ jdk.proxy<some-number>.$Proxy<some-number> caused initialization of this class. jdk.proxy<some-number>.$Proxy<some-number> is the proxy class generated by the native compiler.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__NATIVE_RUNTIME_INITIALIZED

+
+
+

boolean

false

+
+
+
+

The service endpoint implementation class

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__IMPLEMENTOR

+
+
+

string

+
+
+
+

The service endpoint WSDL path

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__WSDL

+
+
+

string

+
+
+
+

The URL of the SOAP Binding, should be one of four values:

+
+
+
    +
  • +

    http://schemas.xmlsoap.org/wsdl/soap/http for SOAP11HTTP_BINDING

    +
  • +
  • +

    http://schemas.xmlsoap.org/wsdl/soap/http?mtom=true for SOAP11HTTP_MTOM_BINDING

    +
  • +
  • +

    http://www.w3.org/2003/05/soap/bindings/HTTP/ for SOAP12HTTP_BINDING

    +
  • +
  • +

    http://www.w3.org/2003/05/soap/bindings/HTTP/?mtom=true for SOAP12HTTP_MTOM_BINDING

    +
  • +
+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SOAP_BINDING

+
+
+

string

+
+
+
+

The published service endpoint URL

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__PUBLISHED_ENDPOINT_URL

+
+
+

string

+
+
+
+

A comma-separated list of fully qualified CXF Feature class names or named CDI beans. +Examples: quarkus.cxf.endpoint."/hello".features = org.apache.cxf.ext.logging.LoggingFeature quarkus.cxf.endpoint."/fruit".features = #myCustomLoggingFeature In the second case, the #myCustomLoggingFeature bean can be produced as follows: import org.apache.cxf.ext.logging.LoggingFeature; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.inject.Produces; class Producers { @Produces

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__FEATURES

+
+
+

list of string

+
+
+
+

The comma-separated list of Handler classes

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__HANDLERS

+
+
+

list of string

+
+
+
+

The comma-separated list of InInterceptor classes

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__IN_INTERCEPTORS

+
+
+

list of string

+
+
+
+

The comma-separated list of OutInterceptor classes

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__OUT_INTERCEPTORS

+
+
+

list of string

+
+
+
+

The comma-separated list of OutFaultInterceptor classes

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__OUT_FAULT_INTERCEPTORS

+
+
+

list of string

+
+
+
+

The comma-separated list of InFaultInterceptor classes

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__IN_FAULT_INTERCEPTORS

+
+
+

list of string

+
+
+
+

The client WSDL path

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__WSDL

+
+
+

string

+
+
+
+

The URL of the SOAP Binding, should be one of four values:

+
+
+
    +
  • +

    http://schemas.xmlsoap.org/wsdl/soap/http for SOAP11HTTP_BINDING

    +
  • +
  • +

    http://schemas.xmlsoap.org/wsdl/soap/http?mtom=true for SOAP11HTTP_MTOM_BINDING

    +
  • +
  • +

    http://www.w3.org/2003/05/soap/bindings/HTTP/ for SOAP12HTTP_BINDING

    +
  • +
  • +

    http://www.w3.org/2003/05/soap/bindings/HTTP/?mtom=true for SOAP12HTTP_MTOM_BINDING

    +
  • +
+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SOAP_BINDING

+
+
+

string

+
+
+
+

The client endpoint URL

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__CLIENT_ENDPOINT_URL

+
+
+

string

+
+
+
+

The client interface class

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SERVICE_INTERFACE

+
+
+

string

+
+
+
+

The client endpoint namespace

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__ENDPOINT_NAMESPACE

+
+
+

string

+
+
+
+

The client endpoint name

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__ENDPOINT_NAME

+
+
+

string

+
+
+
+

The username for HTTP Basic auth

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__USERNAME

+
+
+

string

+
+
+
+

The password for HTTP Basic auth

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__PASSWORD

+
+
+

string

+
+
+
+

A comma-separated list of fully qualified CXF Feature class names. +Example: quarkus.cxf.endpoint.myClient.features = org.apache.cxf.ext.logging.LoggingFeature +Note that the LoggingFeature is available through the Logging Feature extension.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__FEATURES

+
+
+

list of string

+
+
+
+

The comma-separated list of Handler classes

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__HANDLERS

+
+
+

list of string

+
+
+
+

The comma-separated list of InInterceptor classes

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__IN_INTERCEPTORS

+
+
+

list of string

+
+
+
+

The comma-separated list of OutInterceptor classes

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__OUT_INTERCEPTORS

+
+
+

list of string

+
+
+
+

The comma-separated list of OutFaultInterceptor classes

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__OUT_FAULT_INTERCEPTORS

+
+
+

list of string

+
+
+
+

The comma-separated list of InFaultInterceptor classes

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__IN_FAULT_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Indicates whether this is an alternative proxy client configuration. If true, then this configuration is ignored when configuring a client without annotation @CXFClient.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__ALTERNATIVE

+
+
+

boolean

false

+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/1.5/index.html b/quarkus-cxf/1.5/index.html new file mode 100644 index 0000000000..619dfb1fa7 --- /dev/null +++ b/quarkus-cxf/1.5/index.html @@ -0,0 +1,1080 @@ + + + + + + CXF Extensions for Quarkus :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

CXF Extensions for Quarkus

+
+
+
+

This project aims at porting Apache CXF to Quarkus runtime +including full support for producing GraalVM native images.

+
+
+ + + + + +
+ + +While Apache CXF implements wide range of standards and specifications, +CXF Extensions for Quarkus is currently focusing only on supporting the ones related to +Simple Object Access Protocol (SOAP) +and Java API for XML Web Services (JAX-WS). +Please refer to Reference to learn which parts of CXF are supported. +
+
+
+

The documentation is divided in two major parts:

+
+
+
    +
  • +

    User guide - explains the typical usage of CXF Extensions for Quarkus

    +
  • +
  • +

    Reference - the full list of supported specifications, use cases and configuration options

    +
  • +
+
+
+
+
+

Issues and Support

+
+
+

Please feel free to start a discussion +or open an issue in the GitHub repository in case you need support. +The following general guidelines can be used to determine whether to start a discussion or open an issue.

+
+
+

GitHub Issues

+
+
    +
  • +

    Bug reports

    +
  • +
  • +

    Feature requests

    +
  • +
+
+
+
+

GitHub Discussions

+
+
    +
  • +

    Q&A and general communication

    +
  • +
  • +

    RFCs for new features

    +
  • +
+
+
+

Contributions and pull requests from the community are welcome!

+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/1.5/reference/extensions/quarkus-cxf-rt-features-logging.html b/quarkus-cxf/1.5/reference/extensions/quarkus-cxf-rt-features-logging.html new file mode 100644 index 0000000000..c91ee8906e --- /dev/null +++ b/quarkus-cxf/1.5/reference/extensions/quarkus-cxf-rt-features-logging.html @@ -0,0 +1,1233 @@ + + + + + + Logging Feature :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Logging Feature

+
+
+
+

Stable • Since 0.14.0

+
+
+

Allows logging HTTP headers and bodies of SOAP requests and responses for both CXF clients and services.

+
+
+
+
+

Maven coordinates

+
+
+

Create a new project using quarkus-cxf-rt-features-logging on code.quarkus.io +or add these coordinates to your existing project:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.cxf</groupId>
+    <artifactId>quarkus-cxf-rt-features-logging</artifactId>
+</dependency>
+
+
+
+ + + + + +
+ + +Check the User guide and especially its + Dependency management section + for more information about writing applications with CXF Extensions for Quarkus. +
+
+
+
+
+

Usage

+
+
+

This extension wraps the CXF org.apache.cxf:cxf-rt-features-logging artifact +thus providing the org.apache.cxf.ext.logging.LoggingFeature class.

+
+
+

LoggingFeature instances can be configured per service or per client. +You can either use a LoggingFeature instance with default settings +or you can produce a custom LoggingFeature CDI bean.

+
+
+

Attaching LoggingFeature to a client or service

+
+

You have two options to do that:

+
+
+
    +
  1. +

    In application.properties:

    +
    +
    +
    # For a service:
    +quarkus.cxf.endpoint."/hello".features=org.apache.cxf.ext.logging.LoggingFeature
    +# For a client:
    +quarkus.cxf.client."myClient".features=org.apache.cxf.ext.logging.LoggingFeature
    +
    +
    +
    + + + + + +
    + + +There is an example in Your first SOAP Web service chapter of the User guide. +
    +
    +
    +

    or alternatively

    +
    +
  2. +
  3. +

    Use the @Features annotation of CXF:

    +
    +
    +
    @org.apache.cxf.feature.Features (features = {"org.apache.cxf.ext.logging.LoggingFeature"})
    +@WebService(endpointInterface = "org.acme.SayHi", targetNamespace = "uri:org.acme")
    +public class SayHiImplementation implements SayHi {
    +   public long sayHi(long arg) {
    +       return arg;
    +   }
    +   //...
    +}
    +
    +
    +
  4. +
+
+
+
+

Custom LoggingFeature

+
+

LoggingFeature offers some attributes that may be worth customizing in some situations.

+
+
+

E.g. if your payloads are complex, you may want to set prettyLogging to true to render them with an indentation. +Or if your messages are big and you need to see them complete in the log, you may want to increase the limit.

+
+
+ + + + + +
+ + +Check the CXF message logging page for all possible LoggingFeature attributes. +
+
+
+

To achieve this, you can produce a custom LoggingFeature bean that is then picked by Quarkus CXF +for clients and services where you specified *.features = org.apache.cxf.ext.logging.LoggingFeature:

+
+
+
+
import org.apache.cxf.ext.logging.LoggingFeature;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.enterprise.inject.Produces;
+
+class Producers {
+
+    @Produces
+    @ApplicationScoped
+    LoggingFeature loggingFeature() {
+        LoggingFeature loggingFeature = new LoggingFeature();
+        loggingFeature.setPrettyLogging(true);
+        loggingFeature.setLimit(Integer.MAX_VALUE);
+        return loggingFeature;
+    }
+}
+
+
+
+
+

Multiple custom LoggingFeatures

+
+

In case you’d like to configure the LoggingFeatures for your individual services or clients differently, +you can so that by defining multiple @Named LoggingFeature beans:

+
+
+
+
import org.apache.cxf.ext.logging.LoggingFeature;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.enterprise.inject.Produces;
+
+class Producers {
+
+    @Produces
+    @ApplicationScoped
+    @Named("limitedLoggingFeature") // "limitedLoggingFeature" is redundant if the name of the method is the same
+    LoggingFeature limitedLoggingFeature() {
+        LoggingFeature loggingFeature = new LoggingFeature();
+        loggingFeature.setLimit(Integer.MAX_VALUE);
+        return loggingFeature;
+    }
+
+    @Produces
+    @ApplicationScoped
+    @Named("prettyLoggingFeature")
+    LoggingFeature prettyLoggingFeature() {
+        LoggingFeature loggingFeature = new LoggingFeature();
+        loggingFeature.setPrettyLogging(true);
+        return loggingFeature;
+    }
+}
+
+
+
+

and then refer to them by their names prefixed with # in application.properties:

+
+
+
+
# For a service:
+quarkus.cxf.endpoint."/hello".features = #limitedLoggingFeature
+# For a client:
+quarkus.cxf.client."myClient".features = #prettyLoggingFeature
+
+
+
+ + + + + +
+ + +Please note that named Feature beans are currently not supported for SOAP clients. +
+
+
+
+
+
+

Configuration

+
+
+

The logging feature can be associated with a SOAP client or service using the following configuration properties:

+
+ +
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/1.5/reference/extensions/quarkus-cxf-rt-features-metrics.html b/quarkus-cxf/1.5/reference/extensions/quarkus-cxf-rt-features-metrics.html new file mode 100644 index 0000000000..effb2f9b1d --- /dev/null +++ b/quarkus-cxf/1.5/reference/extensions/quarkus-cxf-rt-features-metrics.html @@ -0,0 +1,1097 @@ + + + + + + Metrics Feature :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Metrics Feature

+
+
+
+

🧪Experimental • Since 0.14.0

+
+
+

Collect metrics using Micrometer.

+
+
+ + + + + +
+ + +This extension is experimental, because there are no tests covering it. Contributions are welcome! +
+
+
+
+
+

Maven coordinates

+
+
+

Create a new project using quarkus-cxf-rt-features-metrics on code.quarkus.io +or add these coordinates to your existing project:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.cxf</groupId>
+    <artifactId>quarkus-cxf-rt-features-metrics</artifactId>
+</dependency>
+
+
+
+ + + + + +
+ + +Check the User guide and especially its + Dependency management section + for more information about writing applications with CXF Extensions for Quarkus. +
+
+
+
+
+

Usage

+
+
+

The integration of CXF into Quarkus Micrometer ecosystem is implemented using CXF MicrometerMetricsProvider and io.quarkiverse.cxf.metrics.QuarkusCxfMetricsFeature.

+
+
+

Simply add the following to your application.properties to start collecting metrics:

+
+
+
+
# Enable metrics for a service
+quarkus.cxf.endpoint."/fruit-service".features = io.quarkiverse.cxf.metrics.QuarkusCxfMetricsFeature
+
+# Enable metrics for a client
+quarkus.cxf.client."fruit-client".features = io.quarkiverse.cxf.metrics.QuarkusCxfMetricsFeature
+
+
+
+
+
+

Configuration

+
+
+

The metrics feature can be associated with a SOAP client or service using the following configuration properties:

+
+ +
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/1.5/reference/extensions/quarkus-cxf-rt-transports-http-hc5.html b/quarkus-cxf/1.5/reference/extensions/quarkus-cxf-rt-transports-http-hc5.html new file mode 100644 index 0000000000..6150a23d7a --- /dev/null +++ b/quarkus-cxf/1.5/reference/extensions/quarkus-cxf-rt-transports-http-hc5.html @@ -0,0 +1,1147 @@ + + + + + + HTTP Async Transport :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

HTTP Async Transport

+
+
+
+

🧪Experimental • Since 1.1.0

+
+
+

Implement async SOAP Clients using Apache HttpComponents HttpClient 5.

+
+
+ + + + + +
+ + +This extension is experimental, because there are no tests covering it. Contributions are welcome! +
+
+
+
+
+

Maven coordinates

+
+
+

Create a new project using quarkus-cxf-rt-transports-http-hc5 on code.quarkus.io +or add these coordinates to your existing project:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.cxf</groupId>
+    <artifactId>quarkus-cxf-rt-transports-http-hc5</artifactId>
+</dependency>
+
+
+
+ + + + + +
+ + +Check the User guide and especially its + Dependency management section + for more information about writing applications with CXF Extensions for Quarkus. +
+
+
+
+
+

Usage

+
+
+

Once the quarkus-cxf-rt-transports-http-hc5 dependency is available in the classpath, +CXF will use HttpAsyncClient for asynchronous calls and will continue using HttpURLConnection for synchronous calls.

+
+
+ + + + + +
+ + +You can see more details about the CXF asynchronous client and how to tune it further in CXF documentation. +
+
+
+

Asynchronous Clients and Mutiny

+
+

Asynchronous client invocations require some additional methods in the service endpoint interface. +That code is not generated by default.

+
+
+

To enable it, you need to create a JAX-WS binding file with enableAsyncMapping set to true:

+
+
+
binding.xml
+
+
<bindings xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+          xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+          wsdlLocation="AffectedWSDL"
+          xmlns="http://java.sun.com/xml/ns/jaxws">
+  <bindings node="AffectedNode">
+    <enableAsyncMapping>true</enableAsyncMapping>
+  </bindings>
+</bindings>
+
+
+
+

This file should then be passed to wsdl2java +through its additional-params property:

+
+
+
application.properties
+
+
quarkus.cxf.java2ws.includes = HelloService.wsdl
+quarkus.cxf.java2ws.foo-params.additional-params = -b,src/main/resources/binding.xml
+
+
+
+

Once the asynchronous stubs are available, it is possible to wrap a client call in io.smallrye.mutiny.Uni as shown below:

+
+
+
+
import jakarta.inject.Inject;
+import io.smallrye.mutiny.Uni;
+import io.quarkiverse.cxf.annotation.CXFClient;
+
+class Client {
+
+    @Inject @CXFClient
+    CalculatorService calculator;
+
+    public Uni add(int a, int b) {
+        return Uni.createFrom().future(() ->
+                (Future)calculatorSoap.addAsync(a, b, res -> {}));
+    }
+}
+
+
+
+ + + + + +
+ + +A sample application demonstrating this flow is available here. +
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/1.5/reference/extensions/quarkus-cxf-rt-ws-rm.html b/quarkus-cxf/1.5/reference/extensions/quarkus-cxf-rt-ws-rm.html new file mode 100644 index 0000000000..3d9c773f09 --- /dev/null +++ b/quarkus-cxf/1.5/reference/extensions/quarkus-cxf-rt-ws-rm.html @@ -0,0 +1,1068 @@ + + + + + + WS-ReliableMessaging :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

WS-ReliableMessaging

+
+
+
+

🧪Experimental • Since 1.5.3

+
+
+ + + + + +
+ + +This extension is known not to work. Contributions are welcome! +
+
+
+
+
+

Maven coordinates

+
+
+

Create a new project using quarkus-cxf-rt-ws-rm on code.quarkus.io +or add these coordinates to your existing project:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.cxf</groupId>
+    <artifactId>quarkus-cxf-rt-ws-rm</artifactId>
+</dependency>
+
+
+
+ + + + + +
+ + +Check the User guide and especially its + Dependency management section + for more information about writing applications with CXF Extensions for Quarkus. +
+
+
+
+
+

Supported standards

+
+ +
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/1.5/reference/extensions/quarkus-cxf-rt-ws-security.html b/quarkus-cxf/1.5/reference/extensions/quarkus-cxf-rt-ws-security.html new file mode 100644 index 0000000000..f689eb74da --- /dev/null +++ b/quarkus-cxf/1.5/reference/extensions/quarkus-cxf-rt-ws-security.html @@ -0,0 +1,1243 @@ + + + + + + WS-Security :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

WS-Security

+
+
+
+

Stable • Since 0.14.0

+
+
+

Provides CXF framework’s WS-Security implementation.

+
+
+
+
+

Maven coordinates

+
+
+

Create a new project using quarkus-cxf-rt-ws-security on code.quarkus.io +or add these coordinates to your existing project:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.cxf</groupId>
+    <artifactId>quarkus-cxf-rt-ws-security</artifactId>
+</dependency>
+
+
+
+ + + + + +
+ + +Check the User guide and especially its + Dependency management section + for more information about writing applications with CXF Extensions for Quarkus. +
+
+
+
+
+

Supported standards

+
+ +
+
+
+

Usage

+
+
+

The CXF framework’s WS-Security implementation is based on WSS4J. The example below shows how to integrate with WSS4J using interceptors.

+
+
+ + + + + +
+ + +Currently, only the programmatic WSS4JInterceptors are supported. Actions like Timestamp, UsernameToken, Signature, Encryption, etc., can be applied to the interceptors by passing the appropriate configuration properties. +
+
+
+

A SOAP Service with WS-Security

+
+

Add the WSS4JInInterceptor to in-interceptors of your web service in application.properties:

+
+
+
+
quarkus.cxf.endpoint."/rounder".in-interceptors = org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor
+
+
+
+ + + + + +
+ + +The sample code snippets used in this section come from the + WS-Security server integration test + in the source tree of CXF Extensions for Quarkus +
+
+
+

Then you can configure your WSS4JInInterceptor using CDI like the following:

+
+
+
+
@ApplicationScoped
+public class WSS4JInInterceptorProducer {
+
+    /** Produced in CxfWssServerTestResource */
+    @ConfigProperty(name = "wss.username", defaultValue = "cxf")
+    String username;
+
+    /** Produced in CxfWssServerTestResource */
+    @ConfigProperty(name = "wss.password", defaultValue = "pwd")
+    String password;
+
+    @Produces
+    @Unremovable
+    @ApplicationScoped
+    WSS4JInInterceptor wssInterceptor() {
+        final CallbackHandler passwordCallback = new CallbackHandler() {
+            @Override
+            public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
+                for (Callback callback : callbacks) {
+                    if (callback instanceof WSPasswordCallback) {
+                        final WSPasswordCallback pc = (WSPasswordCallback) callback;
+                        if (username.equals(pc.getIdentifier())) {
+                            pc.setPassword(password);
+                        }
+                        return;
+                    }
+                }
+            }
+        };
+        final Map<String, Object> props = new HashMap<>();
+        props.put(ConfigurationConstants.ACTION, "UsernameToken");
+        props.put(ConfigurationConstants.PASSWORD_TYPE, "PasswordText");
+        props.put(ConfigurationConstants.USER, username);
+        props.put(ConfigurationConstants.PW_CALLBACK_REF, passwordCallback);
+        return new WSS4JInInterceptor(props);
+    }
+}
+
+
+
+
+
+
+

A SOAP client using WS-Security

+
+
+

The corresponding client implementation would be slightly different: +we will use WSS4JOutInterceptor and out-interceptors in application.properties:

+
+
+
+
quarkus.cxf.client."wss-client".out-interceptors=org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor
+
+
+
+ + + + + +
+ + +The sample code snippets used in this section come from the + WS-Security client integration test + in the source tree of CXF Extensions for Quarkus +
+
+
+

Then producing the WSS4JOutInterceptor could look like the following.

+
+
+
+
@ApplicationScoped
+public class WSS4JOutInterceptorProducer {
+
+    /** Produced in CxfWssClientTestResource */
+    @ConfigProperty(name = "wss.username")
+    String username;
+
+    /** Produced in CxfWssClientTestResource */
+    @ConfigProperty(name = "wss.password")
+    String password;
+
+    @Produces
+    @Unremovable
+    @ApplicationScoped
+    WSS4JOutInterceptor wssInterceptor() {
+        final CallbackHandler passwordCallback = new CallbackHandler() {
+            @Override
+            public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
+                for (Callback callback : callbacks) {
+                    if (callback instanceof WSPasswordCallback) {
+                        ((WSPasswordCallback) callback).setPassword(password);
+                    }
+                    return;
+                }
+            }
+        };
+        final Map<String, Object> props = new HashMap<>();
+        props.put(ConfigurationConstants.ACTION, "UsernameToken");
+        props.put(ConfigurationConstants.PASSWORD_TYPE, "PasswordText");
+        props.put(ConfigurationConstants.USER, username);
+        props.put(ConfigurationConstants.PW_CALLBACK_REF, passwordCallback);
+        props.put(ConfigurationConstants.ADD_USERNAMETOKEN_NONCE, "true");
+        props.put(ConfigurationConstants.ADD_USERNAMETOKEN_CREATED, "true");
+        return new WSS4JOutInterceptor(props);
+    }
+}
+
+
+
+

Please refer to WS-Security and WSS4J documentation for details.

+
+
+
+
+

Configuration

+
+
+

WSS4JInInterceptor and WSS4JOutInterceptor can be associated with a SOAP services or clients using the following configuration properties:

+
+ +
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/1.5/reference/extensions/quarkus-cxf-services-sts.html b/quarkus-cxf/1.5/reference/extensions/quarkus-cxf-services-sts.html new file mode 100644 index 0000000000..a5c1525216 --- /dev/null +++ b/quarkus-cxf/1.5/reference/extensions/quarkus-cxf-services-sts.html @@ -0,0 +1,1069 @@ + + + + + + Security Token Service (STS) :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Security Token Service (STS)

+
+
+
+

Stable • Since 1.5.3

+
+
+

Issue, renew and validate security tokens in context of WS-Trust.

+
+
+
+
+

Maven coordinates

+
+
+

Create a new project using quarkus-cxf-services-sts on code.quarkus.io +or add these coordinates to your existing project:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.cxf</groupId>
+    <artifactId>quarkus-cxf-services-sts</artifactId>
+</dependency>
+
+
+
+ + + + + +
+ + +Check the User guide and especially its + Dependency management section + for more information about writing applications with CXF Extensions for Quarkus. +
+
+
+
+
+

Supported standards

+
+
+ +
+
+
+
+

Usage

+
+
+

Please find an example in the +WS-Trust integration test in the source tree of CXF Extensions for Quarkus +while we are working hard on providing a more user friendly text for this page.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/1.5/reference/extensions/quarkus-cxf-xjc-plugins.html b/quarkus-cxf/1.5/reference/extensions/quarkus-cxf-xjc-plugins.html new file mode 100644 index 0000000000..edc26eb700 --- /dev/null +++ b/quarkus-cxf/1.5/reference/extensions/quarkus-cxf-xjc-plugins.html @@ -0,0 +1,1083 @@ + + + + + + XJC Plugins :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

XJC Plugins

+
+
+
+

Stable • Since 1.5.11

+
+
+

XJC plugins for wsdl2java code generation. +You’ll need to add this extension if you want to use any of the following in +quarkus.cxf.codegen.wsdl2java.additional-params:

+
+
+
    +
  • +

    -xjc-Xbg - generate getFoo() instead of isFoo() accessor methods for boolean fields.

    +
  • +
  • +

    -xjc-Xdv - let the generated getter methods return the default value defined in the schema unless the field is set explicitly.

    +
  • +
  • +

    -xjc-Xjavadoc - generate JavaDoc based on xs:documentation present in the schema.

    +
  • +
  • +

    -xjc-Xproperty-listener - add PropertyChangeListener support to the generated beans.

    +
  • +
  • +

    -xjc-Xts - generate toString() methods in model classes.

    +
  • +
  • +

    -xjc-Xwsdlextension - generate beans that can be used directly with WSDL4J as extensors in the WSDL.

    +
  • +
+
+
+ + + + + +
+ + +Check the wsdl2java section of User guide for more details about wsdl2java. +
+
+
+
+
+

Maven coordinates

+
+
+

Create a new project using quarkus-cxf-xjc-plugins on code.quarkus.io +or add these coordinates to your existing project:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.cxf</groupId>
+    <artifactId>quarkus-cxf-xjc-plugins</artifactId>
+</dependency>
+
+
+
+ + + + + +
+ + +Check the User guide and especially its + Dependency management section + for more information about writing applications with CXF Extensions for Quarkus. +
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/1.5/reference/extensions/quarkus-cxf.html b/quarkus-cxf/1.5/reference/extensions/quarkus-cxf.html new file mode 100644 index 0000000000..bfe99a9045 --- /dev/null +++ b/quarkus-cxf/1.5/reference/extensions/quarkus-cxf.html @@ -0,0 +1,1965 @@ + + + + + + Quarkus CXF :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus CXF

+
+
+
+

Stable • Since 0.1.0

+
+
+

Core capabilities for implementing SOAP clients and JAX-WS services.

+
+
+
+
+

Maven coordinates

+
+
+

Create a new project using quarkus-cxf on code.quarkus.io +or add these coordinates to your existing project:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.cxf</groupId>
+    <artifactId>quarkus-cxf</artifactId>
+</dependency>
+
+
+
+ + + + + +
+ + +Check the User guide and especially its + Dependency management section + for more information about writing applications with CXF Extensions for Quarkus. +
+
+
+
+
+

Supported standards

+
+
+ +
+
+
+
+

Usage

+
+
+

Check the following chapters of User guide:

+
+ +
+
+
+

Configuration

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The default path for CXF resources. +⚠️ Note that the default value before 3.0.0 was /.

+
+
+

Environment variable: QUARKUS_CXF_PATH

+
+
+

string

/

+
+
+
+

If true wsdl2java code generation is run whenever there are WSDL resources found on default or custom defined locations; otherwise wsdl2java is not executed.

+
+
+

Environment variable: QUARKUS_CXF_CODEGEN_WSDL2JAVA_ENABLED

+
+
+

boolean

true

+
+
+
+

A comma separated list of glob patterns for selecting WSDL files which should be processed with wsdl2java tool. The paths are relative to src/main/resources or src/test/resources directories of the current Maven or Gradle module. The glob syntax is specified in io.quarkus.util.GlobUtil. +Examples: + - calculator.wsdl,fruits.wsdl will match src/main/resources/calculator.wsdl and src/main/resources/fruits.wsdl under the current Maven or Gradle module, but will not match anything like src/main/resources/subdir/calculator.wsdl + - my-*-service.wsdl will match src/main/resources/my-foo-service.wsdl and src/main/resources/my-bar-service.wsdl + - **.wsdl will match any of the above There is a separate wsdl2java execution for each of the matching WSDL files. If you need different additional-params for each WSDL file, you may want to define a separate named parameter set for each one of them. Here is an example: # Parameters for foo.wsdl quarkus.cxf.codegen.wsdl2java.foo-params.includes = wsdl/foo.wsdl quarkus.cxf.codegen.wsdl2java.foo-params.additional-params = -wsdlLocation,wsdl/foo.wsdl # Parameters for bar.wsdl quarkus.cxf.codegen.wsdl2java.bar-params.includes = wsdl/bar.wsdl quarkus.cxf.codegen.wsdl2java.bar-params.additional-params = -wsdlLocation,wsdl/bar.wsdl,-xjc-Xts +Note that file extensions other than .wsdl will work during normal builds, but changes in the matching files may get overseen in Quarkus dev mode. Always using the .wsdl extension is thus recommended. +There is no default value for this option, so wsdl2java code generation is disabled by default. +Specifying quarkus.cxf.codegen.wsdl2java.my-name.excludes without setting any includes will cause a build time error. +Make sure that the file sets selected by quarkus.cxf.codegen.wsdl2java.includes and quarkus.cxf.codegen.wsdl2java.[whatever-name].includes do not overlap. Otherwise a build time exception will be thrown. +The files from src/main/resources selected by includes and excludes are automatically included in native image and therefore you do not need to include them via quarkus.cxf.wsdl-path (deprecated) or quarkus.native.resources.includes/excludes.

+
+
+

Environment variable: QUARKUS_CXF_CODEGEN_WSDL2JAVA_INCLUDES

+
+
+

list of string

+
+
+
+

A comma separated list of path patterns for selecting WSDL files which should not be processed with wsdl2java tool. The paths are relative to src/main/resources or src/test/resources directories of the current Maven or Gradle module. Same syntax as includes.

+
+
+

Environment variable: QUARKUS_CXF_CODEGEN_WSDL2JAVA_EXCLUDES

+
+
+

list of string

+
+
+
+

A comma separated list of additional command line parameters that should passed to CXF wsdl2java tool along with the files selected by includes and excludes. Example: -wsdlLocation,classpath:wsdl/CalculatorService.wsdl. Check wsdl2java documentation for all supported options. +You need to add io.quarkiverse.cxf:quarkus-cxf-xjc-plugins dependency to your project to be able to use -xjc-Xbg, -xjc-Xdv, -xjc-Xjavadoc, -xjc-Xproperty-listener, -xjc-Xts or -xjc-Xwsdlextension.

+
+
+

Environment variable: QUARKUS_CXF_CODEGEN_WSDL2JAVA_ADDITIONAL_PARAMS

+
+
+

list of string

+
+
+
+

If true java2ws WSDL generation is run whenever there are Java classes selected via includes and excludes options; otherwise java2ws is not executed.

+
+
+

Environment variable: QUARKUS_CXF_JAVA2WS_ENABLED

+
+
+

boolean

true

+
+
+
+

A comma separated list of glob patterns for selecting class names which should be processed with java2ws tool. The glob syntax is specified in io.quarkus.util.GlobUtil. The patterns are matched against fully qualified class names, such as org.acme.MyClass. +The universe of class names to which includes and excludes are applied is defined as follows: 1. Only classes visible in Jandex are considered. 2. From those, only the ones annotated with @WebService are selected. +Examples: +Let’s say that the application contains two classes annotated with @WebService and that both are visible in Jandex. Their names are org.foo.FruitWebService and org.bar.HelloWebService. +Then + - quarkus.cxf.java2ws.includes = **.*WebService will match both class names + - quarkus.cxf.java2ws.includes = org.foo.* will match only org.foo.FruitWebService There is a separate java2ws execution for each of the matching class names. If you need different additional-params for each class, you may want to define a separate named parameter set for each one of them. Here is an example: # Parameters for the foo package quarkus.cxf.java2ws.foo-params.includes = org.foo.* quarkus.cxf.java2ws.foo-params.additional-params = -servicename,FruitService # Parameters for the bar package quarkus.cxf.java2ws.bar-params.includes = org.bar.* quarkus.cxf.java2ws.bar-params.additional-params = -servicename,HelloService +There is no default value for this option, so java2ws WSDL generation is effectively disabled by default. +Specifying quarkus.cxf.java2ws.excludes without setting any includes will cause a build time error. +Make sure that the class names selected by quarkus.cxf.java2ws.includes and quarkus.cxf.java2ws.[whatever-name].includes do not overlap. Otherwise a build time exception will be thrown. +If you would like to include the generated WSDL files in native image, you need to add them yourself using quarkus.native.resources.includes/excludes.

+
+
+

Environment variable: QUARKUS_CXF_JAVA2WS_INCLUDES

+
+
+

list of string

+
+
+
+

A comma separated list of glob patterns for selecting java class names which should not be processed with java2ws tool. Same syntax as includes.

+
+
+

Environment variable: QUARKUS_CXF_JAVA2WS_EXCLUDES

+
+
+

list of string

+
+
+
+

A comma separated list of additional command line parameters that should be passed to CXF java2ws tool along with the files selected by includes and excludes. Example: -portname,12345. Check java2ws documentation for all supported options. +Note that only options related to generation of WSDL from Java are supported currently.

+
+
+

Environment variable: QUARKUS_CXF_JAVA2WS_ADDITIONAL_PARAMS

+
+
+

list of string

+
+
+
+

A template for the names of generated WSDL files. +There are 4 place holders, which can be used in the template: + - %SIMPLE_CLASS_NAME% - the simple class name of the Java class from which we are generating + - %FULLY_QUALIFIED_CLASS_NAME% - the fully qualified name from which we are generating with all dots are replaced replaced by underscores + - %TARGET_DIR% - the target directory of the current module of the current build tool; typically target for Maven and build for Gradle. + - %CLASSES_DIR% - the compiler output directory of the current module of the current build tool; typically target/classes for Maven and build/classes for Gradle.

+
+
+

Environment variable: QUARKUS_CXF_JAVA2WS_WSDL_NAME_TEMPLATE

+
+
+

string

%CLASSES_DIR%/wsdl/%SIMPLE_CLASS_NAME%.wsdl

+
+
+
+

A comma separated list of glob patterns for selecting WSDL files which should be processed with wsdl2java tool. The paths are relative to src/main/resources or src/test/resources directories of the current Maven or Gradle module. The glob syntax is specified in io.quarkus.util.GlobUtil. +Examples: + - calculator.wsdl,fruits.wsdl will match src/main/resources/calculator.wsdl and src/main/resources/fruits.wsdl under the current Maven or Gradle module, but will not match anything like src/main/resources/subdir/calculator.wsdl + - my-*-service.wsdl will match src/main/resources/my-foo-service.wsdl and src/main/resources/my-bar-service.wsdl + - **.wsdl will match any of the above There is a separate wsdl2java execution for each of the matching WSDL files. If you need different additional-params for each WSDL file, you may want to define a separate named parameter set for each one of them. Here is an example: # Parameters for foo.wsdl quarkus.cxf.codegen.wsdl2java.foo-params.includes = wsdl/foo.wsdl quarkus.cxf.codegen.wsdl2java.foo-params.additional-params = -wsdlLocation,wsdl/foo.wsdl # Parameters for bar.wsdl quarkus.cxf.codegen.wsdl2java.bar-params.includes = wsdl/bar.wsdl quarkus.cxf.codegen.wsdl2java.bar-params.additional-params = -wsdlLocation,wsdl/bar.wsdl,-xjc-Xts +Note that file extensions other than .wsdl will work during normal builds, but changes in the matching files may get overseen in Quarkus dev mode. Always using the .wsdl extension is thus recommended. +There is no default value for this option, so wsdl2java code generation is disabled by default. +Specifying quarkus.cxf.codegen.wsdl2java.my-name.excludes without setting any includes will cause a build time error. +Make sure that the file sets selected by quarkus.cxf.codegen.wsdl2java.includes and quarkus.cxf.codegen.wsdl2java.[whatever-name].includes do not overlap. Otherwise a build time exception will be thrown. +The files from src/main/resources selected by includes and excludes are automatically included in native image and therefore you do not need to include them via quarkus.cxf.wsdl-path (deprecated) or quarkus.native.resources.includes/excludes.

+
+
+

Environment variable: QUARKUS_CXF_CODEGEN_WSDL2JAVA__NAMED_PARAMETER_SETS__INCLUDES

+
+
+

list of string

+
+
+
+

A comma separated list of path patterns for selecting WSDL files which should not be processed with wsdl2java tool. The paths are relative to src/main/resources or src/test/resources directories of the current Maven or Gradle module. Same syntax as includes.

+
+
+

Environment variable: QUARKUS_CXF_CODEGEN_WSDL2JAVA__NAMED_PARAMETER_SETS__EXCLUDES

+
+
+

list of string

+
+
+
+

A comma separated list of additional command line parameters that should passed to CXF wsdl2java tool along with the files selected by includes and excludes. Example: -wsdlLocation,classpath:wsdl/CalculatorService.wsdl. Check wsdl2java documentation for all supported options. +You need to add io.quarkiverse.cxf:quarkus-cxf-xjc-plugins dependency to your project to be able to use -xjc-Xbg, -xjc-Xdv, -xjc-Xjavadoc, -xjc-Xproperty-listener, -xjc-Xts or -xjc-Xwsdlextension.

+
+
+

Environment variable: QUARKUS_CXF_CODEGEN_WSDL2JAVA__NAMED_PARAMETER_SETS__ADDITIONAL_PARAMS

+
+
+

list of string

+
+
+
+

A comma separated list of glob patterns for selecting class names which should be processed with java2ws tool. The glob syntax is specified in io.quarkus.util.GlobUtil. The patterns are matched against fully qualified class names, such as org.acme.MyClass. +The universe of class names to which includes and excludes are applied is defined as follows: 1. Only classes visible in Jandex are considered. 2. From those, only the ones annotated with @WebService are selected. +Examples: +Let’s say that the application contains two classes annotated with @WebService and that both are visible in Jandex. Their names are org.foo.FruitWebService and org.bar.HelloWebService. +Then + - quarkus.cxf.java2ws.includes = **.*WebService will match both class names + - quarkus.cxf.java2ws.includes = org.foo.* will match only org.foo.FruitWebService There is a separate java2ws execution for each of the matching class names. If you need different additional-params for each class, you may want to define a separate named parameter set for each one of them. Here is an example: # Parameters for the foo package quarkus.cxf.java2ws.foo-params.includes = org.foo.* quarkus.cxf.java2ws.foo-params.additional-params = -servicename,FruitService # Parameters for the bar package quarkus.cxf.java2ws.bar-params.includes = org.bar.* quarkus.cxf.java2ws.bar-params.additional-params = -servicename,HelloService +There is no default value for this option, so java2ws WSDL generation is effectively disabled by default. +Specifying quarkus.cxf.java2ws.excludes without setting any includes will cause a build time error. +Make sure that the class names selected by quarkus.cxf.java2ws.includes and quarkus.cxf.java2ws.[whatever-name].includes do not overlap. Otherwise a build time exception will be thrown. +If you would like to include the generated WSDL files in native image, you need to add them yourself using quarkus.native.resources.includes/excludes.

+
+
+

Environment variable: QUARKUS_CXF_JAVA2WS__NAMED_PARAMETER_SETS__INCLUDES

+
+
+

list of string

+
+
+
+

A comma separated list of glob patterns for selecting java class names which should not be processed with java2ws tool. Same syntax as includes.

+
+
+

Environment variable: QUARKUS_CXF_JAVA2WS__NAMED_PARAMETER_SETS__EXCLUDES

+
+
+

list of string

+
+
+
+

A comma separated list of additional command line parameters that should be passed to CXF java2ws tool along with the files selected by includes and excludes. Example: -portname,12345. Check java2ws documentation for all supported options. +Note that only options related to generation of WSDL from Java are supported currently.

+
+
+

Environment variable: QUARKUS_CXF_JAVA2WS__NAMED_PARAMETER_SETS__ADDITIONAL_PARAMS

+
+
+

list of string

+
+
+
+

A template for the names of generated WSDL files. +There are 4 place holders, which can be used in the template: + - %SIMPLE_CLASS_NAME% - the simple class name of the Java class from which we are generating + - %FULLY_QUALIFIED_CLASS_NAME% - the fully qualified name from which we are generating with all dots are replaced replaced by underscores + - %TARGET_DIR% - the target directory of the current module of the current build tool; typically target for Maven and build for Gradle. + - %CLASSES_DIR% - the compiler output directory of the current module of the current build tool; typically target/classes for Maven and build/classes for Gradle.

+
+
+

Environment variable: QUARKUS_CXF_JAVA2WS__NAMED_PARAMETER_SETS__WSDL_NAME_TEMPLATE

+
+
+

string

%CLASSES_DIR%/wsdl/%SIMPLE_CLASS_NAME%.wsdl

+
+
+
+

The client service interface class name

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SERVICE_INTERFACE

+
+
+

string

+
+
+
+

Indicates whether this is an alternative proxy client configuration. If true, then this configuration is ignored when configuring a client without annotation @CXFClient.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__ALTERNATIVE

+
+
+

boolean

false

+
+
+
+

If true, the client dynamic proxy class generated by native compiler will be initialized at runtime; otherwise the proxy class will be initialized at build time. +Setting this to true makes sense if your service endpoint interface references some class initialized at runtime in its method signatures. E.g. Say, your service interface has method int add(Operands o) and the Operands class was requested to be initialized at runtime. Then, without setting this configuration parameter to true, the native compiler will throw an exception saying something like Classes that should be initialized at run time got initialized during image building: org.acme.Operands …​ jdk.proxy<some-number>.$Proxy<some-number> caused initialization of this class. jdk.proxy<some-number>.$Proxy<some-number> is the proxy class generated by the native compiler.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__NATIVE_RUNTIME_INITIALIZED

+
+
+

boolean

false

+
+
+
+

The service endpoint implementation class

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__IMPLEMENTOR

+
+
+

string

+
+
+
+

The service endpoint WSDL path

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__WSDL

+
+
+

string

+
+
+
+

The URL of the SOAP Binding, should be one of four values:

+
+
+
    +
  • +

    http://schemas.xmlsoap.org/wsdl/soap/http for SOAP11HTTP_BINDING

    +
  • +
  • +

    http://schemas.xmlsoap.org/wsdl/soap/http?mtom=true for SOAP11HTTP_MTOM_BINDING

    +
  • +
  • +

    http://www.w3.org/2003/05/soap/bindings/HTTP/ for SOAP12HTTP_BINDING

    +
  • +
  • +

    http://www.w3.org/2003/05/soap/bindings/HTTP/?mtom=true for SOAP12HTTP_MTOM_BINDING

    +
  • +
+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SOAP_BINDING

+
+
+

string

+
+
+
+

The published service endpoint URL

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__PUBLISHED_ENDPOINT_URL

+
+
+

string

+
+
+
+

A comma-separated list of fully qualified CXF Feature class names or named CDI beans. +Examples: quarkus.cxf.endpoint."/hello".features = org.apache.cxf.ext.logging.LoggingFeature quarkus.cxf.endpoint."/fruit".features = #myCustomLoggingFeature In the second case, the #myCustomLoggingFeature bean can be produced as follows: import org.apache.cxf.ext.logging.LoggingFeature; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.inject.Produces; class Producers { @Produces

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__FEATURES

+
+
+

list of string

+
+
+
+

The comma-separated list of Handler classes

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__HANDLERS

+
+
+

list of string

+
+
+
+

The comma-separated list of InInterceptor classes

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__IN_INTERCEPTORS

+
+
+

list of string

+
+
+
+

The comma-separated list of OutInterceptor classes

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__OUT_INTERCEPTORS

+
+
+

list of string

+
+
+
+

The comma-separated list of OutFaultInterceptor classes

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__OUT_FAULT_INTERCEPTORS

+
+
+

list of string

+
+
+
+

The comma-separated list of InFaultInterceptor classes

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__IN_FAULT_INTERCEPTORS

+
+
+

list of string

+
+
+
+

The client WSDL path

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__WSDL

+
+
+

string

+
+
+
+

The URL of the SOAP Binding, should be one of four values:

+
+
+
    +
  • +

    http://schemas.xmlsoap.org/wsdl/soap/http for SOAP11HTTP_BINDING

    +
  • +
  • +

    http://schemas.xmlsoap.org/wsdl/soap/http?mtom=true for SOAP11HTTP_MTOM_BINDING

    +
  • +
  • +

    http://www.w3.org/2003/05/soap/bindings/HTTP/ for SOAP12HTTP_BINDING

    +
  • +
  • +

    http://www.w3.org/2003/05/soap/bindings/HTTP/?mtom=true for SOAP12HTTP_MTOM_BINDING

    +
  • +
+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SOAP_BINDING

+
+
+

string

+
+
+
+

The client endpoint URL

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__CLIENT_ENDPOINT_URL

+
+
+

string

+
+
+
+

The client interface class

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SERVICE_INTERFACE

+
+
+

string

+
+
+
+

The client endpoint namespace

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__ENDPOINT_NAMESPACE

+
+
+

string

+
+
+
+

The client endpoint name

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__ENDPOINT_NAME

+
+
+

string

+
+
+
+

The username for HTTP Basic auth

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__USERNAME

+
+
+

string

+
+
+
+

The password for HTTP Basic auth

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__PASSWORD

+
+
+

string

+
+
+
+

A comma-separated list of fully qualified CXF Feature class names. +Example: quarkus.cxf.endpoint.myClient.features = org.apache.cxf.ext.logging.LoggingFeature +Note that the LoggingFeature is available through the Logging Feature extension.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__FEATURES

+
+
+

list of string

+
+
+
+

The comma-separated list of Handler classes

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__HANDLERS

+
+
+

list of string

+
+
+
+

The comma-separated list of InInterceptor classes

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__IN_INTERCEPTORS

+
+
+

list of string

+
+
+
+

The comma-separated list of OutInterceptor classes

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__OUT_INTERCEPTORS

+
+
+

list of string

+
+
+
+

The comma-separated list of OutFaultInterceptor classes

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__OUT_FAULT_INTERCEPTORS

+
+
+

list of string

+
+
+
+

The comma-separated list of InFaultInterceptor classes

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__IN_FAULT_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Indicates whether this is an alternative proxy client configuration. If true, then this configuration is ignored when configuring a client without annotation @CXFClient.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__ALTERNATIVE

+
+
+

boolean

false

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/1.5/reference/index.html b/quarkus-cxf/1.5/reference/index.html new file mode 100644 index 0000000000..31e5254fb0 --- /dev/null +++ b/quarkus-cxf/1.5/reference/index.html @@ -0,0 +1,1299 @@ + + + + + + Reference :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Reference

+
+

CXF Extensions for Quarkus

+
+
+

Here is the list of extensions produced by this project. +Please follow the links under the extension names to learn about how to use them, about their configuration and about any known limitations.

+
+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Quarkus CXF extensionSupport levelSinceSupported standards

Quarkus CXF
+quarkus-cxf

Stable

0.1.0

JAX-WS, JAXB, WS-Addressing, WS-Policy, MTOM

Quarkus CXF Logging Feature
+quarkus-cxf-rt-features-logging

Stable

0.14.0

Quarkus CXF Metrics Feature
+quarkus-cxf-rt-features-metrics

Experimental

0.14.0

Quarkus CXF WS-Security
+quarkus-cxf-rt-ws-security

Stable

0.14.0

WS-Security, WS-SecurityPolicy

Quarkus CXF WS-ReliableMessaging
+quarkus-cxf-rt-ws-rm

Experimental

1.5.3

WS-ReliableMessaging

Quarkus CXF Security Token Service (STS)
+quarkus-cxf-services-sts

Stable

1.5.3

WS-Trust

Quarkus CXF HTTP Async Transport
+quarkus-cxf-rt-transports-http-hc5

Experimental

1.1.0

Quarkus CXF XJC Plugins
+quarkus-cxf-xjc-plugins

Stable

1.5.11

+
+
+
+

Supported CXF modules

+
+
+

Here is a list of CXF modules supported by CXF Extensions for Quarkus. +You should typically not depend on these directly, but rather use some of the extensions listed above that brings the given CXF module as a transitive dependency.

+
+
+

Front ends

+
+

Out of CXF front ends only the +JAX-WS front end is fully supported by quarkus-cxf.

+
+
+

The Simple front end may work in JVM mode, but it is not tested properly. +We advise not to use it.

+
+
+
+

Data Bindings

+
+

Out of CXF Data Bindings only the following ones are supported:

+
+ +
+
+

Transports

+
+

Out of CXF Transports only the following ones are supported:

+
+
+ +
+
+
+

Tools

+
+ +
+
+
+

WSDL Bindings

+
+

All CXF WSDL Bindings are supported:

+
+
+ +
+
+
+
+
+

Unsupported CXF modules

+
+
+

Here is a list of CXF modules currently not supported by CXF Extensions for Quarkus along with possible alternatives and/or reasons why the given module is not supported.

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CXF moduleAlternative

JAX-RS
+cxf-rt-frontend-jaxrs
+cxf-rt-rs-client

Use Quarkus RESTEasy

Fediz

Use Quarkus OpenID Connect

Aegis

Use JAXB and JAX-WS

DOSGI
+Karaf

JiBX

Use JAXB and JAX-WS

Local transport
+cxf-rt-transports-local

Use HTTP transport

JMS transport
+cxf-rt-transports-jms

Use HTTP transport

JBI
+cxf-rt-transports-jbi
+cxf-rt-bindings-jbi

Deprecated in CXF use HTTP transport

UDP transport
+cxf-rt-transports-udp

Use HTTP transport

Coloc transport

Use HTTP transport

WebSocket transport
+cxf-rt-transports-websocket

Use HTTP transport

Clustering
+cxf-rt-features-clustering

Planned

CORBA +cxf-rt-bindings-corba

Use JAX-WS

SDO databinding
+cxf-rt-databinding-sdo

XMLBeans

Deprecated in CXF

Javascript frontend

Use JAX-WS

JCA transport

Use HTTP transport

WS-Transfer runtime
+cxf-rt-ws-transfer

Throttling
+cxf-rt-features-throttling

Use load balancer

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/1.5/user-guide/advanced-soap-client-topics.html b/quarkus-cxf/1.5/user-guide/advanced-soap-client-topics.html new file mode 100644 index 0000000000..4ff30f26d4 --- /dev/null +++ b/quarkus-cxf/1.5/user-guide/advanced-soap-client-topics.html @@ -0,0 +1,1136 @@ + + + + + + Create a new project :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Create a new project

+
+

client-endpoint-url defaults

+
+
+

If you omit the client-endpoint-url property in application.properties, +the CXF Quarkus extension will assume that the service is published at http://localhost:8080/{service-path}, +where {service-path} is derived from

+
+
+
    +
  • +

    Configuration property quarkus.cxf.path (if specified); and the

    +
  • +
  • +

    SEI’s class name in lower case

    +
  • +
+
+
+

Given quarkus.cxf.path = /ws, the default effective client-endpoint-url of the CalculatorService would be +http://localhost:8080/ws/org.jboss.eap.quickstarts.wscalculator.calculator.calculatorservice.

+
+
+

If quarkus.cxf.path is not specified, the client-endpoint-url would be just +http://localhost:8080/org.jboss.eap.quickstarts.wscalculator.calculator.calculatorservice.

+
+
+
+
+

Configure multiple clients

+
+
+

In the example above, we configured just a single client called myCalculator. +Of course, you can configure multiple clients pointing at different URLs and/or implementing different SEIs using multiple identifiers:

+
+
+
application.properties
+
+
cxf.it.calculator.baseUri = http://localhost:8082
+quarkus.cxf.client.myCalculator.wsdl=${cxf.it.calculator.baseUri}/calculator-ws/CalculatorService?wsdl
+quarkus.cxf.client.myCalculator.client-endpoint-url=${cxf.it.calculator.baseUri}/calculator-ws/CalculatorService
+quarkus.cxf.client.myCalculator.service-interface=org.jboss.eap.quickstarts.wscalculator.calculator.CalculatorService
+
+# another client
+quarkus.cxf.client.anotherCalculator.wsdl = https://acme.com/ws/WeatherService?wsdl
+quarkus.cxf.client.anotherCalculator.client-endpoint-url = https://acme.com/ws/WeatherService
+quarkus.cxf.client.anotherCalculator.service-interface = org.jboss.eap.quickstarts.wscalculator.calculator.CalculatorService
+
+
+
+
+
+

Basic Authentication

+
+
+

Basic authentication for clients is supported by default. +Just add the following properties to your application.properties:

+
+
+
+
quarkus.cxf.client.myCalculator.username = user
+quarkus.cxf.client.myCalculator.password = password
+
+
+
+
+
+

Advanced Client Configurations

+
+
+

To globally configure all clients in your application, you can use the example snippet below to configure the +HttpConduit. +This allows you to set the HTTPClientPolicy, AuthorizationPolicy, ProxyAuthorizationPolicy or even TLSClientParameters for your clients.

+
+
+
+
void onStart(@Observes StartupEvent ev) {
+
+     HTTPConduitConfigurer httpConduitConfigurer = new HTTPConduitConfigurer() {
+         public void configure(String name, String address, HTTPConduit c) {
+             AsyncHTTPConduit conduit = (AsyncHTTPConduit)c;
+             // use setter to configure client
+             conduit.getHttpAsyncClient().getCredentialsProvider().setCredentials( AuthScope.ANY,
+              new NTCredentials( USER,PWD, "", DOM ) );
+             conduit.getClient().setAllowChunking( false );
+             conduit.getClient().setAutoRedirect( true );
+         }
+     };
+
+     final Bus bus = BusFactory.getThreadDefaultBus();
+     bus.setExtension(httpConduitConfigurer, HTTPConduitConfigurer.class);
+}
+
+
+
+

To configure the HttpConduit for a single client in your application, use the example snippet below:

+
+
+
+
    @Inject
+    @CXFClient
+    SomePortType portType;
+
+    @PostConstruct
+    void configurePortType() throws NoSuchAlgorithmException, UnrecoverableKeyException, KeyStoreException {
+        final var httpConduit = (HTTPConduit) ClientProxy.getClient(portType).getConduit();
+        final var tlsClientParameters = Optional.ofNullable(httpConduit.getTlsClientParameters()).orElseGet(TLSClientParameters::new);
+        tlsClientParameters.setCertAlias(config.clientCert().keyAlias());
+        tlsClientParameters.setKeyManagers(clientKeyManagers);
+        tlsClientParameters.setTrustManagers(clientTrustManagers);
+        httpConduit.setTlsClientParameters(tlsClientParameters);
+    }
+
+
+
+
+
+

Pure client applications

+
+
+

Quarkus batch (e.g. periodically scheduled), or command line applications, may do without an HTTP server. +Use the property below to prevent launching the HTTP server at startup:

+
+
+
+
quarkus.http.host-enabled = false
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/1.5/user-guide/camel-integration.html b/quarkus-cxf/1.5/user-guide/camel-integration.html new file mode 100644 index 0000000000..55f245af5e --- /dev/null +++ b/quarkus-cxf/1.5/user-guide/camel-integration.html @@ -0,0 +1,1014 @@ + + + + + + Camel Integration :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Camel Integration

+
+

Camel Quarkus supports CXF since its version 2.12.0. +Under the hood, the implementation is based on CXF Extensions for Quarkus. +Therefore, all functionality available in CXF Extensions for Quarkus is also available in Camel Quarkus.

+
+
+

Please refer to Camel Quarkus CXF SOAP extension documentation for further details.

+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/1.5/user-guide/common-problems-troubleshooting.html b/quarkus-cxf/1.5/user-guide/common-problems-troubleshooting.html new file mode 100644 index 0000000000..8d01c8cfb6 --- /dev/null +++ b/quarkus-cxf/1.5/user-guide/common-problems-troubleshooting.html @@ -0,0 +1,1221 @@ + + + + + + Common problems and troubleshooting :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Common problems and troubleshooting

+
+
+
+

Some issues may appear during the development, testing, and native image building process of your quarkus-cxf project; +below are some common ones and how to address them.

+
+
+
+
+

REST and SOAP Endpoints

+
+
+

Sometimes a REST endpoint may be needed in the same project where the Quarkus CXF Extension is used. +The REST endpoint path must be different from the SOAP endpoint path (in order to avoid request +forwarding conflicts between both protocols).

+
+
+

For example, if a WeatherWebService interface is declared in a WSDL, you can +begin by creating the org.acme.cxf.WeatherWebServiceImpl class as follows:

+
+
+
+
package org.acme.cxf;
+
+import ...
+
+@Slf4j
+@WebService(endpointInterface = "org.acme.cxf.WeatherWebService")
+public class WeatherWebServiceImpl implements WeatherWebService {
+
+    @Inject
+    BackEndWeatherService backEndWeatherService;
+
+    private Map<String, DailyTemperature> dailyTempByZipCode = Collections.synchronizedMap(new LinkedHashMap<>());
+
+    public WeatherWebServiceImpl() {
+        this.dailyTempByZipCode.addAll(
+        		this.backEndWeatherService.getDailyForecast(Instant.now()));
+    }
+
+    @Override
+    public DailyTemperature estimationTemperatures(String zipCode) {
+        log.info("Daily estimation temperatures forecast called with '{}' zip code paramter", zipCode);
+        return this.dailyTempByZipCode.get(zipCode);
+    }
+}
+
+
+
+

After that, you would need to specify the root context for your CXF web services, as indicated +in the properties documentation to split the REST (with RESTEasy for example) +and SOAP routes based on their root context paths.

+
+
+

CXF’s SOAP properties:

+
+
+
+
quarkus.cxf.path=/soap
+quarkus.cxf.endpoint."/weather".implementor=org.acme.cxf.WeatherWebServiceImpl
+
+
+
+

Now, imagine the following RESTEasy endpoint:

+
+
+
+
package org.acme.reasteasy;
+
+import ...
+
+@Slf4j
+@Path("/healthcheck")
+public class HealthCheckResource {
+
+	@Inject
+    BackEndWeatherService backEndWeatherService;
+
+	@GET
+	public Response doHealthCheck() {
+		if(this.backEndWeatherService.isAvailable()) {
+            return Response.ok().build();
+		} else {
+            return Response.status(Response.Status.SERVICE_UNAVAILABLE);
+		}
+	}
+}
+
+
+
+

You can separate your REST endpoint by configuring the REASTEasy path:

+
+
+
+
quarkus.resteasy.path=/rest
+
+
+
+

You should now be able to send requests to both your REST and SOAP endpoints deployed within a single project, at:

+
+ +
+
+
+

Non ASCII Characters

+
+
+

Sometimes the wsdl2java autogenerated Java classes may not be +fully compatible with GraalVM due to non ASCII characters getting included in the code. Similar exceptions to +the below may appear during native image builds.

+
+
+
+
[quarkus-dalkia-ticket-loader-1.0.0-SNAPSHOT-runner:26]      compile: 161 459,15 ms,  8,54 GB
+[quarkus-dalkia-ticket-loader-1.0.0-SNAPSHOT-runner:26]        image: 158 272,73 ms,  8,43 GB
+[quarkus-dalkia-ticket-loader-1.0.0-SNAPSHOT-runner:26]        write:     205,82 ms,  8,43 GB
+Fatal error:com.oracle.svm.core.util.VMError$HostedError: java.lang.RuntimeException: oops : expected ASCII string! com.oracle.svm.reflect.OperationOrderStatusType_CRÉÉ_f151156b0d42ecdbdfb919501d8a86dda8733012_1456.hashCode
+	at com.oracle.svm.core.util.VMError.shouldNotReachHere(VMError.java:72)
+
+
+
+

Below is an example of auto-generated non ASCII characters in a Java class:

+
+
+
+
@XmlType(name = "OperationOrderStatusType")
+@XmlEnum
+public enum OperationOrderStatusType {
+
+    @XmlEnumValue("Cr\u00e9\u00e9")
+    CRÉÉ("Cr\u00e9\u00e9"),
+    @XmlEnumValue("A communiquer")
+    A_COMMUNIQUER("A communiquer"),
+    @XmlEnumValue("En attente de r\u00e9ponse")
+    EN_ATTENTE_DE_RÉPONSE("En attente de r\u00e9ponse"),
+    @XmlEnumValue("Attribu\u00e9")
+    ATTRIBUÉ("Attribu\u00e9"),
+    @XmlEnumValue("Clotur\u00e9")
+    CLOTURÉ("Clotur\u00e9"),
+    @XmlEnumValue("Annul\u00e9")
+    ANNULÉ("Annul\u00e9");
+    private final String value;
+
+    OperationOrderStatusType(String v) {
+        value = v;
+    }
+
+    public String value() {
+        return value;
+    }
+
+    public static OperationOrderStatusType fromValue(String v) {
+        for (OperationOrderStatusType c: OperationOrderStatusType.values()) {
+            if (c.value.equals(v)) {
+                return c;
+            }
+        }
+        throw new IllegalArgumentException(v);
+    }
+}
+
+
+
+

Anything starting with \u will be a problem. Consequently the following refactoring is needed:

+
+
+
+
@XmlType(name = "OperationOrderStatusType")
+@XmlEnum
+public enum OperationOrderStatusType {
+
+    @XmlEnumValue("Créé")
+    CREE("Créé"),
+    @XmlEnumValue("A communiquer")
+    A_COMMUNIQUER("A communiquer"),
+    @XmlEnumValue("En attente de réponse")
+    EN_ATTENTE_DE_REPONSE("En attente de réponse"),
+    @XmlEnumValue("Attribué")
+    ATTRIBUE("Attribué"),
+    @XmlEnumValue("Cloturé")
+    CLOTURE("Cloturé"),
+    @XmlEnumValue("Annulé")
+    ANNULE("Annulé");
+    private final String value;
+
+    OperationOrderStatusType(String v) {
+        value = v;
+    }
+
+    public String value() {
+        return value;
+    }
+
+    public static OperationOrderStatusType fromValue(String v) {
+        for (OperationOrderStatusType c: OperationOrderStatusType.values()) {
+            if (c.value.equals(v)) {
+                return c;
+            }
+        }
+        throw new IllegalArgumentException(v);
+    }
+}
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/1.5/user-guide/contract-first-code-first.html b/quarkus-cxf/1.5/user-guide/contract-first-code-first.html new file mode 100644 index 0000000000..f09ee1e2f0 --- /dev/null +++ b/quarkus-cxf/1.5/user-guide/contract-first-code-first.html @@ -0,0 +1,1081 @@ + + + + + + Contract first and code first approaches :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Contract first and code first approaches

+
+
+
+

Both contract first and code first development modes are fully supported by CXF Extensions for Quarkus.

+
+
+
+
+

Contract first client

+
+
+

A SOAP service is described by WSDL. +It is a contract defining operations, their parameters and return values, etc. +WSDL is rich enough to be used for generating the code of a complete client. +CXF provides the wsdl2java utility for that.

+
+
+

CXF Extensions for Quarkus wraps wsdl2java in the quarkus-cxf extension so you do not need to use it directly.

+
+
+

Please follow the Generate the Model classes from WSDL section of the user guide +for more details about how to use it.

+
+
+

You may also want to check the CXF Developing a Consumer as a general introduction.

+
+
+
+
+

Contract first service

+
+
+

When implementing a service the generation of Java code from WSDL +may also come in handy. +wsdl2java can generate the model classes (with JAXB annotations) +and service interfaces (with JAX-WS annotations) for you. +Your task is then to provide implementations for those interfaces.

+
+
+

You may want to check the WSDL First Service Development +section of CXF documentation for a better understanding of the underlying concepts.

+
+
+
+
+

Code first service

+
+
+

Another valid option at your disposal is to write your service in Java, using JAX-WS and JAXB. +Then you have two options how to obtain the WSDL contract:

+
+
+
    +
  1. +

    Start your service and point your clients at http://your-host/your-service?wsdl

    +
  2. +
  3. +

    Generate the WSDL document from Java classes at build time

    +
  4. +
+
+
+ + + + + +
+ + +Check the Code first development section of CXF documentation for further information. +
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/1.5/user-guide/create-project.html b/quarkus-cxf/1.5/user-guide/create-project.html new file mode 100644 index 0000000000..a84c11f0b4 --- /dev/null +++ b/quarkus-cxf/1.5/user-guide/create-project.html @@ -0,0 +1,1174 @@ + + + + + + Create a new project :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Create a new project

+
+
+
+

This guide explains how to set up a new project for a Quarkus application hosting a CXF client or server or both.

+
+
+
+
+

Prerequisites

+
+
+

Please read the Prerequisites section of Quarkus getting started guide.

+
+
+

In addition to that, you may need

+
+
+
    +
  • +

    GraalVM with the native-image command installed and the GRAALVM_HOME environment variable set. +See Building a native executable section of the Quarkus +documentation.

    +
  • +
  • +

    If you are on Linux, a container runtime like docker is sufficient for the native mode too. +Use -Pnative -Dquarkus.native.container-build=true instead of -Pnative if you choose this option.

    +
  • +
+
+
+
+
+

Create project

+
+
+

New project skeletons can be generated using code.quarkus.io. +All extensions produced by Quarkiverse CXF project can be found using origin:other cxf query.

+
+
+
+https://code.quarkus.io +
+
+
+
    +
  • +

    Here you can select the extensions that you want to work with.

    +
  • +
  • +

    For a simple Hello world Web service or client the `quarkus-cxf`extension is enough.

    +
  • +
  • +

    Click the blue Generate your application button to download a basic skeleton project.

    +
  • +
  • +

    Unpack the zip file and import the project the into your favorite IDE.

    +
  • +
+
+
+
+
+

Dependency management

+
+
+

code.quarkus.io currently generates pom.xml files +containing quarkus-cxf* dependencies with version literals (see issue #651) +like the following:

+
+
+
+
...
+  <dependencyManagement>
+    <dependencies>
+      <dependency>
+        <groupId>${quarkus.platform.group-id}</groupId>
+        <artifactId>${quarkus.platform.artifact-id}</artifactId>
+        <version>${quarkus.platform.version}</version>
+        <type>pom</type>
+        <scope>import</scope>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
+
+  <dependencies>
+    <dependency>
+      <groupId>io.quarkiverse.cxf</groupId>
+      <artifactId>quarkus-cxf</artifactId>
+      <version>1.5.17</version>
+    </dependency>
+    ...
+  </dependencies>
+...
+
+
+
+

This might become impractical, once you start adding more extensions from CXF Extensions for Quarkus +or some optionals required for covering some specific use cases.

+
+
+

Thus we recommend to add quarkus-cxf-bom manually:

+
+
+
+
...
+  <dependencyManagement>
+    <dependencies>
+      <dependency>
+        <groupId>${quarkus.platform.group-id}</groupId>
+        <artifactId>${quarkus.platform.artifact-id}</artifactId>
+        <version>${quarkus.platform.version}</version>
+        <type>pom</type>
+        <scope>import</scope>
+      </dependency>
+      <dependency>
+        <groupId>io.quarkiverse.cxf</groupId>
+        <artifactId>quarkus-cxf-bom</artifactId>
+        <version>1.5.17</version>
+        <type>pom</type>
+        <scope>import</scope>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
+
+  <dependencies>
+    <dependency>
+      <groupId>io.quarkiverse.cxf</groupId>
+      <artifactId>quarkus-cxf</artifactId>
+      <!-- no version required here if you import quarkus-cxf-bom above -->
+    </dependency>
+    ...
+  </dependencies>
+...
+
+
+
+

Which Quarkus Platform versions are compatible with a given quarkus-cxf-bom version?

+
+

Each CXF Extensions for Quarkus major.minor version stream is compatible with some specific major.minor stream of Quarkus.

+
+
+

E.g. the current stable release of CXF Extensions for Quarkus is 1.5.17. +It was tested against Quarkus 2.13.8.Final. +Hence, at the given point in time, you’ll best use the newest micro version of that Quarkus Platform stream. +The available versions of io.quarkus.platform:quarkus-bom can be viewed on +Maven Central.

+
+
+
+
+
+

Where to go next

+
+
+

We recommend to proceed with any of the following chapters:

+
+ +
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/1.5/user-guide/cxf-interceptors-and-features.html b/quarkus-cxf/1.5/user-guide/cxf-interceptors-and-features.html new file mode 100644 index 0000000000..a8b83b981a --- /dev/null +++ b/quarkus-cxf/1.5/user-guide/cxf-interceptors-and-features.html @@ -0,0 +1,1055 @@ + + + + + + CXF Interceptors and Features :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

CXF Interceptors and Features

+
+

CXF interceptors and CXF features can be added to both your client or server using either annotations or application.properties configurations.

+
+
+

While CXF provides a number of out of the box embedded interceptors and features, you can also integrate your custom developed implementations.

+
+
+

Annotations can be used on either the service interface or implementor classes.

+
+
+
+
@org.apache.cxf.feature.Features (features = {"org.apache.cxf.ext.logging.LoggingFeature"})
+@org.apache.cxf.interceptor.InInterceptors (interceptors = {"org.acme.Test1Interceptor" })
+@org.apache.cxf.interceptor.InFaultInterceptors (interceptors = {"org.acme.Test2Interceptor" })
+@org.apache.cxf.interceptor.OutInterceptors (interceptors = {"org.acme.Test1Interceptor" })
+@org.apache.cxf.interceptor.InFaultInterceptors (interceptors = {"org.acme.Test2Interceptor","org.acme.Test3Intercetpor" })
+@WebService(endpointInterface = "org.acme.SayHi", targetNamespace = "uri:org.acme")
+public class SayHiImplementation implements SayHi {
+   public long sayHi(long arg) {
+       return arg;
+   }
+   //...
+}
+
+
+
+

You may also define your configurations in the application.properties file.

+
+
+
+
quarkus.cxf.endpoint."/greeting-service".features=org.apache.cxf.ext.logging.LoggingFeature
+quarkus.cxf.endpoint."/greeting-service".in-interceptors=org.acme.Test1Interceptor
+quarkus.cxf.endpoint."/greeting-service".out-interceptors=org.acme.Test1Interceptor
+quarkus.cxf.endpoint."/greeting-service".in-fault-interceptors=org.acme.Test2Interceptor,org.acme.Test3Intercetpor
+quarkus.cxf.endpoint."/greeting-service".out-fault-interceptors=org.acme.Test1Intercetpor
+
+
+
+ + + + + +
+ + +Both feature and interceptor classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class. +
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/1.5/user-guide/examples.html b/quarkus-cxf/1.5/user-guide/examples.html new file mode 100644 index 0000000000..1b72fb79cf --- /dev/null +++ b/quarkus-cxf/1.5/user-guide/examples.html @@ -0,0 +1,1010 @@ + + + + + + Examples :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Examples

+
+

The integration-tests folder of the codebase provides various examples +that demonstrate how to use this extension extensively.

+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/1.5/user-guide/first-soap-client.html b/quarkus-cxf/1.5/user-guide/first-soap-client.html new file mode 100644 index 0000000000..f08e98d52c --- /dev/null +++ b/quarkus-cxf/1.5/user-guide/first-soap-client.html @@ -0,0 +1,1289 @@ + + + + + + Your first SOAP Client on Quarkus :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Your first SOAP Client on Quarkus

+
+
+
+

In this guide we explain how to create a simple Quarkus application acting as a client of a remote Web service.

+
+
+ + + + + +
+ + +Follow the Project creation guide before proceeding here. +
+
+
+
+
+

Remote Web service for testing

+
+
+

First, we need some remote Web service to connect to. +We can use a simple Calculator Web service running in a container for that purpose.

+
+
+
+
$ docker run -p 8082:8080 quay.io/l2x6/calculator-ws:1.0
+
+
+
+

Once the container is up and running, we can inspect its WSDL

+
+
+
+
$ curl -s http://localhost:8082/calculator-ws/CalculatorService?wsdl
+<?xml version="1.0" ?>
+<wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://www.jboss.org/eap/quickstarts/wscalculator/Calculator" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" name="CalculatorService" targetNamespace="http://www.jboss.org/eap/quickstarts/wscalculator/Calculator">
+
+  ...
+
+  <wsdl:binding name="CalculatorServiceSoapBinding" type="tns:CalculatorService">
+    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"></soap:binding>
+    <wsdl:operation name="add">
+      <soap:operation soapAction="" style="document"></soap:operation>
+      <wsdl:input name="add">
+        <soap:body use="literal"></soap:body>
+      </wsdl:input>
+      <wsdl:output name="addResponse">
+        <soap:body use="literal"></soap:body>
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="subtract">
+      <soap:operation soapAction="" style="document"></soap:operation>
+      <wsdl:input name="subtract">
+        <soap:body use="literal"></soap:body>
+      </wsdl:input>
+      <wsdl:output name="subtractResponse">
+        <soap:body use="literal"></soap:body>
+      </wsdl:output>
+    </wsdl:operation>
+
+    ...
+
+  </wsdl:binding>
+
+  ...
+
+</wsdl:definitions>
+
+
+
+

As you can see in the WSDL, the service offers some basic arithmetic operations, such as add, subtract, etc.

+
+
+

Let’s test it with curl:

+
+
+
+
$ curl -s \
+    -X POST \
+    -H "Content-Type: text/xml;charset=UTF-8" \
+    -d \
+        '<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
+            <Body>
+                <add xmlns="http://www.jboss.org/eap/quickstarts/wscalculator/Calculator">
+                    <arg0 xmlns="">7</arg0> (1)
+                    <arg1 xmlns="">4</arg1>
+                </add>
+            </Body>
+        </Envelope>' \
+    http://localhost:8082/calculator-ws/CalculatorService
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
+  <soap:Body>
+    <ns2:addResponse xmlns:ns2="http://www.jboss.org/eap/quickstarts/wscalculator/Calculator">
+      <return>11</return> (2)
+    </ns2:addResponse>
+  </soap:Body>
+</soap:Envelope>
+
+
+
+ + + + + + + + + +
1The request to add 7 and 4
211 - return value of the operation
+
+
+
+
+

SOAP client

+
+
+

Now let’s have a look how we can get the client inside a Quarkus application.

+
+
+

First, we need the Service Endpoint Interface (SEI) and all other model classes it requires.

+
+
+

There are several ways to get them:

+
+
+
    +
  • +

    Write by hand

    +
  • +
  • +

    Copy from the Web Sevice project, if it is written in Java

    +
  • +
  • +

    Have a Maven artifact containing the model classes, perhaps it is offered by the Service project

    +
  • +
  • +

    Generate the model classes from WSDL

    +
  • +
+
+
+

The last option tends to be the easiest and most flexible for client applications.

+
+
+ + + + + +
+ + +If you want to use this approach, please first follow the Generate Java from WSDL section and then continue with the next steps. +
+
+
+
+
+

Using SEI as a client

+
+
+

In our case, the Service Endpoint Interface (SEI) is org.jboss.eap.quickstarts.wscalculator.calculator.CalculatorService.

+
+
+

As usual on Quarkus, we can obtain an instance of it via CDI.

+
+
+

To make it testable easily, we’ll wrap it in a REST service:

+
+
+
CxfClientResource.java
+
+
package io.quarkiverse.cxf.client.it;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+
+import org.jboss.eap.quickstarts.wscalculator.calculator.CalculatorService;
+
+import io.quarkiverse.cxf.annotation.CXFClient;
+
+@Path("/cxf/calculator-client")
+public class CxfClientRestResource {
+
+    @CXFClient("myCalculator") (1)
+    CalculatorService myCalculator;
+
+    @GET
+    @Path("/add")
+    @Produces(MediaType.TEXT_PLAIN)
+    public int add(@QueryParam("a") int a, @QueryParam("b") int b) {
+        return myCalculator.add(a, b); (2)
+    }
+
+}
+
+
+
+ + + + + + + + + +
1Let the CDI container inject an instance of the client. @CXFClient("myCalculator") is actually equivalent to @Inject @CXFClient("myCalculator")
2Invoke the add operation thus calling the remote Web service
+
+
+

Is this all we need for the client to work? +- No, in addition to the above, we need to tell a few other things to the CXF Quarkus extension in application.properties:

+
+
+
application.properties
+
+
cxf.it.calculator.baseUri=http://localhost:8082
+quarkus.cxf.client.myCalculator.wsdl=${cxf.it.calculator.baseUri}/calculator-ws/CalculatorService?wsdl
+quarkus.cxf.client.myCalculator.client-endpoint-url=${cxf.it.calculator.baseUri}/calculator-ws/CalculatorService
+quarkus.cxf.client.myCalculator.service-interface=org.jboss.eap.quickstarts.wscalculator.calculator.CalculatorService
+
+
+
+ + + + + +
+ + +All client configuration properties are documented in the Configuration properties reference. +
+
+
+

With all the above files in place, we should be able to start the application in Quarkus dev mode

+
+
+
+
$ mvn quarkus:dev
+...
+INFO  [io.quarkus] (Quarkus Main Thread) ... Listening on: http://localhost:8080
+
+
+
+

and test it by sending some requests to it:

+
+
+
+
$ curl -s 'http://localhost:8080/cxf/calculator-client/add?a=5&b=6'
+11
+
+
+
+

where 11 is the correct result of adding 5 and 6.

+
+
+
+
+

Further steps

+
+
+

You may want to proceed with

+
+ +
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/1.5/user-guide/first-soap-web-service.html b/quarkus-cxf/1.5/user-guide/first-soap-web-service.html new file mode 100644 index 0000000000..7ebd1d6406 --- /dev/null +++ b/quarkus-cxf/1.5/user-guide/first-soap-web-service.html @@ -0,0 +1,1297 @@ + + + + + + Your first SOAP Web service on Quarkus :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Your first SOAP Web service on Quarkus

+
+
+
+

In this guide we explain how to create a Quarkus application exposing a simple SOAP Web service.

+
+
+ + + + + +
+ + +Follow the Project creation guide before proceeding here. +
+
+
+
+
+

Hello world! Web service

+
+
+

Having the pom.xml in place, you can add a simple Hello world! Web service in src/main/java.

+
+
+ + + + + +
+ + +The sample code snippets used in this section come from the + server integration test + in the source tree of CXF Extensions for Quarkus +
+
+
+

First add the service interface:

+
+
+
HelloService.java
+
+
package io.quarkiverse.cxf.it.server;
+
+import javax.jws.WebMethod;
+import javax.jws.WebService;
+
+/**
+ * The simplest Hello service.
+ */
+@WebService(name = "HelloService", serviceName = "HelloService")
+public interface HelloService {
+
+    @WebMethod
+    String hello(String text);
+
+}
+
+
+
+

and then the implementation:

+
+
+
HelloServiceImpl.java
+
+
package io.quarkiverse.cxf.it.server;
+
+import javax.jws.WebMethod;
+import javax.jws.WebService;
+
+/**
+ * The simplest Hello service implementation.
+ */
+@WebService(serviceName = "HelloService")
+public class HelloServiceImpl implements HelloService {
+
+    @WebMethod
+    @Override
+    public String hello(String text) {
+        return "Hello " + text + "!";
+    }
+
+}
+
+
+
+

For the implementation to get exposed under a certain path, you need to add the following configuration to application.properties:

+
+
+
+
# The context path under which all services will be available
+quarkus.cxf.path=/soap
+
+# Publish "HelloService" under the context path /${quarkus.cxf.path}/hello
+quarkus.cxf.endpoint."/hello".implementor=io.quarkiverse.cxf.it.server.HelloServiceImpl
+quarkus.cxf.endpoint."/hello".features=org.apache.cxf.ext.logging.LoggingFeature
+
+
+
+ + + + + +
+ + +All configuration properties are documented in the Configuration properties reference. +
+
+
+

With these files in place, you can start Quarkus in dev mode:

+
+
+
+
$ mvn quarkus:dev
+
+
+
+

This will compile the project and start the application on the background.

+
+
+

You can test the service using curl or some other SOAP client.

+
+
+

First let’s have a look at the auto-generated WSDL under http://localhost:8080/soap/hello?wsdl:

+
+
+
+
$ curl http://localhost:8080/soap/hello?wsdl
+<?xml version='1.0' encoding='UTF-8'?>
+<wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://server.it.cxf.quarkiverse.io/"
+    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http"
+    name="HelloService" targetNamespace="http://server.it.cxf.quarkiverse.io/">
+  <wsdl:types>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://server.it.cxf.quarkiverse.io/" attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="http://server.it.cxf.quarkiverse.io/">
+  <xsd:element name="hello" type="tns:hello"/>
+  <xsd:complexType name="hello">
+    <xsd:sequence>
+      <xsd:element minOccurs="0" name="arg0" type="xsd:string"/>
+    </xsd:sequence>
+  </xsd:complexType>
+  <xsd:element name="helloResponse" type="tns:helloResponse"/>
+  <xsd:complexType name="helloResponse">
+    <xsd:sequence>
+      <xsd:element minOccurs="0" name="return" type="xsd:string"/>
+    </xsd:sequence>
+  </xsd:complexType>
+</xsd:schema>
+  </wsdl:types>
+  <wsdl:message name="helloResponse">
+    <wsdl:part element="tns:helloResponse" name="parameters">
+    </wsdl:part>
+  </wsdl:message>
+  <wsdl:message name="hello">
+    <wsdl:part element="tns:hello" name="parameters">
+    </wsdl:part>
+  </wsdl:message>
+  <wsdl:portType name="HelloService">
+    <wsdl:operation name="hello">
+      <wsdl:input message="tns:hello" name="hello">
+    </wsdl:input>
+      <wsdl:output message="tns:helloResponse" name="helloResponse">
+    </wsdl:output>
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding name="HelloServiceSoapBinding" type="tns:HelloService">
+    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
+    <wsdl:operation name="hello">
+      <soap:operation soapAction="" style="document"/>
+      <wsdl:input name="hello">
+        <soap:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output name="helloResponse">
+        <soap:body use="literal"/>
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:service name="HelloService">
+    <wsdl:port binding="tns:HelloServiceSoapBinding" name="HelloServicePort">
+      <soap:address location="http://localhost:8080/soap/hello"/>
+    </wsdl:port>
+  </wsdl:service>
+</wsdl:definitions>
+
+
+
+

Second, let’s send a SOAP request to the service:

+
+
+
+
$ curl -v -X POST -H "Content-Type: text/xml;charset=UTF-8" \
+    -d \
+      '<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
+        <soap:Body><ns2:hello xmlns:ns2="http://server.it.cxf.quarkiverse.io/"><arg0>World</arg0></ns2:hello></soap:Body>
+       </soap:Envelope>' \
+    http://localhost:8080/soap/hello
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
+  <soap:Body>
+    <ns1:helloResponse xmlns:ns1="http://server.it.cxf.quarkiverse.io/">
+      <return>Hello World!</return>
+    </ns1:helloResponse>
+  </soap:Body>
+</soap:Envelope>
+
+
+
+

Note the expected <return>Hello World!</return> in the SOAP response.

+
+
+
+
+

Add the logging feature while dev mode is running

+
+
+

Sometimes it may come in handy to be able to inspect the SOAP messages received or sent by the server or client. +This is easily doable by adding the quarkus-cxf-rt-features-logging extension to pom.xml.

+
+
+ + + + + +
+ + +Try to do that while Quarkus dev mode is running. + You should see the application being recompiled and redeployed upon saving your changes in the source tree. +
+
+
+
Add this to pom.xml
+
+
<dependency>
+    <groupId>io.quarkiverse.cxf</groupId>
+    <artifactId>quarkus-cxf-rt-features-logging</artifactId>
+</dependency>
+
+
+
+
Enable SOAP payload logging in application.properties
+
+
quarkus.cxf.endpoint."/hello".features=org.apache.cxf.ext.logging.LoggingFeature
+
+
+
+

After that you can send a new SOAP request and see some SOAP payloads in the application console:

+
+
+
+
2023-01-11 22:12:21,315 INFO  [org.apa.cxf.ser.Hel.REQ_IN] (vert.x-worker-thread-0) REQ_IN
+    Address: http://localhost:8080/soap/hello
+    HttpMethod: POST
+    Content-Type: text/xml;charset=UTF-8
+    ExchangeId: af10747a-8477-4c17-bf5f-2a4a3a95d61c
+    ServiceName: HelloService
+    PortName: HelloServicePort
+    PortTypeName: HelloService
+    Headers: {Accept=*/*, User-Agent=curl/7.79.1, content-type=text/xml;charset=UTF-8, Host=localhost:8080, Content-Length=203, x-quarkus-hot-deployment-done=true}
+    Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
+  <soap:Body><ns2:hello xmlns:ns2="http://server.it.cxf.quarkiverse.io/"><arg0>World</arg0></ns2:hello></soap:Body>
+</soap:Envelope>
+
+
+2023-01-11 22:12:21,327 INFO  [org.apa.cxf.ser.Hel.RESP_OUT] (vert.x-worker-thread-0) RESP_OUT
+    Address: http://localhost:8080/soap/hello
+    Content-Type: text/xml
+    ResponseCode: 200
+    ExchangeId: af10747a-8477-4c17-bf5f-2a4a3a95d61c
+    ServiceName: HelloService
+    PortName: HelloServicePort
+    PortTypeName: HelloService
+    Headers: {}
+    Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns1:helloResponse xmlns:ns1="http://server.it.cxf.quarkiverse.io/"><return>Hello World!</return></ns1:helloResponse></soap:Body></soap:Envelope>
+
+
+
+
+
+

Further steps

+ +
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/1.5/user-guide/generate-java-from-wsdl.html b/quarkus-cxf/1.5/user-guide/generate-java-from-wsdl.html new file mode 100644 index 0000000000..757a391679 --- /dev/null +++ b/quarkus-cxf/1.5/user-guide/generate-java-from-wsdl.html @@ -0,0 +1,1119 @@ + + + + + + Generate the Model classes from WSDL :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Generate the Model classes from WSDL

+
+

quarkus-cxf extension supports generating Java classes from WSDL during Quarkus code generation phase.

+
+
+ + + + + +
+ + +The code snippets shown in this section come from the + client integration test + in the source tree of CXF Extensions for Quarkus. + You may want to check it as an executable example. +
+
+
+

You need to set up a couple of things for CXF code generation to work:

+
+
+
    +
  • +

    Have io.quarkiverse.cxf:quarkus-cxf dependency in your project

    +
  • +
  • +

    For Maven projects, the generate-code goal needs to be present in the configuration of quarkus-maven-plugin:

    +
    +
    pom.xml
    +
    +
                <plugin>
    +                <groupId>io.quarkus</groupId>
    +                <artifactId>quarkus-maven-plugin</artifactId>
    +                <executions>
    +                    <execution>
    +                        <goals>
    +                            <goal>build</goal>
    +                            <goal>generate-code</goal>
    +                        </goals>
    +                    </execution>
    +                </executions>
    +            </plugin>
    +
    +
    +
  • +
  • +

    For Gradle projects no additional configurarion of io.quarkus plugin is needed

    +
  • +
  • +

    Put your WSDL files under src/main/resources or src/test/resources or any subdirectory thereof.

    +
  • +
  • +

    Your WSDL file names must end with .wsdl

    +
  • +
  • +

    Set quarkus.cxf.codegen.wsdl2java.includes +configuration property +to a pattern matching the WSDL files you wish to process. +If you want to process all WSDL files under src/main/resources/wsdl or src/test/resources/wsdl, set it as follows:

    +
    +
    application.properties
    +
    +
    quarkus.cxf.codegen.wsdl2java.includes = wsdl/*.wsdl
    +
    +
    +
  • +
+
+
+

This will generate Java classes in target/generated-sources/wsdl2java or +target/generated-test-sources/wsdl2java directory. +They will be automatically picked by the compiler plugin there. +Hence we are free to refer to them from our application or test code.

+
+
+

Note that quarkus-cxf code generation uses the wsdl2Java utility +from CXF under the hood. wsdl2Java is called separately for each WSDL file selected by includes and excludes.

+
+
+

Passing custom parameters to wsdl2java is possible through +quarkus.cxf.codegen.wsdl2java.additional-params +configuration parameter.

+
+
+

If you need different additional-params for each WSDL file, you may want to define a separate named parameter set for +each one of them. Here is an example:

+
+
+
application.properties
+
+
# Parameters for foo.wsdl
+quarkus.cxf.codegen.wsdl2java.foo-params.includes = wsdl/foo.wsdl
+quarkus.cxf.codegen.wsdl2java.foo-params.additional-params = -wsdlLocation,wsdl/foo.wsdl
+# Parameters for bar.wsdl
+quarkus.cxf.codegen.wsdl2java.bar-params.includes = wsdl/bar.wsdl
+quarkus.cxf.codegen.wsdl2java.bar-params.additional-params = -wsdlLocation,wsdl/bar.wsdl,-xjc-Xts
+
+
+
+ + + + + +
+ + +Add io.quarkiverse.cxf:quarkus-cxf-xjc-plugins dependency to your project to be able to use + -xjc-Xbg, -xjc-Xdv, -xjc-Xjavadoc, -xjc-Xproperty-listener, -xjc-Xts and -xjc-Xwsdlextension + wsdl2java parameters. +
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/1.5/user-guide/generate-wsdl-from-java.html b/quarkus-cxf/1.5/user-guide/generate-wsdl-from-java.html new file mode 100644 index 0000000000..a4c7d9fa87 --- /dev/null +++ b/quarkus-cxf/1.5/user-guide/generate-wsdl-from-java.html @@ -0,0 +1,1086 @@ + + + + + + Generate WSDL document from Java :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Generate WSDL document from Java

+
+
+
+

If the WSDL served by your service at http://your-host/your-service?wsdl is not enough +because you e.g. want to distribute it as a Maven artifact, +then you can use java2ws to generate the WSDL document at build time.

+
+
+

You do not need to invoke the java2ws tool provided by CXF directly, +neither you have to use the cxf-java2ws-plugin.

+
+
+

quarkus-cxf wraps java2ws and so you can configure it in application.properties +as any other aspect of your application.

+
+
+

Here is an example:

+
+
+ + + + + +
+ + +The sample code snippets used in this section come from the + server integration test + in the source tree of CXF Extensions for Quarkus +
+
+
+
application.properties
+
+
quarkus.cxf.java2ws.includes=io.quarkiverse.cxf.it.server.HelloService,io.quarkiverse.cxf.it.server.FaultyHelloService
+quarkus.cxf.java2ws.wsdl-name-template=%TARGET_DIR%/Java2wsTest/%SIMPLE_CLASS_NAME%-from-java2ws.wsdl
+
+
+
+

Here we have instructed java2ws to generate WSDLs for two interfaces, +namely HelloService and FaultyHelloService.

+
+
+

Note that the Service interfaces must be annotated with jakarta.xml.ws.WebService to be selected for java2ws processing.

+
+
+

The two generated WSDL documents will be stored as target/Java2wsTest/FaultyHelloService-from-java2ws.wsdl +and target/Java2wsTest/HelloService-from-java2ws.wsdl respectively.

+
+
+ + + + + +
+ + +Unlike wsdl2java which is executed within Quarkus source generation phase, + java2ws is a part Quarkus augmentation that happens after compilation. + The input of java2ws are, after all, Java class files. + Hence you do not need to add <goal>generate-code</goal> to quarkus-maven-plugin + for java2ws. +
+
+
+
+
+

See also

+
+
+ +
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/1.5/user-guide/index.html b/quarkus-cxf/1.5/user-guide/index.html new file mode 100644 index 0000000000..05a4ed2d79 --- /dev/null +++ b/quarkus-cxf/1.5/user-guide/index.html @@ -0,0 +1,1024 @@ + + + + + + User guide :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ + +
+
+
+ + + + + + + diff --git a/quarkus-cxf/1.5/user-guide/jax-ws-handlers.html b/quarkus-cxf/1.5/user-guide/jax-ws-handlers.html new file mode 100644 index 0000000000..082676a92f --- /dev/null +++ b/quarkus-cxf/1.5/user-guide/jax-ws-handlers.html @@ -0,0 +1,1053 @@ + + + + + + JAX-WS Handlers :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

JAX-WS Handlers

+
+

As an alternative to the @HandlerChain annotation, +JAX-WS Handlers can be added +to both your client or server via application.properties:

+
+
+
application.properties
+
+
# A web service endpoint with multiple Handler classes
+quarkus.cxf.endpoint."/greeting-service".handlers=org.acme.MySOAPHandler,org.acme.AnotherSOAPHandler
+
+# A web service client with a single Handler
+quarkus.cxf.client."greeting-client".handlers=org.acme.MySOAPHandler
+
+
+
+

Where MySOAPHandler could look like below:

+
+
+
+
import jakarta.xml.ws.handler.soap.SOAPHandler;
+import jakarta.xml.ws.handler.soap.SOAPMessageContext;
+
+public class MySOAPHandler implements SOAPHandler {
+
+    public boolean handleMessage(SOAPMessageContext messageContext) {
+        SOAPMessage msg = messageContext.getMessage();
+        return true;
+    }
+    // other methods
+}
+
+
+
+ + + + + +
+ + +The SOAPHandler classes will be attempted to be loaded via CDI first. + If no CDI beans are available for the given type, then the no parameters constructor will used + to instantiate each class. +
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/1.5/user-guide/jax-ws-providers.html b/quarkus-cxf/1.5/user-guide/jax-ws-providers.html new file mode 100644 index 0000000000..69dbabd045 --- /dev/null +++ b/quarkus-cxf/1.5/user-guide/jax-ws-providers.html @@ -0,0 +1,1061 @@ + + + + + + JAX-WS Providers :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

JAX-WS Providers

+
+

JAX-WS Providers are fully supported, and can be implemented as shown below.

+
+
+

Given the following sample Provider implementation:

+
+
+
+
import jakarta.xml.transform.stream.StreamSource;
+import jakarta.xml.ws.BindingType;
+import jakarta.xml.ws.Provider;
+import jakarta.xml.ws.Service;
+import jakarta.xml.ws.ServiceMode;
+import jakarta.xml.ws.WebServiceProvider;
+import java.io.StringReader;
+
+@WebServiceProvider
+@ServiceMode(value = Service.Mode.PAYLOAD)
+public class StreamSourcePayloadProvider implements Provider {
+
+    public StreamSourcePayloadProvider() {
+    }
+
+    public StreamSource invoke(StreamSource request) {
+        String payload = StaxUtils.toString(request);
+
+        // Do some interesting things ...
+
+        StreamSource response = new StreamSource(new StringReader(payload));
+        return response;
+    }
+}
+
+
+
+

The application.properties can be configured as shown below.

+
+
+
+
# A web service endpoint with the Provider implementation class
+quarkus.cxf.endpoint."/stream-source".implementor=org.acme.StreamSourcePayloadProvider
+
+
+
+ + + + + +
+ + +Provider classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class. +
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/1.5/user-guide/package-for-jvm-and-native.html b/quarkus-cxf/1.5/user-guide/package-for-jvm-and-native.html new file mode 100644 index 0000000000..15e73a6fb9 --- /dev/null +++ b/quarkus-cxf/1.5/user-guide/package-for-jvm-and-native.html @@ -0,0 +1,1214 @@ + + + + + + Package for running on a JVM or natively :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Package for running on a JVM or natively

+
+
+
+

In this chapter, we explain how to package a Quarkus CXF application for running on a JVM or for running it natively.

+
+
+
+
+

JVM mode

+
+
+

In the introductory guides for SOAP client and SOAP service, we worked only in Quarkus dev mode: +Quarkus tooling was running on the background, +watching for changes in our workspace, recompiling and reloading the application as needed.

+
+
+

How do we run the application on a JVM once we are done with the development?

+
+
+

First we need to package it with Maven:

+
+
+
+
$ mvn package
+
+
+
+

The libraries needed to run the application on a JVM can be found in target/quarkus-app directory:

+
+
+
+
$ ls -lh target/quarkus-app
+drwxr-xr-x. 2 ppalaga ppalaga 4.0K Jan 12 22:29 app
+drwxr-xr-x. 4 ppalaga ppalaga 4.0K Jan 12 22:29 lib
+drwxr-xr-x. 2 ppalaga ppalaga 4.0K Jan 12 22:29 quarkus
+-rw-r--r--. 1 ppalaga ppalaga 6.1K Jan 12 22:29 quarkus-app-dependencies.txt
+-rw-r--r--. 1 ppalaga ppalaga  678 Jan 12 22:29 quarkus-run.jar
+
+
+
+

We can start the application as follows:

+
+
+
+
$ java -jar target/quarkus-app/quarkus-run.jar
+
+
+
+

You can send some SOAP requests using curl to make sure that the application works.

+
+
+
+
+

Native mode

+
+
+

Quarkus offers first class support for building GraalVM native images +and CXF Extensions for Quarkus fully honors that promise too.

+
+
+ + + + + +
+ + +GraalVM native images are platform specific executable files that you can run directly without a JVM. + They boot faster and spend less memory compared to running the same application in JVM mode. +
+
+
+

The pom.xml file generated by code.quarkus.io +contains the native profile needed for building the native image:

+
+
+
+
<profile>
+  <id>native</id>
+  <activation>
+    <property>
+      <name>native</name>
+    </property>
+  </activation>
+  <properties>
+    <skipITs>false</skipITs>
+    <quarkus.package.type>native</quarkus.package.type>
+  </properties>
+</profile>
+
+
+
+

Further, as mentioned above, you need the GraalVM native-image tool.

+
+
+

You should either have it installed locally and have GRAALVM_HOME environment variable set properly, +or — if you only need to produce a Linux native executable — you can use docker.

+
+
+
With local installation of GraalVM
+
+
# Make sure $GRAALVM_HOME is set properly
+$ echo $GRAALVM_HOME
+/home/{user}/.sdkman/candidates/java/{major}.{minor}.r{java-version}-grl
+
+# Produce the native executable
+mvn package -Pnative
+
+
+
+ + + + + +
+ + +Quarkus is quite picky about the GraalVM version. + When using the local installation, always make sure that you use the version preferred by Quarkus. + You can do that by opening quarkus-bom imported in your pom.xml and searching for graalvm there. + If you use Docker, Quarkus takes care for pulling the right version for you. +
+
+
+
With docker
+
+
# Produce the native executable
+mvn package -Pnative -Dquarkus.native.container-build=true
+
+
+
+

This can take a minute or so for a simple application.

+
+
+

When the build is done, the native executable should be available in target directory:

+
+
+
+
$ ls -l target
+...
+-rwxr-xr-x. 1 ppalaga ppalaga  71M Jan 11 22:42 quarkus-cxf-integration-test-server-1.8.0-SNAPSHOT-runner
+...
+
+
+
+

Note the x permission on Linux and the size of just 71 MB.

+
+
+

You can run it as follows:

+
+
+
+
$ target/*-runner
+...
+INFO  [io.quarkus] (main) quarkus-cxf-integration-test-server 1.8.0-SNAPSHOT native (powered by Quarkus
+2.15.2.Final) started in 0.042s. Listening on: http://0.0.0.0:8080
+...
+
+
+
+

Again, you can send some SOAP requests using curl to make sure that the native executable works.

+
+
+

Do not forget to compare the memory usage, time to first request and other performance metrics +with the stack you used before and share your results!

+
+
+
+
+

Native Image: Additional Resources

+ +
+
+

Create container image

+
+
+

Please refer to Quarkus Container image guide.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/1.5/user-guide/soap-payloads-with-jaxb.html b/quarkus-cxf/1.5/user-guide/soap-payloads-with-jaxb.html new file mode 100644 index 0000000000..e9e779cfee --- /dev/null +++ b/quarkus-cxf/1.5/user-guide/soap-payloads-with-jaxb.html @@ -0,0 +1,1308 @@ + + + + + + Complex SOAP payloads with JAXB :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Complex SOAP payloads with JAXB

+
+
+
+

Our introductory guides for Quarkus SOAP client +and SOAP service dealt with services +having only primitive parameters and return values such as integers and strings. +Let’s have a look at passing and receiving more complex objects.

+
+
+

As an example, let’s create an application for managing fruits.

+
+
+ + + + + +
+ + +The sample code snippets used in this section come from the + server integration test + in the source tree of CXF Extensions for Quarkus +
+
+
+

Because our representation of fruit is supposed to be a complex, let’s model it as a Java bean with a couple of attributes:

+
+
+
+
package io.quarkiverse.cxf.it.server;
+
+import java.util.Objects;
+
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+@XmlType(name = "Fruit")
+@XmlRootElement
+public class Fruit {
+
+    private String name;
+
+    private String description;
+
+    public Fruit() {
+    }
+
+    public Fruit(String name, String description) {
+        this.name = name;
+        this.description = description;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    @XmlElement
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    @XmlElement
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (!(obj instanceof Fruit)) {
+            return false;
+        }
+
+        Fruit other = (Fruit) obj;
+
+        return Objects.equals(other.getName(), this.getName());
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(this.getName());
+    }
+}
+
+
+
+

As you may have noticed, we have used some JAXB annotations, +such as @XmlElement, @XmlRootElement and @XmlType. +This is to control the serialization and deserialization of the bean from and to XML.

+
+
+
+
+

Automatic registration for reflection

+
+
+

JAXB is a reflection based serialization framework. +When learning about GraalVM native images, one of the first things you typically hear is +that you have to register classes, fields and methods for reflection at build time. +With plain GraalVM you’d have to do this through reflection-config.json manually. +Well, at least for the classes you have written yourself. +Not so with Quarkus. quarkus-jaxb extension (which quarkus-cxf depends on) +is able to scan your application’s class path for classes annotated with JAXB annotations +and register them for reflection automatically.

+
+
+

Hence working with complex payloads on Quarkus is not different from stock CXF. +The JAXB serialization and deserialization will work out of the box without any additional configuration.

+
+
+
+
+

SEI and implementation

+
+
+

The Service Endpoint Interface (SEI) for managing fruits might look like the following:

+
+
+
+
package io.quarkiverse.cxf.it.server;
+
+import java.util.Set;
+
+import javax.jws.WebMethod;
+import javax.jws.WebService;
+
+@WebService
+public interface FruitService {
+
+    @WebMethod
+    Set<Fruit> list();
+
+    @WebMethod
+    Set<Fruit> add(Fruit fruit);
+
+    @WebMethod
+    Set<Fruit> delete(Fruit fruit);
+}
+
+
+
+

We can implement the SEI as simply as possible:

+
+
+
+
package io.quarkiverse.cxf.it.server;
+
+import java.util.Collections;
+import java.util.LinkedHashSet;
+import java.util.Set;
+
+import javax.jws.WebService;
+
+@WebService(serviceName = "FruitService")
+public class FruitServiceImpl implements FruitService {
+
+    private Set<Fruit> fruits = Collections.synchronizedSet(new LinkedHashSet<>());
+
+    public FruitServiceImpl() {
+        fruits.add(new Fruit("Apple", "Winter fruit"));
+        fruits.add(new Fruit("Pineapple", "Tropical fruit"));
+    }
+
+    @Override
+    public Set<Fruit> list() {
+        return fruits;
+    }
+
+    @Override
+    public Set<Fruit> add(Fruit fruit) {
+        fruits.add(fruit);
+        return fruits;
+    }
+
+    @Override
+    public Set<Fruit> delete(Fruit fruit) {
+        fruits.remove(fruit);
+        return fruits;
+    }
+}
+
+
+
+
+
+

application.properties

+
+
+

The implementation is pretty straightforward and you just need to define your endpoints using the application.properties.

+
+
+
+
quarkus.cxf.endpoint."/fruits".implementor=io.quarkiverse.cxf.it.server.FruitServiceImpl
+quarkus.cxf.endpoint."/fruits".features=org.apache.cxf.ext.logging.LoggingFeature
+
+
+
+
+
+

Test with Quarkus dev mode and curl

+
+
+

Having the above files in place, you can start Quarkus tooling in dev mode:

+
+
+
+
$ mvn quarkus:dev
+...
+INFO  [io.quarkus] (Quarkus Main Thread) ... Listening on: http://localhost:8080
+
+
+
+

and then check whether the service is working by invoking its list operation:

+
+
+
+
$ curl -v -X POST -H "Content-Type: text/xml;charset=UTF-8" \
+    -d \
+      '<soapenv:Envelope
+      xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
+      xmlns:ns1="http://server.it.cxf.quarkiverse.io/">
+        <soapenv:Body>
+            <ns1:list/>
+        </soapenv:Body>
+    </soapenv:Envelope>' \
+    http://localhost:8080/soap/fruits
+...
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
+  <soap:Body>
+    <ns1:listResponse xmlns:ns1="http://server.it.cxf.quarkiverse.io/">
+      <return xmlns:ns2="http://server.it.cxf.quarkiverse.io/">
+        <description>Winter fruit</description>
+        <name>Apple</name>
+      </return>
+      <return xmlns:ns2="http://server.it.cxf.quarkiverse.io/">
+        <description>Tropical fruit</description>
+        <name>Pineapple</name>
+      </return>
+    </ns1:listResponse>
+  </soap:Body>
+</soap:Envelope>
+
+
+
+

As you can see, the endpoint has returned the two fruits Apple and Pineapple available by default.

+
+
+

Now let’s add another fruit, say an Orange:

+
+
+
+
$ curl -v -X POST -H "Content-Type: text/xml;charset=UTF-8" \
+    -d \
+     '<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
+        <soap:Body>
+          <ns2:add xmlns:ns2="http://server.it.cxf.quarkiverse.io/">
+            <arg0>
+              <description>Mediterranean fruit</description>
+              <name>Orange</name>
+            </arg0>
+          </ns2:add>
+       </soap:Body></soap:Envelope>' \
+    http://localhost:8080/soap/fruits
+...
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
+  <soap:Body>
+    <ns1:addResponse xmlns:ns1="http://server.it.cxf.quarkiverse.io/">
+      <return xmlns:ns2="http://server.it.cxf.quarkiverse.io/">
+        <description>Winter fruit</description>
+        <name>Apple</name>
+      </return>
+      <return xmlns:ns2="http://server.it.cxf.quarkiverse.io/">
+        <description>Tropical fruit</description>
+        <name>Pineapple</name>
+      </return>
+      <return xmlns:ns2="http://server.it.cxf.quarkiverse.io/">
+        <description>Mediterranean fruit</description>
+        <name>Orange</name>
+      </return>
+    </ns1:addResponse>
+  </soap:Body>
+</soap:Envelope>
+
+
+
+

We can see Orange having been added in the returned list as expected.

+
+
+
+
+

Further steps

+ +
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/1.5/user-guide/supported-soap-binding.html b/quarkus-cxf/1.5/user-guide/supported-soap-binding.html new file mode 100644 index 0000000000..3782108714 --- /dev/null +++ b/quarkus-cxf/1.5/user-guide/supported-soap-binding.html @@ -0,0 +1,1037 @@ + + + + + + Supported SOAP Bindings :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Supported SOAP Bindings

+
+

By default, a SOAP 1.1 binding is used. In order to switch to SOAP 1.2 and/or support MTOM, the config quarkus.cxf.endpoint.key.soap-binding must be set to one of the following values:

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

Binding

Property Value

SOAP 1.1

http://schemas.xmlsoap.org/wsdl/soap/http

SOAP 1.2

http://www.w3.org/2003/05/soap/bindings/HTTP/

SOAP 1.1 with MTOM

http://schemas.xmlsoap.org/wsdl/soap/http?mtom=true

SOAP 1.2 with MTOM

http://www.w3.org/2003/05/soap/bindings/HTTP/?mtom=true

+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/2.2/_images/code.quarkus.io.png b/quarkus-cxf/2.2/_images/code.quarkus.io.png new file mode 100644 index 0000000000..5275792d9f Binary files /dev/null and b/quarkus-cxf/2.2/_images/code.quarkus.io.png differ diff --git a/quarkus-cxf/2.2/includes/quarkus-cxf.html b/quarkus-cxf/2.2/includes/quarkus-cxf.html new file mode 100644 index 0000000000..fd3710813b --- /dev/null +++ b/quarkus-cxf/2.2/includes/quarkus-cxf.html @@ -0,0 +1,2575 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The default path for CXF resources.

+
+
+

⚠️ Note that the default value before Quarkus CXF version 2.0.0 was /.

+
+
+

Environment variable: QUARKUS_CXF_PATH

+
+
+

string

/services

+
+
+
+

If true wsdl2java code generation is run whenever there are WSDL resources found on default or custom defined locations; otherwise wsdl2java is not executed.

+
+
+

Environment variable: QUARKUS_CXF_CODEGEN_WSDL2JAVA_ENABLED

+
+
+

boolean

true

+
+
+
+

A comma separated list of glob patterns for selecting WSDL files which should be processed with wsdl2java tool. The paths are relative to src/main/resources or src/test/resources directories of the current Maven or Gradle module. The glob syntax is specified in io.quarkus.util.GlobUtil.

+
+
+

Examples:

+
+
+
    +
  • +

    calculator.wsdl,fruits.wsdl will match src/main/resources/calculator.wsdl and src/main/resources/fruits.wsdl under the current Maven or Gradle module, but will not match anything like src/main/resources/subdir/calculator.wsdl

    +
  • +
  • +

    my-*-service.wsdl will match src/main/resources/my-foo-service.wsdl and src/main/resources/my-bar-service.wsdl

    +
  • +
  • +

    **.wsdl will match any of the above There is a separate wsdl2java execution for each of the matching WSDL files. If you need different additional-params for each WSDL file, you may want to define a separate named parameter set for each one of them. Here is an example:

    +
  • +
+
+
+
+
# Parameters for foo.wsdl
+quarkus.cxf.codegen.wsdl2java.foo-params.includes = wsdl/foo.wsdl
+quarkus.cxf.codegen.wsdl2java.foo-params.additional-params = -wsdlLocation,wsdl/foo.wsdl
+# Parameters for bar.wsdl
+quarkus.cxf.codegen.wsdl2java.bar-params.includes = wsdl/bar.wsdl
+quarkus.cxf.codegen.wsdl2java.bar-params.additional-params = -wsdlLocation,wsdl/bar.wsdl,-xjc-Xts
+
+
+
+

Note that file extensions other than .wsdl will work during normal builds, but changes in the matching files may get overseen in Quarkus dev mode. Always using the .wsdl extension is thus recommended.

+
+
+

There is no default value for this option, so wsdl2java code generation is disabled by default.

+
+
+

Specifying quarkus.cxf.codegen.wsdl2java.my-name.excludes without setting any includes will cause a build time error.

+
+
+

Make sure that the file sets selected by quarkus.cxf.codegen.wsdl2java.includes and quarkus.cxf.codegen.wsdl2java.[whatever-name].includes do not overlap. Otherwise a build time exception will be thrown.

+
+
+

The files from src/main/resources selected by includes and excludes are automatically included in native image and therefore you do not need to include them via quarkus.cxf.wsdl-path (deprecated) or quarkus.native.resources.includes/excludes.

+
+
+

Environment variable: QUARKUS_CXF_CODEGEN_WSDL2JAVA_INCLUDES

+
+
+

list of string

+
+
+
+

A comma separated list of path patterns for selecting WSDL files which should not be processed with wsdl2java tool. The paths are relative to src/main/resources or src/test/resources directories of the current Maven or Gradle module. Same syntax as includes.

+
+
+

Environment variable: QUARKUS_CXF_CODEGEN_WSDL2JAVA_EXCLUDES

+
+
+

list of string

+
+
+
+

A comma separated list of additional command line parameters that should passed to CXF wsdl2java tool along with the files selected by includes and excludes. Example: -wsdlLocation,classpath:wsdl/CalculatorService.wsdl. Check wsdl2java documentation for all supported options.

+
+
+

You need to add io.quarkiverse.cxf:quarkus-cxf-xjc-plugins dependency to your project to be able to use -xjc-Xbg, -xjc-Xdv, -xjc-Xjavadoc, -xjc-Xproperty-listener, -xjc-Xts or -xjc-Xwsdlextension.

+
+
+

Environment variable: QUARKUS_CXF_CODEGEN_WSDL2JAVA_ADDITIONAL_PARAMS

+
+
+

list of string

+
+
+
+

If true java2ws WSDL generation is run whenever there are Java classes selected via includes and excludes options; otherwise java2ws is not executed.

+
+
+

Environment variable: QUARKUS_CXF_JAVA2WS_ENABLED

+
+
+

boolean

true

+
+
+
+

A comma separated list of glob patterns for selecting class names which should be processed with java2ws tool. The glob syntax is specified in io.quarkus.util.GlobUtil. The patterns are matched against fully qualified class names, such as org.acme.MyClass.

+
+
+

The universe of class names to which includes and excludes are applied is defined as follows: 1. Only classes visible in Jandex are considered. 2. From those, only the ones annotated with @WebService are selected.

+
+
+

Examples:

+
+
+

Let’s say that the application contains two classes annotated with @WebService and that both are visible in Jandex. Their names are org.foo.FruitWebService and org.bar.HelloWebService.

+
+
+

Then

+
+
+
    +
  • +

    quarkus.cxf.java2ws.includes = **.*WebService will match both class names

    +
  • +
  • +

    quarkus.cxf.java2ws.includes = org.foo.* will match only org.foo.FruitWebService There is a separate java2ws execution for each of the matching class names. If you need different additional-params for each class, you may want to define a separate named parameter set for each one of them. Here is an example:

    +
  • +
+
+
+
+
# Parameters for the foo package
+quarkus.cxf.java2ws.foo-params.includes = org.foo.*
+quarkus.cxf.java2ws.foo-params.additional-params = -servicename,FruitService
+# Parameters for the bar package
+quarkus.cxf.java2ws.bar-params.includes = org.bar.*
+quarkus.cxf.java2ws.bar-params.additional-params = -servicename,HelloService
+
+
+
+

There is no default value for this option, so java2ws WSDL generation is effectively disabled by default.

+
+
+

Specifying quarkus.cxf.java2ws.excludes without setting any includes will cause a build time error.

+
+
+

Make sure that the class names selected by quarkus.cxf.java2ws.includes and quarkus.cxf.java2ws.[whatever-name].includes do not overlap. Otherwise a build time exception will be thrown.

+
+
+

If you would like to include the generated WSDL files in native image, you need to add them yourself using quarkus.native.resources.includes/excludes.

+
+
+

Environment variable: QUARKUS_CXF_JAVA2WS_INCLUDES

+
+
+

list of string

+
+
+
+

A comma separated list of glob patterns for selecting java class names which should not be processed with java2ws tool. Same syntax as includes.

+
+
+

Environment variable: QUARKUS_CXF_JAVA2WS_EXCLUDES

+
+
+

list of string

+
+
+
+

A comma separated list of additional command line parameters that should be passed to CXF java2ws tool along with the files selected by includes and excludes. Example: -portname,12345. Check java2ws documentation for all supported options.

+
+
+

Note that only options related to generation of WSDL from Java are supported currently.

+
+
+

Environment variable: QUARKUS_CXF_JAVA2WS_ADDITIONAL_PARAMS

+
+
+

list of string

+
+
+
+

A template for the names of generated WSDL files.

+
+
+

There are 4 place holders, which can be used in the template:

+
+
+
    +
  • +

    %SIMPLE_CLASS_NAME% - the simple class name of the Java class from which we are generating

    +
  • +
  • +

    %FULLY_QUALIFIED_CLASS_NAME% - the fully qualified name from which we are generating with all dots are replaced replaced by underscores

    +
  • +
  • +

    %TARGET_DIR% - the target directory of the current module of the current build tool; typically target for Maven and build for Gradle.

    +
  • +
  • +

    %CLASSES_DIR% - the compiler output directory of the current module of the current build tool; typically target/classes for Maven and build/classes for Gradle.

    +
  • +
+
+
+

Environment variable: QUARKUS_CXF_JAVA2WS_WSDL_NAME_TEMPLATE

+
+
+

string

%CLASSES_DIR%/wsdl/%SIMPLE_CLASS_NAME%.wsdl

+
+
+
+

Select the HTTPConduitFactory implementation for all clients except the ones that override this setting via quarkus.cxf.client.myClient.http-conduit-factory.

+
+
+
    +
  • +

    QuarkusCXFDefault (default): if io.quarkiverse.cxf:quarkus-cxf-rt-transports-http-hc5 is present in class path, then its HTTPConduitFactory implementation will be used; otherwise this value is equivalent with URLConnectionHTTPConduitFactory (this may change, once issue #992 gets resolved in CXF)

    +
  • +
  • +

    CXFDefault: the selection of HTTPConduitFactory implementation is left to CXF

    +
  • +
  • +

    HttpClientHTTPConduitFactory: the HTTPConduitFactory will be set to an implementation always returning org.apache.cxf.transport.http.HttpClientHTTPConduit. This will use java.net.http.HttpClient as the underlying HTTP client.

    +
  • +
  • +

    URLConnectionHTTPConduitFactory: the HTTPConduitFactory will be set to an implementation always returning org.apache.cxf.transport.http.URLConnectionHTTPConduit. This will use java.net.HttpURLConnection as the underlying HTTP client.

    +
  • +
+
+
+

Environment variable: QUARKUS_CXF_HTTP_CONDUIT_FACTORY

+
+
+
+

QuarkusCXFDefault, CXFDefault, HttpClientHTTPConduitFactory, URLConnectionHTTPConduitFactory

+
+
+
+
+

The size in bytes of the chunks of memory allocated when writing data.

+
+
+

This is a very advanced setting that should only be set if you understand exactly how it affects the output IO operations of the application.

+
+
+

Environment variable: QUARKUS_CXF_MIN_CHUNK_SIZE

+
+
+

int

128

+
+
+
+

The size of the output stream response buffer in bytes. If a response is larger than this and no content-length is provided then the response will be chunked.

+
+
+

Larger values may give slight performance increases for large responses, at the expense of more memory usage.

+
+
+

Environment variable: QUARKUS_CXF_OUTPUT_BUFFER_SIZE

+
+
+

int

8191

+
+
+
+

A comma separated list of glob patterns for selecting WSDL files which should be processed with wsdl2java tool. The paths are relative to src/main/resources or src/test/resources directories of the current Maven or Gradle module. The glob syntax is specified in io.quarkus.util.GlobUtil.

+
+
+

Examples:

+
+
+
    +
  • +

    calculator.wsdl,fruits.wsdl will match src/main/resources/calculator.wsdl and src/main/resources/fruits.wsdl under the current Maven or Gradle module, but will not match anything like src/main/resources/subdir/calculator.wsdl

    +
  • +
  • +

    my-*-service.wsdl will match src/main/resources/my-foo-service.wsdl and src/main/resources/my-bar-service.wsdl

    +
  • +
  • +

    **.wsdl will match any of the above There is a separate wsdl2java execution for each of the matching WSDL files. If you need different additional-params for each WSDL file, you may want to define a separate named parameter set for each one of them. Here is an example:

    +
  • +
+
+
+
+
# Parameters for foo.wsdl
+quarkus.cxf.codegen.wsdl2java.foo-params.includes = wsdl/foo.wsdl
+quarkus.cxf.codegen.wsdl2java.foo-params.additional-params = -wsdlLocation,wsdl/foo.wsdl
+# Parameters for bar.wsdl
+quarkus.cxf.codegen.wsdl2java.bar-params.includes = wsdl/bar.wsdl
+quarkus.cxf.codegen.wsdl2java.bar-params.additional-params = -wsdlLocation,wsdl/bar.wsdl,-xjc-Xts
+
+
+
+

Note that file extensions other than .wsdl will work during normal builds, but changes in the matching files may get overseen in Quarkus dev mode. Always using the .wsdl extension is thus recommended.

+
+
+

There is no default value for this option, so wsdl2java code generation is disabled by default.

+
+
+

Specifying quarkus.cxf.codegen.wsdl2java.my-name.excludes without setting any includes will cause a build time error.

+
+
+

Make sure that the file sets selected by quarkus.cxf.codegen.wsdl2java.includes and quarkus.cxf.codegen.wsdl2java.[whatever-name].includes do not overlap. Otherwise a build time exception will be thrown.

+
+
+

The files from src/main/resources selected by includes and excludes are automatically included in native image and therefore you do not need to include them via quarkus.cxf.wsdl-path (deprecated) or quarkus.native.resources.includes/excludes.

+
+
+

Environment variable: QUARKUS_CXF_CODEGEN_WSDL2JAVA__NAMED_PARAMETER_SETS__INCLUDES

+
+
+

list of string

+
+
+
+

A comma separated list of path patterns for selecting WSDL files which should not be processed with wsdl2java tool. The paths are relative to src/main/resources or src/test/resources directories of the current Maven or Gradle module. Same syntax as includes.

+
+
+

Environment variable: QUARKUS_CXF_CODEGEN_WSDL2JAVA__NAMED_PARAMETER_SETS__EXCLUDES

+
+
+

list of string

+
+
+
+

A comma separated list of additional command line parameters that should passed to CXF wsdl2java tool along with the files selected by includes and excludes. Example: -wsdlLocation,classpath:wsdl/CalculatorService.wsdl. Check wsdl2java documentation for all supported options.

+
+
+

You need to add io.quarkiverse.cxf:quarkus-cxf-xjc-plugins dependency to your project to be able to use -xjc-Xbg, -xjc-Xdv, -xjc-Xjavadoc, -xjc-Xproperty-listener, -xjc-Xts or -xjc-Xwsdlextension.

+
+
+

Environment variable: QUARKUS_CXF_CODEGEN_WSDL2JAVA__NAMED_PARAMETER_SETS__ADDITIONAL_PARAMS

+
+
+

list of string

+
+
+
+

A comma separated list of glob patterns for selecting class names which should be processed with java2ws tool. The glob syntax is specified in io.quarkus.util.GlobUtil. The patterns are matched against fully qualified class names, such as org.acme.MyClass.

+
+
+

The universe of class names to which includes and excludes are applied is defined as follows: 1. Only classes visible in Jandex are considered. 2. From those, only the ones annotated with @WebService are selected.

+
+
+

Examples:

+
+
+

Let’s say that the application contains two classes annotated with @WebService and that both are visible in Jandex. Their names are org.foo.FruitWebService and org.bar.HelloWebService.

+
+
+

Then

+
+
+
    +
  • +

    quarkus.cxf.java2ws.includes = **.*WebService will match both class names

    +
  • +
  • +

    quarkus.cxf.java2ws.includes = org.foo.* will match only org.foo.FruitWebService There is a separate java2ws execution for each of the matching class names. If you need different additional-params for each class, you may want to define a separate named parameter set for each one of them. Here is an example:

    +
  • +
+
+
+
+
# Parameters for the foo package
+quarkus.cxf.java2ws.foo-params.includes = org.foo.*
+quarkus.cxf.java2ws.foo-params.additional-params = -servicename,FruitService
+# Parameters for the bar package
+quarkus.cxf.java2ws.bar-params.includes = org.bar.*
+quarkus.cxf.java2ws.bar-params.additional-params = -servicename,HelloService
+
+
+
+

There is no default value for this option, so java2ws WSDL generation is effectively disabled by default.

+
+
+

Specifying quarkus.cxf.java2ws.excludes without setting any includes will cause a build time error.

+
+
+

Make sure that the class names selected by quarkus.cxf.java2ws.includes and quarkus.cxf.java2ws.[whatever-name].includes do not overlap. Otherwise a build time exception will be thrown.

+
+
+

If you would like to include the generated WSDL files in native image, you need to add them yourself using quarkus.native.resources.includes/excludes.

+
+
+

Environment variable: QUARKUS_CXF_JAVA2WS__NAMED_PARAMETER_SETS__INCLUDES

+
+
+

list of string

+
+
+
+

A comma separated list of glob patterns for selecting java class names which should not be processed with java2ws tool. Same syntax as includes.

+
+
+

Environment variable: QUARKUS_CXF_JAVA2WS__NAMED_PARAMETER_SETS__EXCLUDES

+
+
+

list of string

+
+
+
+

A comma separated list of additional command line parameters that should be passed to CXF java2ws tool along with the files selected by includes and excludes. Example: -portname,12345. Check java2ws documentation for all supported options.

+
+
+

Note that only options related to generation of WSDL from Java are supported currently.

+
+
+

Environment variable: QUARKUS_CXF_JAVA2WS__NAMED_PARAMETER_SETS__ADDITIONAL_PARAMS

+
+
+

list of string

+
+
+
+

A template for the names of generated WSDL files.

+
+
+

There are 4 place holders, which can be used in the template:

+
+
+
    +
  • +

    %SIMPLE_CLASS_NAME% - the simple class name of the Java class from which we are generating

    +
  • +
  • +

    %FULLY_QUALIFIED_CLASS_NAME% - the fully qualified name from which we are generating with all dots are replaced replaced by underscores

    +
  • +
  • +

    %TARGET_DIR% - the target directory of the current module of the current build tool; typically target for Maven and build for Gradle.

    +
  • +
  • +

    %CLASSES_DIR% - the compiler output directory of the current module of the current build tool; typically target/classes for Maven and build/classes for Gradle.

    +
  • +
+
+
+

Environment variable: QUARKUS_CXF_JAVA2WS__NAMED_PARAMETER_SETS__WSDL_NAME_TEMPLATE

+
+
+

string

%CLASSES_DIR%/wsdl/%SIMPLE_CLASS_NAME%.wsdl

+
+
+
+

The client service interface class name

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SERVICE_INTERFACE

+
+
+

string

+
+
+
+

Indicates whether this is an alternative proxy client configuration. If true, then this configuration is ignored when configuring a client without annotation @CXFClient.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__ALTERNATIVE

+
+
+

boolean

false

+
+
+
+

If true, the client dynamic proxy class generated by native compiler will be initialized at runtime; otherwise the proxy class will be initialized at build time.

+
+
+

Setting this to true makes sense if your service endpoint interface references some class initialized at runtime in its method signatures. E.g. Say, your service interface has method int add(Operands o) and the Operands class was requested to be initialized at runtime. Then, without setting this configuration parameter to true, the native compiler will throw an exception saying something like Classes that should be initialized at run time got initialized during image building: org.acme.Operands …​ jdk.proxy<some-number>.$Proxy<some-number> caused initialization of this class. jdk.proxy<some-number>.$Proxy<some-number> is the proxy class generated by the native compiler.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__NATIVE_RUNTIME_INITIALIZED

+
+
+

boolean

false

+
+
+
+

The service endpoint implementation class

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__IMPLEMENTOR

+
+
+

string

+
+
+
+

The service endpoint WSDL path

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__WSDL

+
+
+

string

+
+
+
+

The URL of the SOAP Binding, should be one of four values:

+
+
+
    +
  • +

    http://schemas.xmlsoap.org/wsdl/soap/http for SOAP11HTTP_BINDING

    +
  • +
  • +

    http://schemas.xmlsoap.org/wsdl/soap/http?mtom=true for SOAP11HTTP_MTOM_BINDING

    +
  • +
  • +

    http://www.w3.org/2003/05/soap/bindings/HTTP/ for SOAP12HTTP_BINDING

    +
  • +
  • +

    http://www.w3.org/2003/05/soap/bindings/HTTP/?mtom=true for SOAP12HTTP_MTOM_BINDING

    +
  • +
+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SOAP_BINDING

+
+
+

string

+
+
+
+

The published service endpoint URL

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__PUBLISHED_ENDPOINT_URL

+
+
+

string

+
+
+
+

A comma-separated list of fully qualified CXF Feature class names or named CDI beans.

+
+
+

Examples:

+
+
+
+
quarkus.cxf.endpoint."/hello".features = org.apache.cxf.ext.logging.LoggingFeature
+quarkus.cxf.endpoint."/fruit".features = #myCustomLoggingFeature
+
+
+
+

In the second case, the #myCustomLoggingFeature bean can be produced as follows:

+
+
+
+
import org.apache.cxf.ext.logging.LoggingFeature;
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.Produces;
+
+class Producers {
+
+    @Produces
+    @ApplicationScoped
+    LoggingFeature myCustomLoggingFeature() {
+        LoggingFeature loggingFeature = new LoggingFeature();
+        loggingFeature.setPrettyLogging(true);
+        return loggingFeature;
+    }
+}
+
+
+
+

Note that the LoggingFeature is available through the Logging Feature extension.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__FEATURES

+
+
+

list of string

+
+
+
+

The comma-separated list of Handler classes

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__HANDLERS

+
+
+

list of string

+
+
+
+

The comma-separated list of InInterceptor classes

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__IN_INTERCEPTORS

+
+
+

list of string

+
+
+
+

The comma-separated list of OutInterceptor classes

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__OUT_INTERCEPTORS

+
+
+

list of string

+
+
+
+

The comma-separated list of OutFaultInterceptor classes

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__OUT_FAULT_INTERCEPTORS

+
+
+

list of string

+
+
+
+

The comma-separated list of InFaultInterceptor classes

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__IN_FAULT_INTERCEPTORS

+
+
+

list of string

+
+
+
+

The client WSDL path

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__WSDL

+
+
+

string

+
+
+
+

The URL of the SOAP Binding, should be one of four values:

+
+
+
    +
  • +

    http://schemas.xmlsoap.org/wsdl/soap/http for SOAP11HTTP_BINDING

    +
  • +
  • +

    http://schemas.xmlsoap.org/wsdl/soap/http?mtom=true for SOAP11HTTP_MTOM_BINDING

    +
  • +
  • +

    http://www.w3.org/2003/05/soap/bindings/HTTP/ for SOAP12HTTP_BINDING

    +
  • +
  • +

    http://www.w3.org/2003/05/soap/bindings/HTTP/?mtom=true for SOAP12HTTP_MTOM_BINDING

    +
  • +
+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SOAP_BINDING

+
+
+

string

+
+
+
+

The client endpoint URL

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__CLIENT_ENDPOINT_URL

+
+
+

string

+
+
+
+

The client endpoint namespace

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__ENDPOINT_NAMESPACE

+
+
+

string

+
+
+
+

The client endpoint name

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__ENDPOINT_NAME

+
+
+

string

+
+
+
+

The username for HTTP Basic auth

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__USERNAME

+
+
+

string

+
+
+
+

The password for HTTP Basic auth

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__PASSWORD

+
+
+

string

+
+
+
+

A comma-separated list of fully qualified CXF Feature class names.

+
+
+

Example:

+
+
+
+
quarkus.cxf.endpoint.myClient.features = org.apache.cxf.ext.logging.LoggingFeature
+
+
+
+

Note that the LoggingFeature is available through the Logging Feature extension.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__FEATURES

+
+
+

list of string

+
+
+
+

The comma-separated list of Handler classes

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__HANDLERS

+
+
+

list of string

+
+
+
+

The comma-separated list of InInterceptor classes

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__IN_INTERCEPTORS

+
+
+

list of string

+
+
+
+

The comma-separated list of OutInterceptor classes

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__OUT_INTERCEPTORS

+
+
+

list of string

+
+
+
+

The comma-separated list of OutFaultInterceptor classes

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__OUT_FAULT_INTERCEPTORS

+
+
+

list of string

+
+
+
+

The comma-separated list of InFaultInterceptor classes

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__IN_FAULT_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Specifies the amount of time, in milliseconds, that the consumer will attempt to establish a connection before it times out. 0 is infinite.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__CONNECTION_TIMEOUT

+
+
+

long

30000

+
+
+
+

Specifies the amount of time, in milliseconds, that the consumer will wait for a response before it times out. 0 is infinite.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__RECEIVE_TIMEOUT

+
+
+

long

60000

+
+
+
+

Specifies the amount of time, in milliseconds, used when requesting a connection from the connection manager(if appliable). 0 is infinite.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__CONNECTION_REQUEST_TIMEOUT

+
+
+

long

60000

+
+
+
+

Specifies if the consumer will automatically follow a server issued redirection. (name is not part of standard)

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__AUTO_REDIRECT

+
+
+

boolean

false

+
+
+
+

Specifies the maximum amount of retransmits that are allowed for redirects. Retransmits for authorization is included in the retransmit count. Each redirect may cause another retransmit for a UNAUTHORIZED response code, ie. 401. Any negative number indicates unlimited retransmits, although, loop protection is provided. The default is unlimited. (name is not part of standard)

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__MAX_RETRANSMITS

+
+
+

int

-1

+
+
+
+

If true, the client is free to use chunking streams if it wants, but it is not required to use chunking streams. If false, the client must use regular, non-chunked requests in all cases.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__ALLOW_CHUNKING

+
+
+

boolean

true

+
+
+
+

If AllowChunking is true, this sets the threshold at which messages start getting chunked. Messages under this limit do not get chunked.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__CHUNKING_THRESHOLD

+
+
+

int

4096

+
+
+
+

Specifies the chunk length for a HttpURLConnection. This value is used in java.net.HttpURLConnection.setChunkedStreamingMode(int chunklen). chunklen indicates the number of bytes to write in each chunk. If chunklen is less than or equal to zero, a default value will be used.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__CHUNK_LENGTH

+
+
+

int

-1

+
+
+
+

Specifies the MIME types the client is prepared to handle (e.g., HTML, JPEG, GIF, etc.)

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__ACCEPT

+
+
+

string

+
+
+
+

Specifies the language the client desires (e.g., English, French, etc.)

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__ACCEPT_LANGUAGE

+
+
+

string

+
+
+
+

Specifies the encoding the client is prepared to handle (e.g., gzip)

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__ACCEPT_ENCODING

+
+
+

string

+
+
+
+

Specifies the content type of the stream being sent in a post request. (this should be text/xml for web services, or can be set to application/x-www-form-urlencoded if the client is sending form data).

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__CONTENT_TYPE

+
+
+

string

+
+
+
+

Specifies the Internet host and port number of the resource on which the request is being invoked. This is sent by default based upon the URL. Certain DNS scenarios or application designs may request you to set this, but typically it is not required.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__HOST

+
+
+

string

+
+
+
+

The connection disposition. If close the connection to the server is closed after each request/response dialog. If Keep-Alive the client requests the server to keep the connection open, and if the server honors the keep alive request, the connection is reused. Many servers and proxies do not honor keep-alive requests.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__CONNECTION

+
+
+
+

CLOSE, KEEP_ALIVE

+

keep-alive

+
+
+
+

Most commonly used to specify no-cache, however the standard supports a dozen or so caching related directives for requests

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__CACHE_CONTROL

+
+
+

string

+
+
+
+

HTTP Version used for the connection. The "auto" default will use whatever the default is for the HTTPConduit implementation.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__VERSION

+
+
+

string

auto

+
+
+
+

aka User-Agent Specifies the type of browser is sending the request. This is usually only needed when sites have HTML customized to Netscape vs IE, etc, but can also be used to optimize for different SOAP stacks.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__BROWSER_TYPE

+
+
+

string

+
+
+
+

Specifies the URL of a decoupled endpoint for the receipt of responses over a separate provider→consumer connection.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__DECOUPLED_ENDPOINT

+
+
+

string

+
+
+
+

Specifies the address of proxy server if one is used.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__PROXY_SERVER

+
+
+

string

+
+
+
+

Specifies the port number used by the proxy server.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__PROXY_SERVER_PORT

+
+
+

int

+
+
+
+

Specifies the list of hostnames that will not use the proxy configuration. Examples of value: * "localhost" → A single hostname * "localhost|www.google.com" → 2 hostnames that will not use the proxy configuration * "localhost|www.google.*|*.apache.org" → It’s also possible to use a pattern-like value

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__NON_PROXY_HOSTS

+
+
+

string

+
+
+
+

Specifies the type of the proxy server. Can be either HTTP or SOCKS.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__PROXY_SERVER_TYPE

+
+
+
+

http, socks

+

http

+
+
+
+

Username for the proxy authentication

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__PROXY_USERNAME

+
+
+

string

+
+
+
+

Password for the proxy authentication

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__PROXY_PASSWORD

+
+
+

string

+
+
+
+

Select the HTTPConduitFactory implementation for this client.

+
+
+
    +
  • +

    QuarkusCXFDefault (default): if io.quarkiverse.cxf:quarkus-cxf-rt-transports-http-hc5 is present in class path, then its HTTPConduitFactory implementation will be used; otherwise this value is equivalent with URLConnectionHTTPConduitFactory (this may change, once issue #992 gets resolved in CXF)

    +
  • +
  • +

    CXFDefault: the selection of HTTPConduitFactory implementation is left to CXF

    +
  • +
  • +

    HttpClientHTTPConduitFactory: the HTTPConduitFactory for this client will be set to an implementation always returning org.apache.cxf.transport.http.HttpClientHTTPConduit. This will use java.net.http.HttpClient as the underlying HTTP client.

    +
  • +
  • +

    URLConnectionHTTPConduitFactory: the HTTPConduitFactory for this client will be set to an implementation always returning org.apache.cxf.transport.http.URLConnectionHTTPConduit. This will use java.net.HttpURLConnection as the underlying HTTP client.

    +
  • +
+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__HTTP_CONDUIT_FACTORY

+
+
+
+

QuarkusCXFDefault, CXFDefault, HttpClientHTTPConduitFactory, URLConnectionHTTPConduitFactory

+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/2.2/index.html b/quarkus-cxf/2.2/index.html new file mode 100644 index 0000000000..2e1b955636 --- /dev/null +++ b/quarkus-cxf/2.2/index.html @@ -0,0 +1,1084 @@ + + + + + + CXF Extensions for Quarkus :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

CXF Extensions for Quarkus

+
+
+
+

This project aims at porting Apache CXF to Quarkus runtime +including full support for producing GraalVM native images.

+
+
+ + + + + +
+ + +While Apache CXF implements wide range of standards and specifications, +CXF Extensions for Quarkus is currently focusing only on supporting the ones related to +Simple Object Access Protocol (SOAP) +and Java API for XML Web Services (JAX-WS). +Please refer to Reference to learn which parts of CXF are supported. +
+
+
+

The documentation is divided in two major parts:

+
+
+
    +
  • +

    User guide - explains the typical usage of CXF Extensions for Quarkus

    +
  • +
  • +

    Reference - the full list of supported specifications, use cases and configuration options

    +
  • +
+
+
+
+
+

Issues and Support

+
+
+

Please feel free to start a discussion +or open an issue in the GitHub repository in case you need support. +The following general guidelines can be used to determine whether to start a discussion or open an issue.

+
+
+

GitHub Issues

+
+
    +
  • +

    Bug reports

    +
  • +
  • +

    Feature requests

    +
  • +
+
+
+
+

GitHub Discussions

+
+
    +
  • +

    Q&A and general communication

    +
  • +
  • +

    RFCs for new features

    +
  • +
+
+
+

Contributions and pull requests from the community are welcome!

+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/2.2/reference/extensions/quarkus-cxf-rt-features-logging.html b/quarkus-cxf/2.2/reference/extensions/quarkus-cxf-rt-features-logging.html new file mode 100644 index 0000000000..1297851326 --- /dev/null +++ b/quarkus-cxf/2.2/reference/extensions/quarkus-cxf-rt-features-logging.html @@ -0,0 +1,1224 @@ + + + + + + Logging Feature :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Logging Feature

+
+
+
+

Stable • Since 0.14.0

+
+
+

Allows logging HTTP headers and bodies of SOAP requests and responses for both CXF clients and services.

+
+
+
+
+

Maven coordinates

+
+
+

Create a new project using quarkus-cxf-rt-features-logging on code.quarkus.io +or add these coordinates to your existing project:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.cxf</groupId>
+    <artifactId>quarkus-cxf-rt-features-logging</artifactId>
+</dependency>
+
+
+
+ + + + + +
+ + +Check the User guide and especially its + Dependency management section + for more information about writing applications with CXF Extensions for Quarkus. +
+
+
+
+
+

Usage

+
+
+

This extension wraps the CXF org.apache.cxf:cxf-rt-features-logging artifact +thus providing the org.apache.cxf.ext.logging.LoggingFeature class.

+
+
+

LoggingFeature instances can be configured per service or per client. +You can either use a LoggingFeature instance with default settings +or you can produce a custom LoggingFeature CDI bean.

+
+
+

Attaching LoggingFeature to a client or service

+
+

You have two options to do that:

+
+
+
    +
  1. +

    In application.properties:

    +
    +
    +
    # For a service:
    +quarkus.cxf.endpoint."/hello".features=org.apache.cxf.ext.logging.LoggingFeature
    +# For a client:
    +quarkus.cxf.client."myClient".features=org.apache.cxf.ext.logging.LoggingFeature
    +
    +
    +
    + + + + + +
    + + +There is an example in Your first SOAP Web service chapter of the User guide. +
    +
    +
    +

    or alternatively

    +
    +
  2. +
  3. +

    Use the @Features annotation of CXF:

    +
    +
    +
    @org.apache.cxf.feature.Features (features = {"org.apache.cxf.ext.logging.LoggingFeature"})
    +@WebService(endpointInterface = "org.acme.SayHi", targetNamespace = "uri:org.acme")
    +public class SayHiImplementation implements SayHi {
    +   public long sayHi(long arg) {
    +       return arg;
    +   }
    +   //...
    +}
    +
    +
    +
  4. +
+
+
+
+

Custom LoggingFeature

+
+

LoggingFeature offers some attributes that may be worth customizing in some situations.

+
+
+

E.g. if your payloads are complex, you may want to set prettyLogging to true to render them with an indentation. +Or if your messages are big and you need to see them complete in the log, you may want to increase the limit.

+
+
+ + + + + +
+ + +Check the CXF message logging page for all possible LoggingFeature attributes. +
+
+
+

To achieve this, you can produce a custom LoggingFeature bean that is then picked by Quarkus CXF +for clients and services where you specified *.features = org.apache.cxf.ext.logging.LoggingFeature:

+
+
+
+
import org.apache.cxf.ext.logging.LoggingFeature;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.enterprise.inject.Produces;
+
+class Producers {
+
+    @Produces
+    @ApplicationScoped
+    LoggingFeature loggingFeature() {
+        LoggingFeature loggingFeature = new LoggingFeature();
+        loggingFeature.setPrettyLogging(true);
+        loggingFeature.setLimit(Integer.MAX_VALUE);
+        return loggingFeature;
+    }
+}
+
+
+
+
+

Multiple custom LoggingFeatures

+
+

In case you’d like to configure the LoggingFeatures for your individual services or clients differently, +you can so that by defining multiple @Named LoggingFeature beans:

+
+
+
+
import org.apache.cxf.ext.logging.LoggingFeature;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.enterprise.inject.Produces;
+
+class Producers {
+
+    @Produces
+    @ApplicationScoped
+    @Named("limitedLoggingFeature") // "limitedLoggingFeature" is redundant if the name of the method is the same
+    LoggingFeature limitedLoggingFeature() {
+        LoggingFeature loggingFeature = new LoggingFeature();
+        loggingFeature.setLimit(Integer.MAX_VALUE);
+        return loggingFeature;
+    }
+
+    @Produces
+    @ApplicationScoped
+    @Named("prettyLoggingFeature")
+    LoggingFeature prettyLoggingFeature() {
+        LoggingFeature loggingFeature = new LoggingFeature();
+        loggingFeature.setPrettyLogging(true);
+        return loggingFeature;
+    }
+}
+
+
+
+

and then refer to them by their names prefixed with # in application.properties:

+
+
+
+
# For a service:
+quarkus.cxf.endpoint."/hello".features = #limitedLoggingFeature
+# For a client:
+quarkus.cxf.client."myClient".features = #prettyLoggingFeature
+
+
+
+
+
+
+

Configuration

+
+
+

The logging feature can be associated with a SOAP client or service using the following configuration properties:

+
+ +
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/2.2/reference/extensions/quarkus-cxf-rt-features-metrics.html b/quarkus-cxf/2.2/reference/extensions/quarkus-cxf-rt-features-metrics.html new file mode 100644 index 0000000000..bd1fdb37c3 --- /dev/null +++ b/quarkus-cxf/2.2/reference/extensions/quarkus-cxf-rt-features-metrics.html @@ -0,0 +1,1174 @@ + + + + + + Metrics Feature :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Metrics Feature

+
+
+
+

Stable • Since 0.14.0

+
+
+

Collect metrics using Micrometer.

+
+
+ + + + + +
+ + +Dropwizard Metrics are unsupported. + They do not work in native mode and the are no tests for JVM mode. +
+
+
+
+
+

Maven coordinates

+
+
+

Create a new project using quarkus-cxf-rt-features-metrics on code.quarkus.io +or add these coordinates to your existing project:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.cxf</groupId>
+    <artifactId>quarkus-cxf-rt-features-metrics</artifactId>
+</dependency>
+
+
+
+ + + + + +
+ + +Check the User guide and especially its + Dependency management section + for more information about writing applications with CXF Extensions for Quarkus. +
+
+
+
+
+

Usage

+
+
+

The integration of CXF into Quarkus Micrometer ecosystem is implemented using +CXF MicrometerMetricsProvider +and io.quarkiverse.cxf.metrics.QuarkusCxfMetricsFeature.

+
+
+ + + + + +
+ + +The sample code snippets used in this section come from the + metrics integration test + in the source tree of CXF Extensions for Quarkus +
+
+
+

To enable metrics collection for services, just add io.quarkiverse.cxf.metrics.QuarkusCxfMetricsFeature +to your service’s features:

+
+
+
application.properties
+
+
quarkus.cxf.path = /soap
+quarkus.cxf.endpoint."/hello".implementor = io.quarkiverse.cxf.metrics.server.it.HelloServiceImpl
+quarkus.cxf.endpoint."/hello".features = io.quarkiverse.cxf.metrics.QuarkusCxfMetricsFeature
+
+
+
+

The same can be done for a client:

+
+
+
application.properties
+
+
quarkus.cxf.client.hello.wsdl = http://localhost:${quarkus.http.test-port}/soap/hello?wsdl
+quarkus.cxf.client.hello.client-endpoint-url = http://localhost:${quarkus.http.test-port}/soap/hello
+quarkus.cxf.client.hello.service-interface = io.quarkiverse.cxf.metrics.server.it.HelloService
+quarkus.cxf.client.hello.features = io.quarkiverse.cxf.metrics.QuarkusCxfMetricsFeature
+
+
+
+

Finally, to export the metrics in json format and for Prometheus, add the following dependency to your project

+
+
+
pom.xml
+
+
<dependency>
+    <groupId>io.quarkus</groupId>
+    <artifactId>quarkus-micrometer-registry-prometheus</artifactId>
+</dependency>
+
+
+
+

and set the following properties

+
+
+
application.properties
+
+
quarkus.micrometer.export.json.enabled = true
+quarkus.micrometer.export.json.path = metrics/json
+quarkus.micrometer.export.prometheus.path = metrics/prometheus
+
+
+
+

After that, you should be able to see some metrics under cxf.server.requests and/or cxf.client.requests in the output of +the endpoints you configured above:

+
+
+
+
$ curl http://localhost:8080/q/metrics/json
+metrics: {
+    ...
+    "cxf.server.requests": {
+        "count;exception=None;faultCode=None;method=POST;operation=hello;outcome=SUCCESS;status=200;uri=/soap/hello": 2,
+        "elapsedTime;exception=None;faultCode=None;method=POST;operation=hello;outcome=SUCCESS;status=200;uri=/soap/hello": 64.0
+    },
+    ...
+    "cxf.client.requests": {
+        "count;exception=None;faultCode=None;method=POST;operation=hello;outcome=SUCCESS;status=200;uri=http://localhost:808 /soap/hello": 1,
+        "elapsedTime;exception=None;faultCode=None;method=POST;operation=hello;outcome=SUCCESS;status=200;uri=http://localhost:8081/soap/hello": 34.0
+    },
+    ...
+}
+
+
+
+
+
+

Configuration

+
+
+

The metrics feature can be associated with a SOAP client or service using the following configuration properties:

+
+ +
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/2.2/reference/extensions/quarkus-cxf-rt-transports-http-hc5.html b/quarkus-cxf/2.2/reference/extensions/quarkus-cxf-rt-transports-http-hc5.html new file mode 100644 index 0000000000..04a89af164 --- /dev/null +++ b/quarkus-cxf/2.2/reference/extensions/quarkus-cxf-rt-transports-http-hc5.html @@ -0,0 +1,1178 @@ + + + + + + HTTP Async Transport :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

HTTP Async Transport

+
+
+
+

Stable • Since 1.1.0

+
+
+

Implement async SOAP Clients using Apache HttpComponents HttpClient 5.

+
+
+
+
+

Maven coordinates

+
+
+

Create a new project using quarkus-cxf-rt-transports-http-hc5 on code.quarkus.io +or add these coordinates to your existing project:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.cxf</groupId>
+    <artifactId>quarkus-cxf-rt-transports-http-hc5</artifactId>
+</dependency>
+
+
+
+ + + + + +
+ + +Check the User guide and especially its + Dependency management section + for more information about writing applications with CXF Extensions for Quarkus. +
+
+
+
+
+

Usage

+
+
+

Once the quarkus-cxf-rt-transports-http-hc5 dependency is available in the classpath, +CXF will use HttpAsyncClient for asynchronous calls and will continue using HttpURLConnection for synchronous calls.

+
+
+

Generate async methods

+
+

Asynchronous client invocations require some additional methods in the service endpoint interface. +That code is not generated by default.

+
+
+

To enable it, you need to create a JAX-WS binding file with enableAsyncMapping set to true:

+
+
+ + + + + +
+ + +The sample code snippets used in this section come from the + HC5 integration test + in the source tree of CXF Extensions for Quarkus +
+
+
+
src/main/resources/wsdl/async-binding.xml
+
+
<?xml version="1.0"?>
+<bindings
+        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+        xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+        xmlns="https://jakarta.ee/xml/ns/jaxws"
+        wsdlLocation="CalculatorService.wsdl">
+    <bindings node="wsdl:definitions">
+        <enableAsyncMapping>true</enableAsyncMapping>
+    </bindings>
+</bindings>
+
+
+
+

This file should then be passed to wsdl2java +through its additional-params property:

+
+
+
application.properties
+
+
quarkus.cxf.codegen.wsdl2java.includes = wsdl/*.wsdl
+quarkus.cxf.codegen.wsdl2java.additional-params = -b,src/main/resources/wsdl/async-binding.xml
+
+
+
+
+

Asynchronous Clients and Mutiny

+
+

Once the asynchronous stubs are available, it is possible to wrap a client call in io.smallrye.mutiny.Uni as shown below:

+
+
+
+
package io.quarkiverse.cxf.hc5.it;
+
+import java.util.concurrent.Future;
+
+import jakarta.inject.Inject;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.QueryParam;
+import jakarta.ws.rs.core.MediaType;
+
+import org.jboss.eap.quickstarts.wscalculator.calculator.AddResponse;
+import org.jboss.eap.quickstarts.wscalculator.calculator.CalculatorService;
+
+import io.quarkiverse.cxf.annotation.CXFClient;
+import io.smallrye.mutiny.Uni;
+
+@Path("/hc5")
+public class Hc5Resource {
+
+    @Inject
+    @CXFClient("myCalculator") // name used in application.properties
+    CalculatorService myCalculator;
+
+    @SuppressWarnings("unchecked")
+    @Path("/add-async")
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public Uni<Integer> addAsync(@QueryParam("a") int a, @QueryParam("b") int b) {
+        return Uni.createFrom()
+                .future(
+                        (Future<AddResponse>) myCalculator
+                                .addAsync(a, b, res -> {
+                                }))
+                .map(addResponse -> addResponse.getReturn());
+    }
+
+}
+
+
+
+
+

Thread pool

+
+

Asynchronous clients delivered by this extension leverage ManagedExecutor with a thread pool provided by Quarkus. +The thread pool can be configured using the quarkus.thread-pool.* family of +options. +As a consequence of this, the executor and thread pool related attributes of org.apache.cxf.transports.http.configuration.HTTPClientPolicy are not honored for async clients on Quarkus.

+
+
+ + + + + +
+ + +You can see more details about the CXF asynchronous client and how to tune it further in CXF documentation. +
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/2.2/reference/extensions/quarkus-cxf-rt-ws-rm.html b/quarkus-cxf/2.2/reference/extensions/quarkus-cxf-rt-ws-rm.html new file mode 100644 index 0000000000..7b985056a0 --- /dev/null +++ b/quarkus-cxf/2.2/reference/extensions/quarkus-cxf-rt-ws-rm.html @@ -0,0 +1,1071 @@ + + + + + + WS-ReliableMessaging :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

WS-ReliableMessaging

+
+
+
+

🧪Experimental • Since 1.5.3

+
+
+ + + + + +
+ + +This extension is known not to work. Contributions are welcome! +
+
+
+
+
+

Maven coordinates

+
+
+

Create a new project using quarkus-cxf-rt-ws-rm on code.quarkus.io +or add these coordinates to your existing project:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.cxf</groupId>
+    <artifactId>quarkus-cxf-rt-ws-rm</artifactId>
+</dependency>
+
+
+
+ + + + + +
+ + +Check the User guide and especially its + Dependency management section + for more information about writing applications with CXF Extensions for Quarkus. +
+
+
+
+
+

Supported standards

+
+ +
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/2.2/reference/extensions/quarkus-cxf-rt-ws-security.html b/quarkus-cxf/2.2/reference/extensions/quarkus-cxf-rt-ws-security.html new file mode 100644 index 0000000000..769671eed5 --- /dev/null +++ b/quarkus-cxf/2.2/reference/extensions/quarkus-cxf-rt-ws-security.html @@ -0,0 +1,1246 @@ + + + + + + WS-Security :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

WS-Security

+
+
+
+

Stable • Since 0.14.0

+
+
+

Provides CXF framework’s WS-Security implementation.

+
+
+
+
+

Maven coordinates

+
+
+

Create a new project using quarkus-cxf-rt-ws-security on code.quarkus.io +or add these coordinates to your existing project:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.cxf</groupId>
+    <artifactId>quarkus-cxf-rt-ws-security</artifactId>
+</dependency>
+
+
+
+ + + + + +
+ + +Check the User guide and especially its + Dependency management section + for more information about writing applications with CXF Extensions for Quarkus. +
+
+
+
+
+

Supported standards

+
+ +
+
+
+

Usage

+
+
+

The CXF framework’s WS-Security implementation is based on WSS4J. The example below shows how to integrate with WSS4J using interceptors.

+
+
+ + + + + +
+ + +Currently, only the programmatic WSS4JInterceptors are supported. Actions like Timestamp, UsernameToken, Signature, Encryption, etc., can be applied to the interceptors by passing the appropriate configuration properties. +
+
+
+

A SOAP Service with WS-Security

+
+

Add the WSS4JInInterceptor to in-interceptors of your web service in application.properties:

+
+
+
+
quarkus.cxf.endpoint."/rounder".in-interceptors = org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor
+
+
+
+ + + + + +
+ + +The sample code snippets used in this section come from the + WS-Security server integration test + in the source tree of CXF Extensions for Quarkus +
+
+
+

Then you can configure your WSS4JInInterceptor using CDI like the following:

+
+
+
+
@ApplicationScoped
+public class WSS4JInInterceptorProducer {
+
+    /** Produced in CxfWssServerTestResource */
+    @ConfigProperty(name = "wss.username", defaultValue = "cxf")
+    String username;
+
+    /** Produced in CxfWssServerTestResource */
+    @ConfigProperty(name = "wss.password", defaultValue = "pwd")
+    String password;
+
+    @Produces
+    @Unremovable
+    @ApplicationScoped
+    WSS4JInInterceptor wssInterceptor() {
+        final CallbackHandler passwordCallback = new CallbackHandler() {
+            @Override
+            public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
+                for (Callback callback : callbacks) {
+                    if (callback instanceof WSPasswordCallback) {
+                        final WSPasswordCallback pc = (WSPasswordCallback) callback;
+                        if (username.equals(pc.getIdentifier())) {
+                            pc.setPassword(password);
+                        }
+                        return;
+                    }
+                }
+            }
+        };
+        final Map<String, Object> props = new HashMap<>();
+        props.put(ConfigurationConstants.ACTION, "UsernameToken");
+        props.put(ConfigurationConstants.PASSWORD_TYPE, "PasswordText");
+        props.put(ConfigurationConstants.USER, username);
+        props.put(ConfigurationConstants.PW_CALLBACK_REF, passwordCallback);
+        return new WSS4JInInterceptor(props);
+    }
+}
+
+
+
+
+
+
+

A SOAP client using WS-Security

+
+
+

The corresponding client implementation would be slightly different: +we will use WSS4JOutInterceptor and out-interceptors in application.properties:

+
+
+
+
quarkus.cxf.client."wss-client".out-interceptors = org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor
+
+
+
+ + + + + +
+ + +The sample code snippets used in this section come from the + WS-Security client integration test + in the source tree of CXF Extensions for Quarkus +
+
+
+

Then producing the WSS4JOutInterceptor could look like the following.

+
+
+
+
@ApplicationScoped
+public class WSS4JOutInterceptorProducer {
+
+    /** Produced in CxfWssClientTestResource */
+    @ConfigProperty(name = "wss.username")
+    String username;
+
+    /** Produced in CxfWssClientTestResource */
+    @ConfigProperty(name = "wss.password")
+    String password;
+
+    @Produces
+    @Unremovable
+    @ApplicationScoped
+    WSS4JOutInterceptor wssInterceptor() {
+        final CallbackHandler passwordCallback = new CallbackHandler() {
+            @Override
+            public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
+                for (Callback callback : callbacks) {
+                    if (callback instanceof WSPasswordCallback) {
+                        ((WSPasswordCallback) callback).setPassword(password);
+                    }
+                    return;
+                }
+            }
+        };
+        final Map<String, Object> props = new HashMap<>();
+        props.put(ConfigurationConstants.ACTION, "UsernameToken");
+        props.put(ConfigurationConstants.PASSWORD_TYPE, "PasswordText");
+        props.put(ConfigurationConstants.USER, username);
+        props.put(ConfigurationConstants.PW_CALLBACK_REF, passwordCallback);
+        props.put(ConfigurationConstants.ADD_USERNAMETOKEN_NONCE, "true");
+        props.put(ConfigurationConstants.ADD_USERNAMETOKEN_CREATED, "true");
+        return new WSS4JOutInterceptor(props);
+    }
+}
+
+
+
+

Please refer to WS-Security and WSS4J documentation for details.

+
+
+
+
+

Configuration

+
+
+

WSS4JInInterceptor and WSS4JOutInterceptor can be associated with a SOAP services or clients using the following configuration properties:

+
+ +
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/2.2/reference/extensions/quarkus-cxf-services-sts.html b/quarkus-cxf/2.2/reference/extensions/quarkus-cxf-services-sts.html new file mode 100644 index 0000000000..99d7e6e227 --- /dev/null +++ b/quarkus-cxf/2.2/reference/extensions/quarkus-cxf-services-sts.html @@ -0,0 +1,1072 @@ + + + + + + Security Token Service (STS) :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Security Token Service (STS)

+
+
+
+

Stable • Since 1.5.3

+
+
+

Issue, renew and validate security tokens in context of WS-Trust.

+
+
+
+
+

Maven coordinates

+
+
+

Create a new project using quarkus-cxf-services-sts on code.quarkus.io +or add these coordinates to your existing project:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.cxf</groupId>
+    <artifactId>quarkus-cxf-services-sts</artifactId>
+</dependency>
+
+
+
+ + + + + +
+ + +Check the User guide and especially its + Dependency management section + for more information about writing applications with CXF Extensions for Quarkus. +
+
+
+
+
+

Supported standards

+
+
+ +
+
+
+
+

Usage

+
+
+

Please find an example in the +WS-Trust integration test in the source tree of CXF Extensions for Quarkus +while we are working hard on providing a more user friendly text for this page.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/2.2/reference/extensions/quarkus-cxf-xjc-plugins.html b/quarkus-cxf/2.2/reference/extensions/quarkus-cxf-xjc-plugins.html new file mode 100644 index 0000000000..1eee9e2898 --- /dev/null +++ b/quarkus-cxf/2.2/reference/extensions/quarkus-cxf-xjc-plugins.html @@ -0,0 +1,1086 @@ + + + + + + XJC Plugins :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

XJC Plugins

+
+
+
+

Stable • Since 1.5.11

+
+
+

XJC plugins for wsdl2java code generation. +You’ll need to add this extension if you want to use any of the following in +quarkus.cxf.codegen.wsdl2java.additional-params:

+
+
+
    +
  • +

    -xjc-Xbg - generate getFoo() instead of isFoo() accessor methods for boolean fields.

    +
  • +
  • +

    -xjc-Xdv - let the generated getter methods return the default value defined in the schema unless the field is set explicitly.

    +
  • +
  • +

    -xjc-Xjavadoc - generate JavaDoc based on xs:documentation present in the schema.

    +
  • +
  • +

    -xjc-Xproperty-listener - add PropertyChangeListener support to the generated beans.

    +
  • +
  • +

    -xjc-Xts - generate toString() methods in model classes.

    +
  • +
  • +

    -xjc-Xwsdlextension - generate beans that can be used directly with WSDL4J as extensors in the WSDL.

    +
  • +
+
+
+ + + + + +
+ + +Check the wsdl2java section of User guide for more details about wsdl2java. +
+
+
+
+
+

Maven coordinates

+
+
+

Create a new project using quarkus-cxf-xjc-plugins on code.quarkus.io +or add these coordinates to your existing project:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.cxf</groupId>
+    <artifactId>quarkus-cxf-xjc-plugins</artifactId>
+</dependency>
+
+
+
+ + + + + +
+ + +Check the User guide and especially its + Dependency management section + for more information about writing applications with CXF Extensions for Quarkus. +
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/2.2/reference/extensions/quarkus-cxf.html b/quarkus-cxf/2.2/reference/extensions/quarkus-cxf.html new file mode 100644 index 0000000000..130e5bd5ee --- /dev/null +++ b/quarkus-cxf/2.2/reference/extensions/quarkus-cxf.html @@ -0,0 +1,2669 @@ + + + + + + Quarkus CXF :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus CXF

+
+
+
+

Stable • Since 0.1.0

+
+
+

Core capabilities for implementing SOAP clients and JAX-WS services.

+
+
+
+
+

Maven coordinates

+
+
+

Create a new project using quarkus-cxf on code.quarkus.io +or add these coordinates to your existing project:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.cxf</groupId>
+    <artifactId>quarkus-cxf</artifactId>
+</dependency>
+
+
+
+ + + + + +
+ + +Check the User guide and especially its + Dependency management section + for more information about writing applications with CXF Extensions for Quarkus. +
+
+
+
+
+

Supported standards

+
+
+ +
+
+
+
+

Usage

+
+
+

Check the following chapters of User guide:

+
+ +
+
+
+

Configuration

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The default path for CXF resources.

+
+
+

⚠️ Note that the default value before Quarkus CXF version 2.0.0 was /.

+
+
+

Environment variable: QUARKUS_CXF_PATH

+
+
+

string

/services

+
+
+
+

If true wsdl2java code generation is run whenever there are WSDL resources found on default or custom defined locations; otherwise wsdl2java is not executed.

+
+
+

Environment variable: QUARKUS_CXF_CODEGEN_WSDL2JAVA_ENABLED

+
+
+

boolean

true

+
+
+
+

A comma separated list of glob patterns for selecting WSDL files which should be processed with wsdl2java tool. The paths are relative to src/main/resources or src/test/resources directories of the current Maven or Gradle module. The glob syntax is specified in io.quarkus.util.GlobUtil.

+
+
+

Examples:

+
+
+
    +
  • +

    calculator.wsdl,fruits.wsdl will match src/main/resources/calculator.wsdl and src/main/resources/fruits.wsdl under the current Maven or Gradle module, but will not match anything like src/main/resources/subdir/calculator.wsdl

    +
  • +
  • +

    my-*-service.wsdl will match src/main/resources/my-foo-service.wsdl and src/main/resources/my-bar-service.wsdl

    +
  • +
  • +

    **.wsdl will match any of the above There is a separate wsdl2java execution for each of the matching WSDL files. If you need different additional-params for each WSDL file, you may want to define a separate named parameter set for each one of them. Here is an example:

    +
  • +
+
+
+
+
# Parameters for foo.wsdl
+quarkus.cxf.codegen.wsdl2java.foo-params.includes = wsdl/foo.wsdl
+quarkus.cxf.codegen.wsdl2java.foo-params.additional-params = -wsdlLocation,wsdl/foo.wsdl
+# Parameters for bar.wsdl
+quarkus.cxf.codegen.wsdl2java.bar-params.includes = wsdl/bar.wsdl
+quarkus.cxf.codegen.wsdl2java.bar-params.additional-params = -wsdlLocation,wsdl/bar.wsdl,-xjc-Xts
+
+
+
+

Note that file extensions other than .wsdl will work during normal builds, but changes in the matching files may get overseen in Quarkus dev mode. Always using the .wsdl extension is thus recommended.

+
+
+

There is no default value for this option, so wsdl2java code generation is disabled by default.

+
+
+

Specifying quarkus.cxf.codegen.wsdl2java.my-name.excludes without setting any includes will cause a build time error.

+
+
+

Make sure that the file sets selected by quarkus.cxf.codegen.wsdl2java.includes and quarkus.cxf.codegen.wsdl2java.[whatever-name].includes do not overlap. Otherwise a build time exception will be thrown.

+
+
+

The files from src/main/resources selected by includes and excludes are automatically included in native image and therefore you do not need to include them via quarkus.cxf.wsdl-path (deprecated) or quarkus.native.resources.includes/excludes.

+
+
+

Environment variable: QUARKUS_CXF_CODEGEN_WSDL2JAVA_INCLUDES

+
+
+

list of string

+
+
+
+

A comma separated list of path patterns for selecting WSDL files which should not be processed with wsdl2java tool. The paths are relative to src/main/resources or src/test/resources directories of the current Maven or Gradle module. Same syntax as includes.

+
+
+

Environment variable: QUARKUS_CXF_CODEGEN_WSDL2JAVA_EXCLUDES

+
+
+

list of string

+
+
+
+

A comma separated list of additional command line parameters that should passed to CXF wsdl2java tool along with the files selected by includes and excludes. Example: -wsdlLocation,classpath:wsdl/CalculatorService.wsdl. Check wsdl2java documentation for all supported options.

+
+
+

You need to add io.quarkiverse.cxf:quarkus-cxf-xjc-plugins dependency to your project to be able to use -xjc-Xbg, -xjc-Xdv, -xjc-Xjavadoc, -xjc-Xproperty-listener, -xjc-Xts or -xjc-Xwsdlextension.

+
+
+

Environment variable: QUARKUS_CXF_CODEGEN_WSDL2JAVA_ADDITIONAL_PARAMS

+
+
+

list of string

+
+
+
+

If true java2ws WSDL generation is run whenever there are Java classes selected via includes and excludes options; otherwise java2ws is not executed.

+
+
+

Environment variable: QUARKUS_CXF_JAVA2WS_ENABLED

+
+
+

boolean

true

+
+
+
+

A comma separated list of glob patterns for selecting class names which should be processed with java2ws tool. The glob syntax is specified in io.quarkus.util.GlobUtil. The patterns are matched against fully qualified class names, such as org.acme.MyClass.

+
+
+

The universe of class names to which includes and excludes are applied is defined as follows: 1. Only classes visible in Jandex are considered. 2. From those, only the ones annotated with @WebService are selected.

+
+
+

Examples:

+
+
+

Let’s say that the application contains two classes annotated with @WebService and that both are visible in Jandex. Their names are org.foo.FruitWebService and org.bar.HelloWebService.

+
+
+

Then

+
+
+
    +
  • +

    quarkus.cxf.java2ws.includes = **.*WebService will match both class names

    +
  • +
  • +

    quarkus.cxf.java2ws.includes = org.foo.* will match only org.foo.FruitWebService There is a separate java2ws execution for each of the matching class names. If you need different additional-params for each class, you may want to define a separate named parameter set for each one of them. Here is an example:

    +
  • +
+
+
+
+
# Parameters for the foo package
+quarkus.cxf.java2ws.foo-params.includes = org.foo.*
+quarkus.cxf.java2ws.foo-params.additional-params = -servicename,FruitService
+# Parameters for the bar package
+quarkus.cxf.java2ws.bar-params.includes = org.bar.*
+quarkus.cxf.java2ws.bar-params.additional-params = -servicename,HelloService
+
+
+
+

There is no default value for this option, so java2ws WSDL generation is effectively disabled by default.

+
+
+

Specifying quarkus.cxf.java2ws.excludes without setting any includes will cause a build time error.

+
+
+

Make sure that the class names selected by quarkus.cxf.java2ws.includes and quarkus.cxf.java2ws.[whatever-name].includes do not overlap. Otherwise a build time exception will be thrown.

+
+
+

If you would like to include the generated WSDL files in native image, you need to add them yourself using quarkus.native.resources.includes/excludes.

+
+
+

Environment variable: QUARKUS_CXF_JAVA2WS_INCLUDES

+
+
+

list of string

+
+
+
+

A comma separated list of glob patterns for selecting java class names which should not be processed with java2ws tool. Same syntax as includes.

+
+
+

Environment variable: QUARKUS_CXF_JAVA2WS_EXCLUDES

+
+
+

list of string

+
+
+
+

A comma separated list of additional command line parameters that should be passed to CXF java2ws tool along with the files selected by includes and excludes. Example: -portname,12345. Check java2ws documentation for all supported options.

+
+
+

Note that only options related to generation of WSDL from Java are supported currently.

+
+
+

Environment variable: QUARKUS_CXF_JAVA2WS_ADDITIONAL_PARAMS

+
+
+

list of string

+
+
+
+

A template for the names of generated WSDL files.

+
+
+

There are 4 place holders, which can be used in the template:

+
+
+
    +
  • +

    %SIMPLE_CLASS_NAME% - the simple class name of the Java class from which we are generating

    +
  • +
  • +

    %FULLY_QUALIFIED_CLASS_NAME% - the fully qualified name from which we are generating with all dots are replaced replaced by underscores

    +
  • +
  • +

    %TARGET_DIR% - the target directory of the current module of the current build tool; typically target for Maven and build for Gradle.

    +
  • +
  • +

    %CLASSES_DIR% - the compiler output directory of the current module of the current build tool; typically target/classes for Maven and build/classes for Gradle.

    +
  • +
+
+
+

Environment variable: QUARKUS_CXF_JAVA2WS_WSDL_NAME_TEMPLATE

+
+
+

string

%CLASSES_DIR%/wsdl/%SIMPLE_CLASS_NAME%.wsdl

+
+
+
+

Select the HTTPConduitFactory implementation for all clients except the ones that override this setting via quarkus.cxf.client.myClient.http-conduit-factory.

+
+
+
    +
  • +

    QuarkusCXFDefault (default): if io.quarkiverse.cxf:quarkus-cxf-rt-transports-http-hc5 is present in class path, then its HTTPConduitFactory implementation will be used; otherwise this value is equivalent with URLConnectionHTTPConduitFactory (this may change, once issue #992 gets resolved in CXF)

    +
  • +
  • +

    CXFDefault: the selection of HTTPConduitFactory implementation is left to CXF

    +
  • +
  • +

    HttpClientHTTPConduitFactory: the HTTPConduitFactory will be set to an implementation always returning org.apache.cxf.transport.http.HttpClientHTTPConduit. This will use java.net.http.HttpClient as the underlying HTTP client.

    +
  • +
  • +

    URLConnectionHTTPConduitFactory: the HTTPConduitFactory will be set to an implementation always returning org.apache.cxf.transport.http.URLConnectionHTTPConduit. This will use java.net.HttpURLConnection as the underlying HTTP client.

    +
  • +
+
+
+

Environment variable: QUARKUS_CXF_HTTP_CONDUIT_FACTORY

+
+
+
+

QuarkusCXFDefault, CXFDefault, HttpClientHTTPConduitFactory, URLConnectionHTTPConduitFactory

+
+
+
+
+

The size in bytes of the chunks of memory allocated when writing data.

+
+
+

This is a very advanced setting that should only be set if you understand exactly how it affects the output IO operations of the application.

+
+
+

Environment variable: QUARKUS_CXF_MIN_CHUNK_SIZE

+
+
+

int

128

+
+
+
+

The size of the output stream response buffer in bytes. If a response is larger than this and no content-length is provided then the response will be chunked.

+
+
+

Larger values may give slight performance increases for large responses, at the expense of more memory usage.

+
+
+

Environment variable: QUARKUS_CXF_OUTPUT_BUFFER_SIZE

+
+
+

int

8191

+
+
+
+

A comma separated list of glob patterns for selecting WSDL files which should be processed with wsdl2java tool. The paths are relative to src/main/resources or src/test/resources directories of the current Maven or Gradle module. The glob syntax is specified in io.quarkus.util.GlobUtil.

+
+
+

Examples:

+
+
+
    +
  • +

    calculator.wsdl,fruits.wsdl will match src/main/resources/calculator.wsdl and src/main/resources/fruits.wsdl under the current Maven or Gradle module, but will not match anything like src/main/resources/subdir/calculator.wsdl

    +
  • +
  • +

    my-*-service.wsdl will match src/main/resources/my-foo-service.wsdl and src/main/resources/my-bar-service.wsdl

    +
  • +
  • +

    **.wsdl will match any of the above There is a separate wsdl2java execution for each of the matching WSDL files. If you need different additional-params for each WSDL file, you may want to define a separate named parameter set for each one of them. Here is an example:

    +
  • +
+
+
+
+
# Parameters for foo.wsdl
+quarkus.cxf.codegen.wsdl2java.foo-params.includes = wsdl/foo.wsdl
+quarkus.cxf.codegen.wsdl2java.foo-params.additional-params = -wsdlLocation,wsdl/foo.wsdl
+# Parameters for bar.wsdl
+quarkus.cxf.codegen.wsdl2java.bar-params.includes = wsdl/bar.wsdl
+quarkus.cxf.codegen.wsdl2java.bar-params.additional-params = -wsdlLocation,wsdl/bar.wsdl,-xjc-Xts
+
+
+
+

Note that file extensions other than .wsdl will work during normal builds, but changes in the matching files may get overseen in Quarkus dev mode. Always using the .wsdl extension is thus recommended.

+
+
+

There is no default value for this option, so wsdl2java code generation is disabled by default.

+
+
+

Specifying quarkus.cxf.codegen.wsdl2java.my-name.excludes without setting any includes will cause a build time error.

+
+
+

Make sure that the file sets selected by quarkus.cxf.codegen.wsdl2java.includes and quarkus.cxf.codegen.wsdl2java.[whatever-name].includes do not overlap. Otherwise a build time exception will be thrown.

+
+
+

The files from src/main/resources selected by includes and excludes are automatically included in native image and therefore you do not need to include them via quarkus.cxf.wsdl-path (deprecated) or quarkus.native.resources.includes/excludes.

+
+
+

Environment variable: QUARKUS_CXF_CODEGEN_WSDL2JAVA__NAMED_PARAMETER_SETS__INCLUDES

+
+
+

list of string

+
+
+
+

A comma separated list of path patterns for selecting WSDL files which should not be processed with wsdl2java tool. The paths are relative to src/main/resources or src/test/resources directories of the current Maven or Gradle module. Same syntax as includes.

+
+
+

Environment variable: QUARKUS_CXF_CODEGEN_WSDL2JAVA__NAMED_PARAMETER_SETS__EXCLUDES

+
+
+

list of string

+
+
+
+

A comma separated list of additional command line parameters that should passed to CXF wsdl2java tool along with the files selected by includes and excludes. Example: -wsdlLocation,classpath:wsdl/CalculatorService.wsdl. Check wsdl2java documentation for all supported options.

+
+
+

You need to add io.quarkiverse.cxf:quarkus-cxf-xjc-plugins dependency to your project to be able to use -xjc-Xbg, -xjc-Xdv, -xjc-Xjavadoc, -xjc-Xproperty-listener, -xjc-Xts or -xjc-Xwsdlextension.

+
+
+

Environment variable: QUARKUS_CXF_CODEGEN_WSDL2JAVA__NAMED_PARAMETER_SETS__ADDITIONAL_PARAMS

+
+
+

list of string

+
+
+
+

A comma separated list of glob patterns for selecting class names which should be processed with java2ws tool. The glob syntax is specified in io.quarkus.util.GlobUtil. The patterns are matched against fully qualified class names, such as org.acme.MyClass.

+
+
+

The universe of class names to which includes and excludes are applied is defined as follows: 1. Only classes visible in Jandex are considered. 2. From those, only the ones annotated with @WebService are selected.

+
+
+

Examples:

+
+
+

Let’s say that the application contains two classes annotated with @WebService and that both are visible in Jandex. Their names are org.foo.FruitWebService and org.bar.HelloWebService.

+
+
+

Then

+
+
+
    +
  • +

    quarkus.cxf.java2ws.includes = **.*WebService will match both class names

    +
  • +
  • +

    quarkus.cxf.java2ws.includes = org.foo.* will match only org.foo.FruitWebService There is a separate java2ws execution for each of the matching class names. If you need different additional-params for each class, you may want to define a separate named parameter set for each one of them. Here is an example:

    +
  • +
+
+
+
+
# Parameters for the foo package
+quarkus.cxf.java2ws.foo-params.includes = org.foo.*
+quarkus.cxf.java2ws.foo-params.additional-params = -servicename,FruitService
+# Parameters for the bar package
+quarkus.cxf.java2ws.bar-params.includes = org.bar.*
+quarkus.cxf.java2ws.bar-params.additional-params = -servicename,HelloService
+
+
+
+

There is no default value for this option, so java2ws WSDL generation is effectively disabled by default.

+
+
+

Specifying quarkus.cxf.java2ws.excludes without setting any includes will cause a build time error.

+
+
+

Make sure that the class names selected by quarkus.cxf.java2ws.includes and quarkus.cxf.java2ws.[whatever-name].includes do not overlap. Otherwise a build time exception will be thrown.

+
+
+

If you would like to include the generated WSDL files in native image, you need to add them yourself using quarkus.native.resources.includes/excludes.

+
+
+

Environment variable: QUARKUS_CXF_JAVA2WS__NAMED_PARAMETER_SETS__INCLUDES

+
+
+

list of string

+
+
+
+

A comma separated list of glob patterns for selecting java class names which should not be processed with java2ws tool. Same syntax as includes.

+
+
+

Environment variable: QUARKUS_CXF_JAVA2WS__NAMED_PARAMETER_SETS__EXCLUDES

+
+
+

list of string

+
+
+
+

A comma separated list of additional command line parameters that should be passed to CXF java2ws tool along with the files selected by includes and excludes. Example: -portname,12345. Check java2ws documentation for all supported options.

+
+
+

Note that only options related to generation of WSDL from Java are supported currently.

+
+
+

Environment variable: QUARKUS_CXF_JAVA2WS__NAMED_PARAMETER_SETS__ADDITIONAL_PARAMS

+
+
+

list of string

+
+
+
+

A template for the names of generated WSDL files.

+
+
+

There are 4 place holders, which can be used in the template:

+
+
+
    +
  • +

    %SIMPLE_CLASS_NAME% - the simple class name of the Java class from which we are generating

    +
  • +
  • +

    %FULLY_QUALIFIED_CLASS_NAME% - the fully qualified name from which we are generating with all dots are replaced replaced by underscores

    +
  • +
  • +

    %TARGET_DIR% - the target directory of the current module of the current build tool; typically target for Maven and build for Gradle.

    +
  • +
  • +

    %CLASSES_DIR% - the compiler output directory of the current module of the current build tool; typically target/classes for Maven and build/classes for Gradle.

    +
  • +
+
+
+

Environment variable: QUARKUS_CXF_JAVA2WS__NAMED_PARAMETER_SETS__WSDL_NAME_TEMPLATE

+
+
+

string

%CLASSES_DIR%/wsdl/%SIMPLE_CLASS_NAME%.wsdl

+
+
+
+

The client service interface class name

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SERVICE_INTERFACE

+
+
+

string

+
+
+
+

Indicates whether this is an alternative proxy client configuration. If true, then this configuration is ignored when configuring a client without annotation @CXFClient.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__ALTERNATIVE

+
+
+

boolean

false

+
+
+
+

If true, the client dynamic proxy class generated by native compiler will be initialized at runtime; otherwise the proxy class will be initialized at build time.

+
+
+

Setting this to true makes sense if your service endpoint interface references some class initialized at runtime in its method signatures. E.g. Say, your service interface has method int add(Operands o) and the Operands class was requested to be initialized at runtime. Then, without setting this configuration parameter to true, the native compiler will throw an exception saying something like Classes that should be initialized at run time got initialized during image building: org.acme.Operands …​ jdk.proxy<some-number>.$Proxy<some-number> caused initialization of this class. jdk.proxy<some-number>.$Proxy<some-number> is the proxy class generated by the native compiler.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__NATIVE_RUNTIME_INITIALIZED

+
+
+

boolean

false

+
+
+
+

The service endpoint implementation class

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__IMPLEMENTOR

+
+
+

string

+
+
+
+

The service endpoint WSDL path

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__WSDL

+
+
+

string

+
+
+
+

The URL of the SOAP Binding, should be one of four values:

+
+
+
    +
  • +

    http://schemas.xmlsoap.org/wsdl/soap/http for SOAP11HTTP_BINDING

    +
  • +
  • +

    http://schemas.xmlsoap.org/wsdl/soap/http?mtom=true for SOAP11HTTP_MTOM_BINDING

    +
  • +
  • +

    http://www.w3.org/2003/05/soap/bindings/HTTP/ for SOAP12HTTP_BINDING

    +
  • +
  • +

    http://www.w3.org/2003/05/soap/bindings/HTTP/?mtom=true for SOAP12HTTP_MTOM_BINDING

    +
  • +
+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SOAP_BINDING

+
+
+

string

+
+
+
+

The published service endpoint URL

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__PUBLISHED_ENDPOINT_URL

+
+
+

string

+
+
+
+

A comma-separated list of fully qualified CXF Feature class names or named CDI beans.

+
+
+

Examples:

+
+
+
+
quarkus.cxf.endpoint."/hello".features = org.apache.cxf.ext.logging.LoggingFeature
+quarkus.cxf.endpoint."/fruit".features = #myCustomLoggingFeature
+
+
+
+

In the second case, the #myCustomLoggingFeature bean can be produced as follows:

+
+
+
+
import org.apache.cxf.ext.logging.LoggingFeature;
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.Produces;
+
+class Producers {
+
+    @Produces
+    @ApplicationScoped
+    LoggingFeature myCustomLoggingFeature() {
+        LoggingFeature loggingFeature = new LoggingFeature();
+        loggingFeature.setPrettyLogging(true);
+        return loggingFeature;
+    }
+}
+
+
+
+

Note that the LoggingFeature is available through the Logging Feature extension.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__FEATURES

+
+
+

list of string

+
+
+
+

The comma-separated list of Handler classes

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__HANDLERS

+
+
+

list of string

+
+
+
+

The comma-separated list of InInterceptor classes

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__IN_INTERCEPTORS

+
+
+

list of string

+
+
+
+

The comma-separated list of OutInterceptor classes

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__OUT_INTERCEPTORS

+
+
+

list of string

+
+
+
+

The comma-separated list of OutFaultInterceptor classes

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__OUT_FAULT_INTERCEPTORS

+
+
+

list of string

+
+
+
+

The comma-separated list of InFaultInterceptor classes

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__IN_FAULT_INTERCEPTORS

+
+
+

list of string

+
+
+
+

The client WSDL path

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__WSDL

+
+
+

string

+
+
+
+

The URL of the SOAP Binding, should be one of four values:

+
+
+
    +
  • +

    http://schemas.xmlsoap.org/wsdl/soap/http for SOAP11HTTP_BINDING

    +
  • +
  • +

    http://schemas.xmlsoap.org/wsdl/soap/http?mtom=true for SOAP11HTTP_MTOM_BINDING

    +
  • +
  • +

    http://www.w3.org/2003/05/soap/bindings/HTTP/ for SOAP12HTTP_BINDING

    +
  • +
  • +

    http://www.w3.org/2003/05/soap/bindings/HTTP/?mtom=true for SOAP12HTTP_MTOM_BINDING

    +
  • +
+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SOAP_BINDING

+
+
+

string

+
+
+
+

The client endpoint URL

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__CLIENT_ENDPOINT_URL

+
+
+

string

+
+
+
+

The client endpoint namespace

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__ENDPOINT_NAMESPACE

+
+
+

string

+
+
+
+

The client endpoint name

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__ENDPOINT_NAME

+
+
+

string

+
+
+
+

The username for HTTP Basic auth

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__USERNAME

+
+
+

string

+
+
+
+

The password for HTTP Basic auth

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__PASSWORD

+
+
+

string

+
+
+
+

A comma-separated list of fully qualified CXF Feature class names.

+
+
+

Example:

+
+
+
+
quarkus.cxf.endpoint.myClient.features = org.apache.cxf.ext.logging.LoggingFeature
+
+
+
+

Note that the LoggingFeature is available through the Logging Feature extension.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__FEATURES

+
+
+

list of string

+
+
+
+

The comma-separated list of Handler classes

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__HANDLERS

+
+
+

list of string

+
+
+
+

The comma-separated list of InInterceptor classes

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__IN_INTERCEPTORS

+
+
+

list of string

+
+
+
+

The comma-separated list of OutInterceptor classes

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__OUT_INTERCEPTORS

+
+
+

list of string

+
+
+
+

The comma-separated list of OutFaultInterceptor classes

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__OUT_FAULT_INTERCEPTORS

+
+
+

list of string

+
+
+
+

The comma-separated list of InFaultInterceptor classes

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__IN_FAULT_INTERCEPTORS

+
+
+

list of string

+
+
+
+

Specifies the amount of time, in milliseconds, that the consumer will attempt to establish a connection before it times out. 0 is infinite.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__CONNECTION_TIMEOUT

+
+
+

long

30000

+
+
+
+

Specifies the amount of time, in milliseconds, that the consumer will wait for a response before it times out. 0 is infinite.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__RECEIVE_TIMEOUT

+
+
+

long

60000

+
+
+
+

Specifies the amount of time, in milliseconds, used when requesting a connection from the connection manager(if appliable). 0 is infinite.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__CONNECTION_REQUEST_TIMEOUT

+
+
+

long

60000

+
+
+
+

Specifies if the consumer will automatically follow a server issued redirection. (name is not part of standard)

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__AUTO_REDIRECT

+
+
+

boolean

false

+
+
+
+

Specifies the maximum amount of retransmits that are allowed for redirects. Retransmits for authorization is included in the retransmit count. Each redirect may cause another retransmit for a UNAUTHORIZED response code, ie. 401. Any negative number indicates unlimited retransmits, although, loop protection is provided. The default is unlimited. (name is not part of standard)

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__MAX_RETRANSMITS

+
+
+

int

-1

+
+
+
+

If true, the client is free to use chunking streams if it wants, but it is not required to use chunking streams. If false, the client must use regular, non-chunked requests in all cases.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__ALLOW_CHUNKING

+
+
+

boolean

true

+
+
+
+

If AllowChunking is true, this sets the threshold at which messages start getting chunked. Messages under this limit do not get chunked.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__CHUNKING_THRESHOLD

+
+
+

int

4096

+
+
+
+

Specifies the chunk length for a HttpURLConnection. This value is used in java.net.HttpURLConnection.setChunkedStreamingMode(int chunklen). chunklen indicates the number of bytes to write in each chunk. If chunklen is less than or equal to zero, a default value will be used.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__CHUNK_LENGTH

+
+
+

int

-1

+
+
+
+

Specifies the MIME types the client is prepared to handle (e.g., HTML, JPEG, GIF, etc.)

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__ACCEPT

+
+
+

string

+
+
+
+

Specifies the language the client desires (e.g., English, French, etc.)

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__ACCEPT_LANGUAGE

+
+
+

string

+
+
+
+

Specifies the encoding the client is prepared to handle (e.g., gzip)

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__ACCEPT_ENCODING

+
+
+

string

+
+
+
+

Specifies the content type of the stream being sent in a post request. (this should be text/xml for web services, or can be set to application/x-www-form-urlencoded if the client is sending form data).

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__CONTENT_TYPE

+
+
+

string

+
+
+
+

Specifies the Internet host and port number of the resource on which the request is being invoked. This is sent by default based upon the URL. Certain DNS scenarios or application designs may request you to set this, but typically it is not required.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__HOST

+
+
+

string

+
+
+
+

The connection disposition. If close the connection to the server is closed after each request/response dialog. If Keep-Alive the client requests the server to keep the connection open, and if the server honors the keep alive request, the connection is reused. Many servers and proxies do not honor keep-alive requests.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__CONNECTION

+
+
+
+

CLOSE, KEEP_ALIVE

+

keep-alive

+
+
+
+

Most commonly used to specify no-cache, however the standard supports a dozen or so caching related directives for requests

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__CACHE_CONTROL

+
+
+

string

+
+
+
+

HTTP Version used for the connection. The "auto" default will use whatever the default is for the HTTPConduit implementation.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__VERSION

+
+
+

string

auto

+
+
+
+

aka User-Agent Specifies the type of browser is sending the request. This is usually only needed when sites have HTML customized to Netscape vs IE, etc, but can also be used to optimize for different SOAP stacks.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__BROWSER_TYPE

+
+
+

string

+
+
+
+

Specifies the URL of a decoupled endpoint for the receipt of responses over a separate provider→consumer connection.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__DECOUPLED_ENDPOINT

+
+
+

string

+
+
+
+

Specifies the address of proxy server if one is used.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__PROXY_SERVER

+
+
+

string

+
+
+
+

Specifies the port number used by the proxy server.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__PROXY_SERVER_PORT

+
+
+

int

+
+
+
+

Specifies the list of hostnames that will not use the proxy configuration. Examples of value: * "localhost" → A single hostname * "localhost|www.google.com" → 2 hostnames that will not use the proxy configuration * "localhost|www.google.*|*.apache.org" → It’s also possible to use a pattern-like value

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__NON_PROXY_HOSTS

+
+
+

string

+
+
+
+

Specifies the type of the proxy server. Can be either HTTP or SOCKS.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__PROXY_SERVER_TYPE

+
+
+
+

http, socks

+

http

+
+
+
+

Username for the proxy authentication

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__PROXY_USERNAME

+
+
+

string

+
+
+
+

Password for the proxy authentication

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__PROXY_PASSWORD

+
+
+

string

+
+
+
+

Select the HTTPConduitFactory implementation for this client.

+
+
+
    +
  • +

    QuarkusCXFDefault (default): if io.quarkiverse.cxf:quarkus-cxf-rt-transports-http-hc5 is present in class path, then its HTTPConduitFactory implementation will be used; otherwise this value is equivalent with URLConnectionHTTPConduitFactory (this may change, once issue #992 gets resolved in CXF)

    +
  • +
  • +

    CXFDefault: the selection of HTTPConduitFactory implementation is left to CXF

    +
  • +
  • +

    HttpClientHTTPConduitFactory: the HTTPConduitFactory for this client will be set to an implementation always returning org.apache.cxf.transport.http.HttpClientHTTPConduit. This will use java.net.http.HttpClient as the underlying HTTP client.

    +
  • +
  • +

    URLConnectionHTTPConduitFactory: the HTTPConduitFactory for this client will be set to an implementation always returning org.apache.cxf.transport.http.URLConnectionHTTPConduit. This will use java.net.HttpURLConnection as the underlying HTTP client.

    +
  • +
+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__HTTP_CONDUIT_FACTORY

+
+
+
+

QuarkusCXFDefault, CXFDefault, HttpClientHTTPConduitFactory, URLConnectionHTTPConduitFactory

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/2.2/reference/index.html b/quarkus-cxf/2.2/reference/index.html new file mode 100644 index 0000000000..89bc1e33a1 --- /dev/null +++ b/quarkus-cxf/2.2/reference/index.html @@ -0,0 +1,1302 @@ + + + + + + Reference :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Reference

+
+

CXF Extensions for Quarkus

+
+
+

Here is the list of extensions produced by this project. +Please follow the links under the extension names to learn about how to use them, about their configuration and about any known limitations.

+
+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Quarkus CXF extensionSupport levelSinceSupported standards

Quarkus CXF
+quarkus-cxf

Stable

0.1.0

JAX-WS, JAXB, WS-Addressing, WS-Policy, MTOM

Quarkus CXF Logging Feature
+quarkus-cxf-rt-features-logging

Stable

0.14.0

Quarkus CXF Metrics Feature
+quarkus-cxf-rt-features-metrics

Stable

0.14.0

Quarkus CXF WS-Security
+quarkus-cxf-rt-ws-security

Stable

0.14.0

WS-Security, WS-SecurityPolicy

Quarkus CXF WS-ReliableMessaging
+quarkus-cxf-rt-ws-rm

Experimental

1.5.3

WS-ReliableMessaging

Quarkus CXF Security Token Service (STS)
+quarkus-cxf-services-sts

Stable

1.5.3

WS-Trust

Quarkus CXF HTTP Async Transport
+quarkus-cxf-rt-transports-http-hc5

Stable

1.1.0

Quarkus CXF XJC Plugins
+quarkus-cxf-xjc-plugins

Stable

1.5.11

+
+
+
+

Supported CXF modules

+
+
+

Here is a list of CXF modules supported by CXF Extensions for Quarkus. +You should typically not depend on these directly, but rather use some of the extensions listed above that brings the given CXF module as a transitive dependency.

+
+
+

Front ends

+
+

Out of CXF front ends only the +JAX-WS front end is fully supported by quarkus-cxf.

+
+
+

The Simple front end may work in JVM mode, but it is not tested properly. +We advise not to use it.

+
+
+
+

Data Bindings

+
+

Out of CXF Data Bindings only the following ones are supported:

+
+ +
+
+

Transports

+
+

Out of CXF Transports only the following ones are supported:

+
+
+ +
+
+
+

Tools

+
+ +
+
+
+

WSDL Bindings

+
+

All CXF WSDL Bindings are supported:

+
+
+ +
+
+
+
+
+

Unsupported CXF modules

+
+
+

Here is a list of CXF modules currently not supported by CXF Extensions for Quarkus along with possible alternatives and/or reasons why the given module is not supported.

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CXF moduleAlternative

JAX-RS
+cxf-rt-frontend-jaxrs
+cxf-rt-rs-client

Use Quarkus RESTEasy

Fediz

Use Quarkus OpenID Connect

Aegis

Use JAXB and JAX-WS

DOSGI
+Karaf

JiBX

Use JAXB and JAX-WS

Local transport
+cxf-rt-transports-local

Use HTTP transport

JMS transport
+cxf-rt-transports-jms

Use HTTP transport

JBI
+cxf-rt-transports-jbi
+cxf-rt-bindings-jbi

Deprecated in CXF use HTTP transport

UDP transport
+cxf-rt-transports-udp

Use HTTP transport

Coloc transport

Use HTTP transport

WebSocket transport
+cxf-rt-transports-websocket

Use HTTP transport

Clustering
+cxf-rt-features-clustering

Planned

CORBA +cxf-rt-bindings-corba

Use JAX-WS

SDO databinding
+cxf-rt-databinding-sdo

XMLBeans

Deprecated in CXF

Javascript frontend

Use JAX-WS

JCA transport

Use HTTP transport

WS-Transfer runtime
+cxf-rt-ws-transfer

Throttling
+cxf-rt-features-throttling

Use load balancer

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/2.2/user-guide/advanced-soap-client-topics.html b/quarkus-cxf/2.2/user-guide/advanced-soap-client-topics.html new file mode 100644 index 0000000000..a6892c1661 --- /dev/null +++ b/quarkus-cxf/2.2/user-guide/advanced-soap-client-topics.html @@ -0,0 +1,1205 @@ + + + + + + Advanced SOAP client topics :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Advanced SOAP client topics

+
+

client-endpoint-url defaults

+
+
+

If you omit the client-endpoint-url property in application.properties, +the CXF Quarkus extension will assume that the service is published at http://localhost:8080/{service-path}, +where {service-path} is derived from

+
+
+
    +
  • +

    Configuration property quarkus.cxf.path (if specified); and the

    +
  • +
  • +

    SEI’s class name in lower case

    +
  • +
+
+
+

Given quarkus.cxf.path = /ws, the default effective client-endpoint-url of the CalculatorService would be +http://localhost:8080/ws/org.jboss.eap.quickstarts.wscalculator.calculator.calculatorservice.

+
+
+

If quarkus.cxf.path is not specified, the client-endpoint-url would be just +http://localhost:8080/org.jboss.eap.quickstarts.wscalculator.calculator.calculatorservice.

+
+
+
+
+

Configure multiple clients

+
+
+

In the example above, we configured just a single client called myCalculator. +Of course, you can configure multiple clients pointing at different URLs and/or implementing different SEIs using multiple identifiers:

+
+
+
application.properties
+
+
cxf.it.calculator.baseUri = http://localhost:8082
+quarkus.cxf.client.myCalculator.wsdl = ${cxf.it.calculator.baseUri}/calculator-ws/CalculatorService?wsdl
+quarkus.cxf.client.myCalculator.client-endpoint-url = ${cxf.it.calculator.baseUri}/calculator-ws/CalculatorService
+quarkus.cxf.client.myCalculator.service-interface = org.jboss.eap.quickstarts.wscalculator.calculator.CalculatorService
+
+# another client
+quarkus.cxf.client.anotherCalculator.wsdl = https://acme.com/ws/WeatherService?wsdl
+quarkus.cxf.client.anotherCalculator.client-endpoint-url = https://acme.com/ws/WeatherService
+quarkus.cxf.client.anotherCalculator.service-interface = org.jboss.eap.quickstarts.wscalculator.calculator.CalculatorService
+
+
+
+
+
+

Basic Authentication

+
+
+

Basic authentication for clients is supported by default. +Just add the following properties to your application.properties:

+
+
+
+
quarkus.cxf.client.myCalculator.username = user
+quarkus.cxf.client.myCalculator.password = password
+
+
+
+
+
+

Timeouts

+ +
+
+

Proxy

+
+
+

See the description of +quarkus.cxf.client.myClient.proxy-* properties.

+
+
+
+
+

Advanced Client Configurations

+
+
+

To globally configure all clients in your application, you can use the example snippet below to configure the +HttpConduit. +This allows you to set the HTTPClientPolicy, AuthorizationPolicy, ProxyAuthorizationPolicy or even TLSClientParameters for your clients.

+
+
+
+
void onStart(@Observes StartupEvent ev) {
+
+     HTTPConduitConfigurer httpConduitConfigurer = new HTTPConduitConfigurer() {
+         public void configure(String name, String address, HTTPConduit c) {
+             AsyncHTTPConduit conduit = (AsyncHTTPConduit)c;
+             // use setter to configure client
+             conduit.getHttpAsyncClient().getCredentialsProvider().setCredentials( AuthScope.ANY,
+              new NTCredentials( USER,PWD, "", DOM ) );
+             conduit.getClient().setAllowChunking( false );
+             conduit.getClient().setAutoRedirect( true );
+         }
+     };
+
+     final Bus bus = BusFactory.getThreadDefaultBus();
+     bus.setExtension(httpConduitConfigurer, HTTPConduitConfigurer.class);
+}
+
+
+
+

To configure the HttpConduit for a single client in your application, use the example snippet below:

+
+
+
+
    @Inject
+    @CXFClient
+    SomePortType portType;
+
+    @PostConstruct
+    void configurePortType() throws NoSuchAlgorithmException, UnrecoverableKeyException, KeyStoreException {
+        final var httpConduit = (HTTPConduit) ClientProxy.getClient(portType).getConduit();
+        final var tlsClientParameters = Optional.ofNullable(httpConduit.getTlsClientParameters()).orElseGet(TLSClientParameters::new);
+        tlsClientParameters.setCertAlias(config.clientCert().keyAlias());
+        tlsClientParameters.setKeyManagers(clientKeyManagers);
+        tlsClientParameters.setTrustManagers(clientTrustManagers);
+        httpConduit.setTlsClientParameters(tlsClientParameters);
+    }
+
+
+
+
+
+

Pure client applications

+
+
+

Quarkus batch (e.g. periodically scheduled), or command line applications, may do without an HTTP server. +Use the property below to prevent launching the HTTP server at startup:

+
+
+
+
quarkus.http.host-enabled = false
+
+
+
+
+
+

Prevent resource leaks

+
+
+

CXF client proxies implement java.io.Closeable. +Therefore, it is important to call ((Closeable) proxy).close() once the client is not needed anymore +to free all associated system resources, such as threads.

+
+
+

CXF Extensions for Quarkus takes care for closing the clients injected via @io.quarkiverse.cxf.annotation.CXFClient automatically +as soon as they are disposed by the CDI container.

+
+
+

For client proxies created manually, it is up to you to call ((Closeable) proxy).close():

+
+
+
+
import java.net.URL;
+import javax.xml.namespace.QName;
+import jakarta.xml.ws.Service;
+import java.io.Closeable;
+
+final URL serviceUrl = new URL("http://localhost/myService?wsdl");
+final QName qName = new QName("http://acme.org/myNamespace", "MyService");
+final Service service = jakarta.xml.ws.Service.create(serviceUrl, qName);
+final MyService proxy = service.getPort(MyService.class);
+
+try {
+    proxy.doSomething();
+} finally {
+    ((Closeable) proxy).close();
+}
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/2.2/user-guide/advanced-soap-server-topics.html b/quarkus-cxf/2.2/user-guide/advanced-soap-server-topics.html new file mode 100644 index 0000000000..2b2e1b8b94 --- /dev/null +++ b/quarkus-cxf/2.2/user-guide/advanced-soap-server-topics.html @@ -0,0 +1,1119 @@ + + + + + + Advanced SOAP server topics :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Advanced SOAP server topics

+
+

Running behind a reverse proxy

+
+
+

SOAP requests aimed towards services running on Quarkus can be routed through proxies that generate additional headers +(e.g. X-Forwarded-Host) to keep information from the client-facing side of the proxy servers that is altered or lost when they are involved. +In those scenarios, Quarkus can be configured to automatically update information like protocol, host, port and URI reflecting the values in these headers.

+
+
+ + + + + +
+ + +Refer to Quarkus HTTP reference for more details. +
+
+
+

CXF Extensions for Quarkus support for various X-Forwarded headers works in line with Quarkus configuration.

+
+
+ + + + + +
+ + +Activating this feature leaves the server exposed to several security issues (i.e. information spoofing). Consider activating it only when running behind a reverse proxy. +
+
+
+

These are the relevant Quarkus properties and their effect on CXF Extensions for Quarkus:

+
+
+
    +
  • +

    quarkus.http.proxy.proxy-address-forwarding - the main switch to enable the rewriting of the request destination parts.

    +
    +
      +
    • +

      If enabled, the rewriting of the request fields will be effective throughout the whole CXF server stack.

      +
    • +
    • +

      If enabled, the values passed via X-Forwarded-Proto and X-Forwarded-Port headers +will be used to set the protocol part and the port part of the URL returned by +jakarta.servlet.http.HttpServletRequest.getRequestURL() respectively.

      +
    • +
    • +

      If enabled, the value passed via X-Forwarded-For will be returned by jakarta.servlet.ServletRequest.getRemoteAddr().

      +
    • +
    +
    +
  • +
  • +

    quarkus.http.proxy.enable-forwarded-host - +enable the rewriting of the host part of URL returned by jakarta.servlet.http.HttpServletRequest.getRequestURL(). +The actual host name is taken from the header configured via +quarkus.http.proxy.forwarded-host-header +(default is X-Forwarded-Host).

    +
  • +
  • +

    quarkus.http.proxy.enable-forwarded-prefix - +enable the rewriting of the path part of the URL returned by jakarta.servlet.http.HttpServletRequest.getRequestURL() +and of the URI returned by jakarta.servlet.http.HttpServletRequest.getRequestURI(). +The actual path prefix is taken from the header configured via +quarkus.http.proxy.forwarded-prefix-header +(default is X-Forwarded-Prefix).

    +
  • +
+
+
+

Here is the most common snippet to copy to your application.properties:

+
+
+
+
quarkus.http.proxy.proxy-address-forwarding = true
+quarkus.http.proxy.enable-forwarded-host = true
+quarkus.http.proxy.enable-forwarded-prefix = true
+
+
+
+

One of the observable effects of these settings is the change of the location value in WSDL served +on http://localhost:8080/services/my-service?wsdl. +For example, if the request contains the following headers

+
+
+
+
X-Forwarded-Proto: https
+X-Forwarded-Host: api.example.com
+X-Forwarded-Port: 443
+X-Forwarded-Prefix: /my-prefix
+
+
+
+

then the WSDL served on http://localhost:8080/services/my-service?wsdl would contain the following location:

+
+
+
+
...
+<soap:address location="https://api.example.com:443/my-prefix/services/my-service"/>
+...
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/2.2/user-guide/camel-integration.html b/quarkus-cxf/2.2/user-guide/camel-integration.html new file mode 100644 index 0000000000..fa1c7a72fe --- /dev/null +++ b/quarkus-cxf/2.2/user-guide/camel-integration.html @@ -0,0 +1,1017 @@ + + + + + + Camel Integration :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Camel Integration

+
+

Camel Quarkus supports CXF since its version 2.12.0. +Under the hood, the implementation is based on CXF Extensions for Quarkus. +Therefore, all functionality available in CXF Extensions for Quarkus is also available in Camel Quarkus.

+
+
+

Please refer to Camel Quarkus CXF SOAP extension documentation for further details.

+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/2.2/user-guide/common-problems-troubleshooting.html b/quarkus-cxf/2.2/user-guide/common-problems-troubleshooting.html new file mode 100644 index 0000000000..4a9a86392e --- /dev/null +++ b/quarkus-cxf/2.2/user-guide/common-problems-troubleshooting.html @@ -0,0 +1,1224 @@ + + + + + + Common problems and troubleshooting :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Common problems and troubleshooting

+
+
+
+

Some issues may appear during the development, testing, and native image building process of your quarkus-cxf project; +below are some common ones and how to address them.

+
+
+
+
+

REST and SOAP Endpoints

+
+
+

Sometimes a REST endpoint may be needed in the same project where the Quarkus CXF Extension is used. +The REST endpoint path must be different from the SOAP endpoint path (in order to avoid request +forwarding conflicts between both protocols).

+
+
+

For example, if a WeatherWebService interface is declared in a WSDL, you can +begin by creating the org.acme.cxf.WeatherWebServiceImpl class as follows:

+
+
+
+
package org.acme.cxf;
+
+import ...
+
+@Slf4j
+@WebService(endpointInterface = "org.acme.cxf.WeatherWebService")
+public class WeatherWebServiceImpl implements WeatherWebService {
+
+    @Inject
+    BackEndWeatherService backEndWeatherService;
+
+    private Map<String, DailyTemperature> dailyTempByZipCode = Collections.synchronizedMap(new LinkedHashMap<>());
+
+    public WeatherWebServiceImpl() {
+        this.dailyTempByZipCode.addAll(
+        		this.backEndWeatherService.getDailyForecast(Instant.now()));
+    }
+
+    @Override
+    public DailyTemperature estimationTemperatures(String zipCode) {
+        log.info("Daily estimation temperatures forecast called with '{}' zip code paramter", zipCode);
+        return this.dailyTempByZipCode.get(zipCode);
+    }
+}
+
+
+
+

After that, you would need to specify the root context for your CXF web services, as indicated +in the configuration documentation to split the REST (with RESTEasy for example) +and SOAP routes based on their root context paths.

+
+
+

CXF’s SOAP properties:

+
+
+
+
quarkus.cxf.path=/soap
+quarkus.cxf.endpoint."/weather".implementor=org.acme.cxf.WeatherWebServiceImpl
+
+
+
+

Now, imagine the following RESTEasy endpoint:

+
+
+
+
package org.acme.reasteasy;
+
+import ...
+
+@Slf4j
+@Path("/healthcheck")
+public class HealthCheckResource {
+
+	@Inject
+    BackEndWeatherService backEndWeatherService;
+
+	@GET
+	public Response doHealthCheck() {
+		if(this.backEndWeatherService.isAvailable()) {
+            return Response.ok().build();
+		} else {
+            return Response.status(Response.Status.SERVICE_UNAVAILABLE);
+		}
+	}
+}
+
+
+
+

You can separate your REST endpoint by configuring the REASTEasy path:

+
+
+
+
quarkus.resteasy.path=/rest
+
+
+
+

You should now be able to send requests to both your REST and SOAP endpoints deployed within a single project, at:

+
+ +
+
+
+

Non ASCII Characters

+
+
+

Sometimes the wsdl2java autogenerated Java classes may not be +fully compatible with GraalVM due to non ASCII characters getting included in the code. Similar exceptions to +the below may appear during native image builds.

+
+
+
+
[quarkus-dalkia-ticket-loader-1.0.0-SNAPSHOT-runner:26]      compile: 161 459,15 ms,  8,54 GB
+[quarkus-dalkia-ticket-loader-1.0.0-SNAPSHOT-runner:26]        image: 158 272,73 ms,  8,43 GB
+[quarkus-dalkia-ticket-loader-1.0.0-SNAPSHOT-runner:26]        write:     205,82 ms,  8,43 GB
+Fatal error:com.oracle.svm.core.util.VMError$HostedError: java.lang.RuntimeException: oops : expected ASCII string! com.oracle.svm.reflect.OperationOrderStatusType_CRÉÉ_f151156b0d42ecdbdfb919501d8a86dda8733012_1456.hashCode
+	at com.oracle.svm.core.util.VMError.shouldNotReachHere(VMError.java:72)
+
+
+
+

Below is an example of auto-generated non ASCII characters in a Java class:

+
+
+
+
@XmlType(name = "OperationOrderStatusType")
+@XmlEnum
+public enum OperationOrderStatusType {
+
+    @XmlEnumValue("Cr\u00e9\u00e9")
+    CRÉÉ("Cr\u00e9\u00e9"),
+    @XmlEnumValue("A communiquer")
+    A_COMMUNIQUER("A communiquer"),
+    @XmlEnumValue("En attente de r\u00e9ponse")
+    EN_ATTENTE_DE_RÉPONSE("En attente de r\u00e9ponse"),
+    @XmlEnumValue("Attribu\u00e9")
+    ATTRIBUÉ("Attribu\u00e9"),
+    @XmlEnumValue("Clotur\u00e9")
+    CLOTURÉ("Clotur\u00e9"),
+    @XmlEnumValue("Annul\u00e9")
+    ANNULÉ("Annul\u00e9");
+    private final String value;
+
+    OperationOrderStatusType(String v) {
+        value = v;
+    }
+
+    public String value() {
+        return value;
+    }
+
+    public static OperationOrderStatusType fromValue(String v) {
+        for (OperationOrderStatusType c: OperationOrderStatusType.values()) {
+            if (c.value.equals(v)) {
+                return c;
+            }
+        }
+        throw new IllegalArgumentException(v);
+    }
+}
+
+
+
+

Anything starting with \u will be a problem. Consequently the following refactoring is needed:

+
+
+
+
@XmlType(name = "OperationOrderStatusType")
+@XmlEnum
+public enum OperationOrderStatusType {
+
+    @XmlEnumValue("Créé")
+    CREE("Créé"),
+    @XmlEnumValue("A communiquer")
+    A_COMMUNIQUER("A communiquer"),
+    @XmlEnumValue("En attente de réponse")
+    EN_ATTENTE_DE_REPONSE("En attente de réponse"),
+    @XmlEnumValue("Attribué")
+    ATTRIBUE("Attribué"),
+    @XmlEnumValue("Cloturé")
+    CLOTURE("Cloturé"),
+    @XmlEnumValue("Annulé")
+    ANNULE("Annulé");
+    private final String value;
+
+    OperationOrderStatusType(String v) {
+        value = v;
+    }
+
+    public String value() {
+        return value;
+    }
+
+    public static OperationOrderStatusType fromValue(String v) {
+        for (OperationOrderStatusType c: OperationOrderStatusType.values()) {
+            if (c.value.equals(v)) {
+                return c;
+            }
+        }
+        throw new IllegalArgumentException(v);
+    }
+}
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/2.2/user-guide/contract-first-code-first.html b/quarkus-cxf/2.2/user-guide/contract-first-code-first.html new file mode 100644 index 0000000000..862a1b2b72 --- /dev/null +++ b/quarkus-cxf/2.2/user-guide/contract-first-code-first.html @@ -0,0 +1,1084 @@ + + + + + + Contract first and code first approaches :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Contract first and code first approaches

+
+
+
+

Both contract first and code first development modes are fully supported by CXF Extensions for Quarkus.

+
+
+
+
+

Contract first client

+
+
+

A SOAP service is described by WSDL. +It is a contract defining operations, their parameters and return values, etc. +WSDL is rich enough to be used for generating the code of a complete client. +CXF provides the wsdl2java utility for that.

+
+
+

CXF Extensions for Quarkus wraps wsdl2java in the quarkus-cxf extension so you do not need to use it directly.

+
+
+

Please follow the Generate the Model classes from WSDL section of the user guide +for more details about how to use it.

+
+
+

You may also want to check the CXF Developing a Consumer as a general introduction.

+
+
+
+
+

Contract first service

+
+
+

When implementing a service the generation of Java code from WSDL +may also come in handy. +wsdl2java can generate the model classes (with JAXB annotations) +and service interfaces (with JAX-WS annotations) for you. +Your task is then to provide implementations for those interfaces.

+
+
+

You may want to check the WSDL First Service Development +section of CXF documentation for a better understanding of the underlying concepts.

+
+
+
+
+

Code first service

+
+
+

Another valid option at your disposal is to write your service in Java, using JAX-WS and JAXB. +Then you have two options how to obtain the WSDL contract:

+
+
+
    +
  1. +

    Start your service and point your clients at http://your-host/your-service?wsdl

    +
  2. +
  3. +

    Generate the WSDL document from Java classes at build time

    +
  4. +
+
+
+ + + + + +
+ + +Check the Code first development section of CXF documentation for further information. +
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/2.2/user-guide/create-project.html b/quarkus-cxf/2.2/user-guide/create-project.html new file mode 100644 index 0000000000..7f8175402e --- /dev/null +++ b/quarkus-cxf/2.2/user-guide/create-project.html @@ -0,0 +1,1132 @@ + + + + + + Create a new project :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Create a new project

+
+
+
+

This guide explains how to set up a new project for a Quarkus application hosting a CXF client or server or both.

+
+
+
+
+

Prerequisites

+
+
+

Please read the Prerequisites section of Quarkus getting started guide.

+
+
+

In addition to that, you may need

+
+
+
    +
  • +

    GraalVM with the native-image command installed and the GRAALVM_HOME environment variable set. +See Building a native executable section of the Quarkus +documentation.

    +
  • +
  • +

    If you are on Linux, a container runtime like docker is sufficient for the native mode too. +Use -Pnative -Dquarkus.native.container-build=true instead of -Pnative if you choose this option.

    +
  • +
+
+
+
+
+

Create project

+
+
+

New project skeletons can be generated using code.quarkus.io.

+
+
+
+https://code.quarkus.io +
+
+
+
    +
  • +

    Here you can select the extensions that you want to work with.

    +
  • +
  • +

    For a simple Hello world Web service or client the quarkus-cxf extension is enough.

    +
  • +
  • +

    Click the blue Generate your application button to download a basic skeleton project.

    +
  • +
  • +

    Unpack the zip file and import the project the into your favorite IDE.

    +
  • +
+
+
+
+
+

Dependency management

+
+
+

CXF Extensions for Quarkus is a part of Quarkus Platform since Quarkus Platform version 3.1.0.Final. +Among other things, this means that code.quarkus.io +and other Quarkus development tools generate projects with proper dependency management:

+
+
+
+
<project ...>
+  ...
+  <properties>
+    ...
+    <quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id>
+    <quarkus.platform.group-id>io.quarkus.platform</quarkus.platform.group-id>
+    <quarkus.platform.version><!-- Check the latest https://repo1.maven.org/maven2/io/quarkus/platform/quarkus-cxf-bom/ --></quarkus.platform.version>
+  </properties>
+  <dependencyManagement>
+    <dependencies>
+      <dependency>
+        <groupId>${quarkus.platform.group-id}</groupId>
+        <artifactId>${quarkus.platform.artifact-id}</artifactId>
+        <version>${quarkus.platform.version}</version>
+        <type>pom</type>
+        <scope>import</scope>
+      </dependency>
+      <dependency>
+        <groupId>${quarkus.platform.group-id}</groupId>
+        <artifactId>quarkus-cxf-bom</artifactId>
+        <version>${quarkus.platform.version}</version>
+        <type>pom</type>
+        <scope>import</scope>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
+...
+
+
+
+

You should always take care to import the same version of io.quarkus.platform:quarkus-bom and io.quarkus.platform:quarkus-cxf-bom into your project. +That’s the most reliable way to get compatible versions of Quarkus, CXF, CXF Extensions for Quarkus and all their transitive dependencies.

+
+
+
+
+

Where to go next

+
+
+

We recommend to proceed with any of the following chapters:

+
+ +
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/2.2/user-guide/cxf-interceptors-and-features.html b/quarkus-cxf/2.2/user-guide/cxf-interceptors-and-features.html new file mode 100644 index 0000000000..5752b59907 --- /dev/null +++ b/quarkus-cxf/2.2/user-guide/cxf-interceptors-and-features.html @@ -0,0 +1,1058 @@ + + + + + + CXF Interceptors and Features :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

CXF Interceptors and Features

+
+

CXF interceptors and CXF features can be added to both your client or server using either annotations or application.properties configurations.

+
+
+

While CXF provides a number of out of the box embedded interceptors and features, you can also integrate your custom developed implementations.

+
+
+

Annotations can be used on either the service interface or implementor classes.

+
+
+
+
@org.apache.cxf.feature.Features (features = {"org.apache.cxf.ext.logging.LoggingFeature"})
+@org.apache.cxf.interceptor.InInterceptors (interceptors = {"org.acme.Test1Interceptor" })
+@org.apache.cxf.interceptor.InFaultInterceptors (interceptors = {"org.acme.Test2Interceptor" })
+@org.apache.cxf.interceptor.OutInterceptors (interceptors = {"org.acme.Test1Interceptor" })
+@org.apache.cxf.interceptor.InFaultInterceptors (interceptors = {"org.acme.Test2Interceptor","org.acme.Test3Intercetpor" })
+@WebService(endpointInterface = "org.acme.SayHi", targetNamespace = "uri:org.acme")
+public class SayHiImplementation implements SayHi {
+   public long sayHi(long arg) {
+       return arg;
+   }
+   //...
+}
+
+
+
+

You may also define your configurations in the application.properties file.

+
+
+
+
quarkus.cxf.endpoint."/greeting-service".features=org.apache.cxf.ext.logging.LoggingFeature
+quarkus.cxf.endpoint."/greeting-service".in-interceptors=org.acme.Test1Interceptor
+quarkus.cxf.endpoint."/greeting-service".out-interceptors=org.acme.Test1Interceptor
+quarkus.cxf.endpoint."/greeting-service".in-fault-interceptors=org.acme.Test2Interceptor,org.acme.Test3Intercetpor
+quarkus.cxf.endpoint."/greeting-service".out-fault-interceptors=org.acme.Test1Intercetpor
+
+
+
+ + + + + +
+ + +Both feature and interceptor classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class. +
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/2.2/user-guide/examples.html b/quarkus-cxf/2.2/user-guide/examples.html new file mode 100644 index 0000000000..0e5bd276a3 --- /dev/null +++ b/quarkus-cxf/2.2/user-guide/examples.html @@ -0,0 +1,1013 @@ + + + + + + Examples :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Examples

+
+

The integration-tests folder of the codebase provides various examples +that demonstrate how to use this extension extensively.

+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/2.2/user-guide/first-soap-client.html b/quarkus-cxf/2.2/user-guide/first-soap-client.html new file mode 100644 index 0000000000..c053786c6f --- /dev/null +++ b/quarkus-cxf/2.2/user-guide/first-soap-client.html @@ -0,0 +1,1292 @@ + + + + + + Your first SOAP Client on Quarkus :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Your first SOAP Client on Quarkus

+
+
+
+

In this guide we explain how to create a simple Quarkus application acting as a client of a remote Web service.

+
+
+ + + + + +
+ + +Follow the Project creation guide before proceeding here. +
+
+
+
+
+

Remote Web service for testing

+
+
+

First, we need some remote Web service to connect to. +We can use a simple Calculator Web service running in a container for that purpose.

+
+
+
+
$ docker run -p 8082:8080 quay.io/l2x6/calculator-ws:1.0
+
+
+
+

Once the container is up and running, we can inspect its WSDL

+
+
+
+
$ curl -s http://localhost:8082/calculator-ws/CalculatorService?wsdl
+<?xml version="1.0" ?>
+<wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://www.jboss.org/eap/quickstarts/wscalculator/Calculator" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" name="CalculatorService" targetNamespace="http://www.jboss.org/eap/quickstarts/wscalculator/Calculator">
+
+  ...
+
+  <wsdl:binding name="CalculatorServiceSoapBinding" type="tns:CalculatorService">
+    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"></soap:binding>
+    <wsdl:operation name="add">
+      <soap:operation soapAction="" style="document"></soap:operation>
+      <wsdl:input name="add">
+        <soap:body use="literal"></soap:body>
+      </wsdl:input>
+      <wsdl:output name="addResponse">
+        <soap:body use="literal"></soap:body>
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="subtract">
+      <soap:operation soapAction="" style="document"></soap:operation>
+      <wsdl:input name="subtract">
+        <soap:body use="literal"></soap:body>
+      </wsdl:input>
+      <wsdl:output name="subtractResponse">
+        <soap:body use="literal"></soap:body>
+      </wsdl:output>
+    </wsdl:operation>
+
+    ...
+
+  </wsdl:binding>
+
+  ...
+
+</wsdl:definitions>
+
+
+
+

As you can see in the WSDL, the service offers some basic arithmetic operations, such as add, subtract, etc.

+
+
+

Let’s test it with curl:

+
+
+
+
$ curl -s \
+    -X POST \
+    -H "Content-Type: text/xml;charset=UTF-8" \
+    -d \
+        '<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
+            <Body>
+                <add xmlns="http://www.jboss.org/eap/quickstarts/wscalculator/Calculator">
+                    <arg0 xmlns="">7</arg0> (1)
+                    <arg1 xmlns="">4</arg1>
+                </add>
+            </Body>
+        </Envelope>' \
+    http://localhost:8082/calculator-ws/CalculatorService
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
+  <soap:Body>
+    <ns2:addResponse xmlns:ns2="http://www.jboss.org/eap/quickstarts/wscalculator/Calculator">
+      <return>11</return> (2)
+    </ns2:addResponse>
+  </soap:Body>
+</soap:Envelope>
+
+
+
+ + + + + + + + + +
1The request to add 7 and 4
211 - return value of the operation
+
+
+
+
+

SOAP client

+
+
+

Now let’s have a look how we can get the client inside a Quarkus application.

+
+
+

First, we need the Service Endpoint Interface (SEI) and all other model classes it requires.

+
+
+

There are several ways to get them:

+
+
+
    +
  • +

    Write by hand

    +
  • +
  • +

    Copy from the Web Sevice project, if it is written in Java

    +
  • +
  • +

    Have a Maven artifact containing the model classes, perhaps it is offered by the Service project

    +
  • +
  • +

    Generate the model classes from WSDL

    +
  • +
+
+
+

The last option tends to be the easiest and most flexible for client applications.

+
+
+ + + + + +
+ + +If you want to use this approach, please first follow the Generate Java from WSDL section and then continue with the next steps. +
+
+
+
+
+

Using SEI as a client

+
+
+

In our case, the Service Endpoint Interface (SEI) is org.jboss.eap.quickstarts.wscalculator.calculator.CalculatorService.

+
+
+

As usual on Quarkus, we can obtain an instance of it via CDI.

+
+
+

To make it testable easily, we’ll wrap it in a REST service:

+
+
+
CxfClientResource.java
+
+
package io.quarkiverse.cxf.client.it;
+
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.QueryParam;
+import jakarta.ws.rs.core.MediaType;
+
+import org.jboss.eap.quickstarts.wscalculator.calculator.CalculatorService;
+
+import io.quarkiverse.cxf.annotation.CXFClient;
+
+@Path("/cxf/calculator-client")
+public class CxfClientRestResource {
+
+    @CXFClient("myCalculator") (1)
+    CalculatorService myCalculator;
+
+    @GET
+    @Path("/add")
+    @Produces(MediaType.TEXT_PLAIN)
+    public int add(@QueryParam("a") int a, @QueryParam("b") int b) {
+        return myCalculator.add(a, b); (2)
+    }
+
+}
+
+
+
+ + + + + + + + + +
1Let the CDI container inject an instance of the client. @CXFClient("myCalculator") is actually equivalent to @Inject @CXFClient("myCalculator")
2Invoke the add operation thus calling the remote Web service
+
+
+

Is this all we need for the client to work? +- No, in addition to the above, we need to tell a few other things to the CXF Quarkus extension in application.properties:

+
+
+
application.properties
+
+
cxf.it.calculator.baseUri=http://localhost:8082
+quarkus.cxf.client.myCalculator.wsdl = ${cxf.it.calculator.baseUri}/calculator-ws/CalculatorService?wsdl
+quarkus.cxf.client.myCalculator.client-endpoint-url = ${cxf.it.calculator.baseUri}/calculator-ws/CalculatorService
+quarkus.cxf.client.myCalculator.service-interface = org.jboss.eap.quickstarts.wscalculator.calculator.CalculatorService
+
+
+
+ + + + + +
+ + +All client configuration properties are documented in the Configuration properties reference. +
+
+
+

With all the above files in place, we should be able to start the application in Quarkus dev mode

+
+
+
+
$ mvn quarkus:dev
+...
+INFO  [io.quarkus] (Quarkus Main Thread) ... Listening on: http://localhost:8080
+
+
+
+

and test it by sending some requests to it:

+
+
+
+
$ curl -s 'http://localhost:8080/cxf/calculator-client/add?a=5&b=6'
+11
+
+
+
+

where 11 is the correct result of adding 5 and 6.

+
+
+
+
+

Further steps

+
+
+

You may want to proceed with

+
+ +
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/2.2/user-guide/first-soap-web-service.html b/quarkus-cxf/2.2/user-guide/first-soap-web-service.html new file mode 100644 index 0000000000..0185a003e9 --- /dev/null +++ b/quarkus-cxf/2.2/user-guide/first-soap-web-service.html @@ -0,0 +1,1300 @@ + + + + + + Your first SOAP Web service on Quarkus :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Your first SOAP Web service on Quarkus

+
+
+
+

In this guide we explain how to create a Quarkus application exposing a simple SOAP Web service.

+
+
+ + + + + +
+ + +Follow the Project creation guide before proceeding here. +
+
+
+
+
+

Hello world! Web service

+
+
+

Having the pom.xml in place, you can add a simple Hello world! Web service in src/main/java.

+
+
+ + + + + +
+ + +The sample code snippets used in this section come from the + server integration test + in the source tree of CXF Extensions for Quarkus +
+
+
+

First add the service interface:

+
+
+
HelloService.java
+
+
package io.quarkiverse.cxf.it.server;
+
+import jakarta.jws.WebMethod;
+import jakarta.jws.WebService;
+
+/**
+ * The simplest Hello service.
+ */
+@WebService(name = "HelloService", serviceName = "HelloService")
+public interface HelloService {
+
+    @WebMethod
+    String hello(String text);
+
+}
+
+
+
+

and then the implementation:

+
+
+
HelloServiceImpl.java
+
+
package io.quarkiverse.cxf.it.server;
+
+import jakarta.jws.WebMethod;
+import jakarta.jws.WebService;
+
+/**
+ * The simplest Hello service implementation.
+ */
+@WebService(serviceName = "HelloService")
+public class HelloServiceImpl implements HelloService {
+
+    @WebMethod
+    @Override
+    public String hello(String text) {
+        return "Hello " + text + "!";
+    }
+
+}
+
+
+
+

For the implementation to get exposed under a certain path, you need to add the following configuration to application.properties:

+
+
+
+
# The context path under which all services will be available
+quarkus.cxf.path = /soap
+
+# Publish "HelloService" under the context path /${quarkus.cxf.path}/hello
+quarkus.cxf.endpoint."/hello".implementor = io.quarkiverse.cxf.it.server.HelloServiceImpl
+quarkus.cxf.endpoint."/hello".features = org.apache.cxf.ext.logging.LoggingFeature
+
+
+
+ + + + + +
+ + +All configuration properties are documented in the Configuration properties reference. +
+
+
+

With these files in place, you can start Quarkus in dev mode:

+
+
+
+
$ mvn quarkus:dev
+
+
+
+

This will compile the project and start the application on the background.

+
+
+

You can test the service using curl or some other SOAP client.

+
+
+

First let’s have a look at the auto-generated WSDL under http://localhost:8080/soap/hello?wsdl:

+
+
+
+
$ curl http://localhost:8080/soap/hello?wsdl
+<?xml version='1.0' encoding='UTF-8'?>
+<wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://server.it.cxf.quarkiverse.io/"
+    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http"
+    name="HelloService" targetNamespace="http://server.it.cxf.quarkiverse.io/">
+  <wsdl:types>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://server.it.cxf.quarkiverse.io/" attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="http://server.it.cxf.quarkiverse.io/">
+  <xsd:element name="hello" type="tns:hello"/>
+  <xsd:complexType name="hello">
+    <xsd:sequence>
+      <xsd:element minOccurs="0" name="arg0" type="xsd:string"/>
+    </xsd:sequence>
+  </xsd:complexType>
+  <xsd:element name="helloResponse" type="tns:helloResponse"/>
+  <xsd:complexType name="helloResponse">
+    <xsd:sequence>
+      <xsd:element minOccurs="0" name="return" type="xsd:string"/>
+    </xsd:sequence>
+  </xsd:complexType>
+</xsd:schema>
+  </wsdl:types>
+  <wsdl:message name="helloResponse">
+    <wsdl:part element="tns:helloResponse" name="parameters">
+    </wsdl:part>
+  </wsdl:message>
+  <wsdl:message name="hello">
+    <wsdl:part element="tns:hello" name="parameters">
+    </wsdl:part>
+  </wsdl:message>
+  <wsdl:portType name="HelloService">
+    <wsdl:operation name="hello">
+      <wsdl:input message="tns:hello" name="hello">
+    </wsdl:input>
+      <wsdl:output message="tns:helloResponse" name="helloResponse">
+    </wsdl:output>
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding name="HelloServiceSoapBinding" type="tns:HelloService">
+    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
+    <wsdl:operation name="hello">
+      <soap:operation soapAction="" style="document"/>
+      <wsdl:input name="hello">
+        <soap:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output name="helloResponse">
+        <soap:body use="literal"/>
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:service name="HelloService">
+    <wsdl:port binding="tns:HelloServiceSoapBinding" name="HelloServicePort">
+      <soap:address location="http://localhost:8080/soap/hello"/>
+    </wsdl:port>
+  </wsdl:service>
+</wsdl:definitions>
+
+
+
+

Second, let’s send a SOAP request to the service:

+
+
+
+
$ curl -v -X POST -H "Content-Type: text/xml;charset=UTF-8" \
+    -d \
+      '<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
+        <soap:Body><ns2:hello xmlns:ns2="http://server.it.cxf.quarkiverse.io/"><arg0>World</arg0></ns2:hello></soap:Body>
+       </soap:Envelope>' \
+    http://localhost:8080/soap/hello
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
+  <soap:Body>
+    <ns1:helloResponse xmlns:ns1="http://server.it.cxf.quarkiverse.io/">
+      <return>Hello World!</return>
+    </ns1:helloResponse>
+  </soap:Body>
+</soap:Envelope>
+
+
+
+

Note the expected <return>Hello World!</return> in the SOAP response.

+
+
+
+
+

Add the logging feature while dev mode is running

+
+
+

Sometimes it may come in handy to be able to inspect the SOAP messages received or sent by the server or client. +This is easily doable by adding the quarkus-cxf-rt-features-logging extension to pom.xml.

+
+
+ + + + + +
+ + +Try to do that while Quarkus dev mode is running. + You should see the application being recompiled and redeployed upon saving your changes in the source tree. +
+
+
+
Add this to pom.xml
+
+
<dependency>
+    <groupId>io.quarkiverse.cxf</groupId>
+    <artifactId>quarkus-cxf-rt-features-logging</artifactId>
+</dependency>
+
+
+
+
Enable SOAP payload logging in application.properties
+
+
quarkus.cxf.endpoint."/hello".features=org.apache.cxf.ext.logging.LoggingFeature
+
+
+
+

After that you can send a new SOAP request and see some SOAP payloads in the application console:

+
+
+
+
2023-01-11 22:12:21,315 INFO  [org.apa.cxf.ser.Hel.REQ_IN] (vert.x-worker-thread-0) REQ_IN
+    Address: http://localhost:8080/soap/hello
+    HttpMethod: POST
+    Content-Type: text/xml;charset=UTF-8
+    ExchangeId: af10747a-8477-4c17-bf5f-2a4a3a95d61c
+    ServiceName: HelloService
+    PortName: HelloServicePort
+    PortTypeName: HelloService
+    Headers: {Accept=*/*, User-Agent=curl/7.79.1, content-type=text/xml;charset=UTF-8, Host=localhost:8080, Content-Length=203, x-quarkus-hot-deployment-done=true}
+    Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
+  <soap:Body><ns2:hello xmlns:ns2="http://server.it.cxf.quarkiverse.io/"><arg0>World</arg0></ns2:hello></soap:Body>
+</soap:Envelope>
+
+
+2023-01-11 22:12:21,327 INFO  [org.apa.cxf.ser.Hel.RESP_OUT] (vert.x-worker-thread-0) RESP_OUT
+    Address: http://localhost:8080/soap/hello
+    Content-Type: text/xml
+    ResponseCode: 200
+    ExchangeId: af10747a-8477-4c17-bf5f-2a4a3a95d61c
+    ServiceName: HelloService
+    PortName: HelloServicePort
+    PortTypeName: HelloService
+    Headers: {}
+    Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns1:helloResponse xmlns:ns1="http://server.it.cxf.quarkiverse.io/"><return>Hello World!</return></ns1:helloResponse></soap:Body></soap:Envelope>
+
+
+
+
+
+

Further steps

+ +
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/2.2/user-guide/generate-java-from-wsdl.html b/quarkus-cxf/2.2/user-guide/generate-java-from-wsdl.html new file mode 100644 index 0000000000..9aa8541f0a --- /dev/null +++ b/quarkus-cxf/2.2/user-guide/generate-java-from-wsdl.html @@ -0,0 +1,1122 @@ + + + + + + Generate the Model classes from WSDL :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Generate the Model classes from WSDL

+
+

quarkus-cxf extension supports generating Java classes from WSDL during Quarkus code generation phase.

+
+
+ + + + + +
+ + +The code snippets shown in this section come from the + client integration test + in the source tree of CXF Extensions for Quarkus. + You may want to check it as an executable example. +
+
+
+

You need to set up a couple of things for CXF code generation to work:

+
+
+
    +
  • +

    Have io.quarkiverse.cxf:quarkus-cxf dependency in your project

    +
  • +
  • +

    For Maven projects, the generate-code goal needs to be present in the configuration of quarkus-maven-plugin:

    +
    +
    pom.xml
    +
    +
                <plugin>
    +                <groupId>io.quarkus</groupId>
    +                <artifactId>quarkus-maven-plugin</artifactId>
    +                <executions>
    +                    <execution>
    +                        <goals>
    +                            <goal>build</goal>
    +                            <goal>generate-code</goal>
    +                        </goals>
    +                    </execution>
    +                </executions>
    +            </plugin>
    +
    +
    +
  • +
  • +

    For Gradle projects no additional configurarion of io.quarkus plugin is needed

    +
  • +
  • +

    Put your WSDL files under src/main/resources or src/test/resources or any subdirectory thereof.

    +
  • +
  • +

    Your WSDL file names must end with .wsdl

    +
  • +
  • +

    Set quarkus.cxf.codegen.wsdl2java.includes +configuration property +to a pattern matching the WSDL files you wish to process. +If you want to process all WSDL files under src/main/resources/wsdl or src/test/resources/wsdl, set it as follows:

    +
    +
    application.properties
    +
    +
    quarkus.cxf.codegen.wsdl2java.includes = wsdl/*.wsdl
    +
    +
    +
  • +
+
+
+

This will generate Java classes in target/generated-sources/wsdl2java or +target/generated-test-sources/wsdl2java directory. +They will be automatically picked by the compiler plugin there. +Hence we are free to refer to them from our application or test code.

+
+
+

Note that quarkus-cxf code generation uses the wsdl2Java utility +from CXF under the hood. wsdl2Java is called separately for each WSDL file selected by includes and excludes.

+
+
+

Passing custom parameters to wsdl2java is possible through +quarkus.cxf.codegen.wsdl2java.additional-params +configuration parameter.

+
+
+

If you need different additional-params for each WSDL file, you may want to define a separate named parameter set for +each one of them. Here is an example:

+
+
+
application.properties
+
+
# Parameters for foo.wsdl
+quarkus.cxf.codegen.wsdl2java.foo-params.includes = wsdl/foo.wsdl
+quarkus.cxf.codegen.wsdl2java.foo-params.additional-params = -wsdlLocation,wsdl/foo.wsdl
+# Parameters for bar.wsdl
+quarkus.cxf.codegen.wsdl2java.bar-params.includes = wsdl/bar.wsdl
+quarkus.cxf.codegen.wsdl2java.bar-params.additional-params = -wsdlLocation,wsdl/bar.wsdl,-xjc-Xts
+
+
+
+ + + + + +
+ + +Add io.quarkiverse.cxf:quarkus-cxf-xjc-plugins dependency to your project to be able to use + -xjc-Xbg, -xjc-Xdv, -xjc-Xjavadoc, -xjc-Xproperty-listener, -xjc-Xts and -xjc-Xwsdlextension + wsdl2java parameters. +
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/2.2/user-guide/generate-wsdl-from-java.html b/quarkus-cxf/2.2/user-guide/generate-wsdl-from-java.html new file mode 100644 index 0000000000..6e2d90fdd9 --- /dev/null +++ b/quarkus-cxf/2.2/user-guide/generate-wsdl-from-java.html @@ -0,0 +1,1089 @@ + + + + + + Generate WSDL document from Java :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Generate WSDL document from Java

+
+
+
+

If the WSDL served by your service at http://your-host/your-service?wsdl is not enough +because you e.g. want to distribute it as a Maven artifact, +then you can use java2ws to generate the WSDL document at build time.

+
+
+

You do not need to invoke the java2ws tool provided by CXF directly, +neither you have to use the cxf-java2ws-plugin.

+
+
+

quarkus-cxf wraps java2ws and so you can configure it in application.properties +as any other aspect of your application.

+
+
+

Here is an example:

+
+
+ + + + + +
+ + +The sample code snippets used in this section come from the + server integration test + in the source tree of CXF Extensions for Quarkus +
+
+
+
application.properties
+
+
quarkus.cxf.java2ws.includes = io.quarkiverse.cxf.it.server.HelloService,io.quarkiverse.cxf.it.server.FaultyHelloService
+quarkus.cxf.java2ws.wsdl-name-template = %TARGET_DIR%/Java2wsTest/%SIMPLE_CLASS_NAME%-from-java2ws.wsdl
+
+
+
+

Here we have instructed java2ws to generate WSDLs for two interfaces, +namely HelloService and FaultyHelloService.

+
+
+

Note that the Service interfaces must be annotated with jakarta.xml.ws.WebService to be selected for java2ws processing.

+
+
+

The two generated WSDL documents will be stored as target/Java2wsTest/FaultyHelloService-from-java2ws.wsdl +and target/Java2wsTest/HelloService-from-java2ws.wsdl respectively.

+
+
+ + + + + +
+ + +Unlike wsdl2java which is executed within Quarkus source generation phase, + java2ws is a part Quarkus augmentation that happens after compilation. + The input of java2ws are, after all, Java class files. + Hence you do not need to add <goal>generate-code</goal> to quarkus-maven-plugin + for java2ws. +
+
+
+
+
+

See also

+
+
+ +
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/2.2/user-guide/index.html b/quarkus-cxf/2.2/user-guide/index.html new file mode 100644 index 0000000000..dafac6b192 --- /dev/null +++ b/quarkus-cxf/2.2/user-guide/index.html @@ -0,0 +1,1027 @@ + + + + + + User guide :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ + +
+
+
+ + + + + + + diff --git a/quarkus-cxf/2.2/user-guide/jax-ws-handlers.html b/quarkus-cxf/2.2/user-guide/jax-ws-handlers.html new file mode 100644 index 0000000000..b8af1c02a5 --- /dev/null +++ b/quarkus-cxf/2.2/user-guide/jax-ws-handlers.html @@ -0,0 +1,1056 @@ + + + + + + JAX-WS Handlers :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

JAX-WS Handlers

+
+

As an alternative to the @HandlerChain annotation, +JAX-WS Handlers can be added +to both your client or server via application.properties:

+
+
+
application.properties
+
+
# A web service endpoint with multiple Handler classes
+quarkus.cxf.endpoint."/greeting-service".handlers=org.acme.MySOAPHandler,org.acme.AnotherSOAPHandler
+
+# A web service client with a single Handler
+quarkus.cxf.client."greeting-client".handlers=org.acme.MySOAPHandler
+
+
+
+

Where MySOAPHandler could look like below:

+
+
+
+
import jakarta.xml.ws.handler.soap.SOAPHandler;
+import jakarta.xml.ws.handler.soap.SOAPMessageContext;
+
+public class MySOAPHandler implements SOAPHandler {
+
+    public boolean handleMessage(SOAPMessageContext messageContext) {
+        SOAPMessage msg = messageContext.getMessage();
+        return true;
+    }
+    // other methods
+}
+
+
+
+ + + + + +
+ + +The SOAPHandler classes will be attempted to be loaded via CDI first. + If no CDI beans are available for the given type, then the no parameters constructor will used + to instantiate each class. +
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/2.2/user-guide/jax-ws-providers.html b/quarkus-cxf/2.2/user-guide/jax-ws-providers.html new file mode 100644 index 0000000000..1981555e4e --- /dev/null +++ b/quarkus-cxf/2.2/user-guide/jax-ws-providers.html @@ -0,0 +1,1064 @@ + + + + + + JAX-WS Providers :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

JAX-WS Providers

+
+

JAX-WS Providers are fully supported, and can be implemented as shown below.

+
+
+

Given the following sample Provider implementation:

+
+
+
+
import jakarta.xml.transform.stream.StreamSource;
+import jakarta.xml.ws.BindingType;
+import jakarta.xml.ws.Provider;
+import jakarta.xml.ws.Service;
+import jakarta.xml.ws.ServiceMode;
+import jakarta.xml.ws.WebServiceProvider;
+import java.io.StringReader;
+
+@WebServiceProvider
+@ServiceMode(value = Service.Mode.PAYLOAD)
+public class StreamSourcePayloadProvider implements Provider {
+
+    public StreamSourcePayloadProvider() {
+    }
+
+    public StreamSource invoke(StreamSource request) {
+        String payload = StaxUtils.toString(request);
+
+        // Do some interesting things ...
+
+        StreamSource response = new StreamSource(new StringReader(payload));
+        return response;
+    }
+}
+
+
+
+

The application.properties can be configured as shown below.

+
+
+
+
# A web service endpoint with the Provider implementation class
+quarkus.cxf.endpoint."/stream-source".implementor=org.acme.StreamSourcePayloadProvider
+
+
+
+ + + + + +
+ + +Provider classes will be attempted to be loaded via CDI first, and if no CDI beans are available, then the constructor with no parameters will be invoked to instantiate each class. +
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/2.2/user-guide/package-for-jvm-and-native.html b/quarkus-cxf/2.2/user-guide/package-for-jvm-and-native.html new file mode 100644 index 0000000000..67a0bac6dc --- /dev/null +++ b/quarkus-cxf/2.2/user-guide/package-for-jvm-and-native.html @@ -0,0 +1,1217 @@ + + + + + + Package for running on a JVM or natively :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Package for running on a JVM or natively

+
+
+
+

In this chapter, we explain how to package a Quarkus CXF application for running on a JVM or for running it natively.

+
+
+
+
+

JVM mode

+
+
+

In the introductory guides for SOAP client and SOAP service, we worked only in Quarkus dev mode: +Quarkus tooling was running on the background, +watching for changes in our workspace, recompiling and reloading the application as needed.

+
+
+

How do we run the application on a JVM once we are done with the development?

+
+
+

First we need to package it with Maven:

+
+
+
+
$ mvn package
+
+
+
+

The libraries needed to run the application on a JVM can be found in target/quarkus-app directory:

+
+
+
+
$ ls -lh target/quarkus-app
+drwxr-xr-x. 2 ppalaga ppalaga 4.0K Jan 12 22:29 app
+drwxr-xr-x. 4 ppalaga ppalaga 4.0K Jan 12 22:29 lib
+drwxr-xr-x. 2 ppalaga ppalaga 4.0K Jan 12 22:29 quarkus
+-rw-r--r--. 1 ppalaga ppalaga 6.1K Jan 12 22:29 quarkus-app-dependencies.txt
+-rw-r--r--. 1 ppalaga ppalaga  678 Jan 12 22:29 quarkus-run.jar
+
+
+
+

We can start the application as follows:

+
+
+
+
$ java -jar target/quarkus-app/quarkus-run.jar
+
+
+
+

You can send some SOAP requests using curl to make sure that the application works.

+
+
+
+
+

Native mode

+
+
+

Quarkus offers first class support for building GraalVM native images +and CXF Extensions for Quarkus fully honors that promise too.

+
+
+ + + + + +
+ + +GraalVM native images are platform specific executable files that you can run directly without a JVM. + They boot faster and spend less memory compared to running the same application in JVM mode. +
+
+
+

The pom.xml file generated by code.quarkus.io +contains the native profile needed for building the native image:

+
+
+
+
<profile>
+  <id>native</id>
+  <activation>
+    <property>
+      <name>native</name>
+    </property>
+  </activation>
+  <properties>
+    <skipITs>false</skipITs>
+    <quarkus.package.type>native</quarkus.package.type>
+  </properties>
+</profile>
+
+
+
+

Further, as mentioned above, you need the GraalVM native-image tool.

+
+
+

You should either have it installed locally and have GRAALVM_HOME environment variable set properly, +or — if you only need to produce a Linux native executable — you can use docker.

+
+
+
With local installation of GraalVM
+
+
# Make sure $GRAALVM_HOME is set properly
+$ echo $GRAALVM_HOME
+/home/{user}/.sdkman/candidates/java/{major}.{minor}.r{java-version}-grl
+
+# Produce the native executable
+mvn package -Pnative
+
+
+
+ + + + + +
+ + +Quarkus is quite picky about the GraalVM version. + When using the local installation, always make sure that you use the version preferred by Quarkus. + You can do that by opening quarkus-bom imported in your pom.xml and searching for graalvm there. + If you use Docker, Quarkus takes care for pulling the right version for you. +
+
+
+
With docker
+
+
# Produce the native executable
+mvn package -Pnative -Dquarkus.native.container-build=true
+
+
+
+

This can take a minute or so for a simple application.

+
+
+

When the build is done, the native executable should be available in target directory:

+
+
+
+
$ ls -l target
+...
+-rwxr-xr-x. 1 ppalaga ppalaga  71M Jan 11 22:42 quarkus-cxf-integration-test-server-1.8.0-SNAPSHOT-runner
+...
+
+
+
+

Note the x permission on Linux and the size of just 71 MB.

+
+
+

You can run it as follows:

+
+
+
+
$ target/*-runner
+...
+INFO  [io.quarkus] (main) quarkus-cxf-integration-test-server 1.8.0-SNAPSHOT native (powered by Quarkus
+2.15.2.Final) started in 0.042s. Listening on: http://0.0.0.0:8080
+...
+
+
+
+

Again, you can send some SOAP requests using curl to make sure that the native executable works.

+
+
+

Do not forget to compare the memory usage, time to first request and other performance metrics +with the stack you used before and share your results!

+
+
+
+
+

Native Image: Additional Resources

+ +
+
+

Create container image

+
+
+

Please refer to Quarkus Container image guide.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/2.2/user-guide/soap-payloads-with-jaxb.html b/quarkus-cxf/2.2/user-guide/soap-payloads-with-jaxb.html new file mode 100644 index 0000000000..a17812b193 --- /dev/null +++ b/quarkus-cxf/2.2/user-guide/soap-payloads-with-jaxb.html @@ -0,0 +1,1311 @@ + + + + + + Complex SOAP payloads with JAXB :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Complex SOAP payloads with JAXB

+
+
+
+

Our introductory guides for Quarkus SOAP client +and SOAP service dealt with services +having only primitive parameters and return values such as integers and strings. +Let’s have a look at passing and receiving more complex objects.

+
+
+

As an example, let’s create an application for managing fruits.

+
+
+ + + + + +
+ + +The sample code snippets used in this section come from the + server integration test + in the source tree of CXF Extensions for Quarkus +
+
+
+

Because our representation of fruit is supposed to be a complex, let’s model it as a Java bean with a couple of attributes:

+
+
+
+
package io.quarkiverse.cxf.it.server;
+
+import java.util.Objects;
+
+import jakarta.xml.bind.annotation.XmlElement;
+import jakarta.xml.bind.annotation.XmlRootElement;
+import jakarta.xml.bind.annotation.XmlType;
+
+@XmlType(name = "Fruit")
+@XmlRootElement
+public class Fruit {
+
+    private String name;
+
+    private String description;
+
+    public Fruit() {
+    }
+
+    public Fruit(String name, String description) {
+        this.name = name;
+        this.description = description;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    @XmlElement
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    @XmlElement
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (!(obj instanceof Fruit)) {
+            return false;
+        }
+
+        Fruit other = (Fruit) obj;
+
+        return Objects.equals(other.getName(), this.getName());
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(this.getName());
+    }
+}
+
+
+
+

As you may have noticed, we have used some JAXB annotations, +such as @XmlElement, @XmlRootElement and @XmlType. +This is to control the serialization and deserialization of the bean from and to XML.

+
+
+
+
+

Automatic registration for reflection

+
+
+

JAXB is a reflection based serialization framework. +When learning about GraalVM native images, one of the first things you typically hear is +that you have to register classes, fields and methods for reflection at build time. +With plain GraalVM you’d have to do this through reflection-config.json manually. +Well, at least for the classes you have written yourself. +Not so with Quarkus. quarkus-jaxb extension (which quarkus-cxf depends on) +is able to scan your application’s class path for classes annotated with JAXB annotations +and register them for reflection automatically.

+
+
+

Hence working with complex payloads on Quarkus is not different from stock CXF. +The JAXB serialization and deserialization will work out of the box without any additional configuration.

+
+
+
+
+

SEI and implementation

+
+
+

The Service Endpoint Interface (SEI) for managing fruits might look like the following:

+
+
+
+
package io.quarkiverse.cxf.it.server;
+
+import java.util.Set;
+
+import jakarta.jws.WebMethod;
+import jakarta.jws.WebService;
+
+@WebService
+public interface FruitService {
+
+    @WebMethod
+    Set<Fruit> list();
+
+    @WebMethod
+    Set<Fruit> add(Fruit fruit);
+
+    @WebMethod
+    Set<Fruit> delete(Fruit fruit);
+}
+
+
+
+

We can implement the SEI as simply as possible:

+
+
+
+
package io.quarkiverse.cxf.it.server;
+
+import java.util.Collections;
+import java.util.LinkedHashSet;
+import java.util.Set;
+
+import jakarta.jws.WebService;
+
+@WebService(serviceName = "FruitService")
+public class FruitServiceImpl implements FruitService {
+
+    private Set<Fruit> fruits = Collections.synchronizedSet(new LinkedHashSet<>());
+
+    public FruitServiceImpl() {
+        fruits.add(new Fruit("Apple", "Winter fruit"));
+        fruits.add(new Fruit("Pineapple", "Tropical fruit"));
+    }
+
+    @Override
+    public Set<Fruit> list() {
+        return fruits;
+    }
+
+    @Override
+    public Set<Fruit> add(Fruit fruit) {
+        fruits.add(fruit);
+        return fruits;
+    }
+
+    @Override
+    public Set<Fruit> delete(Fruit fruit) {
+        fruits.remove(fruit);
+        return fruits;
+    }
+}
+
+
+
+
+
+

application.properties

+
+
+

The implementation is pretty straightforward and you just need to define your endpoints using the application.properties.

+
+
+
+
quarkus.cxf.endpoint."/fruits".implementor = io.quarkiverse.cxf.it.server.FruitServiceImpl
+quarkus.cxf.endpoint."/fruits".features = org.apache.cxf.ext.logging.LoggingFeature
+
+
+
+
+
+

Test with Quarkus dev mode and curl

+
+
+

Having the above files in place, you can start Quarkus tooling in dev mode:

+
+
+
+
$ mvn quarkus:dev
+...
+INFO  [io.quarkus] (Quarkus Main Thread) ... Listening on: http://localhost:8080
+
+
+
+

and then check whether the service is working by invoking its list operation:

+
+
+
+
$ curl -v -X POST -H "Content-Type: text/xml;charset=UTF-8" \
+    -d \
+      '<soapenv:Envelope
+      xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
+      xmlns:ns1="http://server.it.cxf.quarkiverse.io/">
+        <soapenv:Body>
+            <ns1:list/>
+        </soapenv:Body>
+    </soapenv:Envelope>' \
+    http://localhost:8080/soap/fruits
+...
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
+  <soap:Body>
+    <ns1:listResponse xmlns:ns1="http://server.it.cxf.quarkiverse.io/">
+      <return xmlns:ns2="http://server.it.cxf.quarkiverse.io/">
+        <description>Winter fruit</description>
+        <name>Apple</name>
+      </return>
+      <return xmlns:ns2="http://server.it.cxf.quarkiverse.io/">
+        <description>Tropical fruit</description>
+        <name>Pineapple</name>
+      </return>
+    </ns1:listResponse>
+  </soap:Body>
+</soap:Envelope>
+
+
+
+

As you can see, the endpoint has returned the two fruits Apple and Pineapple available by default.

+
+
+

Now let’s add another fruit, say an Orange:

+
+
+
+
$ curl -v -X POST -H "Content-Type: text/xml;charset=UTF-8" \
+    -d \
+     '<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
+        <soap:Body>
+          <ns2:add xmlns:ns2="http://server.it.cxf.quarkiverse.io/">
+            <arg0>
+              <description>Mediterranean fruit</description>
+              <name>Orange</name>
+            </arg0>
+          </ns2:add>
+       </soap:Body></soap:Envelope>' \
+    http://localhost:8080/soap/fruits
+...
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
+  <soap:Body>
+    <ns1:addResponse xmlns:ns1="http://server.it.cxf.quarkiverse.io/">
+      <return xmlns:ns2="http://server.it.cxf.quarkiverse.io/">
+        <description>Winter fruit</description>
+        <name>Apple</name>
+      </return>
+      <return xmlns:ns2="http://server.it.cxf.quarkiverse.io/">
+        <description>Tropical fruit</description>
+        <name>Pineapple</name>
+      </return>
+      <return xmlns:ns2="http://server.it.cxf.quarkiverse.io/">
+        <description>Mediterranean fruit</description>
+        <name>Orange</name>
+      </return>
+    </ns1:addResponse>
+  </soap:Body>
+</soap:Envelope>
+
+
+
+

We can see Orange having been added in the returned list as expected.

+
+
+
+
+

Further steps

+ +
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/2.2/user-guide/supported-soap-binding.html b/quarkus-cxf/2.2/user-guide/supported-soap-binding.html new file mode 100644 index 0000000000..d65daa5be9 --- /dev/null +++ b/quarkus-cxf/2.2/user-guide/supported-soap-binding.html @@ -0,0 +1,1040 @@ + + + + + + Supported SOAP Bindings :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Supported SOAP Bindings

+
+

By default, a SOAP 1.1 binding is used. In order to switch to SOAP 1.2 and/or support MTOM, the config quarkus.cxf.endpoint.key.soap-binding must be set to one of the following values:

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

Binding

Property Value

SOAP 1.1

http://schemas.xmlsoap.org/wsdl/soap/http

SOAP 1.2

http://www.w3.org/2003/05/soap/bindings/HTTP/

SOAP 1.1 with MTOM

http://schemas.xmlsoap.org/wsdl/soap/http?mtom=true

SOAP 1.2 with MTOM

http://www.w3.org/2003/05/soap/bindings/HTTP/?mtom=true

+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/dev/_images/code.quarkus.io.png b/quarkus-cxf/dev/_images/code.quarkus.io.png new file mode 100644 index 0000000000..5275792d9f Binary files /dev/null and b/quarkus-cxf/dev/_images/code.quarkus.io.png differ diff --git a/quarkus-cxf/dev/contributor-guide/index.html b/quarkus-cxf/dev/contributor-guide/index.html new file mode 100644 index 0000000000..f541d8fe98 --- /dev/null +++ b/quarkus-cxf/dev/contributor-guide/index.html @@ -0,0 +1,1100 @@ + + + + + + Contributor guide :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Contributor guide

+
+

Prerequisites

+
+
+
    +
  • +

    git

    +
  • +
  • +

    GraalVM with native-image command installed and GRAALVM_HOME environment variable set, see +Building a native executable section of the Quarkus +documentation.

    +
  • +
  • +

    If your are on Linux, docker is sufficient for the native mode too. Use -Pnative,docker instead of -Pnative +if you choose this option.

    +
  • +
  • +

    Java 17

    +
  • +
  • +

    Maven (mvn), Maven Daemon (mvnd for fast builds), or Maven Wrapper (mvnw)

    +
  • +
+
+
+
+
+

How to build

+
+
+

Checkout the code

+
+
+
+
$ git clone https://github.com/quarkiverse/quarkus-cxf.git -o upstream
+$ cd quarkus-cxf
+
+
+
+

A fast build without tests and various checks:

+
+
+
+
$ mvn clean install -DskipTests -Dquarkus.build.skip
+
+
+
+

A build with integration tests in the JVM mode only:

+
+
+
+
$ mvn clean install
+
+
+
+

A build with integration tests in both the JVM mode and the native mode:

+
+
+
+
$ mvn clean install -Pnative
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/dev/contributor-guide/releasing.html b/quarkus-cxf/dev/contributor-guide/releasing.html new file mode 100644 index 0000000000..19419679cc --- /dev/null +++ b/quarkus-cxf/dev/contributor-guide/releasing.html @@ -0,0 +1,1123 @@ + + + + + + Releasing :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Releasing

+
+

Release quarkus-cxf

+
+
+

To release version 1.2.3 and set the next development version to 1.2.4-SNAPSHOT, run the following:

+
+
+
+
$ cd quarkus-cxf
+$ ./release.sh 1.2.3 1.2.4-SNAPSHOT
+
+
+
+

What it does:

+
+
+
    +
  • +

    Sets the current-version and release-version keys in .github/project.yml file to values passed via CLI parameters

    +
  • +
  • +

    Commits the changes

    +
  • +
  • +

    Pushes a new branch called trigger-release-1.2.3 to upstream

    +
  • +
+
+
+

After that, you need to do the following:

+
+
+
    +
  • +

    Create a pull request from the above branch

    +
  • +
  • +

    Merge it (without waiting for the CI jobs to pass)

    +
  • +
  • +

    Watch the associated Quarkiverse Release job

    +
  • +
+
+
+
+
+

Upgrade in Quarkus Platform

+
+
+

Once all artifacts are available on Maven Central, upgrade the Quarkus CXF version in Quarkus Platform:

+
+
+
+
$ export NEW_VERSION=1.2.3
+$ cd projects
+$ git clone https://github.com/quarkusio/quarkus-platform.git -o upstream
+$ cd quarkus-platform
+# Upgrade the version in the root pom
+$ sed -i 's|<quarkus-cxf.version>[^<]*</quarkus-cxf.version>|<quarkus-cxf.version>'$NEW_VERSION'</quarkus-cxf.version>|' pom.xml
+# regenerate the BOMs (may take tens of minutes on a slow internet connection)
+$ ./mvnw -Dsync
+# Install quarkus-bom and quarkus-cxf-bom to local Maven repository
+$ cd generated-platform-project
+$ ../mvnw install -pl quarkus/bom,quarkus-cxf/bom,quarkus-universe/bom -am
+# Make sure the generated tests pass
+$ cd quarkus-cxf/integration-tests
+$ ../../../mvnw verify -Pnative
+# If all is green, commit changes and send a PR
+$ git checkout -b upgrade-qcxf-$NEW_VERSION
+$ git add -A
+$ git commit -m "Upgrade to Quarkus CXF $NEW_VERSION"
+$ git push your-fork upgrade-qcxf-$NEW_VERSION
+
+
+
+
    +
  • +

    Now create a new pull request out of your upgrade-qcxf-$NEW_VERSION branch.

    +
  • +
  • +

    Watch whether the CI jobs pass against your new pull request.

    +
  • +
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/dev/index.html b/quarkus-cxf/dev/index.html new file mode 100644 index 0000000000..d8a95bdfb0 --- /dev/null +++ b/quarkus-cxf/dev/index.html @@ -0,0 +1,1111 @@ + + + + + + Quarkus CXF :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus CXF

+
+
+
+

This project aims at porting Apache CXF to Quarkus runtime +including full support for producing GraalVM native images.

+
+
+ + + + + +
+ + +While Apache CXF implements wide range of standards and specifications, +Quarkus CXF is currently focusing only on supporting the ones related to +Simple Object Access Protocol (SOAP) +and Java API for XML Web Services (JAX-WS). +Refer to Reference to learn which parts of CXF are supported. +
+
+
+

The documentation is divided in two major parts:

+
+
+
    +
  • +

    User guide - explains the typical usage of Quarkus CXF

    +
  • +
  • +

    Reference - the full list of supported specifications, use cases and configuration options

    +
  • +
+
+
+
+
+

Issues and Support

+
+
+

Feel free to start a discussion +or open an issue in the GitHub repository in case you need support. +The following general guidelines can be used to determine whether to start a discussion or open an issue.

+
+
+

GitHub Issues

+
+
    +
  • +

    Bug reports

    +
  • +
  • +

    Feature requests

    +
  • +
+
+
+
+

GitHub Discussions

+
+
    +
  • +

    Q&A and general communication

    +
  • +
  • +

    RFCs for new features

    +
  • +
+
+
+

Contributions and pull requests from the community are welcome!

+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/dev/reference/extensions/quarkus-cxf-integration-tracing-opentelemetry.html b/quarkus-cxf/dev/reference/extensions/quarkus-cxf-integration-tracing-opentelemetry.html new file mode 100644 index 0000000000..acdacc3b65 --- /dev/null +++ b/quarkus-cxf/dev/reference/extensions/quarkus-cxf-integration-tracing-opentelemetry.html @@ -0,0 +1,1190 @@ + + + + + + OpenTelemetry :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

OpenTelemetry

+
+
+
+

Stable • Since 2.7.0

+
+
+

Generate OpenTelemetry traces.

+
+
+ + + + + +
+ + +OpenTelemetry Metrics and Logging are not supported yet on neither Quarkus nor CXF side, + hence Quarkus CXF cannot support them either. +
+
+
+
+
+

Maven coordinates

+
+
+

Create a new project using quarkus-cxf-integration-tracing-opentelemetry on code.quarkus.io +or add these coordinates to your existing project:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.cxf</groupId>
+    <artifactId>quarkus-cxf-integration-tracing-opentelemetry</artifactId>
+</dependency>
+
+
+
+ + + + + +
+ + +
+

Check the User guide and especially its +Dependency management section +for more information about writing applications with Quarkus CXF.

+
+
+
+
+
+
+

Usage

+
+
+

This extension builds on top of org.apache.cxf.tracing.opentelemetry.OpenTelemetryFeature (for service endpoints) +and org.apache.cxf.tracing.opentelemetry.OpenTelemetryClientFeature (for clients). +Instances of these are created and configured internally using the instance of io.opentelemetry.api.OpenTelemetry +provided by Quarkus OpenTelemetry.

+
+
+

The tracing is enabled by default for all clients and service endpoints created by Quarkus CXF, +unless you disable it explicitly via quarkus.cxf.otel.enabled-for, quarkus.cxf.client."clients".otel.enabled +or quarkus.cxf.endpoint."endpoints".otel.enabled.

+
+
+

Runnable example

+
+

There is an integration test +covering OpenTelemetry in the Quarkus CXF source tree. +It is using InMemorySpanExporter from io.opentelemetry:opentelemetry-sdk-testing, +so that the spans can be inspected from tests easily. +Refer to Quarkus OpenTelemetry guide for information +about other supported span exporters and collectors.

+
+
+
+
+
+

Configuration

+
+
+

Configuration property fixed at build time. All other configuration properties are overridable at runtime.

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Configuration propertyTypeDefault

quarkus.cxf.otel.enabled-for

clients, services, both, none

both

+

Specifies whether the OpenTelemetry tracing will be enabled for clients, services, both or none. This global setting +can be overridden per client or service endpoint using the quarkus.cxf.client."clients".otel.enabled or +quarkus.cxf.endpoint."endpoints".otel.enabled option respectively.

+
+
+

Environment variable: QUARKUS_CXF_OTEL_ENABLED_FOR
+Since Quarkus CXF: 2.7.0

+

quarkus.cxf.client."clients".otel.enabled

boolean

true

+

If true and if quarkus.cxf.otel.enabled-for is set to both or clients then the +OpenTelemetryClientFeature will be added to this client; otherwise the feature will not be added to this +client.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__OTEL_ENABLED
+Since Quarkus CXF: 2.7.0

+

quarkus.cxf.endpoint."endpoints".otel.enabled

boolean

true

+

If true and if quarkus.cxf.otel.enabled-for is set to both or services then the OpenTelemetryFeature +will be added to this service endpoint; otherwise the feature will not be added to this service endpoint.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__OTEL_ENABLED
+Since Quarkus CXF: 2.7.0

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/dev/reference/extensions/quarkus-cxf-rt-features-metrics.html b/quarkus-cxf/dev/reference/extensions/quarkus-cxf-rt-features-metrics.html new file mode 100644 index 0000000000..0fe081dfc0 --- /dev/null +++ b/quarkus-cxf/dev/reference/extensions/quarkus-cxf-rt-features-metrics.html @@ -0,0 +1,1254 @@ + + + + + + Metrics Feature :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Metrics Feature

+
+
+
+

Stable • Since 0.14.0

+
+
+

Collect metrics using Micrometer.

+
+
+ + + + + +
+ + +Dropwizard Metrics are not supported. + They do not work in native mode and the are no tests for JVM mode. +
+
+
+
+
+

Maven coordinates

+
+
+

Create a new project using quarkus-cxf-rt-features-metrics on code.quarkus.io +or add these coordinates to your existing project:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.cxf</groupId>
+    <artifactId>quarkus-cxf-rt-features-metrics</artifactId>
+</dependency>
+
+
+
+ + + + + +
+ + +
+

Check the User guide and especially its +Dependency management section +for more information about writing applications with Quarkus CXF.

+
+
+
+
+
+
+

Usage

+
+
+

The integration of CXF into the Quarkus Micrometer ecosystem is implemented using +io.quarkiverse.cxf.metrics.QuarkusCxfMetricsFeature. +As long as your application depends on quarkus-cxf-rt-features-metrics, +an instance of QuarkusCxfMetricsFeature is created internally +and enabled by default for all clients and service endpoints created by Quarkus CXF. +You can disable it via quarkus.cxf.metrics.enabled-for, quarkus.cxf.client."clients".metrics.enabled +and quarkus.cxf.endpoint."endpoints".metrics.enabled properties documented below.

+
+
+

Runnable example

+
+

There is an integration test +covering Micrometer Metrics in the Quarkus CXF source tree.

+
+
+

Unsurprisingly, it depends on quarkus-cxf-rt-features-metrics

+
+
+
pom.xml
+
+
<dependency>
+    <groupId>io.quarkiverse.cxf</groupId>
+    <artifactId>quarkus-cxf-rt-features-metrics</artifactId>
+</dependency>
+
+
+
+

It is using quarkus-micrometer-registry-prometheus extension to export the metrics in JSON format and for Prometheus:

+
+
+
pom.xml
+
+
<dependency>
+    <groupId>io.quarkus</groupId>
+    <artifactId>quarkus-micrometer-registry-prometheus</artifactId>
+</dependency>
+
+
+
+

The following configuration is needed to be able to inspect the collected metrics over a REST endpoint:

+
+
+
application.properties
+
+
quarkus.micrometer.export.json.enabled = true
+quarkus.micrometer.export.json.path = metrics/json
+quarkus.micrometer.export.prometheus.path = metrics/prometheus
+
+
+
+

Having all the above in place, you can start the application in Dev mode:

+
+
+
+
$ mvn quarkus:dev
+
+
+
+

Now send a request to the HelloService:

+
+
+
+
$ curl \
+  -d '<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns2:helloResponse xmlns:ns2="http://it.server.metrics.cxf.quarkiverse.io/"><return>Hello Joe!</return></ns2:helloResponse></soap:Body></soap:Envelope>' \
+  -H 'Content-Type: text/xml' \
+  -X POST \
+  http://localhost:8080/metrics/client/hello
+
+
+
+

After that, you should see some metrics under cxf.server.requests in the output of the endpoint you configured above:

+
+
+
+
$ curl http://localhost:8080/q/metrics/json
+metrics: {
+    ...
+    "cxf.server.requests": {
+        "count;exception=None;faultCode=None;method=POST;operation=hello;outcome=SUCCESS;status=200;uri=/soap/hello": 2,
+        "elapsedTime;exception=None;faultCode=None;method=POST;operation=hello;outcome=SUCCESS;status=200;uri=/soap/hello": 64.0
+    },
+    ...
+}
+
+
+
+
+
+
+

Configuration

+
+
+

Configuration property fixed at build time. All other configuration properties are overridable at runtime.

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Configuration propertyTypeDefault

quarkus.cxf.metrics.enabled-for

clients, services, both, none

both

+

Specifies whether the metrics collection will be enabled for clients, services, both or none. This global setting can +be overridden per client or service endpoint using the quarkus.cxf.client."clients".metrics.enabled or +quarkus.cxf.endpoint."endpoints".metrics.enabled option respectively.

+
+
+

Environment variable: QUARKUS_CXF_METRICS_ENABLED_FOR
+Since Quarkus CXF: 2.7.0

+

quarkus.cxf.client."clients".metrics.enabled

boolean

true

+

If true and if quarkus.cxf.metrics.enabled-for is set to both or clients then the MetricsFeature will +be added to this client; otherwise the feature will not be added to this client.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__METRICS_ENABLED
+Since Quarkus CXF: 2.7.0

+

quarkus.cxf.endpoint."endpoints".metrics.enabled

boolean

true

+

If true and if quarkus.cxf.metrics.enabled-for is set to both or services then the MetricsFeature will +be added to this service endpoint; otherwise the feature will not be added to this service endpoint.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__METRICS_ENABLED
+Since Quarkus CXF: 2.7.0

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/dev/reference/extensions/quarkus-cxf-rt-transports-http-hc5.html b/quarkus-cxf/dev/reference/extensions/quarkus-cxf-rt-transports-http-hc5.html new file mode 100644 index 0000000000..ee56774675 --- /dev/null +++ b/quarkus-cxf/dev/reference/extensions/quarkus-cxf-rt-transports-http-hc5.html @@ -0,0 +1,1211 @@ + + + + + + HTTP Async Transport :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

HTTP Async Transport

+
+
+
+

Stable • Since 1.1.0

+
+
+

Implement async SOAP Clients using Apache HttpComponents HttpClient 5.

+
+
+
+
+

Maven coordinates

+
+
+

Create a new project using quarkus-cxf-rt-transports-http-hc5 on code.quarkus.io +or add these coordinates to your existing project:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.cxf</groupId>
+    <artifactId>quarkus-cxf-rt-transports-http-hc5</artifactId>
+</dependency>
+
+
+
+ + + + + +
+ + +
+

Check the User guide and especially its +Dependency management section +for more information about writing applications with Quarkus CXF.

+
+
+
+
+
+
+

Usage

+
+
+

Once the quarkus-cxf-rt-transports-http-hc5 dependency is available in the classpath, +CXF will use HttpAsyncClient for asynchronous calls and will continue using HttpURLConnection for synchronous calls.

+
+
+

Generate async methods

+
+

Asynchronous client invocations require some additional methods in the service endpoint interface. +That code is not generated by default.

+
+
+

To enable it, you need to create a JAX-WS binding file with enableAsyncMapping set to true:

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

The sample code snippets used in this section come from the +HC5 integration test +in the source tree of Quarkus CXF

+
+
+
+
+
src/main/resources/wsdl/async-binding.xml
+
+
<?xml version="1.0"?>
+<bindings
+        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+        xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+        xmlns="https://jakarta.ee/xml/ns/jaxws"
+        wsdlLocation="CalculatorService.wsdl">
+    <bindings node="wsdl:definitions">
+        <enableAsyncMapping>true</enableAsyncMapping>
+    </bindings>
+</bindings>
+
+
+
+

This file should then be passed to wsdl2java +through its additional-params property:

+
+
+
application.properties
+
+
quarkus.cxf.codegen.wsdl2java.includes = wsdl/*.wsdl
+quarkus.cxf.codegen.wsdl2java.additional-params = -b,src/main/resources/wsdl/async-binding.xml
+
+
+
+
+

Asynchronous Clients and Mutiny

+
+

Once the asynchronous stubs are available, it is possible to wrap a client call in io.smallrye.mutiny.Uni as shown below:

+
+
+
+
package io.quarkiverse.cxf.hc5.it;
+
+import java.util.concurrent.Future;
+
+import jakarta.inject.Inject;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.QueryParam;
+import jakarta.ws.rs.core.MediaType;
+
+import org.jboss.eap.quickstarts.wscalculator.calculator.AddResponse;
+import org.jboss.eap.quickstarts.wscalculator.calculator.CalculatorService;
+
+import io.quarkiverse.cxf.annotation.CXFClient;
+import io.smallrye.mutiny.Uni;
+
+@Path("/hc5")
+public class Hc5Resource {
+
+    @Inject
+    @CXFClient("myCalculator") // name used in application.properties
+    CalculatorService myCalculator;
+
+    @SuppressWarnings("unchecked")
+    @Path("/add-async")
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public Uni<Integer> addAsync(@QueryParam("a") int a, @QueryParam("b") int b) {
+        return Uni.createFrom()
+                .future(
+                        (Future<AddResponse>) myCalculator
+                                .addAsync(a, b, res -> {
+                                }))
+                .map(addResponse -> addResponse.getReturn());
+    }
+
+}
+
+
+
+
+

Thread pool

+
+

Asynchronous clients delivered by this extension leverage ManagedExecutor with a thread pool provided by Quarkus. +The thread pool can be configured using the quarkus.thread-pool.* family of +options. +As a consequence of this, the executor and thread pool related attributes of org.apache.cxf.transports.http.configuration.HTTPClientPolicy are not honored for async clients on Quarkus.

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

You can see more details about the CXF asynchronous client and how to tune it further in CXF documentation.

+
+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/dev/reference/extensions/quarkus-cxf-rt-ws-rm.html b/quarkus-cxf/dev/reference/extensions/quarkus-cxf-rt-ws-rm.html new file mode 100644 index 0000000000..965fe20435 --- /dev/null +++ b/quarkus-cxf/dev/reference/extensions/quarkus-cxf-rt-ws-rm.html @@ -0,0 +1,1339 @@ + + + + + + WS-ReliableMessaging :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

WS-ReliableMessaging

+
+
+
+

Stable • Since 1.5.3

+
+
+

WS-ReliableMessaging (WS-RM) is a protocol ensuring a reliable delivery of messages in a distributed environment even in presence of software, system, or network failures.

+
+
+

This extension provides CXF framework’s WS-ReliableMessaging implementation.

+
+
+
+
+

Maven coordinates

+
+
+

Create a new project using quarkus-cxf-rt-ws-rm on code.quarkus.io +or add these coordinates to your existing project:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.cxf</groupId>
+    <artifactId>quarkus-cxf-rt-ws-rm</artifactId>
+</dependency>
+
+
+
+ + + + + +
+ + +
+

Check the User guide and especially its +Dependency management section +for more information about writing applications with Quarkus CXF.

+
+
+
+
+
+
+

Supported standards

+
+ +
+
+
+

Usage

+
+
+

Once your application depends on quarkus-cxf-rt-ws-rm, WS-RM is enabled for all clients and service endpoints defined in application.properties. +This is due to the fact that the quarkus.cxf.client.myClient.rm.enabled and quarkus.cxf.endpoint."/my-endpoint".rm.enabled +properties are true by default.

+
+
+

Enabling WS-RM for a client or service endpoints means that WS-RM interceptors will be added to the given client or endpoint.

+
+
+

In addition to that you may want to set some of the options documented below and/or the following WS-Addressing options:

+
+ +
+

Runnable example

+
+

There is an integration test covering WS-RM with a decoupled endpoint in the Quarkus CXF source tree.

+
+
+

It is split into two separate applications that communicate with each other:

+
+
+ +
+
+

To run it, you need to install the server into your local Maven repository first

+
+
+
+
$ cd test-util-parent/test-ws-rm-server-jvm
+$ mvn clean install
+
+
+
+

And then you can run the +test scenario +implemented in the client module:

+
+
+
+
$ cd ../../integration-tests/ws-rm-client
+$ mvn clean test
+
+
+
+

You should see the exchange of SOAP messages between the client, the server and the decoupled endpoint in the console.

+
+
+
+
+
+

Configuration

+
+
+

Configuration property fixed at build time. All other configuration properties are overridable at runtime.

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Configuration propertyTypeDefault

quarkus.cxf.rm.namespace

string

http://schemas.xmlsoap.org/ws/2005/02/rm

+
+

Environment variable: QUARKUS_CXF_RM_NAMESPACE
+Since Quarkus CXF: 2.7.0

+

quarkus.cxf.rm.wsa-namespace

string

http://schemas.xmlsoap.org/ws/2004/08/addressing

+

WS-Addressing version namespace: http://schemas.xmlsoap.org/ws/2004/08/addressing or +http://www.w3.org/2005/08/addressing. Note that this property is ignored unless you are using the +http://schemas.xmlsoap.org/ws/2005/02/rm/ RM namespace.

+
+
+

Environment variable: QUARKUS_CXF_RM_WSA_NAMESPACE
+Since Quarkus CXF: 2.7.0

+

quarkus.cxf.rm.inactivity-timeout

long

+

A time duration in milliseconds after which the associated sequence will be closed if no messages (including +acknowledgments and other control messages) were exchanged between the sender and receiver during that period of +time. If not set, the associated sequence will never be closed due to inactivity.

+
+
+

Environment variable: QUARKUS_CXF_RM_INACTIVITY_TIMEOUT
+Since Quarkus CXF: 2.7.0

+

quarkus.cxf.rm.retransmission-interval

long

3000

+

A time duration in milliseconds between successive attempts to resend a message that has not been acknowledged by the +receiver.

+
+
+

Environment variable: QUARKUS_CXF_RM_RETRANSMISSION_INTERVAL
+Since Quarkus CXF: 2.7.0

+

quarkus.cxf.rm.exponential-backoff

boolean

false

+

If true the retransmission interval will be doubled on every transmission attempt; otherwise the retransmission +interval stays equal to quarkus.cxf.rm.retransmission-interval for every retransmission attempt.

+
+
+

Environment variable: QUARKUS_CXF_RM_EXPONENTIAL_BACKOFF
+Since Quarkus CXF: 2.7.0

+

quarkus.cxf.rm.acknowledgement-interval

long

+

A time duration in milliseconds within which an acknowledgement for a received message is expected to be sent by a RM +destination. If not specified, the acknowledgements will be sent immediately.

+
+
+

Environment variable: QUARKUS_CXF_RM_ACKNOWLEDGEMENT_INTERVAL
+Since Quarkus CXF: 2.7.0

+

quarkus.cxf.rm.store

string

+

A reference to a org.apache.cxf.ws.rm.persistence.RMStore bean used to +store source and destination sequences and message references.

+
+
+

Environment variable: QUARKUS_CXF_RM_STORE
+Since Quarkus CXF: 2.7.0

+

quarkus.cxf.rm.feature-ref

string

#defaultRmFeature

+

A reference to a org.apache.cxf.ws.rm.feature.RMFeature bean to set on +clients and service endpoint which have quarkus.cxf.[client|service]."name".rm.enabled = true.

+
+
+

If the value is #defaultRmFeature then Quarkus CXF creates and configures the bean for you.

+
+
+

Environment variable: QUARKUS_CXF_RM_FEATURE_REF
+Since Quarkus CXF: 2.7.0

+

quarkus.cxf.client."clients".rm.enabled

boolean

true

+

If true then the WS-ReliableMessaging interceptors +will be added to this client or service endpoint.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__RM_ENABLED

+

quarkus.cxf.endpoint."endpoints".rm.enabled

boolean

true

+

If true then the WS-ReliableMessaging interceptors +will be added to this client or service endpoint.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__RM_ENABLED

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/dev/reference/extensions/quarkus-cxf-rt-ws-security.html b/quarkus-cxf/dev/reference/extensions/quarkus-cxf-rt-ws-security.html new file mode 100644 index 0000000000..8d164a709c --- /dev/null +++ b/quarkus-cxf/dev/reference/extensions/quarkus-cxf-rt-ws-security.html @@ -0,0 +1,4113 @@ + + + + + + WS-Security :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

WS-Security

+
+
+
+

Stable • Since 0.14.0

+
+
+

Provides CXF framework’s WS-Security implementation allowing you to:

+
+
+
    +
  • +

    Pass authentication tokens between services

    +
  • +
  • +

    Encrypt messages or parts of messages

    +
  • +
  • +

    Sign messages

    +
  • +
  • +

    Timestamp messages

    +
  • +
+
+
+
+
+

Maven coordinates

+
+
+

Create a new project using quarkus-cxf-rt-ws-security on code.quarkus.io +or add these coordinates to your existing project:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.cxf</groupId>
+    <artifactId>quarkus-cxf-rt-ws-security</artifactId>
+</dependency>
+
+
+
+ + + + + +
+ + +
+

Check the User guide and especially its +Dependency management section +for more information about writing applications with Quarkus CXF.

+
+
+
+
+
+
+

Supported standards

+
+ +
+
+
+

Usage

+
+
+

The CXF framework’s WS-Security (WSS) implementation is based on WSS4J. +It can be activated in two ways:

+
+
+
    +
  • +

    By using WS-SecurityPolicy

    +
  • +
  • +

    By adding WSS4J interceptors to your clients and service endpoints.

    +
  • +
+
+
+

WS-SecurityPolicy is preferable because in that way, the security requirements become a part of the WSDL contract. +That in turn greatly simplifies not only the implementation of clients and service endpoints +but also the interoperability between vendors.

+
+
+

Nevertheless, if you leverage WS-SecurityPolicy, CXF sets up the WSS4J interceptors under the hood for you.

+
+
+

We won’t explain the manual approach with WSS4J interceptors in detail here, +but you can still refer to our WS-Security integration test as an example.

+
+
+

WS-Security via WS-SecurityPolicy

+
+ + + + + +
+ + +
+

The sample code snippets used in this section come from the +WS-SecurityPolicy integration test +in the source tree of Quarkus CXF

+
+
+
+
+

Let’s say our aim is to ensure that the communication between the client and service is confidential (through encryption) +and that the message has not been tampered with (through digital signatures). +We also want to assure that the clients are who they claim to be by authenticating themselves by X.509 certificates.

+
+
+

We can express all these requirements in a single WS-SecurityPolicy document:

+
+
+
encrypt-sign-policy.xml
+
+
<?xml version="1.0" encoding="UTF-8" ?>
+<wsp:Policy wsu:Id="SecurityServiceEncryptThenSignPolicy"
+    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:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
+    <wsp:ExactlyOne>
+        <wsp:All>
+            (1)
+            <sp:AsymmetricBinding xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
+                <wsp:Policy>
+                    (2)
+                    <sp:InitiatorToken>
+                        <wsp:Policy>
+                            <sp:X509Token sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
+                                <wsp:Policy>
+                                    <sp:WssX509V3Token11/>
+                                </wsp:Policy>
+                            </sp:X509Token>
+                        </wsp:Policy>
+                    </sp:InitiatorToken>
+                    <sp:RecipientToken>
+                        <wsp:Policy>
+                            <sp:X509Token sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Never">
+                                <wsp:Policy>
+                                    <sp:WssX509V3Token11/>
+                                </wsp:Policy>
+                            </sp:X509Token>
+                        </wsp:Policy>
+                    </sp:RecipientToken>
+                    <sp:AlgorithmSuite>
+                        <wsp:Policy>
+                            <sp:Basic256/>
+                        </wsp:Policy>
+                    </sp:AlgorithmSuite>
+                    <sp:Layout>
+                        <wsp:Policy>
+                            <sp:Strict/>
+                        </wsp:Policy>
+                    </sp:Layout>
+                    <sp:IncludeTimestamp/>
+                    <sp:ProtectTokens/>
+                    <sp:OnlySignEntireHeadersAndBody/>
+                    <sp:EncryptBeforeSigning/>
+                </wsp:Policy>
+            </sp:AsymmetricBinding>
+            (3)
+            <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+                <sp:Body/>
+            </sp:SignedParts>
+            (4)
+            <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>
+
+
+
+ + + + + + + + + + + + + + + + + +
1AsymmetricBinding specifies the use of asymmetric (public/private key) cryptography for securing the communication between two parties
2InitiatorToken indicates that the initiator (sender) of the message will use an X.509 certificate token that must always be provided to the recipient.
3SignedParts specifies which parts of the SOAP message must be signed to ensure their integrity.
4EncryptedParts specifies the parts of the SOAP message that must be encrypted to ensure their confidentiality.
+
+
+

We set this policy on the Service Endpoint Interface (SEI) +EncryptSignPolicyHelloService +using @org.apache.cxf.annotations.Policy annotation:

+
+
+
EncryptSignPolicyHelloService.java
+
+
@WebService(serviceName = "EncryptSignPolicyHelloService")
+@Policy(placement = Policy.Placement.BINDING, uri = "encrypt-sign-policy.xml")
+public interface EncryptSignPolicyHelloService extends AbstractHelloService {
+...
+}
+
+
+
+

On the first sight, setting the policy on the SEI should suffice to enforce it on both the service +and all clients generated from the SEI or from the WSDL served by the service. +However, that’s not all. +Security keys, usernames, passwords and other kinds of confidental information cannot be exposed in a public policy.

+
+
+

Those have to be set in the configuration. Let’s do it for the service first:

+
+
+
application.properties
+
+
# A service with encrypt-sign-policy.xml set
+quarkus.cxf.endpoint."/helloEncryptSign".implementor = io.quarkiverse.cxf.it.security.policy.EncryptSignPolicyHelloServiceImpl
+# can be jks or pkcs12 - set from Maven profiles in this test
+keystore.type = ${keystore.type}
+# Signature settings
+quarkus.cxf.endpoint."/helloEncryptSign".security.signature.username = bob
+quarkus.cxf.endpoint."/helloEncryptSign".security.signature.password = bob-keystore-password
+quarkus.cxf.endpoint."/helloEncryptSign".security.signature.properties."org.apache.ws.security.crypto.provider" = org.apache.ws.security.components.crypto.Merlin
+quarkus.cxf.endpoint."/helloEncryptSign".security.signature.properties."org.apache.ws.security.crypto.merlin.keystore.type" = ${keystore.type}
+quarkus.cxf.endpoint."/helloEncryptSign".security.signature.properties."org.apache.ws.security.crypto.merlin.keystore.password" = bob-keystore-password
+quarkus.cxf.endpoint."/helloEncryptSign".security.signature.properties."org.apache.ws.security.crypto.merlin.keystore.alias" = bob
+quarkus.cxf.endpoint."/helloEncryptSign".security.signature.properties."org.apache.ws.security.crypto.merlin.file" = bob-keystore.${keystore.type}
+# Encryption settings
+quarkus.cxf.endpoint."/helloEncryptSign".security.encryption.username = alice
+quarkus.cxf.endpoint."/helloEncryptSign".security.encryption.properties."org.apache.ws.security.crypto.provider" = org.apache.ws.security.components.crypto.Merlin
+quarkus.cxf.endpoint."/helloEncryptSign".security.encryption.properties."org.apache.ws.security.crypto.merlin.keystore.type" = ${keystore.type}
+quarkus.cxf.endpoint."/helloEncryptSign".security.encryption.properties."org.apache.ws.security.crypto.merlin.keystore.password" = bob-keystore-password
+quarkus.cxf.endpoint."/helloEncryptSign".security.encryption.properties."org.apache.ws.security.crypto.merlin.keystore.alias" = bob
+quarkus.cxf.endpoint."/helloEncryptSign".security.encryption.properties."org.apache.ws.security.crypto.merlin.file" = bob-keystore.${keystore.type}
+
+
+
+

Similar setup is necessary on the client side:

+
+
+
application.properties
+
+
# A client with encrypt-sign-policy.xml set
+quarkus.cxf.client.helloEncryptSign.client-endpoint-url = https://localhost:${quarkus.http.test-ssl-port}/services/helloEncryptSign
+quarkus.cxf.client.helloEncryptSign.service-interface = io.quarkiverse.cxf.it.security.policy.EncryptSignPolicyHelloService
+quarkus.cxf.client.helloEncryptSign.features = #messageCollector
+# The client-endpoint-url above is HTTPS, so we have to setup the server's SSL certificates
+quarkus.cxf.client.helloEncryptSign.trust-store = client-truststore.${keystore.type}
+quarkus.cxf.client.helloEncryptSign.trust-store-password = client-truststore-password
+# Signature settings
+quarkus.cxf.client.helloEncryptSign.security.signature.username = alice
+quarkus.cxf.client.helloEncryptSign.security.signature.password = alice-keystore-password
+quarkus.cxf.client.helloEncryptSign.security.signature.properties."org.apache.ws.security.crypto.provider" = org.apache.ws.security.components.crypto.Merlin
+quarkus.cxf.client.helloEncryptSign.security.signature.properties."org.apache.ws.security.crypto.merlin.keystore.type" = pkcs12
+quarkus.cxf.client.helloEncryptSign.security.signature.properties."org.apache.ws.security.crypto.merlin.keystore.password" = alice-keystore-password
+quarkus.cxf.client.helloEncryptSign.security.signature.properties."org.apache.ws.security.crypto.merlin.keystore.alias" = alice
+quarkus.cxf.client.helloEncryptSign.security.signature.properties."org.apache.ws.security.crypto.merlin.file" = alice-keystore.${keystore.type}
+# Encryption settings
+quarkus.cxf.client.helloEncryptSign.security.encryption.username = bob
+quarkus.cxf.client.helloEncryptSign.security.encryption.properties."org.apache.ws.security.crypto.provider" = org.apache.ws.security.components.crypto.Merlin
+quarkus.cxf.client.helloEncryptSign.security.encryption.properties."org.apache.ws.security.crypto.merlin.keystore.type" = pkcs12
+quarkus.cxf.client.helloEncryptSign.security.encryption.properties."org.apache.ws.security.crypto.merlin.keystore.password" = alice-keystore-password
+quarkus.cxf.client.helloEncryptSign.security.encryption.properties."org.apache.ws.security.crypto.merlin.keystore.alias" = alice
+quarkus.cxf.client.helloEncryptSign.security.encryption.properties."org.apache.ws.security.crypto.merlin.file" = alice-keystore.${keystore.type}
+
+
+
+

To inspect the flow of the messages, you can execute the EncryptSignPolicyTest as follows:

+
+
+
+
# Clone the repository
+$ git clone https://github.com/quarkiverse/quarkus-cxf.git -o upstream
+$ cd quarkus-cxf
+# Build the whole source tree
+$ mvn clean install -DskipTests -Dquarkus.build.skip
+# Run the test
+$ cd integration-tests/ws-security-policy
+$ mvn clean test -Dtest=EncryptSignPolicyTest
+
+
+
+

You should see some messages containing Signature elements and encrypted bodies in the console output.

+
+
+
+
+
+

Configuration

+
+
+

Configuration property fixed at build time. All other configuration properties are overridable at runtime.

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Configuration propertyTypeDefault

quarkus.cxf.client."clients".security.username

string

+

The user’s name. It is used as follows:

+
+
+
    +
  • +

    As the name in the UsernameToken for WS-Security

    +
  • +
  • +

    As the alias name in the keystore to get the user’s cert and private key for signature if signature.username is +not set

    +
  • +
  • +

    As the alias name in the keystore to get the user’s public key for encryption if encryption.username is not set

    +
  • +
+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_USERNAME
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.password

string

+

The user’s password when a callback-handler is not defined. This is only used for the password in a WS-Security +UsernameToken.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_PASSWORD
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.signature.username

string

+

The user’s name for signature. It is used as the alias name in the keystore to get the user’s cert and private key +for signature. If this is not defined, then username is used instead. If that is also not specified, it uses the +the default alias set in the properties file referenced by signature.properties. If that’s also not set, and the +keystore only contains a single key, that key will be used.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_SIGNATURE_USERNAME
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.signature.password

string

+

The user’s password for signature when a callback-handler is not defined.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_SIGNATURE_PASSWORD
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.encryption.username

string

+

The user’s name for encryption. It is used as the alias name in the keystore to get the user’s public key for +encryption. If this is not defined, then username is used instead. If that is also not specified, it uses the the +default alias set in the properties file referenced by encrypt.properties. If that’s also not set, and the keystore +only contains a single key, that key will be used.

+
+
+

For the WS-Security web service provider, the useReqSigCert value can be used to accept (encrypt to) any client +whose public key is in the service’s truststore (defined in encrypt.properties).

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_ENCRYPTION_USERNAME
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.callback-handler

string

+

A reference to a javax.security.auth.callback.CallbackHandler bean +used to obtain passwords, for both outbound and inbound requests.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_CALLBACK_HANDLER
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.saml-callback-handler

string

+

A reference to a javax.security.auth.callback.CallbackHandler +implementation used to construct SAML Assertions.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_SAML_CALLBACK_HANDLER
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.signature.properties

Map<String,String>

+

The Crypto property configuration to use for signing, if signature.crypto is not set.

+
+
+

Example

+
+
+
+
[prefix].signature.properties."org.apache.ws.security.crypto.provider" =
+org.apache.ws.security.components.crypto.Merlin
+[prefix].signature.properties."org.apache.ws.security.crypto.merlin.keystore.password" = password
+[prefix].signature.properties."org.apache.ws.security.crypto.merlin.file" = certs/alice.jks
+
+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_SIGNATURE_PROPERTIES
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.encryption.properties

Map<String,String>

+

The Crypto property configuration to use for encryption, if encryption.crypto is not set.

+
+
+

Example

+
+
+
+
[prefix].encryption.properties."org.apache.ws.security.crypto.provider" =
+org.apache.ws.security.components.crypto.Merlin
+[prefix].encryption.properties."org.apache.ws.security.crypto.merlin.keystore.password" = password
+[prefix].encryption.properties."org.apache.ws.security.crypto.merlin.file" = certs/alice.jks
+
+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_ENCRYPTION_PROPERTIES
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.signature.crypto

string

+

A reference to a org.apache.wss4j.common.crypto.Crypto bean to be used +for signature. If not set, signature.properties will be used to configure a Crypto instance.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_SIGNATURE_CRYPTO
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.encryption.crypto

string

+

A reference to a org.apache.wss4j.common.crypto.Crypto to be used for +encryption. If not set, encryption.properties will be used to configure a Crypto instance.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_ENCRYPTION_CRYPTO
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.encryption.certificate

string

+

A message property for prepared X509 certificate to be used for encryption. If this is not defined, then the +certificate will be either loaded from the keystore encryption.properties or extracted from request (when +WS-Security is used and if encryption.username has value useReqSigCert.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_ENCRYPTION_CERTIFICATE
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.enable-revocation

boolean

false

+

If true, Certificate Revocation List (CRL) checking is enabled when verifying trust in a certificate; otherwise it +is not enabled.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_ENABLE_REVOCATION
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.enable-unsigned-saml-assertion-principal

boolean

false

+

If true, unsigned SAML assertions will be allowed as SecurityContext Principals; otherwise they won’t be allowed as +SecurityContext Principals.

+
+
+ + + + + +
+ + +
Signature
+
+

The label "unsigned" refers to an internal signature. Even if the token is signed by an external signature (as per +the "sender-vouches" requirement), this boolean must still be configured if you want to use the token to set up +the security context.

+
+
+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_ENABLE_UNSIGNED_SAML_ASSERTION_PRINCIPAL
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.validate-saml-subject-confirmation

boolean

true

+

If true, the SubjectConfirmation requirements of a received SAML Token (sender-vouches or holder-of-key) will be +validated; otherwise they won’t be validated.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_VALIDATE_SAML_SUBJECT_CONFIRMATION
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.sc-from-jaas-subject

boolean

true

+

If true, security context can be created from JAAS Subject; otherwise it must not be created from JAAS Subject.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_SC_FROM_JAAS_SUBJECT
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.audience-restriction-validation

boolean

true

+

If true, then if the SAML Token contains Audience Restriction URIs, one of them must match one of the values in +audience.restrictions; otherwise the SAML AudienceRestriction validation is disabled.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_AUDIENCE_RESTRICTION_VALIDATION
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.saml-role-attributename

string

http://schemas.xmlsoap.org/ws/2005/05/identity/claims/role

+

The attribute URI of the SAML AttributeStatement where the role information is stored.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_SAML_ROLE_ATTRIBUTENAME
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.subject-cert-constraints

string

+

A String of regular expressions (separated by the value specified in security.cert.constraints.separator) which +will be applied to the subject DN of the certificate used for signature validation, after trust verification of the +certificate chain associated with the certificate.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_SUBJECT_CERT_CONSTRAINTS
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.cert-constraints-separator

string

,

+

The separator that is used to parse certificate constraints configured in security.subject.cert.constraints

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_CERT_CONSTRAINTS_SEPARATOR
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.actor

string

+

The actor or role name of the wsse:Security header. If this parameter is omitted, the actor name is not set.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_ACTOR
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.validate.token

boolean

true

+

If true, the password of a received UsernameToken will be validated; otherwise it won’t be validated.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_VALIDATE_TOKEN
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.username-token.always.encrypted

boolean

true

+

Whether to always encrypt UsernameTokens that are defined as a SupportingToken. This should not be set to false +in a production environment, as it exposes the password (or the digest of the password) on the wire.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_USERNAME_TOKEN_ALWAYS_ENCRYPTED
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.is-bsp-compliant

boolean

true

+

If true, the compliance with the Basic Security Profile (BSP) 1.1 will be ensured; otherwise it will not be +ensured.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_IS_BSP_COMPLIANT
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.enable.nonce.cache

boolean

+

If true, the UsernameToken nonces will be cached for both message initiators and recipients; otherwise they won’t +be cached for neither message initiators nor recipients. The default is true for message recipients, and false +for message initiators.

+
+
+ + + + + +
+ + +
Caching
+
+

Caching only applies when either a UsernameToken WS-SecurityPolicy is in effect, or the UsernameToken action has +been configured for the non-security-policy case.

+
+
+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_ENABLE_NONCE_CACHE
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.enable.timestamp.cache

boolean

+

If true, the Timestamp Created Strings (these are only cached in conjunction with a message Signature) will be +cached for both message initiators and recipients; otherwise they won’t be cached for neither message initiators nor +recipients. The default is true for message recipients, and false for message initiators.

+
+
+ + + + + +
+ + +
Caching
+
+

Caching only applies when either a IncludeTimestamp policy is in effect, or the Timestamp action has been +configured for the non-security-policy case.

+
+
+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_ENABLE_TIMESTAMP_CACHE
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.enable.streaming

boolean

false

+

If true, the new streaming (StAX) implementation of WS-Security is used; otherwise the old DOM implementation is +used.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_ENABLE_STREAMING
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.return.security.error

boolean

false

+

If true, detailed security error messages are sent to clients; otherwise the details are omitted and only a generic +error message is sent.

+
+
+

The "real" security errors should not be returned to the client in production, as they may leak information about the +deployment, or otherwise provide an "oracle" for attacks.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_RETURN_SECURITY_ERROR
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.must-understand

boolean

true

+

If true, the SOAP mustUnderstand header is included in security headers based on a WS-SecurityPolicy; otherwise +the header is always omitted.

+
+
+

Works only with enable.streaming = true - see CXF-8940

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_MUST_UNDERSTAND
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.enable.saml.cache

boolean

+

If true and in case the token contains a OneTimeUse Condition, the SAML2 Token Identifiers will be cached for +both message initiators and recipients; otherwise they won’t be cached for neither message initiators nor recipients. +The default is true for message recipients, and false for message initiators.

+
+
+

Caching only applies when either a SamlToken policy is in effect, or a SAML action has been configured for the +non-security-policy case.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_ENABLE_SAML_CACHE
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.store.bytes.in.attachment

boolean

+

Whether to store bytes (CipherData or BinarySecurityToken) in an attachment. The default is true if MTOM is enabled. +Set it to false to BASE-64 encode the bytes and "inlined" them in the message instead. Setting this to true is more +efficient, as it means that the BASE-64 encoding step can be skipped. This only applies to the DOM WS-Security stack.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_STORE_BYTES_IN_ATTACHMENT
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.swa.encryption.attachment.transform.content

boolean

false

+

If true, Attachment-Content-Only transform will be used when an Attachment is encrypted via a WS-SecurityPolicy +expression; otherwise Attachment-Complete transform will be used when an Attachment is encrypted via a +WS-SecurityPolicy expression.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_SWA_ENCRYPTION_ATTACHMENT_TRANSFORM_CONTENT
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.use.str.transform

boolean

true

+

If true, the STR (Security Token Reference) Transform will be used when (externally) signing a SAML Token; +otherwise the STR (Security Token Reference) Transform will not be used.

+
+
+

Some frameworks cannot process the SecurityTokenReference. You may set this false in such cases.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_USE_STR_TRANSFORM
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.add.inclusive.prefixes

boolean

true

+

If true, an InclusiveNamespaces PrefixList will be added as a CanonicalizationMethod child when generating +Signatures using WSConstants.C14N_EXCL_OMIT_COMMENTS; otherwise the PrefixList will not be added.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_ADD_INCLUSIVE_PREFIXES
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.disable.require.client.cert.check

boolean

false

+

If true, the enforcement of the WS-SecurityPolicy RequireClientCertificate policy will be disabled; otherwise the +enforcement of the WS-SecurityPolicy RequireClientCertificate policy is enabled.

+
+
+

Some servers may not do client certificate verification at the start of the SSL handshake, and therefore the client +certificates may not be available to the WS-Security layer for policy verification.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_DISABLE_REQUIRE_CLIENT_CERT_CHECK
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.expand.xop.include

boolean

+

If true, the xop:Include elements will be searched for encryption and signature (on the outbound side) or for +signature verification (on the inbound side); otherwise the search won’t happen. This ensures that the actual bytes +are signed, and not just the reference. The default is true if MTOM is enabled, otherwise the default is false.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_EXPAND_XOP_INCLUDE
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.timestamp.timeToLive

string

300

+

The time in seconds to add to the Creation value of an incoming Timestamp to determine whether to accept it as +valid or not.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_TIMESTAMP_TIMETOLIVE
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.timestamp.futureTimeToLive

string

60

+

The time in seconds in the future within which the Created time of an incoming Timestamp is valid. The default is +greater than zero to avoid problems where clocks are slightly askew. Set this to 0 to reject all future-created +`Timestamp`s.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_TIMESTAMP_FUTURETIMETOLIVE
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.usernametoken.timeToLive

string

300

+

The time in seconds to append to the Creation value of an incoming UsernameToken to determine whether to accept it +as valid or not.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_USERNAMETOKEN_TIMETOLIVE
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.usernametoken.futureTimeToLive

string

60

+

The time in seconds in the future within which the Created time of an incoming UsernameToken is valid. The +default is greater than zero to avoid problems where clocks are slightly askew. Set this to 0 to reject all +future-created `UsernameToken`s.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_USERNAMETOKEN_FUTURETIMETOLIVE
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.spnego.client.action

string

+

A reference to a org.apache.wss4j.common.spnego.SpnegoClientAction +bean to use for SPNEGO. This allows the user to plug in a different implementation to obtain a service ticket.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_SPNEGO_CLIENT_ACTION
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.nonce.cache.instance

string

+

A reference to a org.apache.wss4j.common.cache.ReplayCache bean used +to cache UsernameToken nonces. A org.apache.wss4j.common.cache.EHCacheReplayCache instance is used by default.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_NONCE_CACHE_INSTANCE
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.timestamp.cache.instance

string

+

A reference to a org.apache.wss4j.common.cache.ReplayCache bean used +to cache Timestamp Created Strings. A org.apache.wss4j.common.cache.EHCacheReplayCache instance is used by +default.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_TIMESTAMP_CACHE_INSTANCE
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.saml.cache.instance

string

+

A reference to a org.apache.wss4j.common.cache.ReplayCache bean used +to cache SAML2 Token Identifier Strings (if the token contains a OneTimeUse condition). A +org.apache.wss4j.common.cache.EHCacheReplayCache instance is used by default.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_SAML_CACHE_INSTANCE
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.cache.config.file

string

+

Set this property to point to a configuration file for the underlying caching implementation for the TokenStore. +The default configuration file that is used is cxf-ehcache.xml in org.apache.cxf:cxf-rt-security JAR.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_CACHE_CONFIG_FILE
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.token-store-cache-instance

string

+

A reference to a org.apache.cxf.ws.security.tokenstore.TokenStore bean +to use for caching security tokens. By default this uses a instance.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_TOKEN_STORE_CACHE_INSTANCE
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.cache.identifier

string

+

The Cache Identifier to use with the TokenStore. CXF uses the following key to retrieve a token store: +org.apache.cxf.ws.security.tokenstore.TokenStore-<identifier>. This key can be used to configure service-specific +cache configuration. If the identifier does not match, then it falls back to a cache configuration with key +org.apache.cxf.ws.security.tokenstore.TokenStore.

+
+
+

The default <identifier> is the QName of the service in question. However to pick up a custom cache configuration +(for example, if you want to specify a TokenStore per-client proxy), it can be configured with this identifier +instead.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_CACHE_IDENTIFIER
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.role.classifier

string

+

The Subject Role Classifier to use. If one of the WSS4J Validators returns a JAAS Subject from Validation, then the +WSS4JInInterceptor will attempt to create a SecurityContext based on this Subject. If this value is not +specified, then it tries to get roles using the DefaultSecurityContext in org.apache.cxf:cxf-core. Otherwise it +uses this value in combination with the role.classifier.type to get the roles from the Subject.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_ROLE_CLASSIFIER
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.role.classifier.type

string

prefix

+

The Subject Role Classifier Type to use. If one of the WSS4J Validators returns a JAAS Subject from Validation, then +the WSS4JInInterceptor will attempt to create a SecurityContext based on this Subject. Currently accepted values +are prefix or classname. Must be used in conjunction with the role.classifier.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_ROLE_CLASSIFIER_TYPE
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.asymmetric.signature.algorithm

string

+

This configuration tag allows the user to override the default Asymmetric Signature algorithm (RSA-SHA1) for use in +WS-SecurityPolicy, as the WS-SecurityPolicy specification does not allow the use of other algorithms at present.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_ASYMMETRIC_SIGNATURE_ALGORITHM
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.symmetric.signature.algorithm

string

+

This configuration tag allows the user to override the default Symmetric Signature algorithm (HMAC-SHA1) for use in +WS-SecurityPolicy, as the WS-SecurityPolicy specification does not allow the use of other algorithms at present.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_SYMMETRIC_SIGNATURE_ALGORITHM
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.password.encryptor.instance

string

+

A reference to a org.apache.wss4j.common.crypto.PasswordEncryptor +bean, which is used to encrypt or decrypt passwords in the Merlin Crypto implementation (or any custom Crypto +implementations).

+
+
+

By default, WSS4J uses the org.apache.wss4j.common.crypto.JasyptPasswordEncryptor which must be instantiated with a +password to use to decrypt keystore passwords in the Merlin Crypto definition. This password is obtained via the +CallbackHandler defined via callback-handler

+
+
+

The encrypted passwords must be stored in the format "ENC(encoded encrypted password)".

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_PASSWORD_ENCRYPTOR_INSTANCE
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.delegated.credential

string

+

A reference to a Kerberos org.ietf.jgss.GSSCredential bean to use for +WS-Security. This is used to retrieve a service ticket instead of using the client credentials.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_DELEGATED_CREDENTIAL
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.security.context.creator

string

+

A reference to a +org.apache.cxf.ws.security.wss4j.WSS4JSecurityContextCreator bean that is used to create a CXF SecurityContext from +the set of WSS4J processing results. The default implementation is +org.apache.cxf.ws.security.wss4j.DefaultWSS4JSecurityContextCreator.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_SECURITY_CONTEXT_CREATOR
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.security.token.lifetime

long

300000

+

The security token lifetime value (in milliseconds).

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_SECURITY_TOKEN_LIFETIME
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.kerberos.request.credential.delegation

boolean

false

+

If true, credential delegation is requested in the KerberosClient; otherwise the credential delegation is not in +the KerberosClient.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_KERBEROS_REQUEST_CREDENTIAL_DELEGATION
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.kerberos.use.credential.delegation

boolean

false

+

If true, GSSCredential bean is retrieved from the Message Context using the delegated.credential property and +then it is used to obtain a service ticket.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_KERBEROS_USE_CREDENTIAL_DELEGATION
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.kerberos.is.username.in.servicename.form

boolean

false

+

If true, the Kerberos username is in servicename form; otherwise the Kerberos username is not in servicename form.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_KERBEROS_IS_USERNAME_IN_SERVICENAME_FORM
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.kerberos.jaas.context

string

+

The JAAS Context name to use for Kerberos.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_KERBEROS_JAAS_CONTEXT
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.kerberos.spn

string

+

The Kerberos Service Provider Name (spn) to use.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_KERBEROS_SPN
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.kerberos.client

string

+

A reference to a org.apache.cxf.ws.security.kerberos.KerberosClient +bean used to obtain a service ticket.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_KERBEROS_CLIENT
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".security.sts.client

string

+

A reference to a fully configured +org.apache.cxf.ws.security.trust.STSClient bean to communicate with the STS. If not set, the STS client will be +created and configured based on other [prefix].security.sts.client.* properties as long as they are +available.

+
+
+

To work around the fact that org.apache.cxf.ws.security.trust.STSClient does not have a no-args constructor and +cannot thus be used as a CDI bean type, you can use the wrapper class +io.quarkiverse.cxf.ws.security.sts.client.STSClientBean instead.

+
+
+

Tip: Check the Security Token Service (STS) extension page +for more information about WS-Trust.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_STS_CLIENT
+Since Quarkus CXF: 3.8.0

+

quarkus.cxf.client."clients".security.sts.client.wsdl

string

+

A URL, resource path or local filesystem path pointing to a WSDL document to use when generating the service proxy of +the STS client.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_STS_CLIENT_WSDL
+Since Quarkus CXF: 3.8.0

+

quarkus.cxf.client."clients".security.sts.client.service-name

string

+

A fully qualified name of the STS service. Common values include:

+
+
+
    +
  • +

    WS-Trust 1.0: {http://schemas.xmlsoap.org/ws/2005/02/trust/}SecurityTokenService

    +
  • +
  • +

    WS-Trust 1.3: {http://docs.oasis-open.org/ws-sx/ws-trust/200512/}SecurityTokenService

    +
  • +
  • +

    WS-Trust 1.4: {http://docs.oasis-open.org/ws-sx/ws-trust/200802/}SecurityTokenService

    +
  • +
+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_STS_CLIENT_SERVICE_NAME
+Since Quarkus CXF: 3.8.0

+

quarkus.cxf.client."clients".security.sts.client.endpoint-name

string

+

A fully qualified name of the STS endpoint name. Common values include:

+
+
+
    +
  • +

    {http://docs.oasis-open.org/ws-sx/ws-trust/200512/}X509_Port

    +
  • +
  • +

    {http://docs.oasis-open.org/ws-sx/ws-trust/200512/}Transport_Port

    +
  • +
  • +

    {http://docs.oasis-open.org/ws-sx/ws-trust/200512/}UT_Port

    +
  • +
+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_STS_CLIENT_ENDPOINT_NAME
+Since Quarkus CXF: 3.8.0

+

quarkus.cxf.client."clients".security.sts.client.username

string

+

The user name to use when authenticating against the STS. It is used as follows:

+
+
+
    +
  • +

    As the name in the UsernameToken for WS-Security

    +
  • +
  • +

    As the alias name in the keystore to get the user’s cert and private key for signature if signature.username is +not set

    +
  • +
  • +

    As the alias name in the keystore to get the user’s public key for encryption if encryption.username is not set

    +
  • +
+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_STS_CLIENT_USERNAME
+Since Quarkus CXF: 3.8.0

+

quarkus.cxf.client."clients".security.sts.client.password

string

+

The password associated with the username.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_STS_CLIENT_PASSWORD
+Since Quarkus CXF: 3.8.0

+

quarkus.cxf.client."clients".security.sts.client.encryption.username

string

+

The user’s name for encryption. It is used as the alias name in the keystore to get the user’s public key for +encryption. If this is not defined, then username is used instead. If that is also not specified, it uses the the +default alias set in the properties file referenced by encrypt.properties. If that’s also not set, and the keystore +only contains a single key, that key will be used.

+
+
+

For the WS-Security web service provider, the useReqSigCert value can be used to accept (encrypt to) any client +whose public key is in the service’s truststore (defined in encrypt.properties).

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_STS_CLIENT_ENCRYPTION_USERNAME
+Since Quarkus CXF: 3.8.0

+

quarkus.cxf.client."clients".security.sts.client.encryption.properties

Map<String,String>

+

The Crypto property configuration to use for encryption, if encryption.crypto is not set.

+
+
+

Example

+
+
+
+
[prefix].encryption.properties."org.apache.ws.security.crypto.provider" =
+org.apache.ws.security.components.crypto.Merlin
+[prefix].encryption.properties."org.apache.ws.security.crypto.merlin.keystore.password" = password
+[prefix].encryption.properties."org.apache.ws.security.crypto.merlin.file" = certs/alice.jks
+
+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_STS_CLIENT_ENCRYPTION_PROPERTIES
+Since Quarkus CXF: 3.8.0

+

quarkus.cxf.client."clients".security.sts.client.encryption.crypto

string

+

A reference to a org.apache.wss4j.common.crypto.Crypto to be used for +encryption. If not set, encryption.properties will be used to configure a Crypto instance.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_STS_CLIENT_ENCRYPTION_CRYPTO
+Since Quarkus CXF: 3.8.0

+

quarkus.cxf.client."clients".security.sts.client.token.crypto

string

+

A reference to a org.apache.wss4j.common.crypto.Crypto to be used for +the STS. If not set, token.properties will be used to configure a Crypto instance.

+
+
+

WCF’s trust server sometimes will encrypt the token in the response IN ADDITION TO the full security on the message. +These properties control the way the STS client will decrypt the EncryptedData elements in the response.

+
+
+

These are also used by the token.properties to send/process any RSA/DSAKeyValue tokens used if the KeyType is +PublicKey

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_STS_CLIENT_TOKEN_CRYPTO
+Since Quarkus CXF: 3.8.0

+

quarkus.cxf.client."clients".security.sts.client.token.properties

Map<String,String>

+

The Crypto property configuration to use for encryption, if encryption.crypto is not set.

+
+
+

Example

+
+
+
+
[prefix].token.properties."org.apache.ws.security.crypto.provider" = org.apache.ws.security.components.crypto.Merlin
+[prefix].token.properties."org.apache.ws.security.crypto.merlin.keystore.password" = password
+[prefix].token.properties."org.apache.ws.security.crypto.merlin.file" = certs/alice.jks
+
+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_STS_CLIENT_TOKEN_PROPERTIES
+Since Quarkus CXF: 3.8.0

+

quarkus.cxf.client."clients".security.sts.client.token.username

string

+

The alias name in the keystore to get the user’s public key to send to the STS for the PublicKey KeyType case.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_STS_CLIENT_TOKEN_USERNAME
+Since Quarkus CXF: 3.8.0

+

quarkus.cxf.client."clients".security.sts.client.token.usecert

boolean

false

+

Whether to write out an X509Certificate structure in UseKey/KeyInfo, or whether to write out a KeyValue structure.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_STS_CLIENT_TOKEN_USECERT
+Since Quarkus CXF: 3.8.0

+

quarkus.cxf.client."clients".security.sts.client.soap12-binding

boolean

false

+

If true the STS client will be set to send Soap 1.2 messages; otherwise it will send SOAP 1.1 messages.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURITY_STS_CLIENT_SOAP12_BINDING
+Since Quarkus CXF: 3.8.0

+

quarkus.cxf.endpoint."endpoints".security.username

string

+

The user’s name. It is used as follows:

+
+
+
    +
  • +

    As the name in the UsernameToken for WS-Security

    +
  • +
  • +

    As the alias name in the keystore to get the user’s cert and private key for signature if signature.username is +not set

    +
  • +
  • +

    As the alias name in the keystore to get the user’s public key for encryption if encryption.username is not set

    +
  • +
+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_USERNAME
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.password

string

+

The user’s password when a callback-handler is not defined. This is only used for the password in a WS-Security +UsernameToken.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_PASSWORD
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.signature.username

string

+

The user’s name for signature. It is used as the alias name in the keystore to get the user’s cert and private key +for signature. If this is not defined, then username is used instead. If that is also not specified, it uses the +the default alias set in the properties file referenced by signature.properties. If that’s also not set, and the +keystore only contains a single key, that key will be used.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_SIGNATURE_USERNAME
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.signature.password

string

+

The user’s password for signature when a callback-handler is not defined.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_SIGNATURE_PASSWORD
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.encryption.username

string

+

The user’s name for encryption. It is used as the alias name in the keystore to get the user’s public key for +encryption. If this is not defined, then username is used instead. If that is also not specified, it uses the the +default alias set in the properties file referenced by encrypt.properties. If that’s also not set, and the keystore +only contains a single key, that key will be used.

+
+
+

For the WS-Security web service provider, the useReqSigCert value can be used to accept (encrypt to) any client +whose public key is in the service’s truststore (defined in encrypt.properties).

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_ENCRYPTION_USERNAME
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.callback-handler

string

+

A reference to a javax.security.auth.callback.CallbackHandler bean +used to obtain passwords, for both outbound and inbound requests.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_CALLBACK_HANDLER
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.saml-callback-handler

string

+

A reference to a javax.security.auth.callback.CallbackHandler +implementation used to construct SAML Assertions.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_SAML_CALLBACK_HANDLER
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.signature.properties

Map<String,String>

+

The Crypto property configuration to use for signing, if signature.crypto is not set.

+
+
+

Example

+
+
+
+
[prefix].signature.properties."org.apache.ws.security.crypto.provider" =
+org.apache.ws.security.components.crypto.Merlin
+[prefix].signature.properties."org.apache.ws.security.crypto.merlin.keystore.password" = password
+[prefix].signature.properties."org.apache.ws.security.crypto.merlin.file" = certs/alice.jks
+
+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_SIGNATURE_PROPERTIES
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.encryption.properties

Map<String,String>

+

The Crypto property configuration to use for encryption, if encryption.crypto is not set.

+
+
+

Example

+
+
+
+
[prefix].encryption.properties."org.apache.ws.security.crypto.provider" =
+org.apache.ws.security.components.crypto.Merlin
+[prefix].encryption.properties."org.apache.ws.security.crypto.merlin.keystore.password" = password
+[prefix].encryption.properties."org.apache.ws.security.crypto.merlin.file" = certs/alice.jks
+
+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_ENCRYPTION_PROPERTIES
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.signature.crypto

string

+

A reference to a org.apache.wss4j.common.crypto.Crypto bean to be used +for signature. If not set, signature.properties will be used to configure a Crypto instance.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_SIGNATURE_CRYPTO
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.encryption.crypto

string

+

A reference to a org.apache.wss4j.common.crypto.Crypto to be used for +encryption. If not set, encryption.properties will be used to configure a Crypto instance.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_ENCRYPTION_CRYPTO
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.encryption.certificate

string

+

A message property for prepared X509 certificate to be used for encryption. If this is not defined, then the +certificate will be either loaded from the keystore encryption.properties or extracted from request (when +WS-Security is used and if encryption.username has value useReqSigCert.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_ENCRYPTION_CERTIFICATE
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.enable-revocation

boolean

false

+

If true, Certificate Revocation List (CRL) checking is enabled when verifying trust in a certificate; otherwise it +is not enabled.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_ENABLE_REVOCATION
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.enable-unsigned-saml-assertion-principal

boolean

false

+

If true, unsigned SAML assertions will be allowed as SecurityContext Principals; otherwise they won’t be allowed as +SecurityContext Principals.

+
+
+ + + + + +
+ + +
Signature
+
+

The label "unsigned" refers to an internal signature. Even if the token is signed by an external signature (as per +the "sender-vouches" requirement), this boolean must still be configured if you want to use the token to set up +the security context.

+
+
+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_ENABLE_UNSIGNED_SAML_ASSERTION_PRINCIPAL
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.validate-saml-subject-confirmation

boolean

true

+

If true, the SubjectConfirmation requirements of a received SAML Token (sender-vouches or holder-of-key) will be +validated; otherwise they won’t be validated.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_VALIDATE_SAML_SUBJECT_CONFIRMATION
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.sc-from-jaas-subject

boolean

true

+

If true, security context can be created from JAAS Subject; otherwise it must not be created from JAAS Subject.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_SC_FROM_JAAS_SUBJECT
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.audience-restriction-validation

boolean

true

+

If true, then if the SAML Token contains Audience Restriction URIs, one of them must match one of the values in +audience.restrictions; otherwise the SAML AudienceRestriction validation is disabled.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_AUDIENCE_RESTRICTION_VALIDATION
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.saml-role-attributename

string

http://schemas.xmlsoap.org/ws/2005/05/identity/claims/role

+

The attribute URI of the SAML AttributeStatement where the role information is stored.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_SAML_ROLE_ATTRIBUTENAME
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.subject-cert-constraints

string

+

A String of regular expressions (separated by the value specified in security.cert.constraints.separator) which +will be applied to the subject DN of the certificate used for signature validation, after trust verification of the +certificate chain associated with the certificate.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_SUBJECT_CERT_CONSTRAINTS
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.cert-constraints-separator

string

,

+

The separator that is used to parse certificate constraints configured in security.subject.cert.constraints

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_CERT_CONSTRAINTS_SEPARATOR
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.actor

string

+

The actor or role name of the wsse:Security header. If this parameter is omitted, the actor name is not set.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_ACTOR
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.validate.token

boolean

true

+

If true, the password of a received UsernameToken will be validated; otherwise it won’t be validated.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_VALIDATE_TOKEN
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.username-token.always.encrypted

boolean

true

+

Whether to always encrypt UsernameTokens that are defined as a SupportingToken. This should not be set to false +in a production environment, as it exposes the password (or the digest of the password) on the wire.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_USERNAME_TOKEN_ALWAYS_ENCRYPTED
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.is-bsp-compliant

boolean

true

+

If true, the compliance with the Basic Security Profile (BSP) 1.1 will be ensured; otherwise it will not be +ensured.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_IS_BSP_COMPLIANT
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.enable.nonce.cache

boolean

+

If true, the UsernameToken nonces will be cached for both message initiators and recipients; otherwise they won’t +be cached for neither message initiators nor recipients. The default is true for message recipients, and false +for message initiators.

+
+
+ + + + + +
+ + +
Caching
+
+

Caching only applies when either a UsernameToken WS-SecurityPolicy is in effect, or the UsernameToken action has +been configured for the non-security-policy case.

+
+
+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_ENABLE_NONCE_CACHE
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.enable.timestamp.cache

boolean

+

If true, the Timestamp Created Strings (these are only cached in conjunction with a message Signature) will be +cached for both message initiators and recipients; otherwise they won’t be cached for neither message initiators nor +recipients. The default is true for message recipients, and false for message initiators.

+
+
+ + + + + +
+ + +
Caching
+
+

Caching only applies when either a IncludeTimestamp policy is in effect, or the Timestamp action has been +configured for the non-security-policy case.

+
+
+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_ENABLE_TIMESTAMP_CACHE
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.enable.streaming

boolean

false

+

If true, the new streaming (StAX) implementation of WS-Security is used; otherwise the old DOM implementation is +used.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_ENABLE_STREAMING
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.return.security.error

boolean

false

+

If true, detailed security error messages are sent to clients; otherwise the details are omitted and only a generic +error message is sent.

+
+
+

The "real" security errors should not be returned to the client in production, as they may leak information about the +deployment, or otherwise provide an "oracle" for attacks.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_RETURN_SECURITY_ERROR
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.must-understand

boolean

true

+

If true, the SOAP mustUnderstand header is included in security headers based on a WS-SecurityPolicy; otherwise +the header is always omitted.

+
+
+

Works only with enable.streaming = true - see CXF-8940

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_MUST_UNDERSTAND
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.enable.saml.cache

boolean

+

If true and in case the token contains a OneTimeUse Condition, the SAML2 Token Identifiers will be cached for +both message initiators and recipients; otherwise they won’t be cached for neither message initiators nor recipients. +The default is true for message recipients, and false for message initiators.

+
+
+

Caching only applies when either a SamlToken policy is in effect, or a SAML action has been configured for the +non-security-policy case.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_ENABLE_SAML_CACHE
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.store.bytes.in.attachment

boolean

+

Whether to store bytes (CipherData or BinarySecurityToken) in an attachment. The default is true if MTOM is enabled. +Set it to false to BASE-64 encode the bytes and "inlined" them in the message instead. Setting this to true is more +efficient, as it means that the BASE-64 encoding step can be skipped. This only applies to the DOM WS-Security stack.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_STORE_BYTES_IN_ATTACHMENT
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.swa.encryption.attachment.transform.content

boolean

false

+

If true, Attachment-Content-Only transform will be used when an Attachment is encrypted via a WS-SecurityPolicy +expression; otherwise Attachment-Complete transform will be used when an Attachment is encrypted via a +WS-SecurityPolicy expression.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_SWA_ENCRYPTION_ATTACHMENT_TRANSFORM_CONTENT
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.use.str.transform

boolean

true

+

If true, the STR (Security Token Reference) Transform will be used when (externally) signing a SAML Token; +otherwise the STR (Security Token Reference) Transform will not be used.

+
+
+

Some frameworks cannot process the SecurityTokenReference. You may set this false in such cases.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_USE_STR_TRANSFORM
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.add.inclusive.prefixes

boolean

true

+

If true, an InclusiveNamespaces PrefixList will be added as a CanonicalizationMethod child when generating +Signatures using WSConstants.C14N_EXCL_OMIT_COMMENTS; otherwise the PrefixList will not be added.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_ADD_INCLUSIVE_PREFIXES
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.disable.require.client.cert.check

boolean

false

+

If true, the enforcement of the WS-SecurityPolicy RequireClientCertificate policy will be disabled; otherwise the +enforcement of the WS-SecurityPolicy RequireClientCertificate policy is enabled.

+
+
+

Some servers may not do client certificate verification at the start of the SSL handshake, and therefore the client +certificates may not be available to the WS-Security layer for policy verification.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_DISABLE_REQUIRE_CLIENT_CERT_CHECK
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.expand.xop.include

boolean

+

If true, the xop:Include elements will be searched for encryption and signature (on the outbound side) or for +signature verification (on the inbound side); otherwise the search won’t happen. This ensures that the actual bytes +are signed, and not just the reference. The default is true if MTOM is enabled, otherwise the default is false.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_EXPAND_XOP_INCLUDE
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.timestamp.timeToLive

string

300

+

The time in seconds to add to the Creation value of an incoming Timestamp to determine whether to accept it as +valid or not.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_TIMESTAMP_TIMETOLIVE
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.timestamp.futureTimeToLive

string

60

+

The time in seconds in the future within which the Created time of an incoming Timestamp is valid. The default is +greater than zero to avoid problems where clocks are slightly askew. Set this to 0 to reject all future-created +`Timestamp`s.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_TIMESTAMP_FUTURETIMETOLIVE
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.usernametoken.timeToLive

string

300

+

The time in seconds to append to the Creation value of an incoming UsernameToken to determine whether to accept it +as valid or not.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_USERNAMETOKEN_TIMETOLIVE
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.usernametoken.futureTimeToLive

string

60

+

The time in seconds in the future within which the Created time of an incoming UsernameToken is valid. The +default is greater than zero to avoid problems where clocks are slightly askew. Set this to 0 to reject all +future-created `UsernameToken`s.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_USERNAMETOKEN_FUTURETIMETOLIVE
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.spnego.client.action

string

+

A reference to a org.apache.wss4j.common.spnego.SpnegoClientAction +bean to use for SPNEGO. This allows the user to plug in a different implementation to obtain a service ticket.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_SPNEGO_CLIENT_ACTION
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.nonce.cache.instance

string

+

A reference to a org.apache.wss4j.common.cache.ReplayCache bean used +to cache UsernameToken nonces. A org.apache.wss4j.common.cache.EHCacheReplayCache instance is used by default.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_NONCE_CACHE_INSTANCE
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.timestamp.cache.instance

string

+

A reference to a org.apache.wss4j.common.cache.ReplayCache bean used +to cache Timestamp Created Strings. A org.apache.wss4j.common.cache.EHCacheReplayCache instance is used by +default.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_TIMESTAMP_CACHE_INSTANCE
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.saml.cache.instance

string

+

A reference to a org.apache.wss4j.common.cache.ReplayCache bean used +to cache SAML2 Token Identifier Strings (if the token contains a OneTimeUse condition). A +org.apache.wss4j.common.cache.EHCacheReplayCache instance is used by default.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_SAML_CACHE_INSTANCE
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.cache.config.file

string

+

Set this property to point to a configuration file for the underlying caching implementation for the TokenStore. +The default configuration file that is used is cxf-ehcache.xml in org.apache.cxf:cxf-rt-security JAR.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_CACHE_CONFIG_FILE
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.token-store-cache-instance

string

+

A reference to a org.apache.cxf.ws.security.tokenstore.TokenStore bean +to use for caching security tokens. By default this uses a instance.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_TOKEN_STORE_CACHE_INSTANCE
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.cache.identifier

string

+

The Cache Identifier to use with the TokenStore. CXF uses the following key to retrieve a token store: +org.apache.cxf.ws.security.tokenstore.TokenStore-<identifier>. This key can be used to configure service-specific +cache configuration. If the identifier does not match, then it falls back to a cache configuration with key +org.apache.cxf.ws.security.tokenstore.TokenStore.

+
+
+

The default <identifier> is the QName of the service in question. However to pick up a custom cache configuration +(for example, if you want to specify a TokenStore per-client proxy), it can be configured with this identifier +instead.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_CACHE_IDENTIFIER
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.role.classifier

string

+

The Subject Role Classifier to use. If one of the WSS4J Validators returns a JAAS Subject from Validation, then the +WSS4JInInterceptor will attempt to create a SecurityContext based on this Subject. If this value is not +specified, then it tries to get roles using the DefaultSecurityContext in org.apache.cxf:cxf-core. Otherwise it +uses this value in combination with the role.classifier.type to get the roles from the Subject.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_ROLE_CLASSIFIER
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.role.classifier.type

string

prefix

+

The Subject Role Classifier Type to use. If one of the WSS4J Validators returns a JAAS Subject from Validation, then +the WSS4JInInterceptor will attempt to create a SecurityContext based on this Subject. Currently accepted values +are prefix or classname. Must be used in conjunction with the role.classifier.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_ROLE_CLASSIFIER_TYPE
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.asymmetric.signature.algorithm

string

+

This configuration tag allows the user to override the default Asymmetric Signature algorithm (RSA-SHA1) for use in +WS-SecurityPolicy, as the WS-SecurityPolicy specification does not allow the use of other algorithms at present.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_ASYMMETRIC_SIGNATURE_ALGORITHM
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.symmetric.signature.algorithm

string

+

This configuration tag allows the user to override the default Symmetric Signature algorithm (HMAC-SHA1) for use in +WS-SecurityPolicy, as the WS-SecurityPolicy specification does not allow the use of other algorithms at present.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_SYMMETRIC_SIGNATURE_ALGORITHM
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.password.encryptor.instance

string

+

A reference to a org.apache.wss4j.common.crypto.PasswordEncryptor +bean, which is used to encrypt or decrypt passwords in the Merlin Crypto implementation (or any custom Crypto +implementations).

+
+
+

By default, WSS4J uses the org.apache.wss4j.common.crypto.JasyptPasswordEncryptor which must be instantiated with a +password to use to decrypt keystore passwords in the Merlin Crypto definition. This password is obtained via the +CallbackHandler defined via callback-handler

+
+
+

The encrypted passwords must be stored in the format "ENC(encoded encrypted password)".

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_PASSWORD_ENCRYPTOR_INSTANCE
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.delegated.credential

string

+

A reference to a Kerberos org.ietf.jgss.GSSCredential bean to use for +WS-Security. This is used to retrieve a service ticket instead of using the client credentials.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_DELEGATED_CREDENTIAL
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.security.context.creator

string

+

A reference to a +org.apache.cxf.ws.security.wss4j.WSS4JSecurityContextCreator bean that is used to create a CXF SecurityContext from +the set of WSS4J processing results. The default implementation is +org.apache.cxf.ws.security.wss4j.DefaultWSS4JSecurityContextCreator.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_SECURITY_CONTEXT_CREATOR
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.security.token.lifetime

long

300000

+

The security token lifetime value (in milliseconds).

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_SECURITY_TOKEN_LIFETIME
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.kerberos.request.credential.delegation

boolean

false

+

If true, credential delegation is requested in the KerberosClient; otherwise the credential delegation is not in +the KerberosClient.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_KERBEROS_REQUEST_CREDENTIAL_DELEGATION
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.kerberos.use.credential.delegation

boolean

false

+

If true, GSSCredential bean is retrieved from the Message Context using the delegated.credential property and +then it is used to obtain a service ticket.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_KERBEROS_USE_CREDENTIAL_DELEGATION
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.kerberos.is.username.in.servicename.form

boolean

false

+

If true, the Kerberos username is in servicename form; otherwise the Kerberos username is not in servicename form.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_KERBEROS_IS_USERNAME_IN_SERVICENAME_FORM
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.kerberos.jaas.context

string

+

The JAAS Context name to use for Kerberos.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_KERBEROS_JAAS_CONTEXT
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.kerberos.spn

string

+

The Kerberos Service Provider Name (spn) to use.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_KERBEROS_SPN
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.endpoint."endpoints".security.kerberos.client

string

+

A reference to a org.apache.cxf.ws.security.kerberos.KerberosClient +bean used to obtain a service ticket.

+
+
+

This option is experimental, because it is not covered by +tests yet.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SECURITY_KERBEROS_CLIENT
+Since Quarkus CXF: 2.5.0

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/dev/reference/extensions/quarkus-cxf-services-sts.html b/quarkus-cxf/dev/reference/extensions/quarkus-cxf-services-sts.html new file mode 100644 index 0000000000..8467fb9e3c --- /dev/null +++ b/quarkus-cxf/dev/reference/extensions/quarkus-cxf-services-sts.html @@ -0,0 +1,1390 @@ + + + + + + Security Token Service (STS) :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Security Token Service (STS)

+
+
+
+

Stable • Since 1.5.3

+
+
+

Issue, renew and validate security tokens in context of WS-Trust.

+
+
+
+
+

Maven coordinates

+
+
+

Create a new project using quarkus-cxf-services-sts on code.quarkus.io +or add these coordinates to your existing project:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.cxf</groupId>
+    <artifactId>quarkus-cxf-services-sts</artifactId>
+</dependency>
+
+
+
+ + + + + +
+ + +
+

Check the User guide and especially its +Dependency management section +for more information about writing applications with Quarkus CXF.

+
+
+
+
+
+
+

Supported standards

+
+
+ +
+
+
+
+

Usage

+
+
+

Here are the key parts of a basic WS-Trust scenario:

+
+
+
    +
  • +

    WS-SecurityPolicy - except for defining security requirements, such as transport protocols, encryption and signing, +it can also contain an <IssuedToken> assertion. +It specifies the requirements and constraints for these security tokens that the client must adhere to when accessing the service.

    +
  • +
  • +

    Security Token Service (STS) - issues, validates, and renews security tokens upon request. +It acts as a trusted authority that authenticates clients and issues tokens that assert the client’s identity and permissions.

    +
  • +
  • +

    Client - requests a token from the STS to access a web service. +It must authenticate itself to the STS and provide details about the kind of token required.

    +
  • +
  • +

    Service - relies on the STS to authenticate clients and validate their tokens.

    +
  • +
+
+
+

Runnable example

+
+

There is an integration test +covering WS-Trust in the Quarkus CXF source tree. +Let’s walk through it and see how the individual parts are set to work together.

+
+
+

WS-SecurityPolicy

+
+

The policy is located in asymmetric-saml2-policy.xml file. +Its key part is the <IssuedToken> assertion requiring a SAML 2.0 token:

+
+
+
asymmetric-saml2-policy.xml
+
+
                            <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>
+                                <sp:Issuer>
+                                    <wsaws:Address>http://localhost:8081/services/sts</wsaws:Address>
+                                    <wsaws:Metadata xmlns:wsdli="http://www.w3.org/2006/01/wsdl-instance"
+                                                    wsdli:wsdlLocation="http://localhost:8081/services/sts?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>
+
+
+
+
+

Security Token Service (STS)

+
+

The STS is implemented in Sts.java:

+
+
+
Sts.java
+
+
@WebServiceProvider(serviceName = "SecurityTokenService", portName = "UT_Port", targetNamespace = "http://docs.oasis-open.org/ws-sx/ws-trust/200512/", wsdlLocation = "ws-trust-1.4-service.wsdl")
+public class Sts extends SecurityTokenServiceProvider {
+
+    public Sts() throws Exception {
+        super();
+
+        StaticSTSProperties props = new StaticSTSProperties();
+        props.setSignatureCryptoProperties("stsKeystore.properties");
+        props.setSignatureUsername("sts");
+        props.setCallbackHandlerClass(StsCallbackHandler.class.getName());
+        props.setIssuer("SampleSTSIssuer");
+
+        List<ServiceMBean> services = new LinkedList<ServiceMBean>();
+        StaticService service = new StaticService();
+        final Config config = ConfigProvider.getConfig();
+        final int port = LaunchMode.current().equals(LaunchMode.TEST) ? config.getValue("quarkus.http.test-port", Integer.class)
+                : config.getValue("quarkus.http.port", Integer.class);
+        service.setEndpoints(Arrays.asList(
+                "http://localhost:" + port + "/services/hello-ws-trust",
+                "http://localhost:" + port + "/services/hello-ws-trust-actas",
+                "http://localhost:" + port + "/services/hello-ws-trust-onbehalfof"));
+        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);
+    }
+}
+
+
+
+

and configured in application.properties:

+
+
+
application.properties
+
+
quarkus.cxf.endpoint."/sts".implementor = io.quarkiverse.cxf.it.ws.trust.sts.Sts
+quarkus.cxf.endpoint."/sts".logging.enabled = pretty
+
+quarkus.cxf.endpoint."/sts".security.signature.username = sts
+quarkus.cxf.endpoint."/sts".security.signature.password = password
+quarkus.cxf.endpoint."/sts".security.validate.token = false
+
+quarkus.cxf.endpoint."/sts".security.signature.properties."org.apache.ws.security.crypto.provider" = org.apache.ws.security.components.crypto.Merlin
+quarkus.cxf.endpoint."/sts".security.signature.properties."org.apache.ws.security.crypto.merlin.keystore.type" = pkcs12
+quarkus.cxf.endpoint."/sts".security.signature.properties."org.apache.ws.security.crypto.merlin.keystore.password" = password
+quarkus.cxf.endpoint."/sts".security.signature.properties."org.apache.ws.security.crypto.merlin.keystore.file" = sts.pkcs12
+
+
+
+
+

Service

+
+

The service is implemented in TrustHelloServiceImpl.java:

+
+
+
TrustHelloServiceImpl.java
+
+
@WebService(portName = "TrustHelloServicePort", serviceName = "TrustHelloService", targetNamespace = "https://quarkiverse.github.io/quarkiverse-docs/quarkus-cxf/test/ws-trust", endpointInterface = "io.quarkiverse.cxf.it.ws.trust.server.TrustHelloService")
+public class TrustHelloServiceImpl implements TrustHelloService {
+    @WebMethod
+    @Override
+    public String hello(String person) {
+        return "Hello " + person + "!";
+    }
+}
+
+
+
+

The asymmetric-saml2-policy.xml mentioned above is set in the Service Endpoint Interface TrustHelloService.java:

+
+
+
TrustHelloServiceImpl.java
+
+
@WebService(targetNamespace = "https://quarkiverse.github.io/quarkiverse-docs/quarkus-cxf/test/ws-trust")
+@Policy(placement = Policy.Placement.BINDING, uri = "classpath:/asymmetric-saml2-policy.xml")
+public interface TrustHelloService {
+    @WebMethod
+    @Policies({
+            @Policy(placement = Policy.Placement.BINDING_OPERATION_INPUT, uri = "classpath:/io-policy.xml"),
+            @Policy(placement = Policy.Placement.BINDING_OPERATION_OUTPUT, uri = "classpath:/io-policy.xml")
+    })
+    String hello(String person);
+}
+
+
+
+

The service endpoint is configured in application.properties:

+
+
+
application.properties
+
+
quarkus.cxf.endpoint."/hello-ws-trust".implementor = io.quarkiverse.cxf.it.ws.trust.server.TrustHelloServiceImpl
+quarkus.cxf.endpoint."/hello-ws-trust".logging.enabled = pretty
+
+quarkus.cxf.endpoint."/hello-ws-trust".security.signature.username = service
+quarkus.cxf.endpoint."/hello-ws-trust".security.signature.password = password
+quarkus.cxf.endpoint."/hello-ws-trust".security.signature.properties."org.apache.ws.security.crypto.provider" = org.apache.ws.security.components.crypto.Merlin
+quarkus.cxf.endpoint."/hello-ws-trust".security.signature.properties."org.apache.ws.security.crypto.merlin.keystore.type" = pkcs12
+quarkus.cxf.endpoint."/hello-ws-trust".security.signature.properties."org.apache.ws.security.crypto.merlin.keystore.password" = password
+quarkus.cxf.endpoint."/hello-ws-trust".security.signature.properties."org.apache.ws.security.crypto.merlin.keystore.alias" = service
+quarkus.cxf.endpoint."/hello-ws-trust".security.signature.properties."org.apache.ws.security.crypto.merlin.file" = service.pkcs12
+
+quarkus.cxf.endpoint."/hello-ws-trust".security.encryption.properties."org.apache.ws.security.crypto.provider" = org.apache.ws.security.components.crypto.Merlin
+quarkus.cxf.endpoint."/hello-ws-trust".security.encryption.properties."org.apache.ws.security.crypto.merlin.keystore.type" = pkcs12
+quarkus.cxf.endpoint."/hello-ws-trust".security.encryption.properties."org.apache.ws.security.crypto.merlin.keystore.password" = password
+quarkus.cxf.endpoint."/hello-ws-trust".security.encryption.properties."org.apache.ws.security.crypto.merlin.keystore.alias" = service
+quarkus.cxf.endpoint."/hello-ws-trust".security.encryption.properties."org.apache.ws.security.crypto.merlin.file" = service.pkcs12
+
+
+
+
+

Client

+
+

Finally, for the SOAP client to be able to communicate with the service, its STSClient needs to be configured. +It can be done in application.properties:

+
+
+
application.properties
+
+
quarkus.cxf.client.hello-ws-trust.security.sts.client.wsdl = http://localhost:${quarkus.http.test-port}/services/sts?wsdl
+quarkus.cxf.client.hello-ws-trust.security.sts.client.service-name = {http://docs.oasis-open.org/ws-sx/ws-trust/200512/}SecurityTokenService
+quarkus.cxf.client.hello-ws-trust.security.sts.client.endpoint-name = {http://docs.oasis-open.org/ws-sx/ws-trust/200512/}UT_Port
+quarkus.cxf.client.hello-ws-trust.security.sts.client.username = client
+quarkus.cxf.client.hello-ws-trust.security.sts.client.password = password
+quarkus.cxf.client.hello-ws-trust.security.sts.client.encryption.username = sts
+quarkus.cxf.client.hello-ws-trust.security.sts.client.encryption.properties."org.apache.ws.security.crypto.provider" = org.apache.ws.security.components.crypto.Merlin
+quarkus.cxf.client.hello-ws-trust.security.sts.client.encryption.properties."org.apache.ws.security.crypto.merlin.keystore.type" = pkcs12
+quarkus.cxf.client.hello-ws-trust.security.sts.client.encryption.properties."org.apache.ws.security.crypto.merlin.keystore.password" = password
+quarkus.cxf.client.hello-ws-trust.security.sts.client.encryption.properties."org.apache.ws.security.crypto.merlin.keystore.alias" = client
+quarkus.cxf.client.hello-ws-trust.security.sts.client.encryption.properties."org.apache.ws.security.crypto.merlin.keystore.file" = client.pkcs12
+quarkus.cxf.client.hello-ws-trust.security.sts.client.token.username = client
+quarkus.cxf.client.hello-ws-trust.security.sts.client.token.properties."org.apache.ws.security.crypto.provider" = org.apache.ws.security.components.crypto.Merlin
+quarkus.cxf.client.hello-ws-trust.security.sts.client.token.properties."org.apache.ws.security.crypto.merlin.keystore.type" = pkcs12
+quarkus.cxf.client.hello-ws-trust.security.sts.client.token.properties."org.apache.ws.security.crypto.merlin.keystore.password" = password
+quarkus.cxf.client.hello-ws-trust.security.sts.client.token.properties."org.apache.ws.security.crypto.merlin.keystore.alias" = client
+quarkus.cxf.client.hello-ws-trust.security.sts.client.token.properties."org.apache.ws.security.crypto.merlin.keystore.file" = client.pkcs12
+quarkus.cxf.client.hello-ws-trust.security.sts.client.token.usecert = true
+
+
+
+ + + + + +
+ + +
+

The properties for configuring the STS client are provided by the io.quarkiverse.cxf:quarkus-cxf-rt-ws-security +extension and documented on its +reference page.

+
+
+
+
+

Alternatively, the client can be set as a bean reference:

+
+
+
application.properties
+
+
quarkus.cxf.client.hello-ws-trust-bean.security.sts.client = #stsClientBean
+
+
+
+

In that case, the @Named bean needs to be produced programmatically, e.g. using @jakarta.enterprise.inject.Produces:

+
+
+
BeanProducers.java
+
+
import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.enterprise.inject.Produces;
+import jakarta.inject.Named;
+
+import org.apache.cxf.ws.security.SecurityConstants;
+
+import io.quarkiverse.cxf.ws.security.sts.client.STSClientBean;
+
+public class BeanProducers {
+
+    /**
+     * Create and configure an STSClient for use by the TrustHelloService client.
+     */
+    @Produces
+    @ApplicationScoped
+    @Named("stsClientBean")
+    STSClientBean createSTSClient() {
+        /*
+         * We cannot use org.apache.cxf.ws.security.trust.STSClient as a return type of this bean producer method
+         * because it does not have a no-args constructor. STSClientBean is a subclass of STSClient having one.
+         */
+        STSClientBean stsClient = STSClientBean.create();
+        stsClient.setWsdlLocation("http://localhost:8081/services/sts?wsdl");
+        stsClient.setServiceQName(new QName("http://docs.oasis-open.org/ws-sx/ws-trust/200512/", "SecurityTokenService"));
+        stsClient.setEndpointQName(new QName("http://docs.oasis-open.org/ws-sx/ws-trust/200512/", "UT_Port"));
+        Map<String, Object> props = stsClient.getProperties();
+        props.put(SecurityConstants.USERNAME, "client");
+        props.put(SecurityConstants.PASSWORD, "password");
+        props.put(SecurityConstants.ENCRYPT_PROPERTIES,
+                Thread.currentThread().getContextClassLoader().getResource("clientKeystore.properties"));
+        props.put(SecurityConstants.ENCRYPT_USERNAME, "sts");
+        props.put(SecurityConstants.STS_TOKEN_USERNAME, "client");
+        props.put(SecurityConstants.STS_TOKEN_PROPERTIES,
+                Thread.currentThread().getContextClassLoader().getResource("clientKeystore.properties"));
+        props.put(SecurityConstants.STS_TOKEN_USE_CERT_FOR_KEYINFO, "true");
+        return stsClient;
+    }
+}
+
+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/dev/reference/extensions/quarkus-cxf-xjc-plugins.html b/quarkus-cxf/dev/reference/extensions/quarkus-cxf-xjc-plugins.html new file mode 100644 index 0000000000..e0accc76b2 --- /dev/null +++ b/quarkus-cxf/dev/reference/extensions/quarkus-cxf-xjc-plugins.html @@ -0,0 +1,1117 @@ + + + + + + XJC Plugins :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

XJC Plugins

+
+
+
+

Stable • Since 1.5.11

+
+
+

XJC plugins for wsdl2java code generation. +You’ll need to add this extension if you want to use any of the following in +quarkus.cxf.codegen.wsdl2java.additional-params:

+
+
+
    +
  • +

    -xjc-Xbg - generate getFoo() instead of isFoo() accessor methods for boolean fields.

    +
  • +
  • +

    -xjc-Xdv - let the generated getter methods return the default value defined in the schema unless the field is set explicitly.

    +
  • +
  • +

    -xjc-Xjavadoc - generate JavaDoc based on xs:documentation present in the schema.

    +
  • +
  • +

    -xjc-Xproperty-listener - add PropertyChangeListener support to the generated beans.

    +
  • +
  • +

    -xjc-Xts - generate toString() methods in model classes.

    +
  • +
  • +

    -xjc-Xwsdlextension - generate beans that can be used directly with WSDL4J as extensors in the WSDL.

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

Check the wsdl2java section of User guide for more details about wsdl2java.

+
+
+
+
+
+
+

Maven coordinates

+
+
+

Create a new project using quarkus-cxf-xjc-plugins on code.quarkus.io +or add these coordinates to your existing project:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.cxf</groupId>
+    <artifactId>quarkus-cxf-xjc-plugins</artifactId>
+</dependency>
+
+
+
+ + + + + +
+ + +
+

Check the User guide and especially its +Dependency management section +for more information about writing applications with Quarkus CXF.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/dev/reference/extensions/quarkus-cxf.html b/quarkus-cxf/dev/reference/extensions/quarkus-cxf.html new file mode 100644 index 0000000000..270a8f4fc1 --- /dev/null +++ b/quarkus-cxf/dev/reference/extensions/quarkus-cxf.html @@ -0,0 +1,2959 @@ + + + + + + Quarkus CXF :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus CXF

+
+
+
+

Stable • Since 0.1.0

+
+
+

Core capabilities for implementing SOAP clients and JAX-WS services.

+
+
+
+
+

Maven coordinates

+
+
+

Create a new project using quarkus-cxf on code.quarkus.io +or add these coordinates to your existing project:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.cxf</groupId>
+    <artifactId>quarkus-cxf</artifactId>
+</dependency>
+
+
+
+ + + + + +
+ + +
+

Check the User guide and especially its +Dependency management section +for more information about writing applications with Quarkus CXF.

+
+
+
+
+
+
+

Supported standards

+
+
+ +
+
+
+ +
+

Configuration

+
+
+

Configuration property fixed at build time. All other configuration properties are overridable at runtime.

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Configuration propertyTypeDefault

quarkus.cxf.path

string

/services

+

The default path for CXF resources.

+
+
+ + + + + +
+ + +
Earlier versions
+
+

The default value before Quarkus CXF version 2.0.0 was /.

+
+
+
+
+

Environment variable: QUARKUS_CXF_PATH

+

quarkus.cxf.min-chunk-size

int

128

+

The size in bytes of the chunks of memory allocated when writing data.

+
+
+

This is a very advanced setting that should only be set if you understand exactly how it affects the output IO operations +of the application.

+
+
+

Environment variable: QUARKUS_CXF_MIN_CHUNK_SIZE

+

quarkus.cxf.output-buffer-size

int

8191

+

The size of the output stream response buffer in bytes. If a response is larger than this and no content-length is +provided then the response will be chunked.

+
+
+

Larger values may give slight performance increases for large responses, at the expense of more memory usage.

+
+
+

Environment variable: QUARKUS_CXF_OUTPUT_BUFFER_SIZE

+

quarkus.cxf.http-conduit-factory

QuarkusCXFDefault, CXFDefault, HttpClientHTTPConduitFactory, URLConnectionHTTPConduitFactory

+

Select the HTTPConduitFactory implementation for all clients except the ones that override this setting via +quarkus.cxf.client.myClient.http-conduit-factory.

+
+
+
    +
  • +

    QuarkusCXFDefault (default): if io.quarkiverse.cxf:quarkus-cxf-rt-transports-http-hc5 is present in class path, +then its HTTPConduitFactory implementation will be used; otherwise this value is equivalent with +URLConnectionHTTPConduitFactory (this may change, once issue +#992 gets resolved in CXF)

    +
  • +
  • +

    CXFDefault: the selection of HTTPConduitFactory implementation is left to CXF

    +
  • +
  • +

    HttpClientHTTPConduitFactory: the HTTPConduitFactory will be set to an implementation always returning +org.apache.cxf.transport.http.HttpClientHTTPConduit. This will use java.net.http.HttpClient as the underlying HTTP +client.

    +
  • +
  • +

    URLConnectionHTTPConduitFactory: the HTTPConduitFactory will be set to an implementation always returning +org.apache.cxf.transport.http.URLConnectionHTTPConduit. This will use java.net.HttpURLConnection as the underlying +HTTP client.

    +
  • +
+
+
+

Environment variable: QUARKUS_CXF_HTTP_CONDUIT_FACTORY
+Since Quarkus CXF: 2.3.0

+

quarkus.cxf.decoupled-endpoint-base

string

+

An URI base to use as a prefix of quarkus.cxf.client.myClient.decoupled-endpoint. You will typically want to set this +to something like the following:

+
+
+
+
quarkus.cxf.decoupled-endpoint-base = https://api.example.com:${quarkus.http.ssl-port}${quarkus.cxf.path}
+# or for plain HTTP
+quarkus.cxf.decoupled-endpoint-base = http://api.example.com:${quarkus.http.port}${quarkus.cxf.path}
+
+
+
+

If you invoke your WS client from within a HTTP handler, you can leave this option unspecified and rather set it +dynamically on the request context of your WS client using the org.apache.cxf.ws.addressing.decoupled.endpoint.base +key. Here is an example how to do that from a RESTeasy handler method:

+
+
+
+
import java.util.Map;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.Context;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.UriInfo;
+import jakarta.xml.ws.BindingProvider;
+import io.quarkiverse.cxf.annotation.CXFClient;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+
+@Path("/my-rest")
+public class MyRestEasyResource {
+
+    @Inject
+    @CXFClient("hello")
+    HelloService helloService;
+
+    @ConfigProperty(name = "quarkus.cxf.path")
+                     String quarkusCxfPath;
+
+    @POST
+    @Path("/hello")
+    @Produces(MediaType.TEXT_PLAIN)
+        public String hello(String body, @Context UriInfo uriInfo) throws IOException {
+
+        // You may consider doing this only once if you are sure that your service is accessed
+        // through a single hostname
+        String decoupledEndpointBase = uriInfo.getBaseUriBuilder().path(quarkusCxfPath);
+        Map>String, Object< requestContext = ((BindingProvider)
+        helloService).getRequestContext();
+        requestContext.put("org.apache.cxf.ws.addressing.decoupled.endpoint.base",
+        decoupledEndpointBase);
+
+        return wsrmHelloService.hello(body);
+    }
+}
+
+
+
+

Environment variable: QUARKUS_CXF_DECOUPLED_ENDPOINT_BASE
+Since Quarkus CXF: 2.7.0

+

quarkus.cxf.logging.enabled-for

clients, services, both, none

none

+

Specifies whether the message logging will be enabled for clients, services, both or none. This setting can be +overridden per client or service endpoint using +quarkus.cxf.endpoint."endpoints".logging.enabled +or quarkus.cxf.client."clients".logging.enabled +respectively.

+
+
+

Environment variable: QUARKUS_CXF_LOGGING_ENABLED_FOR
+Since Quarkus CXF: 2.6.0

+

quarkus.cxf.logging.pretty

boolean

false

+

If true, the XML elements will be indented in the log; otherwise they will appear unindented. This setting can be +overridden per client or service endpoint using +quarkus.cxf.endpoint."endpoints".logging.pretty or +quarkus.cxf.client."clients".logging.pretty +respectively.

+
+
+

Environment variable: QUARKUS_CXF_LOGGING_PRETTY
+Since Quarkus CXF: 2.6.0

+

quarkus.cxf.logging.limit

int

49152

+

A message length in bytes at which it is truncated in the log. This setting can be overridden per client or service +endpoint using +quarkus.cxf.endpoint."endpoints".logging.limit or +quarkus.cxf.client."clients".logging.limit +respectively.

+
+
+

Environment variable: QUARKUS_CXF_LOGGING_LIMIT
+Since Quarkus CXF: 2.6.0

+

quarkus.cxf.logging.in-mem-threshold

long

-1

+

A message length in bytes at which it will be written to disk. -1 is unlimited. This setting can be overridden per +client or service endpoint using +quarkus.cxf.endpoint."endpoints".logging.in-mem-threshold +or +quarkus.cxf.client."clients".logging.in-mem-threshold +respectively.

+
+
+

Environment variable: QUARKUS_CXF_LOGGING_IN_MEM_THRESHOLD
+Since Quarkus CXF: 2.6.0

+

quarkus.cxf.logging.log-binary

boolean

false

+

If true, binary payloads will be logged; otherwise they won’t be logged. This setting can be overridden per client +or service endpoint using +quarkus.cxf.endpoint."endpoints".logging.log-binary +or quarkus.cxf.client."clients".logging.log-binary +respectively.

+
+
+

Environment variable: QUARKUS_CXF_LOGGING_LOG_BINARY
+Since Quarkus CXF: 2.6.0

+

quarkus.cxf.logging.log-multipart

boolean

true

+

If true, multipart payloads will be logged; otherwise they won’t be logged. This setting can be overridden per +client or service endpoint using +quarkus.cxf.endpoint."endpoints".logging.log-multipart +or +quarkus.cxf.client."clients".logging.log-multipart +respectively.

+
+
+

Environment variable: QUARKUS_CXF_LOGGING_LOG_MULTIPART
+Since Quarkus CXF: 2.6.0

+

quarkus.cxf.logging.verbose

boolean

true

+

If true, verbose logging will be enabled; otherwise it won’t be enabled. This setting can be overridden per client +or service endpoint using +quarkus.cxf.endpoint."endpoints".logging.verbose +or quarkus.cxf.client."clients".logging.verbose +respectively.

+
+
+

Environment variable: QUARKUS_CXF_LOGGING_VERBOSE
+Since Quarkus CXF: 2.6.0

+

quarkus.cxf.logging.in-binary-content-media-types

List of string

+

A comma separated list of additional binary media types to add to the default values in the LoggingInInterceptor +whose content will not be logged unless log-binary is true. This setting can be overridden per client or service +endpoint using +quarkus.cxf.endpoint."endpoints".logging.in-binary-content-media-types +or +quarkus.cxf.client."clients".logging.in-binary-content-media-types +respectively.

+
+
+

Environment variable: QUARKUS_CXF_LOGGING_IN_BINARY_CONTENT_MEDIA_TYPES
+Since Quarkus CXF: 2.6.0

+

quarkus.cxf.logging.out-binary-content-media-types

List of string

+

A comma separated list of additional binary media types to add to the default values in the LoggingOutInterceptor +whose content will not be logged unless log-binary is true. This setting can be overridden per client or service +endpoint using +quarkus.cxf.endpoint."endpoints".logging.out-binary-content-media-types +or +quarkus.cxf.client."clients".logging.out-binary-content-media-types +respectively.

+
+
+

Environment variable: QUARKUS_CXF_LOGGING_OUT_BINARY_CONTENT_MEDIA_TYPES
+Since Quarkus CXF: 2.6.0

+

quarkus.cxf.logging.binary-content-media-types

List of string

+

A comma separated list of additional binary media types to add to the default values in the LoggingOutInterceptor +and LoggingInInterceptor whose content will not be logged unless log-binary is true. This setting can be +overridden per client or service endpoint using +quarkus.cxf.endpoint."endpoints".logging.binary-content-media-types +or +quarkus.cxf.client."clients".logging.binary-content-media-types +respectively.

+
+
+

Environment variable: QUARKUS_CXF_LOGGING_BINARY_CONTENT_MEDIA_TYPES
+Since Quarkus CXF: 2.6.0

+

quarkus.cxf.logging.sensitive-element-names

List of string

+

A comma separated list of XML elements containing sensitive information to be masked in the log. This setting can be +overridden per client or service endpoint using +quarkus.cxf.endpoint."endpoints".logging.sensitive-element-names +or +quarkus.cxf.client."clients".logging.sensitive-element-names +respectively.

+
+
+

Environment variable: QUARKUS_CXF_LOGGING_SENSITIVE_ELEMENT_NAMES
+Since Quarkus CXF: 2.6.0

+

quarkus.cxf.logging.sensitive-protocol-header-names

List of string

+

A comma separated list of protocol headers containing sensitive information to be masked in the log. This setting can +be overridden per client or service endpoint using +quarkus.cxf.endpoint."endpoints".logging.sensitive-protocol-header-names +or +quarkus.cxf.client."clients".logging.sensitive-protocol-header-names +respectively.

+
+
+

Environment variable: QUARKUS_CXF_LOGGING_SENSITIVE_PROTOCOL_HEADER_NAMES
+Since Quarkus CXF: 2.6.0

+

quarkus.cxf.client."clients".service-interface

string

+

The client service interface class name

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SERVICE_INTERFACE

+

quarkus.cxf.client."clients".alternative

boolean

false

+

Indicates whether this is an alternative proxy client configuration. If true, then this configuration is ignored when +configuring a client without annotation @CXFClient.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__ALTERNATIVE

+

quarkus.cxf.client."clients".native.runtime-initialized

boolean

false

+

If true, the client dynamic proxy class generated by native compiler will be initialized at runtime; otherwise the +proxy class will be initialized at build time.

+
+
+

Setting this to true makes sense if your service endpoint interface references some class initialized at runtime in +its method signatures. E.g. Say, your service interface has method int add(Operands o) and the Operands class was +requested to be initialized at runtime. Then, without setting this configuration parameter to true, the native +compiler will throw an exception saying something like Classes that should be initialized at run time got +initialized during image building: org.acme.Operands …​ jdk.proxy<some-number>.$Proxy<some-number> caused +initialization of this class. jdk.proxy<some-number>.$Proxy<some-number> is the proxy class generated by the +native compiler.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__NATIVE_RUNTIME_INITIALIZED

+

quarkus.cxf.endpoint."endpoints".implementor

string

+

The service endpoint implementation class

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__IMPLEMENTOR

+

quarkus.cxf.endpoint."endpoints".wsdl

string

+

The service endpoint WSDL path

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__WSDL

+

quarkus.cxf.endpoint."endpoints".soap-binding

string

+

The URL of the SOAP Binding, should be one of four values:

+
+
+
    +
  • +

    http://schemas.xmlsoap.org/wsdl/soap/http for SOAP11HTTP_BINDING

    +
  • +
  • +

    http://schemas.xmlsoap.org/wsdl/soap/http?mtom=true for SOAP11HTTP_MTOM_BINDING

    +
  • +
  • +

    http://www.w3.org/2003/05/soap/bindings/HTTP/ for SOAP12HTTP_BINDING

    +
  • +
  • +

    http://www.w3.org/2003/05/soap/bindings/HTTP/?mtom=true for SOAP12HTTP_MTOM_BINDING

    +
  • +
+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SOAP_BINDING

+

quarkus.cxf.endpoint."endpoints".published-endpoint-url

string

+

The published service endpoint URL

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__PUBLISHED_ENDPOINT_URL

+

quarkus.cxf.endpoint."endpoints".logging.enabled

true, false, pretty

+

If true or pretty, the message logging will be enabled; otherwise it will not be enabled. If the value is +pretty (since 2.7.0), the pretty attribute will effectively be set to true. The default is given by +quarkus.cxf.logging.enabled-for.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__LOGGING_ENABLED
+Since Quarkus CXF: 2.6.0

+

quarkus.cxf.endpoint."endpoints".logging.pretty

boolean

+

If true, the XML elements will be indented in the log; otherwise they will appear unindented. The default is given +by quarkus.cxf.logging.pretty

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__LOGGING_PRETTY
+Since Quarkus CXF: 2.6.0

+

quarkus.cxf.endpoint."endpoints".logging.limit

int

+

A message length in bytes at which it is truncated in the log. The default is given by +quarkus.cxf.logging.limit

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__LOGGING_LIMIT
+Since Quarkus CXF: 2.6.0

+

quarkus.cxf.endpoint."endpoints".logging.in-mem-threshold

long

+

A message length in bytes at which it will be written to disk. -1 is unlimited. The default is given by +quarkus.cxf.logging.in-mem-threshold

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__LOGGING_IN_MEM_THRESHOLD
+Since Quarkus CXF: 2.6.0

+

quarkus.cxf.endpoint."endpoints".logging.log-binary

boolean

+

If true, binary payloads will be logged; otherwise they won’t be logged. The default is given by +quarkus.cxf.logging.log-binary

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__LOGGING_LOG_BINARY
+Since Quarkus CXF: 2.6.0

+

quarkus.cxf.endpoint."endpoints".logging.log-multipart

boolean

+

If true, multipart payloads will be logged; otherwise they won’t be logged. The default is given by +quarkus.cxf.logging.log-multipart

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__LOGGING_LOG_MULTIPART
+Since Quarkus CXF: 2.6.0

+

quarkus.cxf.endpoint."endpoints".logging.verbose

boolean

+

If true, verbose logging will be enabled; otherwise it won’t be enabled. The default is given by +quarkus.cxf.logging.verbose

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__LOGGING_VERBOSE
+Since Quarkus CXF: 2.6.0

+

quarkus.cxf.endpoint."endpoints".logging.in-binary-content-media-types

List of string

+

A comma separated list of additional binary media types to add to the default values in the LoggingInInterceptor +whose content will not be logged unless log-binary is true. The default is given by +quarkus.cxf.logging.in-binary-content-media-types

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__LOGGING_IN_BINARY_CONTENT_MEDIA_TYPES
+Since Quarkus CXF: 2.6.0

+

quarkus.cxf.endpoint."endpoints".logging.out-binary-content-media-types

List of string

+

A comma separated list of additional binary media types to add to the default values in the LoggingOutInterceptor +whose content will not be logged unless log-binary is true. The default is given by +quarkus.cxf.logging.out-binary-content-media-types

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__LOGGING_OUT_BINARY_CONTENT_MEDIA_TYPES
+Since Quarkus CXF: 2.6.0

+

quarkus.cxf.endpoint."endpoints".logging.binary-content-media-types

List of string

+

A comma separated list of additional binary media types to add to the default values in the LoggingOutInterceptor +and LoggingInInterceptor whose content will not be logged unless log-binary is true. The default is given by +quarkus.cxf.logging.binary-content-media-types

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__LOGGING_BINARY_CONTENT_MEDIA_TYPES
+Since Quarkus CXF: 2.6.0

+

quarkus.cxf.endpoint."endpoints".logging.sensitive-element-names

List of string

+

A comma separated list of XML elements containing sensitive information to be masked in the log. The default is given +by quarkus.cxf.logging.sensitive-element-names

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__LOGGING_SENSITIVE_ELEMENT_NAMES
+Since Quarkus CXF: 2.6.0

+

quarkus.cxf.endpoint."endpoints".logging.sensitive-protocol-header-names

List of string

+

A comma separated list of protocol headers containing sensitive information to be masked in the log. The default is +given by +quarkus.cxf.logging.sensitive-protocol-header-names

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__LOGGING_SENSITIVE_PROTOCOL_HEADER_NAMES
+Since Quarkus CXF: 2.6.0

+

quarkus.cxf.endpoint."endpoints".features

List of string

+

A comma-separated list of fully qualified CXF Feature class names or named CDI beans.

+
+
+

Examples:

+
+
+
+
quarkus.cxf.endpoint."/hello".features = org.apache.cxf.ext.logging.LoggingFeature
+quarkus.cxf.endpoint."/fruit".features = #myCustomLoggingFeature
+
+
+
+

In the second case, the #myCustomLoggingFeature bean can be produced as follows:

+
+
+
+
import org.apache.cxf.ext.logging.LoggingFeature;
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.Produces;
+
+class Producers {
+
+    @Produces
+    @ApplicationScoped
+    LoggingFeature myCustomLoggingFeature() {
+        LoggingFeature loggingFeature = new LoggingFeature();
+        loggingFeature.setPrettyLogging(true);
+        return loggingFeature;
+    }
+}
+
+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__FEATURES

+

quarkus.cxf.endpoint."endpoints".handlers

List of string

+

The comma-separated list of Handler classes

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__HANDLERS

+

quarkus.cxf.endpoint."endpoints".in-interceptors

List of string

+

The comma-separated list of InInterceptor classes

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__IN_INTERCEPTORS

+

quarkus.cxf.endpoint."endpoints".out-interceptors

List of string

+

The comma-separated list of OutInterceptor classes

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__OUT_INTERCEPTORS

+

quarkus.cxf.endpoint."endpoints".out-fault-interceptors

List of string

+

The comma-separated list of OutFaultInterceptor classes

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__OUT_FAULT_INTERCEPTORS

+

quarkus.cxf.endpoint."endpoints".in-fault-interceptors

List of string

+

The comma-separated list of InFaultInterceptor classes

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__IN_FAULT_INTERCEPTORS

+

quarkus.cxf.endpoint."endpoints".schema-validation.enabled-for

in, request, out, response, both, none

+

Select for which messages XML Schema validation should be enabled. If not specified, no XML Schema validation will be +enforced unless it is enabled by other means, such as @org.apache.cxf.annotations.SchemaValidation or +@org.apache.cxf.annotations.EndpointProperty(key = "schema-validation-enabled", value = "true") annotations.

+
+
+

Environment variable: QUARKUS_CXF_ENDPOINT__ENDPOINTS__SCHEMA_VALIDATION_ENABLED_FOR
+Since Quarkus CXF: 2.7.0

+

quarkus.cxf.client."clients".wsdl

string

+

A URL, resource path or local filesystem path pointing to a WSDL document to use when generating the service proxy of +this client.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__WSDL

+

quarkus.cxf.client."clients".soap-binding

string

+

The URL of the SOAP Binding, should be one of four values:

+
+
+
    +
  • +

    http://schemas.xmlsoap.org/wsdl/soap/http for SOAP11HTTP_BINDING

    +
  • +
  • +

    http://schemas.xmlsoap.org/wsdl/soap/http?mtom=true for SOAP11HTTP_MTOM_BINDING

    +
  • +
  • +

    http://www.w3.org/2003/05/soap/bindings/HTTP/ for SOAP12HTTP_BINDING

    +
  • +
  • +

    http://www.w3.org/2003/05/soap/bindings/HTTP/?mtom=true for SOAP12HTTP_MTOM_BINDING

    +
  • +
+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SOAP_BINDING

+

quarkus.cxf.client."clients".client-endpoint-url

string

+

The client endpoint URL

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__CLIENT_ENDPOINT_URL

+

quarkus.cxf.client."clients".endpoint-namespace

string

+

The client endpoint namespace

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__ENDPOINT_NAMESPACE

+

quarkus.cxf.client."clients".endpoint-name

string

+

The client endpoint name

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__ENDPOINT_NAME

+

quarkus.cxf.client."clients".username

string

+

The username for HTTP Basic authentication

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__USERNAME

+

quarkus.cxf.client."clients".password

string

+

The password for HTTP Basic authentication

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__PASSWORD

+

quarkus.cxf.client."clients".secure-wsdl-access

boolean

false

+

If true, then the Authentication header will be sent preemptively when requesting the WSDL, as long as the username +is set; otherwise the WSDL will be requested anonymously.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SECURE_WSDL_ACCESS
+Since Quarkus CXF: 2.7.0

+

quarkus.cxf.client."clients".logging.enabled

true, false, pretty

+

If true or pretty, the message logging will be enabled; otherwise it will not be enabled. If the value is +pretty (since 2.7.0), the pretty attribute will effectively be set to true. The default is given by +quarkus.cxf.logging.enabled-for.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__LOGGING_ENABLED
+Since Quarkus CXF: 2.6.0

+

quarkus.cxf.client."clients".logging.pretty

boolean

+

If true, the XML elements will be indented in the log; otherwise they will appear unindented. The default is given +by quarkus.cxf.logging.pretty

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__LOGGING_PRETTY
+Since Quarkus CXF: 2.6.0

+

quarkus.cxf.client."clients".logging.limit

int

+

A message length in bytes at which it is truncated in the log. The default is given by +quarkus.cxf.logging.limit

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__LOGGING_LIMIT
+Since Quarkus CXF: 2.6.0

+

quarkus.cxf.client."clients".logging.in-mem-threshold

long

+

A message length in bytes at which it will be written to disk. -1 is unlimited. The default is given by +quarkus.cxf.logging.in-mem-threshold

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__LOGGING_IN_MEM_THRESHOLD
+Since Quarkus CXF: 2.6.0

+

quarkus.cxf.client."clients".logging.log-binary

boolean

+

If true, binary payloads will be logged; otherwise they won’t be logged. The default is given by +quarkus.cxf.logging.log-binary

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__LOGGING_LOG_BINARY
+Since Quarkus CXF: 2.6.0

+

quarkus.cxf.client."clients".logging.log-multipart

boolean

+

If true, multipart payloads will be logged; otherwise they won’t be logged. The default is given by +quarkus.cxf.logging.log-multipart

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__LOGGING_LOG_MULTIPART
+Since Quarkus CXF: 2.6.0

+

quarkus.cxf.client."clients".logging.verbose

boolean

+

If true, verbose logging will be enabled; otherwise it won’t be enabled. The default is given by +quarkus.cxf.logging.verbose

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__LOGGING_VERBOSE
+Since Quarkus CXF: 2.6.0

+

quarkus.cxf.client."clients".logging.in-binary-content-media-types

List of string

+

A comma separated list of additional binary media types to add to the default values in the LoggingInInterceptor +whose content will not be logged unless log-binary is true. The default is given by +quarkus.cxf.logging.in-binary-content-media-types

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__LOGGING_IN_BINARY_CONTENT_MEDIA_TYPES
+Since Quarkus CXF: 2.6.0

+

quarkus.cxf.client."clients".logging.out-binary-content-media-types

List of string

+

A comma separated list of additional binary media types to add to the default values in the LoggingOutInterceptor +whose content will not be logged unless log-binary is true. The default is given by +quarkus.cxf.logging.out-binary-content-media-types

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__LOGGING_OUT_BINARY_CONTENT_MEDIA_TYPES
+Since Quarkus CXF: 2.6.0

+

quarkus.cxf.client."clients".logging.binary-content-media-types

List of string

+

A comma separated list of additional binary media types to add to the default values in the LoggingOutInterceptor +and LoggingInInterceptor whose content will not be logged unless log-binary is true. The default is given by +quarkus.cxf.logging.binary-content-media-types

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__LOGGING_BINARY_CONTENT_MEDIA_TYPES
+Since Quarkus CXF: 2.6.0

+

quarkus.cxf.client."clients".logging.sensitive-element-names

List of string

+

A comma separated list of XML elements containing sensitive information to be masked in the log. The default is given +by quarkus.cxf.logging.sensitive-element-names

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__LOGGING_SENSITIVE_ELEMENT_NAMES
+Since Quarkus CXF: 2.6.0

+

quarkus.cxf.client."clients".logging.sensitive-protocol-header-names

List of string

+

A comma separated list of protocol headers containing sensitive information to be masked in the log. The default is +given by +quarkus.cxf.logging.sensitive-protocol-header-names

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__LOGGING_SENSITIVE_PROTOCOL_HEADER_NAMES
+Since Quarkus CXF: 2.6.0

+

quarkus.cxf.client."clients".features

List of string

+

A comma-separated list of fully qualified CXF Feature class names.

+
+
+

Example:

+
+
+
+
quarkus.cxf.endpoint.myClient.features = org.apache.cxf.ext.logging.LoggingFeature
+
+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__FEATURES

+

quarkus.cxf.client."clients".handlers

List of string

+

The comma-separated list of Handler classes

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__HANDLERS

+

quarkus.cxf.client."clients".in-interceptors

List of string

+

The comma-separated list of InInterceptor classes

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__IN_INTERCEPTORS

+

quarkus.cxf.client."clients".out-interceptors

List of string

+

The comma-separated list of OutInterceptor classes

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__OUT_INTERCEPTORS

+

quarkus.cxf.client."clients".out-fault-interceptors

List of string

+

The comma-separated list of OutFaultInterceptor classes

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__OUT_FAULT_INTERCEPTORS

+

quarkus.cxf.client."clients".in-fault-interceptors

List of string

+

The comma-separated list of InFaultInterceptor classes

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__IN_FAULT_INTERCEPTORS

+

quarkus.cxf.client."clients".connection-timeout

long

30000

+

Specifies the amount of time, in milliseconds, that the consumer will attempt to establish a connection before it times +out. 0 is infinite.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__CONNECTION_TIMEOUT
+Since Quarkus CXF: 2.2.3

+

quarkus.cxf.client."clients".receive-timeout

long

60000

+

Specifies the amount of time, in milliseconds, that the consumer will wait for a response before it times out. 0 is +infinite.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__RECEIVE_TIMEOUT
+Since Quarkus CXF: 2.2.3

+

quarkus.cxf.client."clients".connection-request-timeout

long

60000

+

Specifies the amount of time, in milliseconds, used when requesting a connection from the connection manager(if +appliable). 0 is infinite.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__CONNECTION_REQUEST_TIMEOUT
+Since Quarkus CXF: 2.2.3

+

quarkus.cxf.client."clients".auto-redirect

boolean

false

+

Specifies if the consumer will automatically follow a server issued redirection. (name is not part of standard)

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__AUTO_REDIRECT
+Since Quarkus CXF: 2.2.3

+

quarkus.cxf.client."clients".max-retransmits

int

-1

+

Specifies the maximum amount of retransmits that are allowed for redirects. Retransmits for authorization is included in +the retransmit count. Each redirect may cause another retransmit for a UNAUTHORIZED response code, ie. 401. Any negative +number indicates unlimited retransmits, although, loop protection is provided. The default is unlimited. (name is not +part of standard)

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__MAX_RETRANSMITS
+Since Quarkus CXF: 2.2.3

+

quarkus.cxf.client."clients".allow-chunking

boolean

true

+

If true, the client is free to use chunking streams if it wants, but it is not required to use chunking streams. If +false, the client must use regular, non-chunked requests in all cases.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__ALLOW_CHUNKING
+Since Quarkus CXF: 2.2.3

+

quarkus.cxf.client."clients".chunking-threshold

int

4096

+

If AllowChunking is true, this sets the threshold at which messages start getting chunked. Messages under this limit do +not get chunked.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__CHUNKING_THRESHOLD
+Since Quarkus CXF: 2.2.3

+

quarkus.cxf.client."clients".chunk-length

int

-1

+

Specifies the chunk length for a HttpURLConnection. This value is used in +java.net.HttpURLConnection.setChunkedStreamingMode(int chunklen). chunklen indicates the number of bytes to write in each +chunk. If chunklen is less than or equal to zero, a default value will be used.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__CHUNK_LENGTH
+Since Quarkus CXF: 2.2.3

+

quarkus.cxf.client."clients".accept

string

+

Specifies the MIME types the client is prepared to handle (e.g., HTML, JPEG, GIF, etc.)

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__ACCEPT
+Since Quarkus CXF: 2.2.3

+

quarkus.cxf.client."clients".accept-language

string

+

Specifies the language the client desires (e.g., English, French, etc.)

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__ACCEPT_LANGUAGE

+

quarkus.cxf.client."clients".accept-encoding

string

+

Specifies the encoding the client is prepared to handle (e.g., gzip)

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__ACCEPT_ENCODING
+Since Quarkus CXF: 2.2.3

+

quarkus.cxf.client."clients".content-type

string

+

Specifies the content type of the stream being sent in a post request. (this should be text/xml for web services, or can +be set to application/x-www-form-urlencoded if the client is sending form data).

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__CONTENT_TYPE
+Since Quarkus CXF: 2.2.3

+

quarkus.cxf.client."clients".host

string

+

Specifies the Internet host and port number of the resource on which the request is being invoked. This is sent by +default based upon the URL. Certain DNS scenarios or application designs may request you to set this, but typically it is +not required.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__HOST
+Since Quarkus CXF: 2.2.3

+

quarkus.cxf.client."clients".connection

close, keep-alive

keep-alive

+

The connection disposition. If close the connection to the server is closed after each request/response dialog. If +Keep-Alive the client requests the server to keep the connection open, and if the server honors the keep alive request, +the connection is reused. Many servers and proxies do not honor keep-alive requests.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__CONNECTION
+Since Quarkus CXF: 2.2.3

+

quarkus.cxf.client."clients".cache-control

string

+

Most commonly used to specify no-cache, however the standard supports a dozen or so caching related directives for +requests

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__CACHE_CONTROL
+Since Quarkus CXF: 2.2.3

+

quarkus.cxf.client."clients".version

string

auto

+

HTTP Version used for the connection. The default value auto will use whatever the default is for the HTTPConduit +implementation defined via quarkus.cxf.client.myClient.http-conduit-factory. Other possible values: 1.1, 2.

+
+
+

Some of these values might be unsupported by some HTTPConduit implementations.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__VERSION
+Since Quarkus CXF: 2.2.3

+

quarkus.cxf.client."clients".browser-type

string

+

The value of the User-Agent HTTP header.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__BROWSER_TYPE
+Since Quarkus CXF: 2.2.3

+

quarkus.cxf.client."clients".decoupled-endpoint

string

+

An URI path (starting with /) or a full URI for the receipt of responses over a separate provider → consumer +connection. If the value starts with /, then it is prefixed with the base URI configured via +quarkus.cxf.client.myClient.decoupled-endpoint-base before being used as a value for the WS-Addressing ReplyTo +message header.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__DECOUPLED_ENDPOINT
+Since Quarkus CXF: 2.2.3

+

quarkus.cxf.client."clients".proxy-server

string

+

Specifies the address of proxy server if one is used.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__PROXY_SERVER
+Since Quarkus CXF: 2.2.3

+

quarkus.cxf.client."clients".proxy-server-port

int

+

Specifies the port number used by the proxy server.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__PROXY_SERVER_PORT
+Since Quarkus CXF: 2.2.3

+

quarkus.cxf.client."clients".non-proxy-hosts

string

+

Specifies the list of hostnames that will not use the proxy configuration. Examples:

+
+
+
    +
  • +

    localhost - a single hostname

    +
  • +
  • +

    localhost|www.google.com - two hostnames that will not use the proxy configuration

    +
  • +
  • +

    localhost|www.google.*|*.apache.org - hostname patterns

    +
  • +
+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__NON_PROXY_HOSTS
+Since Quarkus CXF: 2.2.3

+

quarkus.cxf.client."clients".proxy-server-type

http, socks

http

+

Specifies the type of the proxy server. Can be either HTTP or SOCKS.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__PROXY_SERVER_TYPE
+Since Quarkus CXF: 2.2.3

+

quarkus.cxf.client."clients".proxy-username

string

+

Username for the proxy authentication

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__PROXY_USERNAME
+Since Quarkus CXF: 2.2.3

+

quarkus.cxf.client."clients".proxy-password

string

+

Password for the proxy authentication

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__PROXY_PASSWORD
+Since Quarkus CXF: 2.2.3

+

quarkus.cxf.client."clients".http-conduit-factory

QuarkusCXFDefault, CXFDefault, HttpClientHTTPConduitFactory, URLConnectionHTTPConduitFactory

+

Select the HTTPConduitFactory implementation for this client.

+
+
+
    +
  • +

    QuarkusCXFDefault (default): if io.quarkiverse.cxf:quarkus-cxf-rt-transports-http-hc5 is present in class path, +then its HTTPConduitFactory implementation will be used; otherwise this value is equivalent with +URLConnectionHTTPConduitFactory (this may change, once issue +#992 gets resolved in CXF)

    +
  • +
  • +

    CXFDefault: the selection of HTTPConduitFactory implementation is left to CXF

    +
  • +
  • +

    HttpClientHTTPConduitFactory: the HTTPConduitFactory for this client will be set to an implementation always +returning org.apache.cxf.transport.http.HttpClientHTTPConduit. This will use java.net.http.HttpClient as the +underlying HTTP client.

    +
  • +
  • +

    URLConnectionHTTPConduitFactory: the HTTPConduitFactory for this client will be set to an implementation always +returning org.apache.cxf.transport.http.URLConnectionHTTPConduit. This will use java.net.HttpURLConnection as the +underlying HTTP client.

    +
  • +
+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__HTTP_CONDUIT_FACTORY
+Since Quarkus CXF: 2.3.0

+

quarkus.cxf.client."clients".key-store

string

+

The key store location for this client. The resource is first looked up in the classpath, then in the file system.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__KEY_STORE
+Since Quarkus CXF: 3.8.1

+

quarkus.cxf.client."clients".key-store-password

string

+

The key store password

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__KEY_STORE_PASSWORD
+Since Quarkus CXF: 3.8.1

+

quarkus.cxf.client."clients".key-store-type

string

JKS

+

The type of the key store.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__KEY_STORE_TYPE
+Since Quarkus CXF: 3.8.1

+

quarkus.cxf.client."clients".key-password

string

+

The key password.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__KEY_PASSWORD
+Since Quarkus CXF: 3.8.1

+

quarkus.cxf.client."clients".trust-store

string

+

The trust store location for this client. The resource is first looked up in the classpath, then in the file system.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__TRUST_STORE
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".trust-store-password

string

+

The trust store password.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__TRUST_STORE_PASSWORD
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".trust-store-type

string

JKS

+

The type of the trust store.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__TRUST_STORE_TYPE
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".hostname-verifier

string

+

Can be one of the following:

+
+
+
    +
  • +

    One of the well known values: AllowAllHostnameVerifier, HttpsURLConnectionDefaultHostnameVerifier

    +
  • +
  • +

    A fully qualified class name implementing javax.net.ssl.HostnameVerifier to look up in the CDI container.

    +
  • +
  • +

    A bean name prefixed with # that will be looked up in the CDI container; example: #myHostnameVerifier If +not specified, then the creation of the HostnameVerifier is delegated to CXF, which boils down to +org.apache.cxf.transport.https.httpclient.DefaultHostnameVerifier with the default +org.apache.cxf.transport.https.httpclient.PublicSuffixMatcherLoader as returned from +PublicSuffixMatcherLoader.getDefault().

    +
  • +
+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__HOSTNAME_VERIFIER
+Since Quarkus CXF: 2.5.0

+

quarkus.cxf.client."clients".schema-validation.enabled-for

in, request, out, response, both, none

+

Select for which messages XML Schema validation should be enabled. If not specified, no XML Schema validation will be +enforced unless it is enabled by other means, such as @org.apache.cxf.annotations.SchemaValidation or +@org.apache.cxf.annotations.EndpointProperty(key = "schema-validation-enabled", value = "true") annotations.

+
+
+

Environment variable: QUARKUS_CXF_CLIENT__CLIENTS__SCHEMA_VALIDATION_ENABLED_FOR
+Since Quarkus CXF: 2.7.0

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/dev/reference/index.html b/quarkus-cxf/dev/reference/index.html new file mode 100644 index 0000000000..31ad9df1e4 --- /dev/null +++ b/quarkus-cxf/dev/reference/index.html @@ -0,0 +1,1435 @@ + + + + + + Reference :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Reference

+
+

Quarkus CXF

+
+
+

Here is the list of extensions produced by this project. +Please follow the links under the extension names to learn about how to use them, about their configuration and about any known limitations.

+
+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Quarkus CXF extensionSupport levelSinceSupported standards

Quarkus CXF
+quarkus-cxf

Stable

0.1.0

JAX-WS, JAXB, WS-Addressing, WS-Policy, MTOM

Quarkus CXF Metrics Feature
+quarkus-cxf-rt-features-metrics

Stable

0.14.0

Quarkus CXF OpenTelemetry
+quarkus-cxf-integration-tracing-opentelemetry

Stable

2.7.0

Quarkus CXF WS-Security
+quarkus-cxf-rt-ws-security

Stable

0.14.0

WS-Security, WS-SecurityPolicy

Quarkus CXF WS-ReliableMessaging
+quarkus-cxf-rt-ws-rm

Stable

1.5.3

WS-ReliableMessaging

Quarkus CXF Security Token Service (STS)
+quarkus-cxf-services-sts

Stable

1.5.3

WS-Trust

Quarkus CXF HTTP Async Transport
+quarkus-cxf-rt-transports-http-hc5

Stable

1.1.0

Quarkus CXF XJC Plugins
+quarkus-cxf-xjc-plugins

Stable

1.5.11

+
+
+
+

Supported CXF modules

+
+
+

Here is a list of CXF modules supported by Quarkus CXF. +You should typically not depend on these directly, but rather use some of the extensions listed above that brings the given CXF module as a transitive dependency.

+
+
+

Front ends

+
+

Out of CXF front ends only the +JAX-WS front end is fully supported by quarkus-cxf.

+
+
+

The Simple front end may work in JVM mode, but it is not tested properly. +We advise not to use it.

+
+
+
+

Data Bindings

+
+

Out of CXF Data Bindings only the following ones are supported:

+
+ +
+
+

Transports

+
+

Out of CXF Transports only the following ones are supported:

+
+
+ +
+
+
+

Tools

+
+ +
+
+
+

Supported SOAP Bindings

+
+

All CXF WSDL Bindings are supported. +In order to switch to SOAP 1.2 or to add MTOM, set quarkus.cxf.[client|endpoint]."name".soap-binding to one of the following values:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + +
BindingProperty Value

SOAP 1.1 (default)

http://schemas.xmlsoap.org/wsdl/soap/http

SOAP 1.2

http://www.w3.org/2003/05/soap/bindings/HTTP/

SOAP 1.1 with MTOM

http://schemas.xmlsoap.org/wsdl/soap/http?mtom=true

SOAP 1.2 with MTOM

http://www.w3.org/2003/05/soap/bindings/HTTP/?mtom=true

+
+
+
+
+

Unsupported CXF modules

+
+
+

Here is a list of CXF modules currently not supported by Quarkus CXF along with possible alternatives and/or reasons why the given module is not supported.

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CXF moduleAlternative

JAX-RS
+cxf-rt-frontend-jaxrs
+cxf-rt-rs-client

Use Quarkus RESTEasy

Fediz

Use Quarkus OpenID Connect

Aegis

Use JAXB and JAX-WS

DOSGI
+Karaf

JiBX

Use JAXB and JAX-WS

Local transport
+cxf-rt-transports-local

Use HTTP transport

JMS transport
+cxf-rt-transports-jms

Use HTTP transport

JBI
+cxf-rt-transports-jbi
+cxf-rt-bindings-jbi

Deprecated in CXF use HTTP transport

UDP transport
+cxf-rt-transports-udp

Use HTTP transport

Coloc transport

Use HTTP transport

WebSocket transport
+cxf-rt-transports-websocket

Use HTTP transport

Clustering
+cxf-rt-features-clustering

Planned

CORBA +cxf-rt-bindings-corba

Use JAX-WS

SDO databinding
+cxf-rt-databinding-sdo

XMLBeans

Deprecated in CXF

Javascript frontend

Use JAX-WS

JCA transport

Use HTTP transport

WS-Transfer runtime
+cxf-rt-ws-transfer

Throttling
+cxf-rt-features-throttling

Use load balancer

+
+
+
+

Supported CXF annotations

+
+
+

Here is the status of CXF annotations on Quarkus. +Unless stated otherwise, the support is available via io.quarkiverse.cxf:quarkus-cxf.

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AnnotationStatus

@org.apache.cxf.feature.Features

Supported

@org.apache.cxf.interceptor.InInterceptors

Supported

@org.apache.cxf.interceptor.OutInterceptors

Supported

@org.apache.cxf.interceptor.OutFaultInterceptors

Supported

@org.apache.cxf.interceptor.InFaultInterceptors

Supported

@org.apache.cxf.annotations.WSDLDocumentation

Supported

@org.apache.cxf.annotations.WSDLDocumentationCollection

Supported

@org.apache.cxf.annotations.SchemaValidation

Supported

@org.apache.cxf.annotations.DataBinding

Only the default value org.apache.cxf.jaxb.JAXBDataBinding is supported

@org.apache.cxf.ext.logging.Logging

Supported

@org.apache.cxf.annotations.GZIP

Supported

@org.apache.cxf.annotations.FastInfoset

Supported via com.sun.xml.fastinfoset:FastInfoset dependency

@org.apache.cxf.annotations.EndpointProperty

Supported

@org.apache.cxf.annotations.EndpointProperties

Supported

@org.apache.cxf.annotations.Policy

Supported

@org.apache.cxf.annotations.Policies

Supported

@org.apache.cxf.annotations.UseAsyncMethod

Supported

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/dev/release-notes/3.8.0.html b/quarkus-cxf/dev/release-notes/3.8.0.html new file mode 100644 index 0000000000..0a8b1c33d6 --- /dev/null +++ b/quarkus-cxf/dev/release-notes/3.8.0.html @@ -0,0 +1,1121 @@ + + + + + + Quarkus CXF 3.8.0 (LTS) release notes :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus CXF 3.8.0 (LTS) release notes

+
+

Changes in Quarkus

+
+ +
+
+
+

New and noteworthy in Quarkus CXF

+
+
+

Keeping major.minor version in sync with Quarkus

+
+

The most significant change in this release is the increment of major version of Quarkus CXF from 2 to 3 +so that our major.minor matches the major.minor version of Quarkus.

+
+
+

We did this mostly for practical reasons, so that it is easier for everybody to understand which version of Quarkus CXF +is compatible with which version of Quarkus.

+
+
+
+

Logging extension removed from the documentation and code.quarkus.io

+
+

io.quarkiverse.cxf:quarkus-cxf-rt-features-logging is deprecated since Quarkus CXF 2.7.0, +when all its functionality including configuration properties moved to io.quarkiverse.cxf:quarkus-cxf. +In 3.8.0, we stopped mentioning it in the documentation and we removed it from code.quarkus.io. +To keep backwards compatibility, a dummy io.quarkiverse.cxf:quarkus-cxf-rt-features-logging artifact still exists +doing nothing else, but outputting a warning. +You should remove the extension from your projects.

+
+
+
+

Santuario XMLSec extension moved to Quarkus CXF

+
+

Santuario XMLSec extension was originally hosted under a separate project +and published as io.quarkiverse.xmlsec:quarkus-xmlsec. +As Quarkus CXF is the primary user of it, we decided to move it here to simplify the maintenance. +The new Maven coordinates starting with Quarkus CXF 3.8.0 are io.quarkiverse.cxf:quarkus-cxf-santuario-xmlsec.

+
+
+
+

Improved documentation

+
+

The following parts of the documentation were improved:

+
+
+ +
+
+
+
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/dev/release-notes/index.html b/quarkus-cxf/dev/release-notes/index.html new file mode 100644 index 0000000000..4cf3066896 --- /dev/null +++ b/quarkus-cxf/dev/release-notes/index.html @@ -0,0 +1,1038 @@ + + + + + + Release notes :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Release notes

+
+

Release notes documents for major and minor releases are listed in this section.

+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/dev/user-guide/advanced-soap-client-topics.html b/quarkus-cxf/dev/user-guide/advanced-soap-client-topics.html new file mode 100644 index 0000000000..1ecd5530bd --- /dev/null +++ b/quarkus-cxf/dev/user-guide/advanced-soap-client-topics.html @@ -0,0 +1,1167 @@ + + + + + + Advanced SOAP client topics :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Advanced SOAP client topics

+
+

client-endpoint-url defaults

+
+
+

If you omit the client-endpoint-url property in application.properties, +the CXF Quarkus extension will assume that the service is published at http://localhost:8080/{service-path}, +where {service-path} is derived from

+
+
+
    +
  • +

    Configuration property quarkus.cxf.path (if specified); and the

    +
  • +
  • +

    SEI’s class name in lower case

    +
  • +
+
+
+

Given quarkus.cxf.path = /ws, the default effective client-endpoint-url of the CalculatorService would be +http://localhost:8080/ws/org.jboss.eap.quickstarts.wscalculator.calculator.calculatorservice.

+
+
+

If quarkus.cxf.path is not specified, the client-endpoint-url would be just +http://localhost:8080/org.jboss.eap.quickstarts.wscalculator.calculator.calculatorservice.

+
+
+
+
+

Configure multiple clients

+
+
+

In the example above, we configured just a single client called myCalculator. +Of course, you can configure multiple clients pointing at different URLs and/or implementing different SEIs using multiple identifiers:

+
+
+
application.properties
+
+
cxf.it.calculator.baseUri = http://localhost:8082
+quarkus.cxf.client.myCalculator.wsdl = ${cxf.it.calculator.baseUri}/calculator-ws/CalculatorService?wsdl
+quarkus.cxf.client.myCalculator.client-endpoint-url = ${cxf.it.calculator.baseUri}/calculator-ws/CalculatorService
+quarkus.cxf.client.myCalculator.service-interface = org.jboss.eap.quickstarts.wscalculator.calculator.CalculatorService
+
+# another client
+quarkus.cxf.client.anotherCalculator.wsdl = https://acme.com/ws/WeatherService?wsdl
+quarkus.cxf.client.anotherCalculator.client-endpoint-url = https://acme.com/ws/WeatherService
+quarkus.cxf.client.anotherCalculator.service-interface = org.jboss.eap.quickstarts.wscalculator.calculator.CalculatorService
+
+
+
+
+
+

Advanced Client Configurations

+
+
+

To globally configure all clients in your application, you can use the example snippet below to configure the +HttpConduit. +This allows you to set the HTTPClientPolicy, AuthorizationPolicy, ProxyAuthorizationPolicy or even TLSClientParameters for your clients.

+
+
+
+
void onStart(@Observes StartupEvent ev) {
+
+     HTTPConduitConfigurer httpConduitConfigurer = new HTTPConduitConfigurer() {
+         public void configure(String name, String address, HTTPConduit c) {
+             AsyncHTTPConduit conduit = (AsyncHTTPConduit)c;
+             // use setter to configure client
+             conduit.getHttpAsyncClient().getCredentialsProvider().setCredentials( AuthScope.ANY,
+              new NTCredentials( USER,PWD, "", DOM ) );
+             conduit.getClient().setAllowChunking( false );
+             conduit.getClient().setAutoRedirect( true );
+         }
+     };
+
+     final Bus bus = BusFactory.getDefaultBus();
+     bus.setExtension(httpConduitConfigurer, HTTPConduitConfigurer.class);
+}
+
+
+
+
+
+

Pure client applications

+
+
+

Quarkus batch (e.g. periodically scheduled), or command line applications, may do without an HTTP server. +Use the property below to prevent launching the HTTP server at startup:

+
+
+
+
quarkus.http.host-enabled = false
+
+
+
+
+
+

Prevent resource leaks

+
+
+

CXF client proxies implement java.io.Closeable. +Therefore, it is important to call ((Closeable) proxy).close() once the client is not needed anymore +to free all associated system resources, such as threads.

+
+
+

Quarkus CXF takes care for closing the clients injected via @io.quarkiverse.cxf.annotation.CXFClient automatically +as soon as they are disposed by the CDI container.

+
+
+

For client proxies created manually, it is up to you to call ((Closeable) proxy).close():

+
+
+
+
import java.net.URL;
+import javax.xml.namespace.QName;
+import jakarta.xml.ws.Service;
+import java.io.Closeable;
+
+final URL serviceUrl = new URL("http://localhost/myService?wsdl");
+final QName qName = new QName("http://acme.org/myNamespace", "MyService");
+final Service service = jakarta.xml.ws.Service.create(serviceUrl, qName);
+final MyService proxy = service.getPort(MyService.class);
+
+try {
+    proxy.doSomething();
+} finally {
+    ((Closeable) proxy).close();
+}
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/dev/user-guide/auth.html b/quarkus-cxf/dev/user-guide/auth.html new file mode 100644 index 0000000000..9d49794710 --- /dev/null +++ b/quarkus-cxf/dev/user-guide/auth.html @@ -0,0 +1,1176 @@ + + + + + + Authentication and authorization :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Authentication and authorization

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

The sample code snippets shown in this section come from the +Client and server integration test +in the source tree of Quarkus CXF. You may want to use it as a runnable example.

+
+
+
+
+
+
+

Client HTTP basic authentication

+
+
+

Use the following client configuration options provided by +quarkus-cxf extension +to pass the username and password for HTTP basic authentication:

+
+ +
+

Here is an example:

+
+
+
application.properties
+
+
quarkus.cxf.client.basicAuth.wsdl = http://localhost:${quarkus.http.test-port}/soap/basicAuth?wsdl
+quarkus.cxf.client.basicAuth.client-endpoint-url = http://localhost:${quarkus.http.test-port}/soap/basicAuth
+quarkus.cxf.client.basicAuth.username = bob
+quarkus.cxf.client.basicAuth.password = bob234
+
+
+
+

Accessing WSDL protected by basic authentication

+
+

By default, the clients created by Quarkus CXF do not send the Authorization header, +unless you set the quarkus.cxf.client."clients".secure-wsdl-access to true:

+
+
+
application.properties
+
+
quarkus.cxf.client.basicAuthSecureWsdl.wsdl = http://localhost:${quarkus.http.test-port}/soap/basicAuth?wsdl
+quarkus.cxf.client.basicAuthSecureWsdl.client-endpoint-url = http://localhost:${quarkus.http.test-port}/soap/basicAuthSecureWsdl
+quarkus.cxf.client.basicAuthSecureWsdl.username = bob
+quarkus.cxf.client.basicAuthSecureWsdl.password = ${client-server.bob.password}
+quarkus.cxf.client.basicAuthSecureWsdl.secure-wsdl-access = true
+
+
+
+
+
+
+

Securing service endpoints

+
+
+

The server-side authentication and authorization is driven by Quarkus Security, +especially when it comes to

+
+ +
+

There is a basic example in our Client and server integration test. +Its key parts are:

+
+
+
    +
  • +

    io.quarkus:quarkus-elytron-security-properties-file dependency as an Identity provider

    +
  • +
  • +

    Basic authentication enabled and users with their roles configured in application.properties:

    +
    +
    application.properties
    +
    +
    quarkus.http.auth.basic = true
    +quarkus.security.users.embedded.enabled = true
    +quarkus.security.users.embedded.plain-text = true
    +quarkus.security.users.embedded.users.alice = alice123
    +quarkus.security.users.embedded.roles.alice = admin
    +quarkus.security.users.embedded.users.bob = bob234
    +quarkus.security.users.embedded.roles.bob = app-user
    +
    +
    +
  • +
  • +

    Role-based access control enfoced via @RolesAllowed annotation:

    +
  • +
+
+
+
BasicAuthHelloServiceImpl.java
+
+
package io.quarkiverse.cxf.it.auth.basic;
+
+import jakarta.annotation.security.RolesAllowed;
+import jakarta.jws.WebService;
+
+import io.quarkiverse.cxf.it.HelloService;
+
+@WebService(serviceName = "HelloService", targetNamespace = HelloService.NS)
+@RolesAllowed("app-user")
+public class BasicAuthHelloServiceImpl implements HelloService {
+    @Override
+    public String hello(String person) {
+        return "Hello " + person + "!";
+    }
+}
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/dev/user-guide/camel-integration.html b/quarkus-cxf/dev/user-guide/camel-integration.html new file mode 100644 index 0000000000..7e2cb60f05 --- /dev/null +++ b/quarkus-cxf/dev/user-guide/camel-integration.html @@ -0,0 +1,1044 @@ + + + + + + Camel Integration :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Camel Integration

+
+

Camel Quarkus supports CXF since its version 2.12.0. +Under the hood, the implementation is based on Quarkus CXF. +Therefore, all functionality available in Quarkus CXF is also available in Camel Quarkus.

+
+
+

Please refer to Camel Quarkus CXF SOAP extension documentation for further details.

+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/dev/user-guide/common-problems-troubleshooting.html b/quarkus-cxf/dev/user-guide/common-problems-troubleshooting.html new file mode 100644 index 0000000000..655d9f9241 --- /dev/null +++ b/quarkus-cxf/dev/user-guide/common-problems-troubleshooting.html @@ -0,0 +1,1251 @@ + + + + + + Common problems and troubleshooting :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Common problems and troubleshooting

+
+
+
+

Some issues may appear during the development, testing, and native image building process of your quarkus-cxf project; +below are some common ones and how to address them.

+
+
+
+
+

REST and SOAP Endpoints

+
+
+

Sometimes a REST endpoint may be needed in the same project where the Quarkus CXF Extension is used. +The REST endpoint path must be different from the SOAP endpoint path (in order to avoid request +forwarding conflicts between both protocols).

+
+
+

For example, if a WeatherWebService interface is declared in a WSDL, you can +begin by creating the org.acme.cxf.WeatherWebServiceImpl class as follows:

+
+
+
+
package org.acme.cxf;
+
+import ...
+
+@Slf4j
+@WebService(endpointInterface = "org.acme.cxf.WeatherWebService")
+public class WeatherWebServiceImpl implements WeatherWebService {
+
+    @Inject
+    BackEndWeatherService backEndWeatherService;
+
+    private Map<String, DailyTemperature> dailyTempByZipCode = Collections.synchronizedMap(new LinkedHashMap<>());
+
+    public WeatherWebServiceImpl() {
+        this.dailyTempByZipCode.addAll(
+        		this.backEndWeatherService.getDailyForecast(Instant.now()));
+    }
+
+    @Override
+    public DailyTemperature estimationTemperatures(String zipCode) {
+        log.info("Daily estimation temperatures forecast called with '{}' zip code paramter", zipCode);
+        return this.dailyTempByZipCode.get(zipCode);
+    }
+}
+
+
+
+

After that, you would need to specify the root context for your CXF web services, as indicated +in the configuration documentation to split the REST (with RESTEasy for example) +and SOAP routes based on their root context paths.

+
+
+

CXF’s SOAP properties:

+
+
+
+
quarkus.cxf.path=/soap
+quarkus.cxf.endpoint."/weather".implementor=org.acme.cxf.WeatherWebServiceImpl
+
+
+
+

Now, imagine the following RESTEasy endpoint:

+
+
+
+
package org.acme.reasteasy;
+
+import ...
+
+@Slf4j
+@Path("/healthcheck")
+public class HealthCheckResource {
+
+	@Inject
+    BackEndWeatherService backEndWeatherService;
+
+	@GET
+	public Response doHealthCheck() {
+		if(this.backEndWeatherService.isAvailable()) {
+            return Response.ok().build();
+		} else {
+            return Response.status(Response.Status.SERVICE_UNAVAILABLE);
+		}
+	}
+}
+
+
+
+

You can separate your REST endpoint by configuring the REASTEasy path:

+
+
+
+
quarkus.resteasy.path=/rest
+
+
+
+

You should now be able to send requests to both your REST and SOAP endpoints deployed within a single project, at:

+
+ +
+
+
+

Non ASCII Characters

+
+
+

Sometimes the wsdl2java autogenerated Java classes may not be +fully compatible with GraalVM due to non ASCII characters getting included in the code. Similar exceptions to +the below may appear during native image builds.

+
+
+
+
[quarkus-dalkia-ticket-loader-1.0.0-SNAPSHOT-runner:26]      compile: 161 459,15 ms,  8,54 GB
+[quarkus-dalkia-ticket-loader-1.0.0-SNAPSHOT-runner:26]        image: 158 272,73 ms,  8,43 GB
+[quarkus-dalkia-ticket-loader-1.0.0-SNAPSHOT-runner:26]        write:     205,82 ms,  8,43 GB
+Fatal error:com.oracle.svm.core.util.VMError$HostedError: java.lang.RuntimeException: oops : expected ASCII string! com.oracle.svm.reflect.OperationOrderStatusType_CRÉÉ_f151156b0d42ecdbdfb919501d8a86dda8733012_1456.hashCode
+	at com.oracle.svm.core.util.VMError.shouldNotReachHere(VMError.java:72)
+
+
+
+

Below is an example of auto-generated non ASCII characters in a Java class:

+
+
+
+
@XmlType(name = "OperationOrderStatusType")
+@XmlEnum
+public enum OperationOrderStatusType {
+
+    @XmlEnumValue("Cr\u00e9\u00e9")
+    CRÉÉ("Cr\u00e9\u00e9"),
+    @XmlEnumValue("A communiquer")
+    A_COMMUNIQUER("A communiquer"),
+    @XmlEnumValue("En attente de r\u00e9ponse")
+    EN_ATTENTE_DE_RÉPONSE("En attente de r\u00e9ponse"),
+    @XmlEnumValue("Attribu\u00e9")
+    ATTRIBUÉ("Attribu\u00e9"),
+    @XmlEnumValue("Clotur\u00e9")
+    CLOTURÉ("Clotur\u00e9"),
+    @XmlEnumValue("Annul\u00e9")
+    ANNULÉ("Annul\u00e9");
+    private final String value;
+
+    OperationOrderStatusType(String v) {
+        value = v;
+    }
+
+    public String value() {
+        return value;
+    }
+
+    public static OperationOrderStatusType fromValue(String v) {
+        for (OperationOrderStatusType c: OperationOrderStatusType.values()) {
+            if (c.value.equals(v)) {
+                return c;
+            }
+        }
+        throw new IllegalArgumentException(v);
+    }
+}
+
+
+
+

Anything starting with \u will be a problem. Consequently the following refactoring is needed:

+
+
+
+
@XmlType(name = "OperationOrderStatusType")
+@XmlEnum
+public enum OperationOrderStatusType {
+
+    @XmlEnumValue("Créé")
+    CREE("Créé"),
+    @XmlEnumValue("A communiquer")
+    A_COMMUNIQUER("A communiquer"),
+    @XmlEnumValue("En attente de réponse")
+    EN_ATTENTE_DE_REPONSE("En attente de réponse"),
+    @XmlEnumValue("Attribué")
+    ATTRIBUE("Attribué"),
+    @XmlEnumValue("Cloturé")
+    CLOTURE("Cloturé"),
+    @XmlEnumValue("Annulé")
+    ANNULE("Annulé");
+    private final String value;
+
+    OperationOrderStatusType(String v) {
+        value = v;
+    }
+
+    public String value() {
+        return value;
+    }
+
+    public static OperationOrderStatusType fromValue(String v) {
+        for (OperationOrderStatusType c: OperationOrderStatusType.values()) {
+            if (c.value.equals(v)) {
+                return c;
+            }
+        }
+        throw new IllegalArgumentException(v);
+    }
+}
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/dev/user-guide/configuration.html b/quarkus-cxf/dev/user-guide/configuration.html new file mode 100644 index 0000000000..f0a5d52770 --- /dev/null +++ b/quarkus-cxf/dev/user-guide/configuration.html @@ -0,0 +1,1128 @@ + + + + + + Configuration :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Configuration

+
+
+
+

Quarkus CXF exposes a large number of configuration options. +Each extension documents its options at the bottom of its reference page.

+
+
+

The configuration options can be set in application.properties file or via environment variables - see +Quarkus configuration reference for details.

+
+
+
+
+

Bean references

+
+
+

Several configuration options of Quarkus CXF allow referring to beans present in Quarkus CDI container. +Features and interceptors are typical examples of those.

+
+
+

There are two ways how to set a bean reference in the configuration: by type or by bean name.

+
+
+

Bean reference by type

+
+

Here is an example:

+
+
+
application.properties
+
+
# bean reference by type
+quarkus.cxf.endpoint."/hello".features = org.apache.cxf.ext.logging.LoggingFeature
+
+
+
+

When using a reference by type name, the resolution proceeds as follows:

+
+
+
    +
  • +

    Fist the bean is looked up in Quarkus CDI container by type.

    +
  • +
  • +

    If the bean is available, it is used.

    +
  • +
  • +

    If multiple beans assignable to the given type, then an exception is thrown.

    +
  • +
  • +

    If no matching bean is available, then the class is loaded and an attempt is performed to instantiate it using its default constructor.

    +
  • +
+
+
+
+

Bean reference by bean name

+
+

Here is an example:

+
+
+
application.properties
+
+
# bean reference by bean name
+quarkus.cxf.endpoint."/fruit".features = #myCustomLoggingFeature
+
+
+
+

When using a reference by bean name, then unsurprisingly, the bean is looked up in Quarkus CDI container by name. +A named bean called myCustomLoggingFeature can be defined as follows:

+
+
+
+
import org.apache.cxf.ext.logging.LoggingFeature;
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.Produces;
+
+class Producers {
+
+    @Produces
+    @ApplicationScoped
+    @Named("myCustomLoggingFeature")
+    LoggingFeature myCustomLoggingFeature() {
+        LoggingFeature loggingFeature = new LoggingFeature();
+        loggingFeature.setPrettyLogging(true);
+        return loggingFeature;
+    }
+}
+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/dev/user-guide/contract-first-code-first.html b/quarkus-cxf/dev/user-guide/contract-first-code-first.html new file mode 100644 index 0000000000..088bb49748 --- /dev/null +++ b/quarkus-cxf/dev/user-guide/contract-first-code-first.html @@ -0,0 +1,1113 @@ + + + + + + Contract first and code first approaches :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Contract first and code first approaches

+
+
+
+

Both contract first and code first development modes are fully supported by Quarkus CXF.

+
+
+
+
+

Contract first client

+
+
+

A SOAP service is described by WSDL. +It is a contract defining operations, their parameters and return values, etc. +WSDL is rich enough to be used for generating the code of a complete client. +CXF provides the wsdl2java utility for that.

+
+
+

Quarkus CXF wraps wsdl2java in the quarkus-cxf extension so you do not need to use it directly.

+
+
+

Follow the Generate the Model classes from WSDL section of the user guide +for more details about how to use it.

+
+
+

You may also want to check the CXF Developing a Consumer as a general introduction.

+
+
+
+
+

Contract first service

+
+
+

When implementing a service the generation of Java code from WSDL +may also come in handy. +wsdl2java can generate the model classes (with JAXB annotations) +and service interfaces (with JAX-WS annotations) for you. +Your task is then to provide implementations for those interfaces.

+
+
+

You may want to check the WSDL First Service Development +section of CXF documentation for a better understanding of the underlying concepts.

+
+
+
+
+

Code first service

+
+
+

Another valid option at your disposal is to write your service in Java, using JAX-WS and JAXB. +Then you have two options how to obtain the WSDL contract:

+
+
+
    +
  1. +

    Start your service and point your clients at http://your-host/your-service?wsdl

    +
  2. +
  3. +

    Generate the WSDL document from Java classes at build time

    +
  4. +
+
+
+ + + + + +
+ + +
+

Check the Code first development section of CXF documentation for further information.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/dev/user-guide/create-project.html b/quarkus-cxf/dev/user-guide/create-project.html new file mode 100644 index 0000000000..685c73e3b9 --- /dev/null +++ b/quarkus-cxf/dev/user-guide/create-project.html @@ -0,0 +1,1159 @@ + + + + + + Create a new project :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Create a new project

+
+
+
+

This guide explains how to set up a new project for a Quarkus application hosting a CXF client or server or both.

+
+
+
+
+

Prerequisites

+
+
+

Read the Prerequisites section of Quarkus getting started guide.

+
+
+

In addition to that, you may need

+
+
+
    +
  • +

    GraalVM with the native-image command installed and the GRAALVM_HOME environment variable set. +See Building a native executable section of the Quarkus +documentation.

    +
  • +
  • +

    If you are on Linux, a container runtime like docker is sufficient for the native mode too. +Use -Pnative -Dquarkus.native.container-build=true instead of -Pnative if you choose this option.

    +
  • +
+
+
+
+
+

Create project

+
+
+

New project skeletons can be generated using code.quarkus.io.

+
+
+
+https://code.quarkus.io +
+
+
+
    +
  • +

    Here you can select the extensions that you want to work with.

    +
  • +
  • +

    For a simple Hello world Web service or client the quarkus-cxf extension is enough.

    +
  • +
  • +

    Click the blue Generate your application button to download a basic skeleton project.

    +
  • +
  • +

    Unpack the zip file and import the project the into your favorite IDE.

    +
  • +
+
+
+
+
+

Dependency management

+
+
+

Quarkus CXF is a part of Quarkus Platform since Quarkus Platform version 3.1.0.Final. +Among other things, this means that code.quarkus.io +and other Quarkus development tools generate projects with proper dependency management:

+
+
+
+
<project ...>
+  ...
+  <properties>
+    ...
+    <quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id>
+    <quarkus.platform.group-id>io.quarkus.platform</quarkus.platform.group-id>
+    <quarkus.platform.version><!-- Check the latest https://repo1.maven.org/maven2/io/quarkus/platform/quarkus-cxf-bom/ --></quarkus.platform.version>
+  </properties>
+  <dependencyManagement>
+    <dependencies>
+      <dependency>
+        <groupId>${quarkus.platform.group-id}</groupId>
+        <artifactId>${quarkus.platform.artifact-id}</artifactId>
+        <version>${quarkus.platform.version}</version>
+        <type>pom</type>
+        <scope>import</scope>
+      </dependency>
+      <dependency>
+        <groupId>${quarkus.platform.group-id}</groupId>
+        <artifactId>quarkus-cxf-bom</artifactId>
+        <version>${quarkus.platform.version}</version>
+        <type>pom</type>
+        <scope>import</scope>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
+...
+
+
+
+

You should always take care to import the same version of io.quarkus.platform:quarkus-bom and io.quarkus.platform:quarkus-cxf-bom into your project. +That’s the most reliable way to get compatible versions of Quarkus, CXF, Quarkus CXF and all their transitive dependencies.

+
+
+
+
+

Where to go next

+
+
+

We recommend to proceed with any of the following chapters:

+
+ +
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/dev/user-guide/cxf-interceptors-and-features.html b/quarkus-cxf/dev/user-guide/cxf-interceptors-and-features.html new file mode 100644 index 0000000000..74530f4668 --- /dev/null +++ b/quarkus-cxf/dev/user-guide/cxf-interceptors-and-features.html @@ -0,0 +1,1091 @@ + + + + + + CXF Interceptors and Features :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

CXF Interceptors and Features

+
+

CXF interceptors and CXF features can be added to both your client or server using either annotations or application.properties configurations.

+
+
+

While CXF provides a number of out of the box embedded interceptors and features, you can also integrate your custom developed implementations.

+
+
+

Annotations can be used on either the service interface or implementor classes.

+
+
+
+
@org.apache.cxf.feature.Features (features = {"org.apache.cxf.ext.logging.LoggingFeature"})
+@org.apache.cxf.interceptor.InInterceptors (interceptors = {"org.acme.Test1Interceptor" })
+@org.apache.cxf.interceptor.InFaultInterceptors (interceptors = {"org.acme.Test2Interceptor" })
+@org.apache.cxf.interceptor.OutInterceptors (interceptors = {"org.acme.Test1Interceptor" })
+@org.apache.cxf.interceptor.InFaultInterceptors (interceptors = {"org.acme.Test2Interceptor","org.acme.Test3Intercetpor" })
+@WebService(endpointInterface = "org.acme.SayHi", targetNamespace = "uri:org.acme")
+public class SayHiImplementation implements SayHi {
+   public long sayHi(long arg) {
+       return arg;
+   }
+   //...
+}
+
+
+
+

You may also define your configurations in the application.properties file.

+
+
+
+
quarkus.cxf.endpoint."/greeting-service".features=org.apache.cxf.ext.logging.LoggingFeature
+quarkus.cxf.endpoint."/greeting-service".in-interceptors=org.acme.Test1Interceptor
+quarkus.cxf.endpoint."/greeting-service".out-interceptors=org.acme.Test1Interceptor
+quarkus.cxf.endpoint."/greeting-service".in-fault-interceptors=org.acme.Test2Interceptor,org.acme.Test3Intercetpor
+quarkus.cxf.endpoint."/greeting-service".out-fault-interceptors=org.acme.Test1Intercetpor
+
+
+
+ + + + + +
+ + +
Class loading
+
+

Both feature and interceptor classes are loaded via CDI first..

+
+
+

If no CDI beans are available, the constructor without parameters will be invoked to instantiate each class.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/dev/user-guide/examples.html b/quarkus-cxf/dev/user-guide/examples.html new file mode 100644 index 0000000000..ac2e516544 --- /dev/null +++ b/quarkus-cxf/dev/user-guide/examples.html @@ -0,0 +1,1040 @@ + + + + + + Examples :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Examples

+
+

The integration-tests folder of the codebase provides various examples +that demonstrate how to use this extension extensively.

+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/dev/user-guide/first-soap-client.html b/quarkus-cxf/dev/user-guide/first-soap-client.html new file mode 100644 index 0000000000..ebe08741d6 --- /dev/null +++ b/quarkus-cxf/dev/user-guide/first-soap-client.html @@ -0,0 +1,1326 @@ + + + + + + Your first SOAP Client on Quarkus :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Your first SOAP Client on Quarkus

+
+
+
+

In this guide we explain how to create a simple Quarkus application acting as a client of a remote Web service.

+
+
+ + + + + +
+ + +
Create project first
+
+

Follow the Project creation guide before proceeding here.

+
+
+
+
+
+
+

Remote Web service for testing

+
+
+

First, we need some remote Web service to connect to. +We can use a simple Calculator Web service running in a container for that purpose.

+
+
+
+
$ docker run -p 8082:8080 quay.io/l2x6/calculator-ws:1.0
+
+
+
+

Once the container is up and running, we can inspect its WSDL

+
+
+
+
$ curl -s http://localhost:8082/calculator-ws/CalculatorService?wsdl
+<?xml version="1.0" ?>
+<wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://www.jboss.org/eap/quickstarts/wscalculator/Calculator" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" name="CalculatorService" targetNamespace="http://www.jboss.org/eap/quickstarts/wscalculator/Calculator">
+
+  ...
+
+  <wsdl:binding name="CalculatorServiceSoapBinding" type="tns:CalculatorService">
+    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"></soap:binding>
+    <wsdl:operation name="add">
+      <soap:operation soapAction="" style="document"></soap:operation>
+      <wsdl:input name="add">
+        <soap:body use="literal"></soap:body>
+      </wsdl:input>
+      <wsdl:output name="addResponse">
+        <soap:body use="literal"></soap:body>
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="subtract">
+      <soap:operation soapAction="" style="document"></soap:operation>
+      <wsdl:input name="subtract">
+        <soap:body use="literal"></soap:body>
+      </wsdl:input>
+      <wsdl:output name="subtractResponse">
+        <soap:body use="literal"></soap:body>
+      </wsdl:output>
+    </wsdl:operation>
+
+    ...
+
+  </wsdl:binding>
+
+  ...
+
+</wsdl:definitions>
+
+
+
+

As you can see in the WSDL, the service offers some basic arithmetic operations, such as add, subtract, etc.

+
+
+

Let’s test it with curl:

+
+
+
+
$ curl -s \
+    -X POST \
+    -H "Content-Type: text/xml;charset=UTF-8" \
+    -d \
+        '<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
+            <Body>
+                <add xmlns="http://www.jboss.org/eap/quickstarts/wscalculator/Calculator">
+                    <arg0 xmlns="">7</arg0> (1)
+                    <arg1 xmlns="">4</arg1>
+                </add>
+            </Body>
+        </Envelope>' \
+    http://localhost:8082/calculator-ws/CalculatorService
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
+  <soap:Body>
+    <ns2:addResponse xmlns:ns2="http://www.jboss.org/eap/quickstarts/wscalculator/Calculator">
+      <return>11</return> (2)
+    </ns2:addResponse>
+  </soap:Body>
+</soap:Envelope>
+
+
+
+ + + + + + + + + +
1The request to add 7 and 4
211 - return value of the operation
+
+
+
+
+

SOAP client

+
+
+

Now let’s have a look how we can get the client inside a Quarkus application.

+
+
+

First, we need the Service Endpoint Interface (SEI) and all other model classes it requires.

+
+
+

There are several ways to get them:

+
+
+
    +
  • +

    Write by hand

    +
  • +
  • +

    Copy from the Web Sevice project, if it is written in Java

    +
  • +
  • +

    Have a Maven artifact containing the model classes, perhaps it is offered by the Service project

    +
  • +
  • +

    Generate the model classes from WSDL

    +
  • +
+
+
+

The last option tends to be the easiest and most flexible for client applications.

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

If you want to use this approach, first follow the Generate Java from WSDL section and then continue with the next steps.

+
+
+
+
+
+
+

Using SEI as a client

+
+
+

In our case, the Service Endpoint Interface (SEI) is org.jboss.eap.quickstarts.wscalculator.calculator.CalculatorService.

+
+
+

As usual on Quarkus, we can obtain an instance of it via CDI.

+
+
+

To make it testable easily, we’ll wrap it in a REST service:

+
+
+
CxfClientResource.java
+
+
package io.quarkiverse.cxf.client.it;
+
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.QueryParam;
+import jakarta.ws.rs.core.MediaType;
+
+import org.jboss.eap.quickstarts.wscalculator.calculator.CalculatorService;
+
+import io.quarkiverse.cxf.annotation.CXFClient;
+
+@Path("/cxf/calculator-client")
+public class CxfClientRestResource {
+
+    @CXFClient("myCalculator") (1)
+    CalculatorService myCalculator;
+
+    @GET
+    @Path("/add")
+    @Produces(MediaType.TEXT_PLAIN)
+    public int add(@QueryParam("a") int a, @QueryParam("b") int b) {
+        return myCalculator.add(a, b); (2)
+    }
+
+}
+
+
+
+ + + + + + + + + +
1Let the CDI container inject an instance of the client. @CXFClient("myCalculator") is actually equivalent to @Inject @CXFClient("myCalculator")
2Invoke the add operation thus calling the remote Web service
+
+
+

Is this all we need for the client to work? +- No, in addition to the above, we need to tell a few other things to the CXF Quarkus extension in application.properties:

+
+
+
application.properties
+
+
cxf.it.calculator.baseUri=http://localhost:8082
+quarkus.cxf.client.myCalculator.wsdl = ${cxf.it.calculator.baseUri}/calculator-ws/CalculatorService?wsdl
+quarkus.cxf.client.myCalculator.client-endpoint-url = ${cxf.it.calculator.baseUri}/calculator-ws/CalculatorService
+quarkus.cxf.client.myCalculator.service-interface = org.jboss.eap.quickstarts.wscalculator.calculator.CalculatorService
+
+
+
+ + + + + +
+ + +
+

All client configuration properties are documented in the Configuration properties reference.

+
+
+
+
+

With all the above files in place, we should be able to start the application in Quarkus dev mode

+
+
+
+
$ mvn quarkus:dev
+...
+INFO  [io.quarkus] (Quarkus Main Thread) ... Listening on: http://localhost:8080
+
+
+
+

and test it by sending some requests to it:

+
+
+
+
$ curl -s 'http://localhost:8080/cxf/calculator-client/add?a=5&b=6'
+11
+
+
+
+

where 11 is the correct result of adding 5 and 6.

+
+
+
+
+

Further steps

+
+
+

You may want to proceed with

+
+ +
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/dev/user-guide/first-soap-web-service.html b/quarkus-cxf/dev/user-guide/first-soap-web-service.html new file mode 100644 index 0000000000..7d8e7bfd87 --- /dev/null +++ b/quarkus-cxf/dev/user-guide/first-soap-web-service.html @@ -0,0 +1,1337 @@ + + + + + + Your first SOAP Web service on Quarkus :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Your first SOAP Web service on Quarkus

+
+
+
+

In this guide we explain how to create a Quarkus application exposing a simple SOAP Web service.

+
+
+ + + + + +
+ + +
Create project first
+
+

Follow the Project creation guide before proceeding here.

+
+
+
+
+
+
+

Hello world! Web service

+
+
+

Having the pom.xml in place, you can add a simple Hello world! Web service in src/main/java.

+
+
+ + + + + +
+ + +
Code examples
+
+

The sample code snippets used in this section come from the +server integration test +in the source tree of Quarkus CXF

+
+
+
+
+

First add the service interface:

+
+
+
HelloService.java
+
+
package io.quarkiverse.cxf.it.server;
+
+import jakarta.jws.WebMethod;
+import jakarta.jws.WebService;
+
+/**
+ * The simplest Hello service.
+ */
+@WebService(name = "HelloService", serviceName = "HelloService")
+public interface HelloService {
+
+    @WebMethod
+    String hello(String text);
+
+}
+
+
+
+

and then the implementation:

+
+
+
HelloServiceImpl.java
+
+
package io.quarkiverse.cxf.it.server;
+
+import jakarta.jws.WebMethod;
+import jakarta.jws.WebService;
+
+/**
+ * The simplest Hello service implementation.
+ */
+@WebService(serviceName = "HelloService")
+public class HelloServiceImpl implements HelloService {
+
+    @WebMethod
+    @Override
+    public String hello(String text) {
+        return "Hello " + text + "!";
+    }
+
+}
+
+
+
+

For the implementation to get exposed under a certain path, you need to add the following configuration to application.properties:

+
+
+
+
# The context path under which all services will be available
+quarkus.cxf.path = /soap
+
+# Publish "HelloService" under the context path /${quarkus.cxf.path}/hello
+quarkus.cxf.endpoint."/hello".implementor = io.quarkiverse.cxf.it.server.HelloServiceImpl
+quarkus.cxf.endpoint."/hello".features = org.apache.cxf.ext.logging.LoggingFeature
+
+
+
+ + + + + +
+ + +
+

All configuration properties are documented in the Configuration properties reference.

+
+
+
+
+

With these files in place, you can start Quarkus in dev mode:

+
+
+
+
$ mvn quarkus:dev
+
+
+
+

This will compile the project and start the application on the background.

+
+
+

You can test the service using curl or some other SOAP client.

+
+
+

First let’s have a look at the auto-generated WSDL under http://localhost:8080/soap/hello?wsdl:

+
+
+
+
$ curl http://localhost:8080/soap/hello?wsdl
+<?xml version='1.0' encoding='UTF-8'?>
+<wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://server.it.cxf.quarkiverse.io/"
+    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http"
+    name="HelloService" targetNamespace="http://server.it.cxf.quarkiverse.io/">
+  <wsdl:types>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://server.it.cxf.quarkiverse.io/" attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="http://server.it.cxf.quarkiverse.io/">
+  <xsd:element name="hello" type="tns:hello"/>
+  <xsd:complexType name="hello">
+    <xsd:sequence>
+      <xsd:element minOccurs="0" name="arg0" type="xsd:string"/>
+    </xsd:sequence>
+  </xsd:complexType>
+  <xsd:element name="helloResponse" type="tns:helloResponse"/>
+  <xsd:complexType name="helloResponse">
+    <xsd:sequence>
+      <xsd:element minOccurs="0" name="return" type="xsd:string"/>
+    </xsd:sequence>
+  </xsd:complexType>
+</xsd:schema>
+  </wsdl:types>
+  <wsdl:message name="helloResponse">
+    <wsdl:part element="tns:helloResponse" name="parameters">
+    </wsdl:part>
+  </wsdl:message>
+  <wsdl:message name="hello">
+    <wsdl:part element="tns:hello" name="parameters">
+    </wsdl:part>
+  </wsdl:message>
+  <wsdl:portType name="HelloService">
+    <wsdl:operation name="hello">
+      <wsdl:input message="tns:hello" name="hello">
+    </wsdl:input>
+      <wsdl:output message="tns:helloResponse" name="helloResponse">
+    </wsdl:output>
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding name="HelloServiceSoapBinding" type="tns:HelloService">
+    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
+    <wsdl:operation name="hello">
+      <soap:operation soapAction="" style="document"/>
+      <wsdl:input name="hello">
+        <soap:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output name="helloResponse">
+        <soap:body use="literal"/>
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:service name="HelloService">
+    <wsdl:port binding="tns:HelloServiceSoapBinding" name="HelloServicePort">
+      <soap:address location="http://localhost:8080/soap/hello"/>
+    </wsdl:port>
+  </wsdl:service>
+</wsdl:definitions>
+
+
+
+

Second, let’s send a SOAP request to the service:

+
+
+
+
$ curl -v -X POST -H "Content-Type: text/xml;charset=UTF-8" \
+    -d \
+      '<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
+        <soap:Body><ns2:hello xmlns:ns2="http://server.it.cxf.quarkiverse.io/"><arg0>World</arg0></ns2:hello></soap:Body>
+       </soap:Envelope>' \
+    http://localhost:8080/soap/hello
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
+  <soap:Body>
+    <ns1:helloResponse xmlns:ns1="http://server.it.cxf.quarkiverse.io/">
+      <return>Hello World!</return>
+    </ns1:helloResponse>
+  </soap:Body>
+</soap:Envelope>
+
+
+
+

You can see the expected <return>Hello World!</return> in the SOAP response.

+
+
+
+
+

Add the logging feature while dev mode is running

+
+
+

Sometimes it may come in handy to be able to inspect the SOAP messages received or sent by the server or client. +This is easily doable by adding the quarkus-cxf-rt-features-logging extension to pom.xml.

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

Try to do that while Quarkus dev mode is running. +You should see the application being recompiled and redeployed upon saving your changes in the source tree.

+
+
+
+
+
Add this to pom.xml
+
+
<dependency>
+    <groupId>io.quarkiverse.cxf</groupId>
+    <artifactId>quarkus-cxf-rt-features-logging</artifactId>
+</dependency>
+
+
+
+
Enable SOAP payload logging in application.properties
+
+
quarkus.cxf.endpoint."/hello".features=org.apache.cxf.ext.logging.LoggingFeature
+
+
+
+

After that you can send a new SOAP request and see some SOAP payloads in the application console:

+
+
+
+
2023-01-11 22:12:21,315 INFO  [org.apa.cxf.ser.Hel.REQ_IN] (vert.x-worker-thread-0) REQ_IN
+    Address: http://localhost:8080/soap/hello
+    HttpMethod: POST
+    Content-Type: text/xml;charset=UTF-8
+    ExchangeId: af10747a-8477-4c17-bf5f-2a4a3a95d61c
+    ServiceName: HelloService
+    PortName: HelloServicePort
+    PortTypeName: HelloService
+    Headers: {Accept=*/*, User-Agent=curl/7.79.1, content-type=text/xml;charset=UTF-8, Host=localhost:8080, Content-Length=203, x-quarkus-hot-deployment-done=true}
+    Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
+  <soap:Body><ns2:hello xmlns:ns2="http://server.it.cxf.quarkiverse.io/"><arg0>World</arg0></ns2:hello></soap:Body>
+</soap:Envelope>
+
+
+2023-01-11 22:12:21,327 INFO  [org.apa.cxf.ser.Hel.RESP_OUT] (vert.x-worker-thread-0) RESP_OUT
+    Address: http://localhost:8080/soap/hello
+    Content-Type: text/xml
+    ResponseCode: 200
+    ExchangeId: af10747a-8477-4c17-bf5f-2a4a3a95d61c
+    ServiceName: HelloService
+    PortName: HelloServicePort
+    PortTypeName: HelloService
+    Headers: {}
+    Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns1:helloResponse xmlns:ns1="http://server.it.cxf.quarkiverse.io/"><return>Hello World!</return></ns1:helloResponse></soap:Body></soap:Envelope>
+
+
+
+
+
+

Further steps

+ +
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/dev/user-guide/generate-java-from-wsdl.html b/quarkus-cxf/dev/user-guide/generate-java-from-wsdl.html new file mode 100644 index 0000000000..d65d58d79f --- /dev/null +++ b/quarkus-cxf/dev/user-guide/generate-java-from-wsdl.html @@ -0,0 +1,1155 @@ + + + + + + Generate the Model classes from WSDL :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Generate the Model classes from WSDL

+
+

quarkus-cxf extension supports generating Java classes from WSDL during Quarkus code generation phase.

+
+
+ + + + + +
+ + +
Code examples
+
+

The code snippets shown in this section come from the +client integration test +in the source tree of Quarkus CXF. +You may want to check it as an executable example.

+
+
+
+
+

You need to set up a couple of things for CXF code generation to work:

+
+
+
    +
  • +

    Have io.quarkiverse.cxf:quarkus-cxf dependency in your project

    +
  • +
  • +

    For Maven projects, the generate-code goal needs to be present in the configuration of quarkus-maven-plugin:

    +
    +
    pom.xml
    +
    +
                <plugin>
    +                <groupId>io.quarkus</groupId>
    +                <artifactId>quarkus-maven-plugin</artifactId>
    +                <executions>
    +                    <execution>
    +                        <goals>
    +                            <goal>build</goal>
    +                            <goal>generate-code</goal>
    +                        </goals>
    +                    </execution>
    +                </executions>
    +            </plugin>
    +
    +
    +
  • +
  • +

    For Gradle projects no additional configurarion of io.quarkus plugin is needed

    +
  • +
  • +

    Put your WSDL files under src/main/resources or src/test/resources or any subdirectory thereof.

    +
  • +
  • +

    Your WSDL file names must end with .wsdl

    +
  • +
  • +

    Set quarkus.cxf.codegen.wsdl2java.includes +configuration property +to a pattern matching the WSDL files you wish to process. +If you want to process all WSDL files under src/main/resources/wsdl or src/test/resources/wsdl, set it as follows:

    +
    +
    application.properties
    +
    +
    quarkus.cxf.codegen.wsdl2java.includes = wsdl/*.wsdl
    +
    +
    +
  • +
+
+
+

This will generate Java classes in target/generated-sources/wsdl2java or +target/generated-test-sources/wsdl2java directory. +They will be automatically picked by the compiler plugin there. +Hence we are free to refer to them from our application or test code.

+
+
+

Note that quarkus-cxf code generation uses the wsdl2Java utility +from CXF under the hood. wsdl2Java is called separately for each WSDL file selected by includes and excludes.

+
+
+

Passing custom parameters to wsdl2java is possible through +quarkus.cxf.codegen.wsdl2java.additional-params +configuration parameter.

+
+
+

If you need different additional-params for each WSDL file, you may want to define a separate named parameter set for +each one of them. Here is an example:

+
+
+
application.properties
+
+
# Parameters for foo.wsdl
+quarkus.cxf.codegen.wsdl2java.foo-params.includes = wsdl/foo.wsdl
+quarkus.cxf.codegen.wsdl2java.foo-params.wsdl-location = wsdl/foo.wsdl
+# Parameters for bar.wsdl
+quarkus.cxf.codegen.wsdl2java.bar-params.includes = wsdl/bar.wsdl
+quarkus.cxf.codegen.wsdl2java.bar-params.wsdl-location = wsdl/bar.wsdl
+quarkus.cxf.codegen.wsdl2java.bar-params.xjc = ts
+
+
+
+ + + + + +
+ + +
+

Add io.quarkiverse.cxf:quarkus-cxf-xjc-plugins dependency to your project to be able to use +-xjc-Xbg, -xjc-Xdv, -xjc-Xjavadoc, -xjc-Xproperty-listener, -xjc-Xts and -xjc-Xwsdlextension +wsdl2java parameters.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/dev/user-guide/generate-wsdl-from-java.html b/quarkus-cxf/dev/user-guide/generate-wsdl-from-java.html new file mode 100644 index 0000000000..669433e3dc --- /dev/null +++ b/quarkus-cxf/dev/user-guide/generate-wsdl-from-java.html @@ -0,0 +1,1130 @@ + + + + + + Generate WSDL document from Java :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Generate WSDL document from Java

+
+
+
+

If the WSDL served by your service at http://your-host/your-service?wsdl is not enough +because you e.g. want to distribute it as a Maven artifact, +then you can use java2ws to generate the WSDL document at build time.

+
+
+

You do not need to invoke the java2ws tool provided by CXF directly, +neither you have to use the cxf-java2ws-plugin.

+
+
+

quarkus-cxf wraps java2ws and so you can configure it in application.properties +as any other aspect of your application.

+
+
+

Here is an example:

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

The sample code snippets used in this section come from the +server integration test +in the source tree of Quarkus CXF

+
+
+
+
+
application.properties
+
+
quarkus.cxf.java2ws.includes = io.quarkiverse.cxf.it.server.HelloService,io.quarkiverse.cxf.it.server.FaultyHelloService
+quarkus.cxf.java2ws.wsdl-name-template = %TARGET_DIR%/Java2wsTest/%SIMPLE_CLASS_NAME%-from-java2ws.wsdl
+
+
+
+

Here we have instructed java2ws to generate WSDLs for two interfaces, +namely HelloService and FaultyHelloService.

+
+
+ + + + + +
+ + +
Annotations
+
+

Note that the Service interfaces must be annotated with jakarta.xml.ws.WebService to be selected for java2ws processing.

+
+
+
+
+

The two generated WSDL documents will be stored as target/Java2wsTest/FaultyHelloService-from-java2ws.wsdl +and target/Java2wsTest/HelloService-from-java2ws.wsdl respectively.

+
+
+ + + + + +
+ + +Unlike wsdl2java which is executed within Quarkus source generation phase, + java2ws is a part Quarkus augmentation that happens after compilation. + The input of java2ws are, after all, Java class files. + Hence you do not need to add <goal>generate-code</goal> to quarkus-maven-plugin + for java2ws. +
+
+
+
+
+

See also

+
+
+ +
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/dev/user-guide/index.html b/quarkus-cxf/dev/user-guide/index.html new file mode 100644 index 0000000000..48878a157f --- /dev/null +++ b/quarkus-cxf/dev/user-guide/index.html @@ -0,0 +1,1054 @@ + + + + + + User guide :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ + +
+
+
+ + + + + + + diff --git a/quarkus-cxf/dev/user-guide/jax-ws-handlers.html b/quarkus-cxf/dev/user-guide/jax-ws-handlers.html new file mode 100644 index 0000000000..85b499f8a6 --- /dev/null +++ b/quarkus-cxf/dev/user-guide/jax-ws-handlers.html @@ -0,0 +1,1087 @@ + + + + + + JAX-WS Handlers :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

JAX-WS Handlers

+
+

As an alternative to the @HandlerChain annotation, +JAX-WS Handlers can be added +to both your client or server via application.properties:

+
+
+
application.properties
+
+
# A web service endpoint with multiple Handler classes
+quarkus.cxf.endpoint."/greeting-service".handlers=org.acme.MySOAPHandler,org.acme.AnotherSOAPHandler
+
+# A web service client with a single Handler
+quarkus.cxf.client."greeting-client".handlers=org.acme.MySOAPHandler
+
+
+
+

Where MySOAPHandler could look like below:

+
+
+
+
import jakarta.xml.ws.handler.soap.SOAPHandler;
+import jakarta.xml.ws.handler.soap.SOAPMessageContext;
+
+public class MySOAPHandler implements SOAPHandler<SOAPMessageContext> {
+
+    public boolean handleMessage(SOAPMessageContext messageContext) {
+        SOAPMessage msg = messageContext.getMessage();
+        return true;
+    }
+    // other methods
+}
+
+
+
+ + + + + +
+ + +
Class loading
+
+

The SOAPHandler classes are loaded via CDI first..

+
+
+

If no CDI beans are available, the constructor without parameters will be invoked to instantiate each class.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/dev/user-guide/jax-ws-providers.html b/quarkus-cxf/dev/user-guide/jax-ws-providers.html new file mode 100644 index 0000000000..837e5a5e46 --- /dev/null +++ b/quarkus-cxf/dev/user-guide/jax-ws-providers.html @@ -0,0 +1,1097 @@ + + + + + + JAX-WS Providers :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

JAX-WS Providers

+
+

JAX-WS Providers are fully supported, and can be implemented as shown below.

+
+
+

Given the following sample Provider implementation:

+
+
+
+
import jakarta.xml.transform.stream.StreamSource;
+import jakarta.xml.ws.BindingType;
+import jakarta.xml.ws.Provider;
+import jakarta.xml.ws.Service;
+import jakarta.xml.ws.ServiceMode;
+import jakarta.xml.ws.WebServiceProvider;
+import java.io.StringReader;
+
+@WebServiceProvider
+@ServiceMode(value = Service.Mode.PAYLOAD)
+public class StreamSourcePayloadProvider implements Provider<StreamSource> {
+
+    public StreamSourcePayloadProvider() {
+    }
+
+    public StreamSource invoke(StreamSource request) {
+        String payload = StaxUtils.toString(request);
+
+        // Do some interesting things ...
+
+        StreamSource response = new StreamSource(new StringReader(payload));
+        return response;
+    }
+}
+
+
+
+

The application.properties can be configured as shown below.

+
+
+
+
# A web service endpoint with the Provider implementation class
+quarkus.cxf.endpoint."/stream-source".implementor=org.acme.StreamSourcePayloadProvider
+
+
+
+ + + + + +
+ + +
Class loading
+
+

Provider classes are loaded via CDI first..

+
+
+

If no CDI beans are available, the constructor without parameters will be invoked to instantiate each class.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/dev/user-guide/package-for-jvm-and-native.html b/quarkus-cxf/dev/user-guide/package-for-jvm-and-native.html new file mode 100644 index 0000000000..7df6fee8ab --- /dev/null +++ b/quarkus-cxf/dev/user-guide/package-for-jvm-and-native.html @@ -0,0 +1,1249 @@ + + + + + + Package for running on a JVM or natively :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Package for running on a JVM or natively

+
+
+
+

In this chapter, we explain how to package a Quarkus CXF application for running on a JVM or for running it natively.

+
+
+
+
+

JVM mode

+
+
+

In the introductory guides for SOAP client and SOAP service, we worked only in Quarkus dev mode: +Quarkus tooling was running on the background, +watching for changes in our workspace, recompiling and reloading the application as needed.

+
+
+

How do we run the application on a JVM once we are done with the development?

+
+
+

First we need to package it with Maven:

+
+
+
+
$ mvn package
+
+
+
+

The libraries needed to run the application on a JVM can be found in target/quarkus-app directory:

+
+
+
+
$ ls -lh target/quarkus-app
+drwxr-xr-x. 2 ppalaga ppalaga 4.0K Jan 12 22:29 app
+drwxr-xr-x. 4 ppalaga ppalaga 4.0K Jan 12 22:29 lib
+drwxr-xr-x. 2 ppalaga ppalaga 4.0K Jan 12 22:29 quarkus
+-rw-r-r--. 1 ppalaga ppalaga 6.1K Jan 12 22:29 quarkus-app-dependencies.txt
+-rw-r-r--. 1 ppalaga ppalaga  678 Jan 12 22:29 quarkus-run.jar
+
+
+
+

We can start the application as follows:

+
+
+
+
$ java -jar target/quarkus-app/quarkus-run.jar
+
+
+
+

You can send some SOAP requests using curl to make sure that the application works.

+
+
+
+
+

Native mode

+
+
+

Quarkus offers first class support for building GraalVM native images +and Quarkus CXF fully honors that promise too.

+
+
+ + + + + +
+ + +
Images
+
+

GraalVM native images are platform specific executable files that you can run directly without a JVM. +They boot faster and spend less memory compared to running the same application in JVM mode.

+
+
+
+
+

The pom.xml file generated by code.quarkus.io +contains the native profile needed for building the native image:

+
+
+
+
<profile>
+  <id>native</id>
+  <activation>
+    <property>
+      <name>native</name>
+    </property>
+  </activation>
+  <properties>
+    <skipITs>false</skipITs>
+    <quarkus.package.type>native</quarkus.package.type>
+  </properties>
+</profile>
+
+
+
+

Further, as mentioned in the Create a new project section, you need the GraalVM native-image tool.

+
+
+

You should either have it installed locally and have GRAALVM_HOME environment variable set properly, +or — if you only need to produce a Linux native executable — you can use docker.

+
+
+
With local installation of GraalVM
+
+
# Make sure $GRAALVM_HOME is set properly
+$ echo $GRAALVM_HOME
+/home/{user}/.sdkman/candidates/java/{major}.{minor}.r{java-version}-grl
+
+# Produce the native executable
+mvn package -Pnative
+
+
+
+ + + + + +
+ + +
+

Quarkus is quite picky about the GraalVM version. +When using the local installation, always make sure that you use the version preferred by Quarkus. +You can do that by opening quarkus-bom imported in your pom.xml and searching for graalvm there. +If you use Docker, Quarkus takes care for pulling the right version for you.

+
+
+
+
+
With docker
+
+
# Produce the native executable
+mvn package -Pnative -Dquarkus.native.container-build=true
+
+
+
+

This can take a minute or so for a simple application.

+
+
+

When the build is done, the native executable should be available in target directory:

+
+
+
+
$ ls -l target
+...
+-rwxr-xr-x. 1 ppalaga ppalaga  71M Jan 11 22:42 quarkus-cxf-integration-test-server-1.8.0-SNAPSHOT-runner
+...
+
+
+
+

As you can see, it has a size of only 71 MB, and is executable.

+
+
+

You can run it as follows:

+
+
+
+
$ target/*-runner
+...
+INFO  [io.quarkus] (main) quarkus-cxf-integration-test-server 1.8.0-SNAPSHOT native (powered by Quarkus
+2.15.2.Final) started in 0.042s. Listening on: http://0.0.0.0:8080
+...
+
+
+
+

Again, you can send some SOAP requests using curl to make sure that the native executable works.

+
+
+

Do not forget to compare the memory usage, time to first request and other performance metrics +with the stack you used before and share your results!

+
+
+
+
+

Native Image: Additional Resources

+ +
+
+

Create container image

+
+
+

Refer to Quarkus Container image guide.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/dev/user-guide/payload-logging.html b/quarkus-cxf/dev/user-guide/payload-logging.html new file mode 100644 index 0000000000..e1f0b0aab8 --- /dev/null +++ b/quarkus-cxf/dev/user-guide/payload-logging.html @@ -0,0 +1,1256 @@ + + + + + + Logging :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Logging

+
+
+
+

Refer to Quarkus Logging guide for basic information about logging on Quarkus, such as

+
+
+ +
+
+
+
+

Payload logging

+
+
+ + + + + +
+ + +
History
+
+

Since Quarkus CXF 2.6.0, the payload logging functionality is available via +io.quarkiverse.cxf:quarkus-cxf extension. +Before 2.6.0, it was available through a separate extension io.quarkiverse.cxf:quarkus-cxf-rt-features-logging +which is now deprecated and will be removed in the future.

+
+
+
+
+

The payload logging functionality is implemented primarily through the org.apache.cxf.ext.logging.LoggingFeature class.

+
+
+

There are several ways how you can set the feature on a client or service endpoint.

+
+
+
+
+

Configuring payload logging through configuration properties

+
+
+

Global settings

+
+

The global logging options exist since Quarkus CXF 2.6.0. +If enabled via quarkus.cxf.logging.enabled = true, Quarkus CXF creates a global LoggingFeature instance +and sets it on every client and service endpoint in the application. +The global settings can be overriden on the client or service endpoint level.

+
+
+
application.properties
+
+
# Global settings
+quarkus.cxf.logging.enabled = true
+quarkus.cxf.logging.pretty = true
+
+
+
+

All logging configuration options are listed on quarkus-cxf reference page.

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

All logging properties mentioned on this page are runtime configuration options. +Hence you can pass them when starting the application without having to rebuild it. +It can be done either by passing a system property on the command line (e.g. -Dquarkus.cxf.logging.enabled=true) +or by setting an environment variable (e.g. export QUARKUS_CXF_LOGGING_ENABLED=true).

+
+
+
+
+
+

Per client and per service endpoint settings

+
+

Since Quarkus CXF 2.5.0, the LoggingFeature can be configured and attached to a client or a service +endpoint declaratively by setting the appropriate options in application.properties:

+
+
+
application.properties
+
+
# For a service:
+quarkus.cxf.endpoint."/hello".logging.enabled = true
+quarkus.cxf.endpoint."/hello".logging.pretty = true
+# For a client:
+quarkus.cxf.client.hello.logging.enabled = true
+quarkus.cxf.client.hello.logging.pretty = true
+
+
+
+

All logging configuration options are documented on quarkus-cxf reference page:

+
+ +
+
+
+
+

Alternative ways of adding a LoggingFeature to a client or service

+
+
+

To attach an instance with default settings, you can do one of the following:

+
+
+
    +
  1. +

    In application.properties:

    +
    +
    +
    # For a service:
    +quarkus.cxf.endpoint."/hello".features=org.apache.cxf.ext.logging.LoggingFeature
    +# For a client:
    +quarkus.cxf.client."myClient".features=org.apache.cxf.ext.logging.LoggingFeature
    +
    +
    +
    + + + + + +
    + + +
    +

    There is an example in Your first SOAP Web service chapter of the User guide.

    +
    +
    +
    +
    +

    or alternatively

    +
    +
  2. +
  3. +

    Use the @Features annotation of CXF:

    +
    +
    +
    @org.apache.cxf.feature.Features (features = {"org.apache.cxf.ext.logging.LoggingFeature"})
    +@WebService(endpointInterface = "org.acme.SayHi", targetNamespace = "uri:org.acme")
    +public class SayHiImplementation implements SayHi {
    +   public long sayHi(long arg) {
    +       return arg;
    +   }
    +   //...
    +}
    +
    +
    +
  4. +
+
+
+

Producing a custom LoggingFeature bean

+
+

If you need some custom logic to setup the LoggingFeature, you can produce a named LoggingFeature bean:

+
+
+
+
import org.apache.cxf.ext.logging.LoggingFeature;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.enterprise.inject.Produces;
+
+class Producers {
+
+    @Produces
+    @ApplicationScoped
+    @Named("limitedLoggingFeature") // "limitedLoggingFeature" is redundant if the name of the method is the same
+    LoggingFeature limitedLoggingFeature() {
+        LoggingFeature loggingFeature = new LoggingFeature();
+        loggingFeature.setPrettyLogging(true);
+        loggingFeature.setLimit(1024);
+        return loggingFeature;
+    }
+}
+
+
+
+

Then you can refer to it by its name prefixed with # in application.properties:

+
+
+
+
# For a service:
+quarkus.cxf.endpoint."/hello".features = #limitedLoggingFeature
+# For a client:
+quarkus.cxf.client.hello.features = #limitedLoggingFeature
+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/dev/user-guide/running-behind-a-reverse-proxy.html b/quarkus-cxf/dev/user-guide/running-behind-a-reverse-proxy.html new file mode 100644 index 0000000000..2c24b70d7d --- /dev/null +++ b/quarkus-cxf/dev/user-guide/running-behind-a-reverse-proxy.html @@ -0,0 +1,1143 @@ + + + + + + Running behind a reverse proxy :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Running behind a reverse proxy

+
+

SOAP requests aimed towards services running on Quarkus can be routed through proxies that generate additional headers +(e.g. X-Forwarded-Host) to keep information from the client-facing side of the proxy servers that is altered or lost when they are involved. +In those scenarios, Quarkus can be configured to automatically update information like protocol, host, port and URI reflecting the values in these headers.

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

Refer to Quarkus HTTP reference for more details.

+
+
+
+
+

Quarkus CXF support for various X-Forwarded headers works in line with Quarkus configuration.

+
+
+ + + + + +
+ + +Activating this feature leaves the server exposed to several security issues (i.e. information spoofing). Consider activating it only when running behind a reverse proxy. +
+
+
+

These are the relevant Quarkus properties and their effect on Quarkus CXF:

+
+
+
    +
  • +

    quarkus.http.proxy.proxy-address-forwarding - the main switch to enable the rewriting of the request destination parts.

    +
    +
      +
    • +

      If enabled, the rewriting of the request fields will be effective throughout the whole CXF server stack.

      +
    • +
    • +

      If enabled, the values passed via X-Forwarded-Proto and X-Forwarded-Port headers +will be used to set the protocol part and the port part of the URL returned by +jakarta.servlet.http.HttpServletRequest.getRequestURL() respectively.

      +
    • +
    • +

      If enabled, the value passed via X-Forwarded-For will be returned by jakarta.servlet.ServletRequest.getRemoteAddr().

      +
    • +
    +
    +
  • +
  • +

    quarkus.http.proxy.enable-forwarded-host - +enable the rewriting of the host part of URL returned by jakarta.servlet.http.HttpServletRequest.getRequestURL(). +The actual host name is taken from the header configured via +quarkus.http.proxy.forwarded-host-header +(default is X-Forwarded-Host).

    +
  • +
  • +

    quarkus.http.proxy.enable-forwarded-prefix - +enable the rewriting of the path part of the URL returned by jakarta.servlet.http.HttpServletRequest.getRequestURL() +and of the URI returned by jakarta.servlet.http.HttpServletRequest.getRequestURI(). +The actual path prefix is taken from the header configured via +quarkus.http.proxy.forwarded-prefix-header +(default is X-Forwarded-Prefix).

    +
  • +
+
+
+

Here is the most common snippet to copy to your application.properties:

+
+
+
+
quarkus.http.proxy.proxy-address-forwarding = true
+quarkus.http.proxy.enable-forwarded-host = true
+quarkus.http.proxy.enable-forwarded-prefix = true
+
+
+
+

One of the observable effects of these settings is the change of the location value in WSDL served +on http://localhost:8080/services/my-service?wsdl. +For example, if the request contains the following headers

+
+
+
+
X-Forwarded-Proto: https
+X-Forwarded-Host: api.example.com
+X-Forwarded-Port: 443
+X-Forwarded-Prefix: /my-prefix
+
+
+
+

then the WSDL served on http://localhost:8080/services/my-service?wsdl would contain the following location:

+
+
+
+
...
+<soap:address location="https://api.example.com:443/my-prefix/services/my-service"/>
+...
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/dev/user-guide/soap-payloads-with-jaxb.html b/quarkus-cxf/dev/user-guide/soap-payloads-with-jaxb.html new file mode 100644 index 0000000000..8872bdea61 --- /dev/null +++ b/quarkus-cxf/dev/user-guide/soap-payloads-with-jaxb.html @@ -0,0 +1,1338 @@ + + + + + + Complex SOAP payloads with JAXB :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Complex SOAP payloads with JAXB

+
+
+
+

Our introductory guides for Quarkus SOAP client +and SOAP service dealt with services +having only primitive parameters and return values such as integers and strings. +Let’s have a look at passing and receiving more complex objects.

+
+
+

As an example, let’s create an application for managing fruits.

+
+
+ + + + + +
+ + +The sample code snippets used in this section come from the + server integration test + in the source tree of Quarkus CXF +
+
+
+

Because our representation of fruit is supposed to be a complex, let’s model it as a Java bean with a couple of attributes:

+
+
+
+
package io.quarkiverse.cxf.it.server;
+
+import java.util.Objects;
+
+import jakarta.xml.bind.annotation.XmlElement;
+import jakarta.xml.bind.annotation.XmlRootElement;
+import jakarta.xml.bind.annotation.XmlType;
+
+@XmlType(name = "Fruit")
+@XmlRootElement
+public class Fruit {
+
+    private String name;
+
+    private String description;
+
+    public Fruit() {
+    }
+
+    public Fruit(String name, String description) {
+        this.name = name;
+        this.description = description;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    @XmlElement
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    @XmlElement
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (!(obj instanceof Fruit)) {
+            return false;
+        }
+
+        Fruit other = (Fruit) obj;
+
+        return Objects.equals(other.getName(), this.getName());
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(this.getName());
+    }
+}
+
+
+
+

As you may have noticed, we have used some JAXB annotations, +such as @XmlElement, @XmlRootElement and @XmlType. +This is to control the serialization and deserialization of the bean from and to XML.

+
+
+
+
+

Automatic registration for reflection

+
+
+

JAXB is a reflection based serialization framework. +When learning about GraalVM native images, one of the first things you typically hear is +that you have to register classes, fields and methods for reflection at build time. +With plain GraalVM you’d have to do this through reflection-config.json manually. +Well, at least for the classes you have written yourself. +Not so with Quarkus. quarkus-jaxb extension (which quarkus-cxf depends on) +is able to scan your application’s class path for classes annotated with JAXB annotations +and register them for reflection automatically.

+
+
+

Hence working with complex payloads on Quarkus is not different from stock CXF. +The JAXB serialization and deserialization will work out of the box without any additional configuration.

+
+
+
+
+

SEI and implementation

+
+
+

The Service Endpoint Interface (SEI) for managing fruits might look like the following:

+
+
+
+
package io.quarkiverse.cxf.it.server;
+
+import java.util.Set;
+
+import jakarta.jws.WebMethod;
+import jakarta.jws.WebService;
+
+@WebService
+public interface FruitService {
+
+    @WebMethod
+    Set<Fruit> list();
+
+    @WebMethod
+    Set<Fruit> add(Fruit fruit);
+
+    @WebMethod
+    Set<Fruit> delete(Fruit fruit);
+}
+
+
+
+

We can implement the SEI as simply as possible:

+
+
+
+
package io.quarkiverse.cxf.it.server;
+
+import java.util.Collections;
+import java.util.LinkedHashSet;
+import java.util.Set;
+
+import jakarta.jws.WebService;
+
+@WebService(serviceName = "FruitService")
+public class FruitServiceImpl implements FruitService {
+
+    private Set<Fruit> fruits = Collections.synchronizedSet(new LinkedHashSet<>());
+
+    public FruitServiceImpl() {
+        fruits.add(new Fruit("Apple", "Winter fruit"));
+        fruits.add(new Fruit("Pineapple", "Tropical fruit"));
+    }
+
+    @Override
+    public Set<Fruit> list() {
+        return fruits;
+    }
+
+    @Override
+    public Set<Fruit> add(Fruit fruit) {
+        fruits.add(fruit);
+        return fruits;
+    }
+
+    @Override
+    public Set<Fruit> delete(Fruit fruit) {
+        fruits.remove(fruit);
+        return fruits;
+    }
+}
+
+
+
+
+
+

application.properties

+
+
+

The implementation is pretty straightforward and you just need to define your endpoints using the application.properties.

+
+
+
+
quarkus.cxf.endpoint."/fruits".implementor = io.quarkiverse.cxf.it.server.FruitServiceImpl
+quarkus.cxf.endpoint."/fruits".features = org.apache.cxf.ext.logging.LoggingFeature
+
+
+
+
+
+

Test with Quarkus dev mode and curl

+
+
+

Having the above files in place, you can start Quarkus tooling in dev mode:

+
+
+
+
$ mvn quarkus:dev
+...
+INFO  [io.quarkus] (Quarkus Main Thread) ... Listening on: http://localhost:8080
+
+
+
+

and then check whether the service is working by invoking its list operation:

+
+
+
+
$ curl -v -X POST -H "Content-Type: text/xml;charset=UTF-8" \
+    -d \
+      '<soapenv:Envelope
+      xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
+      xmlns:ns1="http://server.it.cxf.quarkiverse.io/">
+        <soapenv:Body>
+            <ns1:list/>
+        </soapenv:Body>
+    </soapenv:Envelope>' \
+    http://localhost:8080/soap/fruits
+...
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
+  <soap:Body>
+    <ns1:listResponse xmlns:ns1="http://server.it.cxf.quarkiverse.io/">
+      <return xmlns:ns2="http://server.it.cxf.quarkiverse.io/">
+        <description>Winter fruit</description>
+        <name>Apple</name>
+      </return>
+      <return xmlns:ns2="http://server.it.cxf.quarkiverse.io/">
+        <description>Tropical fruit</description>
+        <name>Pineapple</name>
+      </return>
+    </ns1:listResponse>
+  </soap:Body>
+</soap:Envelope>
+
+
+
+

As you can see, the endpoint has returned the two fruits Apple and Pineapple available by default.

+
+
+

Now let’s add another fruit, say an Orange:

+
+
+
+
$ curl -v -X POST -H "Content-Type: text/xml;charset=UTF-8" \
+    -d \
+     '<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
+        <soap:Body>
+          <ns2:add xmlns:ns2="http://server.it.cxf.quarkiverse.io/">
+            <arg0>
+              <description>Mediterranean fruit</description>
+              <name>Orange</name>
+            </arg0>
+          </ns2:add>
+       </soap:Body></soap:Envelope>' \
+    http://localhost:8080/soap/fruits
+...
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
+  <soap:Body>
+    <ns1:addResponse xmlns:ns1="http://server.it.cxf.quarkiverse.io/">
+      <return xmlns:ns2="http://server.it.cxf.quarkiverse.io/">
+        <description>Winter fruit</description>
+        <name>Apple</name>
+      </return>
+      <return xmlns:ns2="http://server.it.cxf.quarkiverse.io/">
+        <description>Tropical fruit</description>
+        <name>Pineapple</name>
+      </return>
+      <return xmlns:ns2="http://server.it.cxf.quarkiverse.io/">
+        <description>Mediterranean fruit</description>
+        <name>Orange</name>
+      </return>
+    </ns1:addResponse>
+  </soap:Body>
+</soap:Envelope>
+
+
+
+

We can see Orange having been added in the returned list as expected.

+
+
+
+
+

Further steps

+ +
+
+
+
+
+ + + + + + + diff --git a/quarkus-cxf/dev/user-guide/ssl.html b/quarkus-cxf/dev/user-guide/ssl.html new file mode 100644 index 0000000000..d32d417345 --- /dev/null +++ b/quarkus-cxf/dev/user-guide/ssl.html @@ -0,0 +1,1231 @@ + + + + + + SSL :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

SSL

+
+
+
+

This chapter documents various use cases related to SSL, TLS and HTTPS.

+
+
+ + + + + +
+ + +The sample code snippets used in this section come from the + WS-SecurityPolicy integration test + in the source tree of Quarkus CXF +
+
+
+
+
+

Client SSL configuration

+
+
+

If your client is going to communicate with a server whose SSL certificate is not trusted by the client’s operating system, +then you need to set up a custom trust store for your client. +Tools like openssl or Java keytool are commonly used for doing that. +You may want to check +some +examples +in Quarkus CXF source tree.

+
+
+

Once you have prepared the trust store, you need to configure your client to use it.

+
+
+

Set the client trust store in application.properties

+
+

This is the easiest way to set the client trust store. +The key role is played by the following properties:

+
+ +
+

Here is an example:

+
+
+
application.properties
+
+
keystore.type = jks (1)
+quarkus.cxf.client.hello.client-endpoint-url = https://localhost:${quarkus.http.test-ssl-port}/services/hello
+quarkus.cxf.client.hello.service-interface = io.quarkiverse.cxf.it.security.policy.HelloService
+quarkus.cxf.client.hello.trust-store-type = ${keystore.type}
+(2)
+quarkus.cxf.client.hello.trust-store = client-truststore.${keystore.type}
+quarkus.cxf.client.hello.trust-store-password = client-truststore-password
+
+
+
+ + + + + + + + + +
1pkcs12 trust store type is a common alternative to jks.
2The referenced client-truststore.jks file has to be available in src/main/resources directory.
+
+
+
+
+
+

Server SSL configuration

+
+
+

The server SSL configuration is driven by Quarkus HTTP layer a.k.a. Vert.x. +Quarkus HTTP guide provides the information about the configuration options.

+
+
+

Here is a basic example:

+
+
+
application.properties
+
+
(1)
+quarkus.http.ssl.certificate.key-store-file = localhost-keystore.${keystore.type}
+quarkus.http.ssl.certificate.key-store-password = localhost-keystore-password
+quarkus.http.ssl.certificate.key-store-key-alias = localhost
+quarkus.http.ssl.certificate.key-store-key-password = localhost-keystore-password
+
+
+
+ + + + + +
1The referenced localhost.jks file has to be available in src/main/resources directory.
+
+
+
+
+

Enforce SSL through WS-SecurityPolicy

+
+
+

The requirement for the clients to connect through HTTPS can be defined in a policy.

+
+
+

The functionality is provided by quarkus-cxf-rt-ws-security extension.

+
+
+

Here is an example of a policy file:

+
+
+
https-policy.xml
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
+    xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702"
+    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
+    <wsp:ExactlyOne>
+        <wsp:All>
+            <sp:TransportBinding>
+                <wsp:Policy>
+                    <sp:TransportToken>
+                        <wsp:Policy>
+                            <sp:HttpsToken RequireClientCertificate="false" />
+                        </wsp:Policy>
+                    </sp:TransportToken>
+                    <sp:IncludeTimestamp />
+                    <sp:AlgorithmSuite>
+                        <wsp:Policy>
+                            <sp:Basic128 />
+                        </wsp:Policy>
+                    </sp:AlgorithmSuite>
+                </wsp:Policy>
+            </sp:TransportBinding>
+        </wsp:All>
+    </wsp:ExactlyOne>
+</wsp:Policy>
+
+
+
+

The policy has to be referenced from a service endpoint interface (SEI):

+
+
+
HttpsPolicyHelloService.java
+
+
package io.quarkiverse.cxf.it.security.policy;
+
+import jakarta.jws.WebMethod;
+import jakarta.jws.WebService;
+
+import org.apache.cxf.annotations.Policy;
+
+/**
+ * A service implementation with a transport policy set
+ */
+@WebService(serviceName = "HttpsPolicyHelloService")
+@Policy(placement = Policy.Placement.BINDING, uri = "https-policy.xml")
+public interface HttpsPolicyHelloService extends AbstractHelloService {
+
+    @WebMethod
+    @Override
+    public String hello(String text);
+
+}
+
+
+
+

With this setup in place, any request delivered over HTTP will be rejected by the PolicyVerificationInInterceptor:

+
+
+
+
ERROR [org.apa.cxf.ws.pol.PolicyVerificationInInterceptor] Inbound policy verification failed: These policy alternatives can not be satisfied:
+ {http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702}TransportBinding: TLS is not enabled
+ ...
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-dapr/dev/config.html b/quarkus-dapr/dev/config.html new file mode 100644 index 0000000000..92348e8a27 --- /dev/null +++ b/quarkus-dapr/dev/config.html @@ -0,0 +1,912 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-dapr/dev/includes/devservices.html b/quarkus-dapr/dev/includes/devservices.html new file mode 100644 index 0000000000..1ac5b746b4 --- /dev/null +++ b/quarkus-dapr/dev/includes/devservices.html @@ -0,0 +1,997 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Quarkus Dapr Extension provides a DevService to enhance your experience with Quarkus and Dapr.

+
+
+

Enabling / Disabling Dev Services for Dapr

+
+
+

Dev Services for Dapr are disabled by default unless:

+
+
+
    +
  • +

    quarkus.dapr.devservices.enabled is set to true

    +
  • +
+
+
+
+
+

Setting Dapr image

+
+
+

Dev Services for Dapr uses the latest daprio/daprd image (diagrid/daprd:latest). You can change this image using the quarkus.dapr.devservices.image-name property.

+
+
+
+
+

Adding Dapr Components

+
+
+

By default, Dapr DevServices create a Dapr container containing in-memory Pub/Sub and in-memory State Store building blocks.

+
+
+

If you want to add a custom Dapr component, you need to add it to the src/main/resources/components folder.

+
+
+

Example of Pub/Sub using Redis.

+
+
+
+
apiVersion: dapr.io/v1alpha1
+kind: Component
+metadata:
+  name: pubsub
+spec:
+  type: pubsub.redis
+  version: v1
+  metadata:
+    - name: redisHost
+      value: localhost:6379
+    - name: redisPassword
+      value: ""
+
+
+
+

Example of State Store using Redis:

+
+
+
+
apiVersion: dapr.io/v1alpha1
+kind: Component
+metadata:
+  name: statestore
+spec:
+  type: state.redis
+  version: v1
+  metadata:
+    - name: keyPrefix
+      value: name
+    - name: redisHost
+      value: localhost:6379
+    - name: redisPassword
+      value: ""
+
+
+
+
+
+

Network

+
+
+

By default, Dev Services for Dapr utilize a network named dapr. +Dev Services search for a Docker Network named dapr; if one does not exist, Dev Services create it.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-dapr/dev/index.html b/quarkus-dapr/dev/index.html new file mode 100644 index 0000000000..2d19023013 --- /dev/null +++ b/quarkus-dapr/dev/index.html @@ -0,0 +1,1097 @@ + + + + + + Quarkus - Dapr :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus - Dapr

+
+

Introduction

+
+
+

What is Dapr?

+
+

Dapr is a portable, event-driven runtime that makes it easy for any developer to build resilient, stateless and +stateful applications that run on the cloud and edge and embraces the diversity of languages and developer frameworks.

+
+
+

Leveraging the benefits of a sidecar architecture, Dapr helps you tackle the challenges that come with building +microservices and keeps your code platform agnostic.

+
+
+

For more information about Dapr, please go https://dapr.io/.

+
+
+
+

What is Quarkus-Dapr?

+
+

Quarkus Dapr is a Quarkus extension to integrate with Dapr.

+
+
+

Quarkus Dapr Extension enables Java developers to create ultra lightweight Java native applications for Function +Computing and FaaS scenes, which is also particularly suitable for running as serverless.

+
+
+

With the help of Dapr, these ultra lightweight Java native applications can easily interact with external application +and resources. Dapr provides many useful building blocks to build modern distributed application: service invocation, +state management, input/output bindings, publish & subscribe, secret management…​…​

+
+
+

Because of the advantages of sidecar model, the native applications can benefit from Dapr’s distributed capabilities +while remain lightweight without introducing too many dependencies. This is not only helping to keep the size of java +native applications, but also making the native applications easy to build as native images.

+
+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.dapr:quarkus-dapr extension first. +In your pom.xml file, add:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.dapr</groupId>
+    <artifactId>quarkus-dapr</artifactId>
+</dependency>
+
+
+
+
+
+

Examples

+
+
+

With Quarkus Dapr Extension, it’s pretty easy for java developers.

+
+
+

publish & subscribe

+
+

To publish events to your message broker, just inject a dapr client to your bean and call it’s publishEvent() method:

+
+
+
+
@Inject
+SyncDaprClient dapr;
+
+dapr.publishEvent("messagebus", "topic1", content.getBytes(StandardCharsets.UTF_8), new HashMap<>());
+
+
+
+

To subscribe events for your message broker, adding some annotations on your method is enough:

+
+
+
+
@POST
+@Path("/topic1")
+@Topic(name = "topic1", pubsubName = "messagebus")
+public String eventOnTopic2(String content) {......}
+
+
+
+

For more details and hands-on experiences, please reference to our Demo.

+
+
+
+
+
+

Extension Configuration Reference

+
+ +
+
+
+

Dapr DevServices

+
+
+

Quarkus Dapr Extension provides a DevService to enhance your experience with Quarkus and Dapr.

+
+
+

Enabling / Disabling Dev Services for Dapr

+
+

Dev Services for Dapr are disabled by default unless:

+
+
+
    +
  • +

    quarkus.dapr.devservices.enabled is set to true

    +
  • +
+
+
+
+

Setting Dapr image

+
+

Dev Services for Dapr uses the latest daprio/daprd image (diagrid/daprd:latest). You can change this image using the quarkus.dapr.devservices.image-name property.

+
+
+
+

Adding Dapr Components

+
+

By default, Dapr DevServices create a Dapr container containing in-memory Pub/Sub and in-memory State Store building blocks.

+
+
+

If you want to add a custom Dapr component, you need to add it to the src/main/resources/components folder.

+
+
+

Example of Pub/Sub using Redis.

+
+
+
+
apiVersion: dapr.io/v1alpha1
+kind: Component
+metadata:
+  name: pubsub
+spec:
+  type: pubsub.redis
+  version: v1
+  metadata:
+    - name: redisHost
+      value: localhost:6379
+    - name: redisPassword
+      value: ""
+
+
+
+

Example of State Store using Redis:

+
+
+
+
apiVersion: dapr.io/v1alpha1
+kind: Component
+metadata:
+  name: statestore
+spec:
+  type: state.redis
+  version: v1
+  metadata:
+    - name: keyPrefix
+      value: name
+    - name: redisHost
+      value: localhost:6379
+    - name: redisPassword
+      value: ""
+
+
+
+
+

Network

+
+

By default, Dev Services for Dapr utilize a network named dapr. +Dev Services search for a Docker Network named dapr; if one does not exist, Dev Services create it.

+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-dashbuilder/dev/includes/attributes.html b/quarkus-dashbuilder/dev/includes/attributes.html new file mode 100644 index 0000000000..7731d91282 --- /dev/null +++ b/quarkus-dashbuilder/dev/includes/attributes.html @@ -0,0 +1,912 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-dashbuilder/dev/includes/quarkus-dashbuilder.html b/quarkus-dashbuilder/dev/includes/quarkus-dashbuilder.html new file mode 100644 index 0000000000..9d97599378 --- /dev/null +++ b/quarkus-dashbuilder/dev/includes/quarkus-dashbuilder.html @@ -0,0 +1,996 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The web path where Dashbuilder dashboards will be available. By default, this value will be resolved as a path relative to ${quarkus.http.non-application-root-path}.

+
+
+

Environment variable: QUARKUS_DASHBUILDER_PATH

+
+
+

string

/dashboards

+
+
+
+

Comma separated list of dashboards to be rendered by Dashbuilder. If not used then Dashbuilder scan all *.dash.(yaml|yml|json) files

+
+
+

Environment variable: QUARKUS_DASHBUILDER_DASHBOARDS

+
+
+

list of string

+
+
+
+

If true samples will also be included in the final JAR

+
+
+

Environment variable: QUARKUS_DASHBUILDER_INCLUDE_SAMPLES

+
+
+

boolean

false

+
+
+
+

Dashboards properties

+
+
+

Environment variable: QUARKUS_DASHBUILDER_PROPERTIES

+
+
+

Map<String,Map<String,String>>

+
+
+
+
+ + + + + + + diff --git a/quarkus-dashbuilder/dev/index.html b/quarkus-dashbuilder/dev/index.html new file mode 100644 index 0000000000..0b0b0835c8 --- /dev/null +++ b/quarkus-dashbuilder/dev/index.html @@ -0,0 +1,1063 @@ + + + + + + Quarkus Dashbuilder :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Dashbuilder

+
+
+
+

Dashbuilder is a tool for running client side dashboards defined in declarative languages, such as YAML. This extension aims to bring Dashbuilder bundle to your application.

+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.dashbuilder:quarkus-dashbuilder extension first to your build file.

+
+
+

For instance, with Maven, add the following dependency to your POM file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.dashbuilder</groupId>
+    <artifactId>quarkus-dashbuilder</artifactId>
+    <version>0.32.0</version>
+</dependency>
+
+
+
+
+
+

Extension Configuration Reference

+
+ ++++++ + + + + + + + + + + + + + + + + + + + + + + +
PropertyTypeDefaultDescription

quarkus.dashbuilder.path

string

dashboards

Web context for dashbuilder

quarkus.dashbuilder.dashboards

list of strings

comma separated list of paths to dashboards files. If empty dashbuilder scans for *.dash.yaml files.

+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The web path where Dashbuilder dashboards will be available. By default, this value will be resolved as a path relative to ${quarkus.http.non-application-root-path}.

+
+
+

Environment variable: QUARKUS_DASHBUILDER_PATH

+
+
+

string

/dashboards

+
+
+
+

Comma separated list of dashboards to be rendered by Dashbuilder. If not used then Dashbuilder scan all *.dash.(yaml|yml|json) files

+
+
+

Environment variable: QUARKUS_DASHBUILDER_DASHBOARDS

+
+
+

list of string

+
+
+
+

If true samples will also be included in the final JAR

+
+
+

Environment variable: QUARKUS_DASHBUILDER_INCLUDE_SAMPLES

+
+
+

boolean

false

+
+
+
+

Dashboards properties

+
+
+

Environment variable: QUARKUS_DASHBUILDER_PROPERTIES

+
+
+

Map<String,Map<String,String>>

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-discord4j/dev/commands.html b/quarkus-discord4j/dev/commands.html new file mode 100644 index 0000000000..125dde4ac3 --- /dev/null +++ b/quarkus-discord4j/dev/commands.html @@ -0,0 +1,1127 @@ + + + + + + Application Commands :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Application Commands

+
+
+
+

Application commands are Discord’s newest way of interacting with bots in Discord, replacing the traditional method of parsing out message content.

+
+
+

It’s possible to interface with application commands using Gateway listener methods, but the quarkus-discord4j-commands extension comes with some additional goodies that make it easy to develop application commands.

+
+
+
+
+

Installation

+
+
+

Add the quarkus-discord4j-commands artifact to your Quarkus app:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.discord4j</groupId>
+    <artifactId>quarkus-discord4j-commands</artifactId>
+    <version>0.0.1</version>
+</dependency>
+
+
+
+
+
+

Creating commands

+
+
+

Before you can start listening for commands in code, you first need to define your application commands and register them in Discord so they can be used. The easiest way to do this is by defining your commands using JSON. Quarkus Discord Bot will automatically serialize and register the JSON files found in META-INF/commands and subdirectories as application commands (when configured to do so).

+
+
+ + + + + +
+ + +Discord supports two types of application commands: global commands and guild commands. Global commands take an hour to propagate after being registered, so it’s recommended to register your commands as guild commands while you’re developing. +
+
+
+

Let’s create a guild command by creating the following JSON file in META-INF/commands/test:

+
+
+
+
{
+  "name": "foo"
+  "description": "Foo command"
+  "options": [
+    {
+      "type": 3,
+      "name": "name",
+      "description": "The text to reply to the command with"
+    }
+  ]
+}
+
+
+
+

You can find the full JSON schema of application commands here.

+
+
+

Now that you’ve created a guild command using JSON, you need to configure the ID of the guild command, and configure your Quarkus Discord Bot to register the command when your app starts. You can do that by configuring the following properties:

+
+
+
+
quarkus.discord4j.guild-commands.test.overwrite-on-start=true
+quarkus.discord4j.guild-commands.test.guild-id=<test guild ID>
+
+
+
+

The configuration name of the guild commands, test, must match the name of the subdirectory in META-INF/commands we created earlier.

+
+
+ + + + + +
+ + +To obtain the ID of your test guild, turn on developer mode in your Discord client by going to User Settings > App Settings > Advanced and checking the Developer Mode option. Then, right click your server’s icon and click Copy ID. +
+
+
+

You can find the full list of configurable properties in the Reference.

+
+
+
+
+

Listening and responding to commands

+
+
+

To listen for the command you just defined, create the following class:

+
+
+
+
class FooCommand {
+
+    @Command(value="foo", guild="test") (1)
+    Mono<Void> onFoo(ChatInputInteractionEvent event) { (2)
+        String name = event.getOption("name")
+                .flatMap(ApplicationCommandInteractionOption::getValue)
+                .map(ApplicationCommandInteractionOptionValue::asString)
+                .get(); (3)
+
+        return event.reply(name); (4)
+    }
+}
+
+
+
+ + + + + + + + + + + + + + + + + +
1The guild value indicates that we’re listening to a guild command from the guild ID we configured under the name test. Simply omit the guild value if you want to listen for global commands.
2Like Gateway listener methods, command methods can return Mono, Uni, Flux, or Multi.
3Here, we extract the value of the name option passed to our foo command.
4When we receive a command, we have to acknowledge it. Here, we acknowledge the command by immediately replying.
+
+
+ + + + + +
+ + +It is planned to allow option values to be injected directly into command methods in the future. +
+
+
+

Subcommands and subcommand groups

+
+

You can listen for subcommands and subcommand groups using a slightly different class hierarchy. Let’s imagine the command we defined earlier includes subcommands and subcommand groups, and create the following class for it:

+
+
+
+
@Command(value="foo", guild="test")
+class FooCommands {
+
+    @SubCommand("baz") (1)
+    Mono<Void> onBaz(ChatInputInteractionEvent event) {
+        // acknowledge command
+    }
+
+    @SubCommandGroup("bar")
+    class BarCommands {
+
+        @SubCommand("baz") (2)
+        Mono<Void> onBaz(ChatInputInteractionEvent event) {
+            // acknowledge command
+        }
+    }
+}
+
+
+
+ + + + + + + + + +
1We listen for /foo baz commands
2We listen for /foo bar baz commands
+
+
+
+

User and message commands

+
+

To listen for user or message commands, methods annotated with @Command can declare a parameter of UserInteractionEvent or MessageInteractionEvent. Subcommands and subcommand groups aren’t supported for user and message commands.

+
+
+
+

Autocomplete commands

+
+

To listen for autocomplete interactions, methods annotated with @Command or @SubCommand can declare a parameter of ChatInputAutoCompleteEvent.

+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-discord4j/dev/getting-started.html b/quarkus-discord4j/dev/getting-started.html new file mode 100644 index 0000000000..00ec94799d --- /dev/null +++ b/quarkus-discord4j/dev/getting-started.html @@ -0,0 +1,1141 @@ + + + + + + Getting Started :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Getting Started

+
+
+
+

Before you create your Quarkus Discord bot, you’ll need to create a Discord developer application and spin up a new bot user. If you already have a Discord bot set up, skip to Installation to start experimenting.

+
+
+
+
+

Create a Discord bot user

+
+
+

Step 1 - Create a developer app

+
+

Create a new Discord developer application by going to the Discord developer portal and clicking New Application.

+
+
+ + + + + +
+ + +As each Discord app can only have one bot user, it’s a good idea to create two separate apps so that you can create separate bots for development and production. +
+
+
+
+

Step 2 - Create a bot user

+
+

You can create a bot by going to Bot and clicking the Add Bot button. After your bot has appeared, be sure to copy the token and set it aside for later so that you can configure your Quarkus app.

+
+
+ + + + + +
+ + +Be sure to uncheck the Public Bot if you don’t want other users to be able to add your bot to their server. +
+
+
+ + + + + +
+ + +If you plan to listen for and read messages in servers, you should check the Message Content Intent option. +
+
+
+
+

Step 3 - Add your bot to a server

+
+

Go to OAuth2 > URL Generator and select the bot scope. For a bot, you won’t require any other scopes unless you plan to register application commands, then you’ll need the applications.commands scope.

+
+
+

Now you can select any permissions your bot needs. You can grant more permissions to your bot later in your own server, but for public bots, it’s important that your generated URL has the correct permissions that it needs to function.

+
+
+

Once you’re done selecting permissions, go to the generated URL and add your bot to a server.

+
+
+ + + + + +
+ + +You should add your bot to a server that only you’re in until you’re done developing. This is because incoming Gateway events from activity in the server can trigger live reload in dev mode. +
+
+
+
+
+
+

Installation

+
+
+

To create a Quarkus Discord bot, you need Quarkus. You can create a Quarkus application with the Quarkus Discord4J extension using Maven:

+
+
+
+
mvn io.quarkus:quarkus-maven-plugin:3.7.3:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=my-discord-bot \
+    -Dextensions="io.quarkiverse.discord4j:quarkus-discord-bot:0.0.1"
+
+
+
+

Alternatively, just add the Quarkus Discord4J dependency to your existing Quarkus application:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.discord4j</groupId>
+    <artifactId>quarkus-discord4j</artifactId>
+    <version>0.0.1</version>
+</dependency>
+
+
+
+

Or, you can bootstrap a new Quarkus app using Gradle from https://code.quarkus.io.

+
+
+
+
+

Configure your bot

+
+
+

You can configure your bot in any of the ways that Quarkus supports. See the Configuration reference guide for more information.

+
+
+

Because we have a token that we don’t want to commit, let’s use a .env +file:

+
+
+
+
QUARKUS_DISCORD4J_TOKEN=<your bot token>
+QUARKUS_DISCORD4J_ENABLED_INTENTS=<set of enabled Gateway intents>
+
+
+
+
+
QUARKUS_DISCORD_BOT_TOKEN
+
+

Your bot’s token obtained from your app’s Bot section in the Discord developer portal

+
+
QUARKUS_DISCORD_BOT_GATEWAY_ENABLED_INTENTS
+
+

The set of Gateway intents corresponding to the Gateway events you want your bot to receive

+
+
+
+
+
+
+

Start coding

+
+
+

Now you can start coding and handling Gateway events.

+
+
+

For example, create the following class:

+
+
+
+
class AddReaction {
+    Mono<Void> onMessageCreate(@GatewayEvent MessageCreateEvent event) {
+        return event.getMessage().addReaction(ReactionEmoji.of("🤖"));
+    }
+}
+
+
+
+

Your bot will now react to each message sent in servers and via DM with 🤖.

+
+
+

The method is called automatically each time your bot receives a MessageCreateEvent.

+
+
+
+
+

Start dev mode

+
+
+

You can start dev mode to take advantage of live reload and improve productivity.

+
+
+

Quarkus will automatically restart your application (and bot) when it detects code changes after receiving a Gateway event. The best part is that the event won’t be sent to your code until after your bot restarts, meaning you can test new code only when you’re ready.

+
+
+ + + + + +
+ + +It’s a good idea to have a separate dev bot and server for this reason. If your dev bot is in multiple servers, someone else can trigger live reload by sending a message when you’re not ready. A separate server allows you to be in control of when live reload is triggered. +
+
+
+

Just execute the following command to run Quarkus in dev mode:

+
+
+
+
./mvnw quarkus:dev
+
+
+
+
+
+

Next steps

+
+
+

From here, you can do whatever you want with your bot by observing any of the supported Gateway events. You can also use all the extensions and other goodies that Quarkus has to offer.

+
+
+

When you’re done developing your bot, it might be a good idea to generate a native executable so you can benefit from a reduced memory footprint and a faster startup time in production.

+
+
+

More information about these features (and more) can be found in the Reference.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-discord4j/dev/includes/attributes.html b/quarkus-discord4j/dev/includes/attributes.html new file mode 100644 index 0000000000..5cac7e5183 --- /dev/null +++ b/quarkus-discord4j/dev/includes/attributes.html @@ -0,0 +1,921 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-discord4j/dev/includes/quarkus-discord4j.html b/quarkus-discord4j/dev/includes/quarkus-discord4j.html new file mode 100644 index 0000000000..6eadb5c110 --- /dev/null +++ b/quarkus-discord4j/dev/includes/quarkus-discord4j.html @@ -0,0 +1,1286 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Whether a health check should be published for the Gateway clients managed by this extension if the quarkus-smallrye-health extension is present

+
+
+

Environment variable: QUARKUS_DISCORD4J_HEALTH_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether metrics should be collected for the Gateway clients managed by this extension if the quarkus-micrometer or quarkus-smallrye-metrics extension is present

+
+
+

Environment variable: QUARKUS_DISCORD4J_METRICS_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether to serialize and register the JSON files found in path as global commands on startup.

+
+
+

Environment variable: QUARKUS_DISCORD4J_GLOBAL_COMMANDS_OVERWRITE_ON_START

+
+
+

boolean

false

+
+
+
+

The path to the JSON files of the global commands.

+
+
+

Environment variable: QUARKUS_DISCORD4J_GLOBAL_COMMANDS_PATH

+
+
+

string

META-INF/commands

+
+
+
+

Whether to delete registered global commands whose JSON representation is not found in path.

+
+
+

Environment variable: QUARKUS_DISCORD4J_GLOBAL_COMMANDS_DELETE_MISSING

+
+
+

boolean

false

+
+
+
+

The bot token used to authenticate to the Discord API.

+
+
+

Environment variable: QUARKUS_DISCORD4J_TOKEN

+
+
+

string

required

+
+
+
+

The status of the bot.

+
+
+

Environment variable: QUARKUS_DISCORD4J_PRESENCE_STATUS

+
+
+
+

unknown, online, do-not-disturb, idle, invisible, offline

+
+
+
+
+

The Gateway intents that should be enabled. Specific Gateway intents are required to receive certain Gateway events. Non-privileged intents will be enabled by default.

+
+
+

Environment variable: QUARKUS_DISCORD4J_ENABLED_INTENTS

+
+
+

list of Intent

+
+
+
+

The strategy to use for retrieving Discord entities. Default is cache-fallback-rest.

+
+
+

Environment variable: QUARKUS_DISCORD4J_ENTITY_RETRIEVAL_STRATEGY

+
+
+

EntityRetrievalStrategy

+
+
+
+

The number of shards that this bot should be split into.

+
+
+

Environment variable: QUARKUS_DISCORD4J_SHARDING_COUNT

+
+
+

int

+
+
+
+

Which shards from the configured number of shards that this bot will receive events from. The bot will receive events from all specified shards by default.

+
+
+

Environment variable: QUARKUS_DISCORD4J_SHARDING_INDICES

+
+
+

list of int

0

+
+
+
+

The number of shards that this bot will concurrently identify to the Gateway.

+
+
+ + + + + +
+ + +=== +This property should only ever be configured if the bot is allowed to use +very large sharding. +Otherwise, the bot will incur a rate limit when identifying to the Gateway. +=== +
+
+
+

Environment variable: QUARKUS_DISCORD4J_SHARDING_MAX_CONCURRENCY

+
+
+

int

+
+
+
+

Whether to serialize and register the JSON files found in path as commands in this guild on startup.

+
+
+

Environment variable: QUARKUS_DISCORD4J_GUILD_COMMANDS__GUILD_COMMANDS__OVERWRITE_ON_START

+
+
+

boolean

false

+
+
+
+

The path to the JSON files of the guild commands. By default, the path is <global-commands.path> + / + <config-name>

+
+
+

Environment variable: QUARKUS_DISCORD4J_GUILD_COMMANDS__GUILD_COMMANDS__PATH

+
+
+

string

+
+
+
+

Whether to delete commands registered in this guild whose JSON representation is not found in path.

+
+
+

Environment variable: QUARKUS_DISCORD4J_GUILD_COMMANDS__GUILD_COMMANDS__DELETE_MISSING

+
+
+

boolean

false

+
+
+
+

The ID of the guild.

+
+
+

Environment variable: QUARKUS_DISCORD4J_GUILD_COMMANDS__GUILD_COMMANDS__GUILD_ID

+
+
+

long

0l

Activity configuration +This configuration section is optional

Type

Default

+
+
+
+

The type of activity.

+
+
+

Environment variable: QUARKUS_DISCORD4J_PRESENCE_ACTIVITY_TYPE

+
+
+
+

unknown, playing, streaming, listening, watching, custom, competing

+

required

+
+
+
+

The name of the activity.

+
+
+

Environment variable: QUARKUS_DISCORD4J_PRESENCE_ACTIVITY_NAME

+
+
+

string

required

+
+
+
+

The YouTube or Twitch URL of the stream, if the activity type is streaming.

+
+
+

Environment variable: QUARKUS_DISCORD4J_PRESENCE_ACTIVITY_URL

+
+
+

string

+
+
+
+
+ + + + + + + diff --git a/quarkus-discord4j/dev/index.html b/quarkus-discord4j/dev/index.html new file mode 100644 index 0000000000..a85d9181c4 --- /dev/null +++ b/quarkus-discord4j/dev/index.html @@ -0,0 +1,934 @@ + + + + + + Quarkus Discord4J :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Discord4J

+
+

Quarkus Discord4J is an extension to streamline the development of WebSocket-based (Gateway) Discord bots in Quarkus.

+
+
+

Listen to Gateway events using annotations, generate a native executable, increase productivity with live reload, and more.

+
+
+

Uses the Discord4J library.

+
+
+
+
+
+ + + + + + + diff --git a/quarkus-discord4j/dev/reference.html b/quarkus-discord4j/dev/reference.html new file mode 100644 index 0000000000..b7dff2f15e --- /dev/null +++ b/quarkus-discord4j/dev/reference.html @@ -0,0 +1,1458 @@ + + + + + + Reference :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Reference

+
+

Preamble

+
+
+

You should be somewhat familiar with the Quarkus framework before creating your Quarkus Discord bot. Quarkus has extensive documentation at https://quarkus.io/guides to help you get started.

+
+
+

Additionally, the Discord4J documentation and the Discord API Gateway event documentation are essential resources to have on hand.

+
+
+ + + + + +
+ + +Discord4J uses Project Reactor as its reactive framework instead of Mutiny, the reactive layer most Quarkus users will be familiar with. For this reason, reactive listener methods support returning Mono instead of Uni and Flux instead of Multi, but you can still convert your Reactor streams into Mutiny streams if you want. +
+
+
+

The Choosing an Operator guide might be useful to you if you don’t want to convert your streams.

+
+
+
+
+

Events

+
+
+

Listening to events

+
+

To listen to Gateway events, simply declare a method with an event type parameter and annotate it with @GatewayEvent. The method can return Mono, Uni, Flux, or Multi.

+
+
+

Here’s an example of an imperative listener method:

+
+
+
+
class AddReaction {
+    Mono<Void> onMessageCreate(@GatewayEvent MessageCreateEvent event) {
+        return event.getMessage().addReaction(ReactionEmoji.of("🤖"));
+    }
+}
+
+
+
+

A few details about Gateway listener methods:

+
+
+
    +
  • +

    The declaring class and method can be public, protected, or package private

    +
  • +
  • +

    The declaring class has to be a concrete class

    +
  • +
  • +

    The method should be concrete

    +
  • +
  • +

    The annotated event must be the first parameter

    +
  • +
+
+
+
+

Event types

+
+

All the currently supported event types can be found by checking out the subclasses of the Event class.

+
+
+
+
+
+

Bean injection

+
+
+

Gateway client

+
+

You can inject a GatewayDiscordClient bean that exposes high level methods to manage Discord resources via REST, access the underlying entity cache, and manage your bot’s connection to the Gateway and Voice Gateway.

+
+
+ + + + + +
+ + +This usually isn’t necessary as each Discord4J event exposes the Gateway client via Event#getClient(), and you can manage most resources directly from its corresponding entity instance. +
+
+
+

An example:

+
+
+
+
@ApplicationScoped
+class MyBean {
+    @Inject
+    GatewayDiscordClient gateway;
+
+    // do something with gateway
+}
+
+
+
+
+

Into methods

+
+

Any method that listens to a Gateway event can inject beans as additional parameters.

+
+
+

For example:

+
+
+
+
class DeletePersistentMessage {
+    Mono<Void> onMessageDelete(@GatewayEvent MessageDeleteEvent event, EntityManager em) {
+        // do something with em
+    }
+}
+
+
+
+
+
+
+

Metrics

+
+
+

If your Quarkus app uses a metrics extension like Micrometer or SmallRye Metrics, you can enable metrics collection for your bot exposed at the /q/metrics endpoint by setting the configuration property quarkus.discord4j.metrics.enabled to true.

+
+
+

Currently, metrics are collected for the number of servers your bot is in and the number of voice channels your bot is in.

+
+
+
+
+

Health check

+
+
+

A readiness health check for your bot is automatically exposed at the /q/health/ready endpoint if your Quarkus app depends on SmallRye Health. All of your bot’s shards will be checked and the health status will be DOWN if any shard isn’t connected.

+
+
+

You can disable the health check by setting quarkus.discord4j.health.enabled to false.

+
+
+
+
+

Native executable

+
+
+

You can package your Discord bot into a native executable with GraalVM or Mandrel to reduce its memory footprint and speed up its boot time. See the Building a native executable guide for more information.

+
+
+
+
+

Configuration

+
+
+

You can configure the following properties:

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Whether a health check should be published for the Gateway clients managed by this extension if the quarkus-smallrye-health extension is present

+
+
+

Environment variable: QUARKUS_DISCORD4J_HEALTH_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether metrics should be collected for the Gateway clients managed by this extension if the quarkus-micrometer or quarkus-smallrye-metrics extension is present

+
+
+

Environment variable: QUARKUS_DISCORD4J_METRICS_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether to serialize and register the JSON files found in path as global commands on startup.

+
+
+

Environment variable: QUARKUS_DISCORD4J_GLOBAL_COMMANDS_OVERWRITE_ON_START

+
+
+

boolean

false

+
+
+
+

The path to the JSON files of the global commands.

+
+
+

Environment variable: QUARKUS_DISCORD4J_GLOBAL_COMMANDS_PATH

+
+
+

string

META-INF/commands

+
+
+
+

Whether to delete registered global commands whose JSON representation is not found in path.

+
+
+

Environment variable: QUARKUS_DISCORD4J_GLOBAL_COMMANDS_DELETE_MISSING

+
+
+

boolean

false

+
+
+
+

The bot token used to authenticate to the Discord API.

+
+
+

Environment variable: QUARKUS_DISCORD4J_TOKEN

+
+
+

string

required

+
+
+
+

The status of the bot.

+
+
+

Environment variable: QUARKUS_DISCORD4J_PRESENCE_STATUS

+
+
+
+

unknown, online, do-not-disturb, idle, invisible, offline

+
+
+
+
+

The Gateway intents that should be enabled. Specific Gateway intents are required to receive certain Gateway events. Non-privileged intents will be enabled by default.

+
+
+

Environment variable: QUARKUS_DISCORD4J_ENABLED_INTENTS

+
+
+

list of Intent

+
+
+
+

The strategy to use for retrieving Discord entities. Default is cache-fallback-rest.

+
+
+

Environment variable: QUARKUS_DISCORD4J_ENTITY_RETRIEVAL_STRATEGY

+
+
+

EntityRetrievalStrategy

+
+
+
+

The number of shards that this bot should be split into.

+
+
+

Environment variable: QUARKUS_DISCORD4J_SHARDING_COUNT

+
+
+

int

+
+
+
+

Which shards from the configured number of shards that this bot will receive events from. The bot will receive events from all specified shards by default.

+
+
+

Environment variable: QUARKUS_DISCORD4J_SHARDING_INDICES

+
+
+

list of int

0

+
+
+
+

The number of shards that this bot will concurrently identify to the Gateway.

+
+
+ + + + + +
+ + +=== +This property should only ever be configured if the bot is allowed to use +very large sharding. +Otherwise, the bot will incur a rate limit when identifying to the Gateway. +=== +
+
+
+

Environment variable: QUARKUS_DISCORD4J_SHARDING_MAX_CONCURRENCY

+
+
+

int

+
+
+
+

Whether to serialize and register the JSON files found in path as commands in this guild on startup.

+
+
+

Environment variable: QUARKUS_DISCORD4J_GUILD_COMMANDS__GUILD_COMMANDS__OVERWRITE_ON_START

+
+
+

boolean

false

+
+
+
+

The path to the JSON files of the guild commands. By default, the path is <global-commands.path> + / + <config-name>

+
+
+

Environment variable: QUARKUS_DISCORD4J_GUILD_COMMANDS__GUILD_COMMANDS__PATH

+
+
+

string

+
+
+
+

Whether to delete commands registered in this guild whose JSON representation is not found in path.

+
+
+

Environment variable: QUARKUS_DISCORD4J_GUILD_COMMANDS__GUILD_COMMANDS__DELETE_MISSING

+
+
+

boolean

false

+
+
+
+

The ID of the guild.

+
+
+

Environment variable: QUARKUS_DISCORD4J_GUILD_COMMANDS__GUILD_COMMANDS__GUILD_ID

+
+
+

long

0l

Activity configuration +This configuration section is optional

Type

Default

+
+
+
+

The type of activity.

+
+
+

Environment variable: QUARKUS_DISCORD4J_PRESENCE_ACTIVITY_TYPE

+
+
+
+

unknown, playing, streaming, listening, watching, custom, competing

+

required

+
+
+
+

The name of the activity.

+
+
+

Environment variable: QUARKUS_DISCORD4J_PRESENCE_ACTIVITY_NAME

+
+
+

string

required

+
+
+
+

The YouTube or Twitch URL of the stream, if the activity type is streaming.

+
+
+

Environment variable: QUARKUS_DISCORD4J_PRESENCE_ACTIVITY_URL

+
+
+

string

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-doma/dev/includes/attributes.html b/quarkus-doma/dev/includes/attributes.html new file mode 100644 index 0000000000..5346742426 --- /dev/null +++ b/quarkus-doma/dev/includes/attributes.html @@ -0,0 +1,912 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-doma/dev/includes/quarkus-doma.html b/quarkus-doma/dev/includes/quarkus-doma.html new file mode 100644 index 0000000000..c2881e725b --- /dev/null +++ b/quarkus-doma/dev/includes/quarkus-doma.html @@ -0,0 +1,1204 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The SQL dialect.

+
+
+

Environment variable: QUARKUS_DOMA_DIALECT

+
+
+
+

db2, h2, mssql, mysql, oracle, postgres, standard, sqlite

+

depends on 'quarkus.datasource.db-kind'

+
+
+
+

The batch size.

+
+
+

Environment variable: QUARKUS_DOMA_BATCH_SIZE

+
+
+

int

0

+
+
+
+

The fetch size.

+
+
+

Environment variable: QUARKUS_DOMA_FETCH_SIZE

+
+
+

int

0

+
+
+
+

The max rows.

+
+
+

Environment variable: QUARKUS_DOMA_MAX_ROWS

+
+
+

int

0

+
+
+
+

The query timeout limit in seconds.

+
+
+

Environment variable: QUARKUS_DOMA_QUERY_TIMEOUT

+
+
+

int

0

+
+
+
+

Name of the file containing the SQL statements to execute when Doma starts. Its default value differs depending on the Quarkus launch mode:

+
+
+

* In dev and test modes, it defaults to import.sql. Simply add an import.sql file in the root of your resources directory and it will be picked up without having to set this property. Pass no-file to force Doma to ignore the SQL import file. * In production mode, it defaults to no-file. It means Doma won’t try to execute any SQL import file by default. Pass an explicit value to force Doma to execute the SQL import file.

+
+
+

Environment variable: QUARKUS_DOMA_SQL_LOAD_SCRIPT

+
+
+

string

import.sql in DEV, TEST ; no-file otherwise

+
+
+
+

The SQL file repository.

+
+
+

Environment variable: QUARKUS_DOMA_SQL_FILE_REPOSITORY

+
+
+
+

no-cache, greedy-cache

+

greedy-cache

+
+
+
+

The naming convention controller.

+
+
+

Environment variable: QUARKUS_DOMA_NAMING

+
+
+
+

none, lower-case, upper-case, snake-lower-case, snake-upper-case

+

none

+
+
+
+

The SQL log type that determines the SQL log format in exceptions.

+
+
+

Environment variable: QUARKUS_DOMA_EXCEPTION_SQL_LOG_TYPE

+
+
+
+

raw, formatted, none

+

none

Additional named datasources

Type

Default

+
+
+
+

The SQL dialect.

+
+
+

Environment variable: QUARKUS_DOMA__DATASOURCE_NAME__DIALECT

+
+
+
+

db2, h2, mssql, mysql, oracle, postgres, standard, sqlite

+

depends on 'quarkus.datasource.db-kind'

+
+
+
+

The batch size.

+
+
+

Environment variable: QUARKUS_DOMA__DATASOURCE_NAME__BATCH_SIZE

+
+
+

int

0

+
+
+
+

The fetch size.

+
+
+

Environment variable: QUARKUS_DOMA__DATASOURCE_NAME__FETCH_SIZE

+
+
+

int

0

+
+
+
+

The max rows.

+
+
+

Environment variable: QUARKUS_DOMA__DATASOURCE_NAME__MAX_ROWS

+
+
+

int

0

+
+
+
+

The query timeout limit in seconds.

+
+
+

Environment variable: QUARKUS_DOMA__DATASOURCE_NAME__QUERY_TIMEOUT

+
+
+

int

0

+
+
+
+

Name of the file containing the SQL statements to execute when Doma starts. Its default value differs depending on the Quarkus launch mode:

+
+
+

* In dev and test modes, it defaults to import.sql. Simply add an import.sql file in the root of your resources directory and it will be picked up without having to set this property. Pass no-file to force Doma to ignore the SQL import file. * In production mode, it defaults to no-file. It means Doma won’t try to execute any SQL import file by default. Pass an explicit value to force Doma to execute the SQL import file.

+
+
+

Environment variable: QUARKUS_DOMA__DATASOURCE_NAME__SQL_LOAD_SCRIPT

+
+
+

string

import.sql in DEV, TEST ; no-file otherwise

+
+
+
+
+ + + + + + + diff --git a/quarkus-doma/dev/index.html b/quarkus-doma/dev/index.html new file mode 100644 index 0000000000..dea5a4ce37 --- /dev/null +++ b/quarkus-doma/dev/index.html @@ -0,0 +1,1451 @@ + + + + + + Quarkus Doma :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Doma

+
+

Introduction

+
+
+

Doma is a database access framework with support for type-safe Criteria API and SQL templates.

+
+
+

Quarkus Doma provides the following features for Doma:

+
+
+
    +
  • +

    Hot reloading

    +
  • +
  • +

    Automatic bean register

    +
  • +
  • +

    Automatic SQL execution on startup

    +
  • +
  • +

    Configuration

    +
  • +
  • +

    Multiple Datasources

    +
  • +
  • +

    Support for native images

    +
  • +
+
+
+
+
+

Supported Version

+
+
+

Quarkus Doma supports Quarkus v3.7.0 and later.

+
+ +
+
+
+

Main Features

+
+
+

Hot reloading

+
+

In development mode, Doma extension reloads SQL and Script files when they are changed.

+
+
+
+

Automatic bean register

+
+

Doma extension registers all DAO beans to the Quarkus CDI container.

+
+
+
+

Automatic SQL import on startup

+
+

Doma extension executes import.sql when Quarkus starts.

+
+
+
+

Configuration

+
+

You can write the following configurations in your application.properties file:

+
+
+
+
quarkus.doma.sql-file-repository=greedy-cache
+quarkus.doma.naming=none
+quarkus.doma.exception-sql-log-type=none
+quarkus.doma.dialect=h2
+quarkus.doma.batch-size=10
+quarkus.doma.fetch-size=50
+quarkus.doma.max-rows=500
+quarkus.doma.query-timeout=5000
+quarkus.doma.sql-load-script=import.sql
+
+
+
+

The above properties are all optional.

+
+
+
+

Multiple Datasources

+
+

You can bind Doma’s configurations to each datasource as follows:

+
+
+
+
# default datasource
+quarkus.datasource.db-kind=h2
+quarkus.datasource.username=username-default
+quarkus.datasource.jdbc.url=jdbc:h2:tcp://localhost/mem:default
+quarkus.datasource.jdbc.min-size=3
+quarkus.datasource.jdbc.max-size=13
+
+# inventory datasource
+quarkus.datasource.inventory.db-kind=h2
+quarkus.datasource.inventory.username=username2
+quarkus.datasource.inventory.jdbc.url=jdbc:h2:tcp://localhost/mem:inventory
+quarkus.datasource.inventory.jdbc.min-size=2
+quarkus.datasource.inventory.jdbc.max-size=12
+
+# Doma's configuration bound to the above default datasource
+quarkus.doma.dialect=h2
+quarkus.doma.batch-size=10
+quarkus.doma.fetch-size=50
+quarkus.doma.max-rows=500
+quarkus.doma.query-timeout=5000
+quarkus.doma.sql-load-script=import.sql
+
+# Doma's configuration bound to the above inventory datasource
+quarkus.doma.inventory.dialect=h2
+quarkus.doma.inventory.batch-size=10
+quarkus.doma.inventory.fetch-size=50
+quarkus.doma.inventory.max-rows=500
+quarkus.doma.inventory.query-timeout=5000
+quarkus.doma.inventory.sql-load-script=import.sql
+
+
+
+

You can inject the named Doma’s resource +using the io.quarkus.agroal.DataSource qualifier as follows:

+
+
+
+
@Inject
+Config defaultConfig;
+
+@Inject
+Entityql defaultEntityql;
+
+@Inject
+NativeSql defaultNativeSql;
+
+@Inject
+@DataSource("inventory")
+Config invetoryConfig;
+
+@Inject
+@DataSource("inventory")
+Entityql inventoryEntityql;
+
+@Inject
+@DataSource("inventory")
+NativeSql inventoryNativeSql;
+
+
+
+
+

Support for native images

+
+

Doma extension recognizes reflective classes and resources, +and includes them into your native image without additional configurations.

+
+
+
+
+
+

Installing

+
+
+

Gradle

+
+
+
dependencies {
+    annotationProcessor("org.seasar.doma:doma-processor:2.55.1")
+    implementation("org.seasar.doma:doma-core:2.55.1")
+    implementation("io.quarkiverse.doma:quarkus-doma:0.0.9")
+}
+
+
+
+
+

Maven

+
+
+
...
+<properties>
+    <doma.version>2.55.1</doma.version>
+    <quarkus-doma.version>0.0.9</quarkus-doma.version>
+    <compiler-plugin.version>3.9.0</compiler-plugin.version>
+</properties>
+...
+<dependencies>
+    <dependency>
+        <groupId>org.seasar.doma</groupId>
+        <artifactId>doma-core</artifactId>
+        <version>${doma.version}</version>
+    </dependency>
+    <dependency>
+        <groupId>io.quarkiverse.doma</groupId>
+        <artifactId>quarkus-doma</artifactId>
+        <version>${quarkus-doma.version}</version>
+    </dependency>
+</dependencies>
+...
+<build>
+    <plugins>
+        <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-compiler-plugin</artifactId>
+            <version>${compiler-plugin.version}</version>
+            <configuration>
+                <source>17</source>
+                <target>17</target>
+                <!-- the parameters=true option is critical so that RESTEasy works fine -->
+                <parameters>true</parameters>
+                <annotationProcessorPaths>
+                    <path>
+                        <groupId>org.seasar.doma</groupId>
+                        <artifactId>doma-processor</artifactId>
+                        <version>${doma.version}</version>
+                    </path>
+                </annotationProcessorPaths>
+            </configuration>
+        </plugin>
+    </plugins>
+</build>
+
+
+
+
+
+
+

Sample Project

+ +
+
+

Configuration References

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The SQL dialect.

+
+
+

Environment variable: QUARKUS_DOMA_DIALECT

+
+
+
+

db2, h2, mssql, mysql, oracle, postgres, standard, sqlite

+

depends on 'quarkus.datasource.db-kind'

+
+
+
+

The batch size.

+
+
+

Environment variable: QUARKUS_DOMA_BATCH_SIZE

+
+
+

int

0

+
+
+
+

The fetch size.

+
+
+

Environment variable: QUARKUS_DOMA_FETCH_SIZE

+
+
+

int

0

+
+
+
+

The max rows.

+
+
+

Environment variable: QUARKUS_DOMA_MAX_ROWS

+
+
+

int

0

+
+
+
+

The query timeout limit in seconds.

+
+
+

Environment variable: QUARKUS_DOMA_QUERY_TIMEOUT

+
+
+

int

0

+
+
+
+

Name of the file containing the SQL statements to execute when Doma starts. Its default value differs depending on the Quarkus launch mode:

+
+
+

* In dev and test modes, it defaults to import.sql. Simply add an import.sql file in the root of your resources directory and it will be picked up without having to set this property. Pass no-file to force Doma to ignore the SQL import file. * In production mode, it defaults to no-file. It means Doma won’t try to execute any SQL import file by default. Pass an explicit value to force Doma to execute the SQL import file.

+
+
+

Environment variable: QUARKUS_DOMA_SQL_LOAD_SCRIPT

+
+
+

string

import.sql in DEV, TEST ; no-file otherwise

+
+
+
+

The SQL file repository.

+
+
+

Environment variable: QUARKUS_DOMA_SQL_FILE_REPOSITORY

+
+
+
+

no-cache, greedy-cache

+

greedy-cache

+
+
+
+

The naming convention controller.

+
+
+

Environment variable: QUARKUS_DOMA_NAMING

+
+
+
+

none, lower-case, upper-case, snake-lower-case, snake-upper-case

+

none

+
+
+
+

The SQL log type that determines the SQL log format in exceptions.

+
+
+

Environment variable: QUARKUS_DOMA_EXCEPTION_SQL_LOG_TYPE

+
+
+
+

raw, formatted, none

+

none

Additional named datasources

Type

Default

+
+
+
+

The SQL dialect.

+
+
+

Environment variable: QUARKUS_DOMA__DATASOURCE_NAME__DIALECT

+
+
+
+

db2, h2, mssql, mysql, oracle, postgres, standard, sqlite

+

depends on 'quarkus.datasource.db-kind'

+
+
+
+

The batch size.

+
+
+

Environment variable: QUARKUS_DOMA__DATASOURCE_NAME__BATCH_SIZE

+
+
+

int

0

+
+
+
+

The fetch size.

+
+
+

Environment variable: QUARKUS_DOMA__DATASOURCE_NAME__FETCH_SIZE

+
+
+

int

0

+
+
+
+

The max rows.

+
+
+

Environment variable: QUARKUS_DOMA__DATASOURCE_NAME__MAX_ROWS

+
+
+

int

0

+
+
+
+

The query timeout limit in seconds.

+
+
+

Environment variable: QUARKUS_DOMA__DATASOURCE_NAME__QUERY_TIMEOUT

+
+
+

int

0

+
+
+
+

Name of the file containing the SQL statements to execute when Doma starts. Its default value differs depending on the Quarkus launch mode:

+
+
+

* In dev and test modes, it defaults to import.sql. Simply add an import.sql file in the root of your resources directory and it will be picked up without having to set this property. Pass no-file to force Doma to ignore the SQL import file. * In production mode, it defaults to no-file. It means Doma won’t try to execute any SQL import file by default. Pass an explicit value to force Doma to execute the SQL import file.

+
+
+

Environment variable: QUARKUS_DOMA__DATASOURCE_NAME__SQL_LOAD_SCRIPT

+
+
+

string

import.sql in DEV, TEST ; no-file otherwise

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-embedded-postgresql/dev/includes/attributes.html b/quarkus-embedded-postgresql/dev/includes/attributes.html new file mode 100644 index 0000000000..f95bfbb566 --- /dev/null +++ b/quarkus-embedded-postgresql/dev/includes/attributes.html @@ -0,0 +1,912 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-embedded-postgresql/dev/includes/quarkus-embedded-postgresql.html b/quarkus-embedded-postgresql/dev/includes/quarkus-embedded-postgresql.html new file mode 100644 index 0000000000..e9150668bd --- /dev/null +++ b/quarkus-embedded-postgresql/dev/includes/quarkus-embedded-postgresql.html @@ -0,0 +1,996 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Directory where persistence information is hold

+
+
+

Environment variable: QUARKUS_EMBEDDED_POSTGRESQL_DATA_DIR

+
+
+

string

+
+
+
+

How long PostgreSQL will have to start before it times out. Value is milliseconds.

+
+
+

Environment variable: QUARKUS_EMBEDDED_POSTGRESQL_STARTUP_WAIT

+
+
+

long

+
+
+
+

Optionally configurable port for the postgresql server. If not set, 62537 is picked.

+
+
+

Environment variable: QUARKUS_EMBEDDED_POSTGRESQL_PORT

+
+
+

int

+
+
+
+

Set string type

+
+
+

Environment variable: QUARKUS_EMBEDDED_POSTGRESQL_STRING_TYPE

+
+
+

string

unspecified

+
+
+
+
+ + + + + + + diff --git a/quarkus-embedded-postgresql/dev/index.html b/quarkus-embedded-postgresql/dev/index.html new file mode 100644 index 0000000000..7df5dfacbc --- /dev/null +++ b/quarkus-embedded-postgresql/dev/index.html @@ -0,0 +1,1035 @@ + + + + + + Quarkus Embedded Postgresql :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Embedded Postgresql

+
+
+
+

An alternative to quarkus-jdbc-postgres that rather than instantiating a pgsql server, uses zonky embedded library, reducing memory footprint.

+
+
+

It is mainly oriented for single pod k8s deployments or integration testing.

+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.embedded.postgresql:quarkus-embedded-postgresql extension to your build file.

+
+
+

For instance, with Maven, add the following dependency to your POM file:

+
+
+
+
<dependency>
+  <groupId>io.quarkiverse.embedded.postgresql</groupId>
+  <artifactId>quarkus-embedded-postgresql</artifactId>
+</dependency>
+
+
+
+
+
+

Extension Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Directory where persistence information is hold

+
+
+

Environment variable: QUARKUS_EMBEDDED_POSTGRESQL_DATA_DIR

+
+
+

string

+
+
+
+

How long PostgreSQL will have to start before it times out. Value is milliseconds.

+
+
+

Environment variable: QUARKUS_EMBEDDED_POSTGRESQL_STARTUP_WAIT

+
+
+

long

+
+
+
+

Optionally configurable port for the postgresql server. If not set, 62537 is picked.

+
+
+

Environment variable: QUARKUS_EMBEDDED_POSTGRESQL_PORT

+
+
+

int

+
+
+
+

Set string type

+
+
+

Environment variable: QUARKUS_EMBEDDED_POSTGRESQL_STRING_TYPE

+
+
+

string

unspecified

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-file-vault/dev/config-source-config.html b/quarkus-file-vault/dev/config-source-config.html new file mode 100644 index 0000000000..62780e5650 --- /dev/null +++ b/quarkus-file-vault/dev/config-source-config.html @@ -0,0 +1,970 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Keystore path.

+
+
+

String

+
+
+
+

Keystore secret.

+
+
+

String

+
+
+
+

Encryption key which was used to mask the keystore secret.

+
+
+

String

+
+
+
+
+ + + + + + + diff --git a/quarkus-file-vault/dev/config.html b/quarkus-file-vault/dev/config.html new file mode 100644 index 0000000000..5e7a3a0f59 --- /dev/null +++ b/quarkus-file-vault/dev/config.html @@ -0,0 +1,970 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Determine if the File Vault extension is enabled

+
+
+

boolean

true

+
+
+
+

Key Store configuration which can include Map path (path to the keystore), secret (keystore password), encryption-key (required if secret is a masked keystore password) and alias (required secret key alias) properties, for example, quarkus.file.vault.provider.db1.path, quarkus.file.vault.provider.db1.secret, quarkus.file.vault.provider.db1.encryption-key, quarkus.file.vault.provider.db1.alias.

+
+
+

Map

+
+
+
+

Set the alias which is used to extract a secret from the key store as a 'user' property.

+
+
+

boolean

true

+
+
+
+
+ + + + + + + diff --git a/quarkus-file-vault/dev/index.html b/quarkus-file-vault/dev/index.html new file mode 100644 index 0000000000..529ebb61f1 --- /dev/null +++ b/quarkus-file-vault/dev/index.html @@ -0,0 +1,1375 @@ + + + + + + Quarkus - File Vault :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus - File Vault

+
+

Introduction

+
+
+

This project provides Quarkus CredentialsProvider and MicroProfile [ConfigSource](https://quarkus.io/guides/config-extending-support#custom-config-source) which extracts passwords and other sensitive data from Java KeyStore.

+
+
+

Java KeyStore is used as a file-based Vault. Sensitive data can be imported to and securely stored in this Vault as Java SecretKey values. Imported certificates are also supported.

+
+
+
+
+

Installation

+
+
+

If you would like to use File Vault as CredentialsProvider then add the io.quarkiverse.file-vault:quarkus-file-vault dependency in your pom.xml:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.file-vault</groupId>
+    <artifactId>quarkus-file-vault</artifactId>
+</dependency>
+
+
+
+

If you would like to use File Vault as ConfigSource then add the io.quarkiverse.file-vault:quarkus-file-vault-config-source dependency in your pom.xml:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.file-vault</groupId>
+    <artifactId>quarkus-file-vault-config-source</artifactId>
+</dependency>
+
+
+
+
+
+

Getting Started

+
+
+

First a Java Keystore has to be created and the data imported to it using a Java keytool and its -importpass option, for example:

+
+
+
+
keytool -importpass -alias quarkus_test -keystore dbpasswords.p12 -storepass storepassword -storetype PKCS12
+
+
+
+

This command creates a keystore dbpasswords.p12 with a secret key whose alias is quarkus_test.

+
+
+
+
+

Use File Vault CredentialsProvider

+
+
+

Once you have one or more keystore prepared you can use File Vault as CredentialsProvider with Quarkus extensions which integrate with CredentialsProvider.

+
+
+

For example, here is how you can configure it with Agroal:

+
+
+
+
quarkus.datasource.db-kind=postgresql
+quarkus.datasource.jdbc.url=jdbc:postgresql://localhost/quarkus_test
+quarkus.datasource.credentials-provider=quarkus.file.vault.provider.db1
+
+quarkus.file.vault.provider.db1.path=dbpasswords.p12
+quarkus.file.vault.provider.db1.secret=storepassword
+quarkus.file.vault.provider.db1.alias=quarkus_test
+
+quarkus.hibernate-orm.database.generation=drop-and-create
+quarkus.hibernate-orm.log.sql=true
+quarkus.hibernate-orm.sql-load-script=import.sql
+
+
+
+

In this example quarkus.datasource.credentials-provider refers to FileVaultCredentialsProvider as quarkus.file.vault.provider.db1.

+
+
+

The name format is quarkus.file.vault.provider.<name>, where <name> identifies a specific keystore configuration which in this case is:

+
+
+
+
quarkus.file.vault.provider.db1.path=dbpasswords.p12
+quarkus.file.vault.provider.db1.secret=storepassword
+quarkus.file.vault.provider.db1.alias=quarkus_test
+
+
+
+

You can configure as many keystores as required.

+
+
+

Note setting a keystore alias (quarkus.file.vault.provider.db1.alias=quarkus_test) in the properties is optional. Instead you can pass it like this:

+
+
+
+
quarkus.datasource.db-kind=postgresql
+quarkus.datasource.jdbc.url=jdbc:postgresql://localhost/quarkus_test
+quarkus.datasource.credentials-provider=quarkus.file.vault.provider.db1.quarkus_test
+
+quarkus.file.vault.provider.db1.path=dbpasswords.p12
+quarkus.file.vault.provider.db1.secret=storepassword
+
+
+
+

This is way you can refer to the same keystore but use a different alias each time.

+
+
+

FileVaultCredentialsProvider will return the extracted secret key as a password property. It will also use alias value to return a user property. The extensions such as Agroal will accept both properties.

+
+
+

However, you can choose for only a password property be returned with quarkus.file.vault.set-alias-as-user=false. In this case you will need to configure a username with the extension specific property, for example, when working with Agroal you can use quarkus.datasource.username.

+
+
+

Finally, if a keystore alias is not set in application.properties (for example, quarkus.file.vault.provider.db1.alias=quarkus_test) and is not encoded in the credentials provider name (for example, quarkus.datasource.credentials-provider=quarkus.file.vault.provider.db1.quarkus_test) then the provider will return all the keystore entries.

+
+
+

Use FileVaultCredentialsProvider directly

+
+

You can access this CredentialsProvider like this from your code:

+
+
+
+
package io.quarkiverse.filevault.it;
+
+import java.io.ByteArrayInputStream;
+import java.nio.charset.StandardCharsets;
+import java.security.cert.CertificateFactory;
+import java.security.cert.X509Certificate;
+
+import java.util.Map;
+import io.quarkus.credentials.CredentialsProvider;
+import io.quarkus.credentials.runtime.CredentialsProviderFinder;
+...
+
+CredentialsProvider cp = CredentialsProviderFinder.find("quarkus.file.vault");
+
+// Use a `quarkus_test` alias to get a secret value from the keystore `db1`
+// where the alias is set in `application.properties`:
+
+cp.getCredentials("quarkus.file.vault.provider.db1");
+
+// Use a `quarkus_test` alias to get a secret value from the keystore `db1` by passing it directly to the provider:
+
+Map<String, String> props = cp.getCredentials("quarkus.file.vault.provider.db1.quarkus_test");
+String user = props.get(CredentialsProvider.USER_PROPERTY_NAME);
+String secret = props.get(CredentialsProvider.PASSWORD_PROPERTY_NAME);
+
+// Use a `quarkus_cert` alias to get the encoded `X509Certificate` from the keystore `db1` by passing it directly to the provider:
+
+Map<String, String> props = cp.getCredentials("quarkus.file.vault.provider.db1.quarkus_cert");
+String user = props.get(CredentialsProvider.USER_PROPERTY_NAME);
+String encodedCert = props.get("certificate");
+CertificateFactory cf = CertificateFactory.getInstance("X.509");
+X509Certificate cert = (X509Certificate) cf
+   .generateCertificate(new ByteArrayInputStream(encodedCert.getBytes(StandardCharsets.ISO_8859_1)));
+
+
+
+
+
+
+

Use File Vault ConfigSource

+
+
+

Once you have a keystore prepared you can use File Vault as ConfigSource.

+
+
+

For example, here is how you can configure it with Agroal:

+
+
+
+
quarkus.datasource.db-kind=postgresql
+quarkus.datasource.jdbc.url=jdbc:postgresql://localhost/quarkus_test
+quarkus.datasource.username=quarkus_test
+quarkus.datasource.password=${quarkus_test}
+
+quarkus.file.vault-config-source.keystore-path=dbpasswords.p12
+quarkus.file.vault-config-source.keystore-secret=storepassword
+
+quarkus.hibernate-orm.database.generation=drop-and-create
+quarkus.hibernate-orm.log.sql=true
+quarkus.hibernate-orm.sql-load-script=import.sql
+
+
+
+
+
+

Protect keystore passwords.

+
+
+

You need to specify a keystore password in application.properties for Quarkus File Vault be able to extract secrets from the keystore. +However this keystore password is a sensitive value and therefore you should consider how to minimize a risk of leaking it and how to protect it.

+
+
+

One important thing you should be aware of is that leaking this password does not necessarily mean the actual secrets stored in the keystore will also be leaked since an unauthorized person will also need to access the actual keystore file. Restricting an access to the keystore file to a limited number of roles and having Quarkus processes running in one of these roles will make it harder for anyone outside of this group access the keystore. The keystore password can be set as an environment variable and this password should be periodically changed to limit a window during which an attacker can try to get to the keystore.

+
+
+

Use ConfigSource

+
+

However if you do need to avoid setting a keystore password in application.properties then you can use a custom MicroProfile ConfigSource, for example.

+
+
+
+
package io.quarkiverse.filevault.it;
+
+import java.util.Set;
+
+import org.eclipse.microprofile.config.spi.ConfigSource;
+
+public class KeyStoreConfigSource implements ConfigSource {
+
+    @Override
+    public Set<String> getPropertyNames() {
+        return Set.of("db1.storepassword");
+    }
+
+    @Override
+    public String getValue(String propertyName) {
+        return "db1.storepassword".equals(propertyName) ? "storepassword" : null;
+    }
+
+    @Override
+    public String getName() {
+        return "file-vault-config-source";
+    }
+
+}
+
+
+
+

add org.eclipse.microprofile.config.spi.ConfigSource service provider entry listing io.quarkiverse.filevault.it.KeyStoreConfigSource to META-INF/services.

+
+
+

Next, refer to the keystore password like this if you use File Vault as CredentialsProvider:

+
+
+
+
quarkus.file.vault.provider.db1.path=dbpasswords.p12
+quarkus.file.vault.provider.db1.secret=${db1.storepassword}
+
+
+
+

or refer to the keystore password like this if you use File Vault as ConfigSource:

+
+
+
+
quarkus.file.vault-config-source.keystore-path=dbpasswords.p12
+quarkus.file.vault-config-source.keystore-secret=${db1.storepassword}
+
+
+
+

Please note that in this example, hardcoding a keystore password such as db1.storepassword in KeyStoreConfigSource is only done to simplify the documentation. +In real world applications, custom ConfigSource implementations will read it from a DB or other secure storage.

+
+
+

For example, Quarkus Vault extension provides a ConfigSource which can fetch secrets from a HashiCorp Vault.

+
+
+
+

Mask Keystore Password

+
+

If you need to mask a keystore password (quarkus.file.vault.provider.<name>.secret) you will need to build and package the Vault Utils project.

+
+
+
+
mvn clean install
+
+
+
+

After that, you will be able to execute the --help command:

+
+
+
+
$ java -jar target/quarkus-app/quarkus-run.jar --help
+
+Usage: Encrypt Secret Util [-hV] [-e=<encryptionKey>] -p=<keystorePassword>
+  -e, --encryption-key=<encryptionKey> (optional) Encryption Key
+  -h, --help          Show this help message and exit.
+  -p, --keystore-password=<keystorePassword> (mandatory) Keystore password
+  -V, --version       Print version information and exit.
+
+
+
+

The only mandatory parameter is a keystore password: -p, --keystore-password. +The encryption key will be auto-generated unless it is provided with: -e, --encryption-key.

+
+
+

Here is how you can mask a keystore password:

+
+
+
+
$ java -jar target/quarkus-app/quarkus-run.jar -p storedpass -e justsomestringhere
+
+
+
+

You should see something like this at the output:

+
+
+
+
#######################################################################################################################################################
+Please add the following parameters to application.properties if you use File Vault as CredentialsProvider and replace the <keystore-name>:
+
+quarkus.file.vault.provider.<name>.encryption-key=justsomestringhere
+quarkus.file.vault.provider.<name>.secret=4VLLc9bk+WMnQMR3ezJcpw
+
+Please add the following parameters to application.properties if you use File Vault as ConfigSource:
+
+quarkus.file.vault-config-source.encryption-key=justsomestringhere
+quarkus.file.vault-config-source.keystore-secret=4VLLc9bk+WMnQMR3ezJcpw
+########################################################################################################################################################
+
+
+
+

Note even though you now have the keystore password storedpass masked as 4VLLc9bk+WMnQMR3ezJcpw, the encryption key which was used to mask it remains in a clear text so it should be protected similarly to how an unmasked keystore password should be, for example, using a ConfigSource or environment variables. As such the main advantage of masking the password is to introduce an extra level of indirection to make it more complex to get to the keystore password itself.

+
+
+
+
+
+

HashiCorp Vault

+
+
+

Quarkus Vault extension can be used as a ConfigSource with Quarkus File Vault to protect the keystore passwords, but it can also act as an alternative to Quarkus File Vault as a CredentialsProvider implementation.

+
+
+
+
+

Configuration Reference

+
+
+

File Vault CredentialsProvider

+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Determine if the File Vault extension is enabled

+
+
+

boolean

true

+
+
+
+

Key Store configuration which can include Map path (path to the keystore), secret (keystore password), encryption-key (required if secret is a masked keystore password) and alias (required secret key alias) properties, for example, quarkus.file.vault.provider.db1.path, quarkus.file.vault.provider.db1.secret, quarkus.file.vault.provider.db1.encryption-key, quarkus.file.vault.provider.db1.alias.

+
+
+

Map

+
+
+
+

Set the alias which is used to extract a secret from the key store as a 'user' property.

+
+
+

boolean

true

+
+
+

File Vault ConfigSource

+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Keystore path.

+
+
+

String

+
+
+
+

Keystore secret.

+
+
+

String

+
+
+
+

Encryption key which was used to mask the keystore secret.

+
+
+

String

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-freemarker/dev/config.html b/quarkus-freemarker/dev/config.html new file mode 100644 index 0000000000..6e2d0641e5 --- /dev/null +++ b/quarkus-freemarker/dev/config.html @@ -0,0 +1,1082 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Comma-separated list of absolute resource paths to scan recursively for templates. All tree folder from 'resource-paths' will be added as a resource. Unprefixed locations or locations starting with classpath will be processed in the same way.

+
+
+

list of string

freemarker/templates

+
+
+
+

Comma-separated of file system paths where freemarker templates are located

+
+
+

list of string

+
+
+
+

Set the preferred charset template files are stored in.

+
+
+

string

+
+
+
+

Sets how errors will appear. rethrow, debug, html-debug, ignore.

+
+
+

string

+
+
+
+

If false, don’t log exceptions inside FreeMarker that it will be thrown at you anyway.

+
+
+

boolean

+
+
+
+

Wrap unchecked exceptions thrown during template processing into TemplateException-s.

+
+
+

boolean

+
+
+
+

If false, do not fall back to higher scopes when reading a null loop variable.

+
+
+

boolean

+
+
+
+

The string value for the boolean true and false values, usually intended for human consumption (not for a computer language), separated with comma.

+
+
+

string

+
+
+
+

Sets the default number format used to convert numbers to strings.

+
+
+

string

+
+
+
+

If true, the object wrapper will be configured to expose fields.

+
+
+

boolean

+
+
+
+

List of directives to register with format name=classname

+
+
+

Map<String,String>

+
+
+
+
+ + + + + + + diff --git a/quarkus-freemarker/dev/includes/attributes.html b/quarkus-freemarker/dev/includes/attributes.html new file mode 100644 index 0000000000..2373177e5b --- /dev/null +++ b/quarkus-freemarker/dev/includes/attributes.html @@ -0,0 +1,912 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-freemarker/dev/includes/quarkus-freemarker.html b/quarkus-freemarker/dev/includes/quarkus-freemarker.html new file mode 100644 index 0000000000..bf249441a8 --- /dev/null +++ b/quarkus-freemarker/dev/includes/quarkus-freemarker.html @@ -0,0 +1,1245 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Comma-separated list of absolute resource paths to scan recursively for templates. All tree folder from 'resource-paths' will be added as a resource. Unprefixed locations or locations starting with classpath will be processed in the same way. +Defaults relevant for this option are documented on quarkus.freemarker.base-path

+
+
+

Environment variable: QUARKUS_FREEMARKER_RESOURCE_PATHS

+
+
+

list of string

+
+
+
+

The base path of this template set. Template set is a triple of base-path, includes and excludes serving to select a number of templates for inclusion in the native image. includes and excludes are relative to base-path. +Use slash (/) as a path separator on all platforms. The value must not start with a slash. +Do not set any base-path value if you want includes and excludes to be relative to root resource path. Defaults Option Default value in case none of +quarkus.freemarker.[base-path|includes|excludes|resource-paths] +is set Default value otherwise quarkus.freemarker.base-path freemarker/templates not set (interpreted as root resource path folder) quarkus.freemarker.includes ** not set (no files included) quarkus.freemarker.excludes not set (no files excluded) not set (no files excluded) +The defaults described in the second column of the table are to achieve the backwards compatibility with the behavior of quarkus.freemarker.resource-paths before Quarkus Freemarker 0.2.0. +Allowed combinations +Setting base-path and/or excludes but not setting includes will result in a build time error. We have chosen this behavior (rather than using ** as a default for includes) to avoid including all resources inadvertently and thus bloating your native image.

+
+
+

Environment variable: QUARKUS_FREEMARKER_BASE_PATH

+
+
+

string

+
+
+
+

A comma separated list of globs to select FreeMarker templates for inclusion in the native image. +includes are relative to base-path. Use slash (/) as a path separator on all platforms. The glob syntax is documented on quarkus.native.resources.includes. +Example: quarkus.freemarker.includes = **.ftl

+
+
+

Environment variable: QUARKUS_FREEMARKER_INCLUDES

+
+
+

list of string

+
+
+
+

A comma separated list of globs not to include in the native image. +excludes are relative to base-path. Use slash (/) as a path separator on all platforms. The glob syntax is documented on quarkus.native.resources.includes. +Example: quarkus.freemarker.excludes = **/unwanted*

+
+
+

Environment variable: QUARKUS_FREEMARKER_EXCLUDES

+
+
+

list of string

+
+
+
+

Comma-separated of file system paths where freemarker templates are located

+
+
+

Environment variable: QUARKUS_FREEMARKER_FILE_PATHS

+
+
+

list of string

+
+
+
+

Set the preferred charset template files are stored in.

+
+
+

Environment variable: QUARKUS_FREEMARKER_DEFAULT_ENCODING

+
+
+

string

+
+
+
+

Sets how errors will appear. rethrow, debug, html-debug, ignore.

+
+
+

Environment variable: QUARKUS_FREEMARKER_TEMPLATE_EXCEPTION_HANDLER

+
+
+

string

+
+
+
+

If false, don’t log exceptions inside FreeMarker that it will be thrown at you anyway.

+
+
+

Environment variable: QUARKUS_FREEMARKER_LOG_TEMPLATE_EXCEPTIONS

+
+
+

boolean

+
+
+
+

Wrap unchecked exceptions thrown during template processing into TemplateException-s.

+
+
+

Environment variable: QUARKUS_FREEMARKER_WRAP_UNCHECKED_EXCEPTIONS

+
+
+

boolean

+
+
+
+

If false, do not fall back to higher scopes when reading a null loop variable.

+
+
+

Environment variable: QUARKUS_FREEMARKER_FALLBACK_ON_NULL_LOOP_VARIABLE

+
+
+

boolean

+
+
+
+

The string value for the boolean true and false values, usually intended for human consumption (not for a computer language), separated with comma.

+
+
+

Environment variable: QUARKUS_FREEMARKER_BOOLEAN_FORMAT

+
+
+

string

+
+
+
+

Sets the default number format used to convert numbers to strings.

+
+
+

Environment variable: QUARKUS_FREEMARKER_NUMBER_FORMAT

+
+
+

string

+
+
+
+

If true, the object wrapper will be configured to expose fields.

+
+
+

Environment variable: QUARKUS_FREEMARKER_OBJECT_WRAPPER_EXPOSE_FIELDS

+
+
+

boolean

+
+
+
+

List of directives to register with format name=classname

+
+
+

Environment variable: QUARKUS_FREEMARKER_DIRECTIVES

+
+
+

Map<String,String>

Additional named template sets

Type

Default

+
+
+
+

The base path of this template set. Template set is a triple of base-path, includes and excludes serving to select a number of templates for inclusion in the native image. includes and excludes are relative to base-path. +Use slash (/) as a path separator on all platforms. The value must not start with a slash. +Do not set any base-path value if you want includes and excludes to be relative to root resource path. Defaults Option Default value in case none of +quarkus.freemarker.[base-path|includes|excludes|resource-paths] +is set Default value otherwise quarkus.freemarker.base-path freemarker/templates not set (interpreted as root resource path folder) quarkus.freemarker.includes ** not set (no files included) quarkus.freemarker.excludes not set (no files excluded) not set (no files excluded) +The defaults described in the second column of the table are to achieve the backwards compatibility with the behavior of quarkus.freemarker.resource-paths before Quarkus Freemarker 0.2.0. +Allowed combinations +Setting base-path and/or excludes but not setting includes will result in a build time error. We have chosen this behavior (rather than using ** as a default for includes) to avoid including all resources inadvertently and thus bloating your native image.

+
+
+

Environment variable: QUARKUS_FREEMARKER__TEMPLATE_SET_NAME__BASE_PATH

+
+
+

string

+
+
+
+

A comma separated list of globs to select FreeMarker templates for inclusion in the native image. +includes are relative to base-path. Use slash (/) as a path separator on all platforms. The glob syntax is documented on quarkus.native.resources.includes. +Example: quarkus.freemarker.includes = **.ftl

+
+
+

Environment variable: QUARKUS_FREEMARKER__TEMPLATE_SET_NAME__INCLUDES

+
+
+

list of string

+
+
+
+

A comma separated list of globs not to include in the native image. +excludes are relative to base-path. Use slash (/) as a path separator on all platforms. The glob syntax is documented on quarkus.native.resources.includes. +Example: quarkus.freemarker.excludes = **/unwanted*

+
+
+

Environment variable: QUARKUS_FREEMARKER__TEMPLATE_SET_NAME__EXCLUDES

+
+
+

list of string

+
+
+
+
+ + + + + + + diff --git a/quarkus-freemarker/dev/index.html b/quarkus-freemarker/dev/index.html new file mode 100644 index 0000000000..0cd0deb586 --- /dev/null +++ b/quarkus-freemarker/dev/index.html @@ -0,0 +1,1471 @@ + + + + + + Quarkus Freemarker :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Freemarker

+
+
+
+

Freemarker is a very popular and mature templating engine. Its integration as a Quarkus extension +provides developers ease of configuration, and offers support for native images. +In this guide, you will learn how to easily render Freemarker templates in your application.

+
+
+
+
+

Hello World

+
+
+

If you want to use Freemarker you need to add the quarkiverse-freemarker extension first. +In your pom.xml file, add:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse</groupId>
+    <artifactId>quarkiverse-freemarker</artifactId>
+    <version>{project-version}</version>
+</dependency>
+
+
+
+

We’ll start with a very simple template:

+
+
+
hello.ftl
+
+
Hello ${name}! (1)
+
+
+
+ + + + + +
1${name} is a value expression that is evaluated when the template is rendered.
+
+
+

Now let’s inject the template in the resource class.

+
+
+
HelloResource.java
+
+
package org.acme.quarkus.sample;
+
+import jakarta.inject.Inject;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.QueryParam;
+
+import freemarker.template.Template;
+import io.quarkiverse.freemarker.runtime.TemplatePath;
+
+@Path("hello")
+public class HelloResource {
+
+    @Inject
+    @TemplatePath("hello.ftl") (1)
+    Template hello;
+
+    @GET
+    @Produces(TEXT_PLAIN)
+    public String hello(@QueryParam("name") String name) throws IOException, TemplateException {
+        StringWriter stringWriter = new StringWriter();
+        hello.process(Map.of("name", name), stringWriter); (2)
+        return stringWriter.toString();
+    }
+}
+
+
+
+ + + + + + + + + +
1The @TemplatePath qualifier specifies the template name, found in either jar resource paths or external file paths.
2Map.of("name", name) provides the model.
+
+
+

If your application is running, you can request the endpoint:

+
+
+
+
$ curl -w "\n" http://localhost:8080/hello?name=bob
+Hello bob!
+
+
+
+
+
+

Usage

+
+
+

The application code can either directly inject a Freemarker Template bean as we saw above. +In that case it must provide a TemplatePath qualifier annotation with the name +of the template to select.

+
+
+

Or it can inject a Freemarker Configuration bean, from which templates +can be obtained programmatically. The Configuration is a Singleton +DefaultBean that can be replaced by an application provided implementation.

+
+
+

The default Configuration bean is configured from quarkus exposed +properties. Among those, 2 are build time:

+
+
+
    +
  • +

    resource-paths is a list of resource paths contained in the classpath (e.g. +typically in jars of the application). Each path is traversed recursively, and +all files get added as native resources when building a native image.

    +
  • +
  • +

    directives is a map of directive alias to directive class name. Each directive +class is added as a shared variable in the Configuration bean.

    +
  • +
+
+
+

Here is an example of using a Configuration bean instead of a Template bean:

+
+
+
+
    @Inject
+    Configuration configuration;
+
+    @GET
+    @Produces(TEXT_PLAIN)
+    public String hello(@QueryParam("name") String name, @QueryParam("ftl") String ftl) throws IOException, TemplateException {
+        StringWriter stringWriter = new StringWriter();
+        configuration.getTemplate(ftl).process(model, stringWriter);
+        return stringWriter.toString();
+    }
+
+
+
+

The rest of the configuration properties can be provided at runtime, such as +a list of external filesystem paths where to find additional templates, +and optional properties that can be configured on the Freemarker Configuration class.

+
+
+
+
+

Directives

+
+
+

Freemarker can be extended using custom directives. For instance if we wanted +to transform some text in base64, we could write:

+
+
+
+
package org.acme.quarkus.sample;
+
+public class Base64Directive implements TemplateDirectiveModel {
+    @Override
+    public void execute(Environment environment, Map map, TemplateModel[] templateModels, TemplateDirectiveBody body)
+            throws TemplateException, IOException {
+        StringWriter sw = new StringWriter();
+        body.render(sw);
+        byte[] bytes = Base64.getEncoder().encode(sw.toString().getBytes(UTF_8));
+        environment.getOut().write(new String(bytes, UTF_8));
+    }
+}
+
+
+
+

Then we would have to configure the application with:

+
+
+
+
quarkus.freemarker.directives.base64=org.acme.quarkus.sample.Base64Directive
+
+
+
+

And finally, we would use it in templates such as:

+
+
+
+
Hello <@base64>$\{name}</@base64>!
+
+
+
+

This would be rendered as:

+
+
+
+
Hello Ym9i!
+
+
+
+
+
+

Data model

+
+
+

Freemarker supports Map or Object based data models. +When using objects, it is important to configure +quarkus.freemarker.object-wrapper-expose-fields=true if model classes +do not have getters.

+
+
+

Additionnaly, they should be annotated with +@RegisterForReflection to support native images.

+
+
+
+
+

Extension Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Comma-separated list of absolute resource paths to scan recursively for templates. All tree folder from 'resource-paths' will be added as a resource. Unprefixed locations or locations starting with classpath will be processed in the same way. +Defaults relevant for this option are documented on quarkus.freemarker.base-path

+
+
+

Environment variable: QUARKUS_FREEMARKER_RESOURCE_PATHS

+
+
+

list of string

+
+
+
+

The base path of this template set. Template set is a triple of base-path, includes and excludes serving to select a number of templates for inclusion in the native image. includes and excludes are relative to base-path. +Use slash (/) as a path separator on all platforms. The value must not start with a slash. +Do not set any base-path value if you want includes and excludes to be relative to root resource path. Defaults Option Default value in case none of +quarkus.freemarker.[base-path|includes|excludes|resource-paths] +is set Default value otherwise quarkus.freemarker.base-path freemarker/templates not set (interpreted as root resource path folder) quarkus.freemarker.includes ** not set (no files included) quarkus.freemarker.excludes not set (no files excluded) not set (no files excluded) +The defaults described in the second column of the table are to achieve the backwards compatibility with the behavior of quarkus.freemarker.resource-paths before Quarkus Freemarker 0.2.0. +Allowed combinations +Setting base-path and/or excludes but not setting includes will result in a build time error. We have chosen this behavior (rather than using ** as a default for includes) to avoid including all resources inadvertently and thus bloating your native image.

+
+
+

Environment variable: QUARKUS_FREEMARKER_BASE_PATH

+
+
+

string

+
+
+
+

A comma separated list of globs to select FreeMarker templates for inclusion in the native image. +includes are relative to base-path. Use slash (/) as a path separator on all platforms. The glob syntax is documented on quarkus.native.resources.includes. +Example: quarkus.freemarker.includes = **.ftl

+
+
+

Environment variable: QUARKUS_FREEMARKER_INCLUDES

+
+
+

list of string

+
+
+
+

A comma separated list of globs not to include in the native image. +excludes are relative to base-path. Use slash (/) as a path separator on all platforms. The glob syntax is documented on quarkus.native.resources.includes. +Example: quarkus.freemarker.excludes = **/unwanted*

+
+
+

Environment variable: QUARKUS_FREEMARKER_EXCLUDES

+
+
+

list of string

+
+
+
+

Comma-separated of file system paths where freemarker templates are located

+
+
+

Environment variable: QUARKUS_FREEMARKER_FILE_PATHS

+
+
+

list of string

+
+
+
+

Set the preferred charset template files are stored in.

+
+
+

Environment variable: QUARKUS_FREEMARKER_DEFAULT_ENCODING

+
+
+

string

+
+
+
+

Sets how errors will appear. rethrow, debug, html-debug, ignore.

+
+
+

Environment variable: QUARKUS_FREEMARKER_TEMPLATE_EXCEPTION_HANDLER

+
+
+

string

+
+
+
+

If false, don’t log exceptions inside FreeMarker that it will be thrown at you anyway.

+
+
+

Environment variable: QUARKUS_FREEMARKER_LOG_TEMPLATE_EXCEPTIONS

+
+
+

boolean

+
+
+
+

Wrap unchecked exceptions thrown during template processing into TemplateException-s.

+
+
+

Environment variable: QUARKUS_FREEMARKER_WRAP_UNCHECKED_EXCEPTIONS

+
+
+

boolean

+
+
+
+

If false, do not fall back to higher scopes when reading a null loop variable.

+
+
+

Environment variable: QUARKUS_FREEMARKER_FALLBACK_ON_NULL_LOOP_VARIABLE

+
+
+

boolean

+
+
+
+

The string value for the boolean true and false values, usually intended for human consumption (not for a computer language), separated with comma.

+
+
+

Environment variable: QUARKUS_FREEMARKER_BOOLEAN_FORMAT

+
+
+

string

+
+
+
+

Sets the default number format used to convert numbers to strings.

+
+
+

Environment variable: QUARKUS_FREEMARKER_NUMBER_FORMAT

+
+
+

string

+
+
+
+

If true, the object wrapper will be configured to expose fields.

+
+
+

Environment variable: QUARKUS_FREEMARKER_OBJECT_WRAPPER_EXPOSE_FIELDS

+
+
+

boolean

+
+
+
+

List of directives to register with format name=classname

+
+
+

Environment variable: QUARKUS_FREEMARKER_DIRECTIVES

+
+
+

Map<String,String>

Additional named template sets

Type

Default

+
+
+
+

The base path of this template set. Template set is a triple of base-path, includes and excludes serving to select a number of templates for inclusion in the native image. includes and excludes are relative to base-path. +Use slash (/) as a path separator on all platforms. The value must not start with a slash. +Do not set any base-path value if you want includes and excludes to be relative to root resource path. Defaults Option Default value in case none of +quarkus.freemarker.[base-path|includes|excludes|resource-paths] +is set Default value otherwise quarkus.freemarker.base-path freemarker/templates not set (interpreted as root resource path folder) quarkus.freemarker.includes ** not set (no files included) quarkus.freemarker.excludes not set (no files excluded) not set (no files excluded) +The defaults described in the second column of the table are to achieve the backwards compatibility with the behavior of quarkus.freemarker.resource-paths before Quarkus Freemarker 0.2.0. +Allowed combinations +Setting base-path and/or excludes but not setting includes will result in a build time error. We have chosen this behavior (rather than using ** as a default for includes) to avoid including all resources inadvertently and thus bloating your native image.

+
+
+

Environment variable: QUARKUS_FREEMARKER__TEMPLATE_SET_NAME__BASE_PATH

+
+
+

string

+
+
+
+

A comma separated list of globs to select FreeMarker templates for inclusion in the native image. +includes are relative to base-path. Use slash (/) as a path separator on all platforms. The glob syntax is documented on quarkus.native.resources.includes. +Example: quarkus.freemarker.includes = **.ftl

+
+
+

Environment variable: QUARKUS_FREEMARKER__TEMPLATE_SET_NAME__INCLUDES

+
+
+

list of string

+
+
+
+

A comma separated list of globs not to include in the native image. +excludes are relative to base-path. Use slash (/) as a path separator on all platforms. The glob syntax is documented on quarkus.native.resources.includes. +Example: quarkus.freemarker.excludes = **/unwanted*

+
+
+

Environment variable: QUARKUS_FREEMARKER__TEMPLATE_SET_NAME__EXCLUDES

+
+
+

list of string

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-fx/dev/includes/attributes.html b/quarkus-fx/dev/includes/attributes.html new file mode 100644 index 0000000000..3060065fee --- /dev/null +++ b/quarkus-fx/dev/includes/attributes.html @@ -0,0 +1,918 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-fx/dev/index.html b/quarkus-fx/dev/index.html new file mode 100644 index 0000000000..d628e78447 --- /dev/null +++ b/quarkus-fx/dev/index.html @@ -0,0 +1,1035 @@ + + + + + + Quarkus FX :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus FX

+
+
+
+

This extension allows you to use Java FX to your Quarkus application.

+
+
+
+
+

Installation

+
+
+

In order to use this extension, you need to add the io.quarkiverse.fx:quarkus-fx dependency to your project.

+
+
+

Maven

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.fx</groupId>
+    <artifactId>quarkus-fx</artifactId>
+    <version>0.3.0</version>
+</dependency>
+
+
+
+

Gradle

+
+
+
+
dependencies {
+    implementation 'io.quarkiverse.fx:quarkus-fx:0.3.0'
+}
+
+
+
+
+
+

Usage

+
+
+

The extension allows using cdi features in JavaFX controller classes.
+The FXMLLoader is made a CDI bean and can be injected in your application.

+
+
+
+
@Inject
+FXMLLoader fxmlLoader;
+
+public void load() {
+  Parent root = this.fxmlLoader.load(this.getClass().getResourceAsStream("/app.fxml"));
+  Scene scene = new Scene(root);
+  stage.setScene(scene);
+  stage.show();
+}
+
+
+
+
+
public class MyFxmlController {
+
+  @Inject
+  MyService myService;
+
+  @FXML
+  private void onButtonClicked() {
+    this.myService.doSomething();
+  }
+}
+
+
+
+
+
+

Startup

+
+
+

The application will automatically be launched (thanks to a call to javafx.application.Application::launch) when the extension is present.

+
+
+

If you need to customize the launch, you can provide a custom @QuarkusMain, such as :

+
+
+
+
package io.quarkiverse.fx.fxapp;
+
+import io.quarkiverse.fx.FxApplication;
+import io.quarkus.runtime.QuarkusApplication;
+import io.quarkus.runtime.annotations.QuarkusMain;
+import javafx.application.Application;
+
+@QuarkusMain
+public class QuarkusFxApplication implements QuarkusApplication {
+    @Override
+    public int run(final String... args) {
+        Application.launch(FxApplication.class, args);
+        return 0;
+    }
+}
+
+
+
+

When the application is started, you can get obtain access to the primary Stage instance by observing the FxStartupEvent CDI event :

+
+
+
+
void onStart(@Observes final FxStartupEvent event) {
+  Stage stage = event.getPrimaryStage();
+}
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-fx/dev/run-on-fx-thread.html b/quarkus-fx/dev/run-on-fx-thread.html new file mode 100644 index 0000000000..02fe554bdf --- /dev/null +++ b/quarkus-fx/dev/run-on-fx-thread.html @@ -0,0 +1,974 @@ + + + + + + @RunOnFxThread :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

@RunOnFxThread

+
+

@RunOnFxThread annotation offers for a convenient way to execute the target on JavaFX UI thread (JavaFX Application Thread).

+
+
+

Annotation can be applied on method level or on class level (to mark all methods within a class)

+
+
+
    +
  • +

    Example

    +
  • +
+
+
+
+
VBox vBox = new VBox();
+
+public void start(@Observes final FxStartupEvent event) {
+
+    Stage = event.getPrimaryStage();
+
+    Scene scene = new Scene(this.vBox);
+    stage.setScene(scene);
+    stage.show();
+
+    try (ExecutorService executorService = Executors.newVirtualThreadPerTaskExecutor()) {
+        executorService.submit(() -> this.showNode(this.createExpensiveNode()));
+    }
+}
+
+Node createExpensiveNode() {(1)
+    return new Label(LocalTime.now().toString());
+}
+
+@RunOnFxThread
+void showNode(final Node node) {(2)
+  this.vBox.getChildren().add(node);
+}
+
+
+
+ + + + + + + + + +
1createExpensiveNode method will be executed in a thread from executor service
2showNode method will be executed on JavaFx UI thread (JavaFX Application Thread)
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-fx/dev/startup-synchronization.html b/quarkus-fx/dev/startup-synchronization.html new file mode 100644 index 0000000000..25d68ffe3b --- /dev/null +++ b/quarkus-fx/dev/startup-synchronization.html @@ -0,0 +1,966 @@ + + + + + + Startup synchronization :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Startup synchronization

+
+

To synchronize the application with JavaFX readiness, one can use the FxStartupLatch bean.

+
+
+

It provides an await method that is released when JavaFX app is ready (primary Stage instance is available).

+
+
+

That is used in the inner @RunOnFxThread to ensure app is ready.

+
+
+
+
@Inject
+FxStartupLatch startupLatch;
+
+// Blocking until FX env is ready
+startupLatch.await();
+
+// FX is ready
+
+
+
+

Alternatively, the FxStartupEvent can be observed.

+
+
+

Example of a SkipPredicated that can be used in conjunction with a @Scheduled

+
+
+
+
@Singleton
+public class FxApplicationNotStarted implements SkipPredicate {
+
+    private volatile boolean started;
+
+    void onFxStartup(@Observes final FxStartupEvent event) {
+        this.started = true;
+    }
+
+    @Override
+    public boolean test(final ScheduledExecution execution) {
+        return !this.started;
+    }
+}
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-github-action/dev/create-github-action.html b/quarkus-github-action/dev/create-github-action.html new file mode 100644 index 0000000000..16b6f69ef1 --- /dev/null +++ b/quarkus-github-action/dev/create-github-action.html @@ -0,0 +1,1566 @@ + + + + + + Create your first GitHub Action :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Create your first GitHub Action

+
+

Create a repository

+
+
+

GitHub Actions have to be hosted in a GitHub repository that is dedicated to the action.

+
+
+

Thus the first step in the creation of a GitHub Action is to create a new GitHub repository. +Create a completely empty repository (e.g. no README nor .gitignore nor license file), that will make the next steps easier. +You can add them later on.

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

Do not initialize or clone the repository. +We will initialize a local Git repository and push it to GitHub in the following steps.

+
+
+
+
+

The full name of your repository (either username/repository-name or org-name/repository-name) is going to be useful in the next step so keep it handy. +In the following sections, we will consider it named my/action-github-repository.

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

If you created a private repository to host your action, +make your action visible to your other private repositories by following these instructions.

+
+
+

Note that actions stored in private repositories are not runnable in public repositories.

+
+
+
+
+
+
+

Initialize your Quarkus application

+
+
+

A Quarkus GitHub Action is a standard Quarkus application.

+
+
+

You can create one including the Quarkus GitHub Action extension using the following Quarkus CLI command:

+
+
+ + + + + +
+ + +Make sure you use the 📋 button to copy the command. +
+
+
+
+
quarkus create app \
+    -x quarkus-github-action \ (1)
+    org.acme:my-github-action:999-SNAPSHOT \ (2)
+    --name="My Action" \ (3)
+    --description="Description of my action" \ (4)
+    --data=quarkiverse-github-action-codestart.github-repository=my/action-github-repository (5)
+
+
+
+ + + + + + + + + + + + + + + + + + + + + +
1The Quarkus GitHub Action extension. Add it right away so that the tooling can generate a full Quarkus GitHub Action application using Codestarts.
2The GAV of your Maven project.
3The name of the action. It is used both in the pom.xml and in the descriptor of the action (action.yml).
4The description of the action. It is used both in the pom.xml and in the descriptor of the action (action.yml).
5The full name of the GitHub repository hosting the action (in the form username/repository-name or org-name/repository-name).
+
+
+ + + + + +
+ + +
+

On Windows and macOS, it is recommended to concatenate all the options on one line (without \), +as the \ might not be correctly interpreted.

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

We highly recommend the usage of the Quarkus CLI but if you cannot install it or prefer using Maven, +you can create a Quarkus GitHub Action project using the following Maven command:

+
+
+ + + + + +
+ + +Make sure you use the 📋 button to copy the command. +
+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.7.2:create \
+    -DplatformVersion=3.7.2 \
+    -DprojectGroupId=org.acme \ (1)
+    -DprojectArtifactId=my-github-action \ (2)
+    -DprojectVersion=999-SNAPSHOT \ (3)
+    -DprojectName="My Action" \ (4)
+    -DprojectDescription="Description of my action" \ (5)
+    -Ddata="quarkiverse-github-action-codestart.github-repository=my/action-github-repository" \ (6)
+    -Dextensions="quarkus-github-action" (7)
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
1The groupId of your Maven project.
2The artifactId of your Maven project.
3The version of your Maven project. Let’s make it a rolling version.
4The name of the action. It is used both in the pom.xml and in the descriptor of the action (action.yml).
5The description of the action. It is used both in the pom.xml and in the descriptor of the action (action.yml).
6The full name of the GitHub repository hosting the action (in the form username/repository-name or org-name/repository-name).
7The Quarkus GitHub Action extension. Add it right away so that the tooling can generate a full Quarkus GitHub Action application using Codestarts.
+
+
+ + + + + +
+ + +
+

On Windows and macOS, it is recommended to concatenate all the options on one line (without \), +as the \ might not be correctly interpreted.

+
+
+
+
+
+
+

This command creates a regular Quarkus Maven project. +You can add additional Quarkus extensions or Java dependencies.

+
+
+

Once the project is created, go to the my-github-action directory:

+
+
+
+
cd my-github-action
+
+
+
+
+
+

Push to GitHub

+
+
+

If you have carefully followed the instructions above, you should be in your newly created project directory.

+
+
+

The next step is to push your GitHub Action to its GitHub repository (GitHub describes the instructions in the repository page):

+
+
+
+
git init
+git add .
+git commit -m "Init the project"
+git branch -M main
+git remote add origin git@github.com:my/action-github-repository.git (1)
+git push -u origin main
+
+
+
+ + + + + +
1Replace my/action-github-repository with the full name of the repository you created to host the GitHub Action.
+
+
+ + + + + +
+ + +
+

Be careful to strictly follow the organization of the created project: +the action.yml file must be at the root of your repository.

+
+
+
+
+

Once you pushed the repository to GitHub, +the Publish action artifact to GitHub project’s Maven repository workflow will automatically publish your action to the Maven repository of the action’s repository.

+
+
+

Wait for it to complete before using your action. +Go to the Actions tab of your action’s repository to check the workflow status.

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

When pushing new code to your action, +the action will be updated only after the Publish action artifact to GitHub project’s Maven repository was completed successfully.

+
+
+
+
+
+
+

Let’s take a step back

+
+
+

Now is a good time to take a step back and have a closer look at what we pushed to the repository:

+
+
+
+
.
+├── README.md (1)
+├── mvnw (2)
+├── mvnw.cmd (2)
+├── pom.xml (3)
+├── action.yml (4)
+├── action.docker.yml (5)
+└── src
+    └── main
+        ├── docker (6)
+        │   ├── Dockerfile.jvm
+        │   ├── Dockerfile.legacy-jar
+        │   ├── Dockerfile.native
+        │   └── Dockerfile.native-micro
+        ├── java
+        │   └── org
+        │       └── acme
+        │           └── MyAction.java (7)
+        └── resources
+            └── application.properties (8)
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
1The root README.md. Add some content here so that users can understand what your GitHub Action does.
2The Maven wrapper.
3The pom.xml descriptor as we created a Maven project. Nothing specific here except a <distributionManagement> deploying the artifact to the repository’s Maven repository.
4The action.yml descriptor, more on that later.
5An alternative action.yml if you want to use a Docker-packaged native executable, more on that later.
6Some default Dockerfiles provided for Quarkus. Only useful if using action.docker.yml.
7A simple GitHub Action example.
8An application.properties with some default configuration properties to silence Quarkus at startup (no banner, only log errors).
+
+
+

action.yml

+
+

action.yml is the GitHub Action descriptor and it is important to understand what it is doing.

+
+
+

The default one you obtain when creating a GitHub Action as described above is the following:

+
+
+
+
name: 'My Action' (1)
+description: 'Description of my action' (2)
+inputs:
+  github-token: (3)
+    description: 'GitHub token'
+    required: true
+  action: (4)
+    description: 'Name of the action (if named)'
+    required: false
+runs:
+  using: "composite" (5)
+  steps:
+    - name: Inject quarkus-github-action repository credentials (6)
+      shell: bash
+      run: |
+        if [ -f ~/.m2/settings.xml ]; then
+          if ! grep -q '<id>quarkus-github-action</id>' ~/.m2/settings.xml; then
+            sed -i.bak 's@</servers>@<server><id>quarkus-github-action</id><username>${env.GITHUB_ACTOR}</username><password>${env.GITHUB_TOKEN}</password></server></servers>@' ~/.m2/settings.xml
+          fi
+        else
+          mkdir -p ~/.m2/
+          cat <<\EOF > ~/.m2/settings.xml
+        <?xml version="1.0"?>
+        <settings>
+          <servers>
+            <server>
+              <id>quarkus-github-action</id>
+              <username>${env.GITHUB_ACTOR}</username>
+              <password>${env.GITHUB_TOKEN}</password>
+            </server>
+          </servers>
+        </settings>
+        EOF
+        fi
+    - name: Set up JBang
+      uses: jbangdev/setup-jbang@main (7)
+    - name: Run the action
+      id: action
+      run: jbang --java 21 --fresh --repos 'quarkus-github-action=https://maven.pkg.github.com/gsmet/my-github-action/' --repos 'mavencentral' org.acme:my-github-action:999-SNAPSHOT (8)
+      shell: bash
+      env:
+        JSON_INPUTS: ${{ toJSON(inputs) }} (9)
+        GITHUB_TOKEN: ${{ inputs.github-token }} (10)
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
1The name of the action passed at creation.
2The description of the action passed at creation.
3The GitHub token is mandatory if you stick to publishing the action Maven artifact to the GitHub hosted Maven repository.
4The optional action name, used for routing named actions to action methods.
5The action is a composite action which has a few specificities. You can add additional steps if required.
6Inject the credentials for the quarkus-github-action repository in the ~/.m2/settings.xml, allowing authenticated access to GitHub-hosted Maven repositories.
7Install JBang, which is used to run the jar file.
8Execute the jar file. It is downloaded from the Maven repository of the action GitHub repository. JBang will download a JDK if necessary.
9Inputs are not transmitted to composite actions so we need to push them manually. The action will deserialize the JSON input automatically and make the inputs available.
10The token is required to download the artifact from the GitHub hosted repository and will be used to authenticate the GitHub clients you can inject in your action code.
+
+
+ + + + + +
+ + +
+

A composite action can be executed on all sorts of hosts, Linux, macOS or Windows.

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

Given it is a composite action, you can add additional steps to the action.

+
+
+

You can also tweak the existing steps of the action. +For instance, if you want to use a Java version different from the one used by default for executing your code, +you can adjust the action step as follows:

+
+
+
+
    - name: Run the action
+      id: action
+      run: jbang --java 17 --fresh --repos 'quarkus-github-action=https://maven.pkg.github.com/gsmet/my-github-action/' --repos 'mavencentral' org.acme:my-github-action:999-SNAPSHOT (1)
+      shell: bash
+      env:
+        JSON_INPUTS: ${{ toJSON(inputs) }}
+        GITHUB_TOKEN: ${{ inputs.github-token }}
+
+
+
+ + + + + +
1Use --java 17 instead of --java 21.
+
+
+
+
+

Docker container action alternative

+
+

Another alternative is to build a Docker image with your application and use it as a Docker container action.

+
+
+

In the generated application, we provide both an alternative action.docker.yml (that you need to rename to action.yml) and a workflow file to publish the Docker image to the Docker repository of the action repository.

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

Using Docker container actions comes with some constraints as you can only run them on Linux hosts.

+
+
+

It is a limitation of GitHub Actions.

+
+
+

Except if you have specific requirements, it is recommended to use the default composite action approach.

+
+
+
+
+
+
+

application.properties

+
+

The default application.properties contains some configuration properties to make Quarkus startup silent:

+
+
+
+
quarkus.log.category."io.quarkus".level=SEVERE
+quarkus.banner.enabled=false
+
+
+
+
+

MyAction.java

+
+

This file is just an example of a very simple action:

+
+
+
+
package org.acme;
+
+import io.quarkiverse.githubaction.Action;
+import io.quarkiverse.githubaction.Commands;
+
+public class MyAction {
+
+    @Action
+    void action(Commands commands) {
+        commands.notice("Hello from Quarkus GitHub Action");
+
+        commands.appendJobSummary(":wave: Hello from Quarkus GitHub Action");
+    }
+}
+
+
+
+

The action() method will be called when the action is run on GitHub Actions and will:

+
+
+
    +
  • +

    Log a Hello from Quarkus GitHub Action notice

    +
  • +
  • +

    Append Hello from Quarkus GitHub Action to the job summary

    +
  • +
+
+
+
+
+
+

Run your action

+
+
+

From there, everything is ready to run your simple GitHub Action, +provided you waited for the Publish action artifact to GitHub project’s Maven repository initial workflow run of your action’s repository to finish.

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

To check if the Publish action artifact to GitHub project’s Maven repository workflow has run successfully, +go to the Actions tab of the action’s repository.

+
+
+
+
+

Create a workflow in a separate repository with the following step:

+
+
+
+
      - name: Run my action
+        uses: my/action-github-repository@main
+        with:
+          github-token: ${{ secrets.GITHUB_TOKEN }} (1)
+
+
+
+ + + + + +
1${{ secrets.GITHUB_TOKEN }} is a temporary secret created by GitHub when initializing the workflow, you don’t need to define it yourself. +The token is required when consuming the GitHub REST or GraphQL APIs so, in most cases, you need to pass it to the action.
+
+
+
+
+

Next steps

+
+
+

Obviously, you can do a lot more with Quarkus GitHub Action and we describe all its features in the Developer reference.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-github-action/dev/developer-reference.html b/quarkus-github-action/dev/developer-reference.html new file mode 100644 index 0000000000..ae5a3e3936 --- /dev/null +++ b/quarkus-github-action/dev/developer-reference.html @@ -0,0 +1,1508 @@ + + + + + + Developer reference :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Developer reference

+
+
+
+

Here is all you need to know to develop GitHub Actions with Quarkus GitHub Action.

+
+
+
+
+

Routing

+
+
+

Action methods

+
+

An action method is a method that is going to be executed when the GitHub Action is executed.

+
+
+

You can have several action methods, in which case they will be executed in no particular order.

+
+
+

You can also name your action methods to be able to trigger a specific method by passing an input to the action.

+
+
+

An action method is a method of a public class and is annotated with @io.quarkiverse.githubaction.Action:

+
+
+
+
public class MyAction {
+
+    @Action
+    void action() {
+        // do something
+    }
+}
+
+
+
+

As explained above, you can have several action methods, and they can be in several classes:

+
+
+
+
public class MyAction1 {
+
+    @Action
+    void action1() {
+        // do something
+    }
+
+    @Action
+    void action2() {
+        // do something
+    }
+}
+
+public class MyAction2 {
+
+    @Action
+    void action3() {
+        // do something
+    }
+
+    @Action
+    void action4() {
+        // do something
+    }
+}
+
+
+
+

When executing the action, action1(), action2(), action3(), and action4() will be executed in no particular order.

+
+
+

With this kind of setup, you can call your action with:

+
+
+
+
      - name: Run my action
+        uses: my/action-github-repository@main
+        with:
+          github-token: ${{ secrets.GITHUB_TOKEN }}
+
+
+
+
+

Named actions

+
+

It might be practical for you to develop one GitHub Action for several related purposes. +Quarkus GitHub Action comes with a nice feature for that: named actions.

+
+
+
+
public class MyAction1 {
+
+    @Action("action1")
+    void action1() {
+        // do something
+    }
+
+    @Action("action2")
+    void action2() {
+        // do something
+    }
+}
+
+
+
+

You can then specifically get action1() to run with:

+
+
+
+
      - name: Run my action
+        uses: my/action-github-repository@main
+        with:
+          action: action1 (1)
+          github-token: ${{ secrets.GITHUB_TOKEN }}
+
+
+
+ + + + + +
1action is a special input that is used to route the action to the named action method, here action1.
+
+
+
+
+
+

Parameter injection

+
+
+

Most of the other features of Quarkus GitHub Action are handled via parameter injection: +you can inject parameters of different types into your action methods, +Quarkus GitHub Action will automatically pass the parameters, properly initialized.

+
+
+

You can of course pass several of the following parameter types to the action methods.

+
+
+

Inputs

+
+

Inputs are values that are passed from the GitHub workflow to the GitHub Action, for instance with the following step:

+
+
+
+
      - name: Run my action
+        uses: my/action-github-repository@main
+        with:
+          my-input: "My value"
+          github-token: ${{ secrets.GITHUB_TOKEN }}
+
+
+
+

It is required to declare the inputs in the action.yml descriptor:

+
+
+
+
name: 'My Action'
+description: 'Description of my action'
+inputs:
+  my-input:
+    description: 'My input'
+    required: true (1)
+    default: 'My default value' (2)
+
+# ... rest of the descriptor ...
+
+
+
+ + + + + + + + + +
1An input can be required or optional (optional by default).
2An input can have a default value.
+
+
+

Getting the my-input input from an action method is easy:

+
+
+
+
    @Action
+    void action(Inputs inputs) {
+        String myInput = inputs.getRequired("my-input");
+    }
+
+
+
+

Inputs offers all sorts of utility methods such as get(String) which returns an Optional, getRequired(String) which makes sure the input is provided, getBoolean(String), getLong(String), getInteger(String)…​

+
+
+

You can also get all the inputs as a Map<String, String> with all().

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

Contributions are welcome to add more utility methods to Inputs.

+
+
+
+
+

You can find more information about inputs in the GitHub Actions documentation.

+
+
+
+

Context

+
+

A GitHub action is executed within a context, which provides all sorts of information about the execution environment of the action.

+
+
+

To access the context, inject a Context instance into your action method:

+
+
+
+
    @Action
+    void action(Context context) {
+        String runnerOs = context.getRunnerOs(); (1)
+
+        context.print(); (2)
+    }
+
+
+
+ + + + + + + + + +
1Get the GitHub Actions runner operating system.
2Print all the available values. Useful to discover what is provided by the context.
+
+
+
+

Commands

+
+

GitHub Actions provides various commands which allows you to interact with the workflow run.

+
+
+

For instance, you can set output variables, attach a job summary…​

+
+
+

All these commands are made available through a io.quarkiverse.githubaction.Commands instance, +that you can inject into your action methods.

+
+
+

Outputs

+
+

Outputs are an important part of GitHub Actions. +They are used to export values from an action +so that they can be consumed in further steps.

+
+
+

The first step in defining an output is to modify the action.yml descriptor to declare the output:

+
+
+
+
outputs:
+  my-output:
+    value: ${{ steps.action.outputs.my-output }}
+
+
+
+

This is required because we use a composite action. +The output from the inner step needs to be mapped to an output of the action.

+
+
+

Next step is to actually produce the output in your action method:

+
+
+
+
    @Action
+    void action(Commands commands) {
+        commands.setOutput("my-output", "My value");
+    }
+
+
+
+ + + + + +
+ + +
+

You can produce several outputs.

+
+
+
+
+

And finally you can consume the output in another step of a GitHub Actions workflow:

+
+
+
+
    steps:
+      - name: Run my action
+        id: my-action
+        uses: my/action-github-repository@main
+        with:
+          github-token: ${{ secrets.GITHUB_TOKEN }}
+      - name: Display output
+        run: |
+          echo "${{steps.my-action.outputs.my-output}}"
+
+
+
+
+

Job summary

+
+

A job summary is a Markdown content that you can attach to workflow run summary page. +It can be used to provide an execution report for instance.

+
+
+

Adding a job summary is easy:

+
+
+
+
    @Action
+    void action(Commands commands) {
+        commands.jobSummary("# Markdown content"); (1)
+        commands.appendJobSummary("Some additional content"); (2)
+        commands.removeJobSummary(); (3)
+    }
+
+
+
+ + + + + + + + + + + + + +
1Set the job summary to # Markdown content.
2Append Some additional content to a potentially preexisting job summary.
3Remove the job summary. Not extremely useful but it is there just in case.
+
+
+
+

Other commands

+
+

There are several other commands available such as saveState, environmentVariable or systemPath.

+
+
+

Have a look at the Commands interface and Javadoc to learn more about them. +The Javadoc contains pointers to the corresponding GitHub Actions documentation sections.

+
+
+
+
+

GitHub clients

+
+

One common use case of GitHub Actions is to perform calls on the GitHub REST or GraphQL APIs.

+
+
+

Quarkus GitHub Action has this use case covered and you can inject in your action methods:

+
+
+ +
+
+
Injecting a REST GitHub client
+
+
    @Action
+    void action(GitHub gitHub) throws IOException {
+        gitHub.getRepository("another/repository");
+    }
+
+
+
+
Injecting a GraphQL client
+
+
    @Action
+    void action(DynamicGraphQLClient graphqlClient) throws ExecutionException, InterruptedException {
+        graphqlClient.executeSync("your GraphQL query");
+    }
+
+
+
+ + + + + +
+ + +
+

The clients are authenticated using the provided GitHub token.

+
+
+
+
+
+

Payloads

+
+

A GitHub workflow run is started when an event is triggered, +and to this event corresponds a payload which contains all the information about the event.

+
+
+

Typically, when an issue is opened, you can obtain an issues payload. +When a pull request is opened, you can obtain a pull_request payload.

+
+
+

Quarkus GitHub Action is able to parse the payload and inject it into an action method.

+
+
+

Payloads can also be used to restrict the use of an action to a particular event type, +or to execute code that is specific to an event type.

+
+
+

A payload comes with an authenticated GitHub client, +which makes it possible to access the GitHub REST API.

+
+
+

The following action method is executed any time an issues event is triggered +(for instance when an issue is opened or edited):

+
+
+
+
    @Action
+    void test(@Issue GHEventPayload.Issue issuePayload) throws IOException {
+        GHIssue issue = issuePayload.getIssue();
+
+        System.out.println("Repository: " + issue.getRepository().getFullName()); (1)
+        System.out.println("Issue title: " + issue.getTitle());
+
+        issue.comment("A new comment"); (2)
+    }
+
+
+
+ + + + + + + + + +
1Access some information from the payload.
2Create a new comment in the issue.
+
+
+ + + + + +
+ + +
+

Given you can have several action methods in the same GitHub Actions, +it is possible to execute code for several event types.

+
+
+
+
+

You can restrict the action method to a particular action of the event type. +The following action method is executed when a new issue is opened:

+
+
+
+
    @Action
+    void test(@Issue.Opened GHEventPayload.Issue issuePayload) {
+        System.out.println("Repository: " + issuePayload.getIssue().getRepository().getFullName());
+        System.out.println("Issue title: " + issuePayload.getIssue().getTitle());
+    }
+
+
+
+ + + + + +
+ + +
+

You can find the list of all the supported event types in the Quarkus GitHub App documentation.

+
+
+
+
+
+

Config files

+
+

You can easily inject config files stored in the repository for which the action is run.

+
+
+

If the file is a YAML or JSON file, it can be automatically deserialized by Jackson.

+
+
+

If the file is a .txt file, it can be injected as a String. +Text files can be used to inject templates.

+
+
+

For now, the file is read from the default branch of the repository (typically main).

+
+
+

If the path is relative, the file is searched in the .github directory. +If the path is absolute, the file is searched from the root of the repository.

+
+
+
+
    @Action
+    void test(@ConfigFile("example-config-file.yml") ConfigFileBean configFileBean) { (1)
+        System.out.println("Value 1: " + configFileBean.value1);
+        System.out.println("Value 2: " + configFileBean.value2);
+    }
+
+    public static class ConfigFileBean {
+
+        public String value1;
+
+        public String value2;
+    }
+
+
+
+ + + + + +
1Read .github/example-config-file.yml from the default branch of the repository and inject the values into ConfigFileBean via Jackson deserialization.
+
+
+
+
+
+

Debugging

+
+
+

If you need to debug the behavior of the Quarkus GitHub Action extension, +you can enable debug logging by adding the following configuration property to your application.properties:

+
+
+
+
quarkus.log.category."io.quarkiverse.githubaction".level=DEBUG
+
+
+
+
+
+

Next steps

+ +
+
+
+
+
+ + + + + + + diff --git a/quarkus-github-action/dev/includes/attributes.html b/quarkus-github-action/dev/includes/attributes.html new file mode 100644 index 0000000000..85d51efdbc --- /dev/null +++ b/quarkus-github-action/dev/includes/attributes.html @@ -0,0 +1,924 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-github-action/dev/index.html b/quarkus-github-action/dev/index.html new file mode 100644 index 0000000000..5628865434 --- /dev/null +++ b/quarkus-github-action/dev/index.html @@ -0,0 +1,982 @@ + + + + + + Quarkus GitHub Action :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus GitHub Action

+
+

This extensions simplifies the development of GitHub Actions in Java with Quarkus.

+
+
+

Developing custom GitHub Actions is extremely useful. +People usually develop them in JavaScript or TypeScript.

+
+
+

This Quarkus extension provides an alternative to develop your GitHub Actions in Java. +It also brings the ability to share code between GitHub Apps and GitHub Actions +by using both Quarkus GitHub App and Quarkus GitHub Action.

+
+
+

Why use Quarkus GitHub Action to develop your GitHub Actions:

+
+
+
    +
  • +

    If you are more familiar with the Java ecosystem, it comes in handy.

    +
  • +
  • +

    It doesn’t bring any Quarkus-induced complexity, it just makes things easier.

    +
  • +
  • +

    It comes with several nice features to simplify the development of GitHub Actions in Java.

    +
  • +
  • +

    It relies on the Hub4j GitHub API so you have all the GitHub REST API at your fingertips.

    +
  • +
  • +

    You can also inject an authenticated GraphQL client to talk to the GitHub GraphQL API.

    +
  • +
+
+
+

A simple GitHub Action will look like:

+
+
+
+
class MyAction {
+
+  @Action
+  void doSomething() {
+    // do something useful here
+  }
+}
+
+
+
+

The extension takes care of all the wiring.

+
+
+

Let’s start by creating our first GitHub Action.

+
+
+
+
+
+ + + + + + + diff --git a/quarkus-github-action/dev/push-to-production.html b/quarkus-github-action/dev/push-to-production.html new file mode 100644 index 0000000000..f8f82ee1b9 --- /dev/null +++ b/quarkus-github-action/dev/push-to-production.html @@ -0,0 +1,967 @@ + + + + + + Push to production :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Push to production

+
+

The Maven project created by the extension contains all the necessary GitHub Actions workflows to push your GitHub Action to production.

+
+
+

The versioning model used for GitHub Action is a bit hard to map to the Maven versioning model. +However, it is possible to come up with a reasonable solution that allows you to have a main version and also more stable releases.

+
+
+

We recommend to keep the main version as 999-SNAPSHOT, a workflow will publish it to the Maven repository to the GitHub repository. +This will be your rolling main version.

+
+
+

If you want to maintain a stable version, follow these instructions:

+
+
+
    +
  • +

    create a Git branch locally, for instance v1

    +
  • +
  • +

    adjust the version in the POM, for instance with mvn versions:set -DnewVersion=1.0.2-SNAPSHOT -DgenerateBackupPoms=false

    +
  • +
  • +

    adjust the version of the jar in the action.yml

    +
  • +
  • +

    commit your version adjustments

    +
  • +
  • +

    push your branch to the GitHub repository

    +
  • +
  • +

    wait for GitHub Actions to deploy the new version to the Maven repository

    +
  • +
  • +

    you can then reference your action with my/action-github-repository@v1

    +
  • +
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-github-action/dev/testing.html b/quarkus-github-action/dev/testing.html new file mode 100644 index 0000000000..193ef72f22 --- /dev/null +++ b/quarkus-github-action/dev/testing.html @@ -0,0 +1,1025 @@ + + + + + + Testing :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Testing

+
+

Quarkus GitHub Actions are regular Quarkus command mode applications and can be tested with @QuarkusMainTest.

+
+
+

A simple test would look like:

+
+
+
+
@QuarkusMainTest
+public class SimpleActionTest {
+
+    @Test
+    @Launch(value = {})
+    public void testLaunchCommand(LaunchResult result) {
+        assertThat(result.getOutput()).contains(SimpleAction.TEST_OUTPUT);
+    }
+}
+
+
+
+

While a more involved test pushing inputs and a suitable environment for output command execution would look like:

+
+
+
+
@QuarkusMainTest
+@TestProfile(CommandsActionTestProfile.class) (1)
+public class CommandsActionTest {
+
+    @Test
+    @Launch(value = {})
+    public void testLaunchCommand(LaunchResult result) throws IOException {
+        assertThat(Path.of(System.getProperty("java.io.tmpdir") + "/temp-github-output.txt")).content()
+                .contains("testOutputKey=test output value" + System.lineSeparator());
+    }
+
+    public static class CommandsActionTestProfile implements QuarkusTestProfile {
+
+        @Override
+        public Set<Class<?>> getEnabledAlternatives() {
+            return Set.of(MockInputsInitializer.class, MockCommandsInitializer.class);
+        }
+    }
+
+    @Alternative
+    @Singleton
+    public static class MockInputsInitializer implements InputsInitializer {
+
+        @Override
+        public Inputs createInputs() {
+            return new DefaultTestInputs(Map.of(Inputs.ACTION, CommandsAction.ACTION_NAME)); (2)
+        }
+    }
+
+    @Alternative
+    @Singleton
+    public static class MockCommandsInitializer implements CommandsInitializer {
+
+        @Override
+        public Commands createCommands() {
+            try {
+                Path githubOutputPath = Path.of(System.getProperty("java.io.tmpdir") + "/temp-github-output.txt");
+                Files.deleteIfExists(githubOutputPath);
+
+                return new CommandsImpl(Map.of(EnvFiles.GITHUB_OUTPUT, githubOutputPath.toString()));
+            } catch (IOException e) {
+                throw new UncheckedIOException(e);
+            }
+        }
+    }
+}
+
+
+
+ + + + + + + + + +
1We use a test profile to push alternative beans for InputsInitializer and CommandsInitializer, +allowing to provide inputs and a suitable environment for output command execution.
2DefaultTestInputs is provided by: +
+
+
<dependency>
+    <groupId>io.quarkiverse.githubaction</groupId>
+    <artifactId>quarkus-github-action-testing</artifactId>
+    <version>2.2.0</version>
+</dependency>
+
+
+
+
+

You can find more test examples in the Quarkus GitHub Action integration-tests module.

+
+
+
+
+
+ + + + + + + diff --git a/quarkus-github-app/dev/_images/architecture.png b/quarkus-github-app/dev/_images/architecture.png new file mode 100644 index 0000000000..a8971b6c8e Binary files /dev/null and b/quarkus-github-app/dev/_images/architecture.png differ diff --git a/quarkus-github-app/dev/_images/replay-ui.png b/quarkus-github-app/dev/_images/replay-ui.png new file mode 100644 index 0000000000..09b2dbe173 Binary files /dev/null and b/quarkus-github-app/dev/_images/replay-ui.png differ diff --git a/quarkus-github-app/dev/commands.html b/quarkus-github-app/dev/commands.html new file mode 100644 index 0000000000..07fd3fb82a --- /dev/null +++ b/quarkus-github-app/dev/commands.html @@ -0,0 +1,2073 @@ + + + + + + Comment-Based Commands :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Comment-Based Commands

+
+
+
+

A popular requirement for GitHub Apps is to react to comments to perform commands e.g. @bot do something.

+
+
+

While you can rely on the traditional listeners presented previously and implement the parsing of the comments by yourself, +Quarkus GitHub App comes with an additional extension called quarkus-github-app-command-airline which makes it extremely easy to develop comment-based commands.

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

This extension is based on the popular Airline library and you can use all the features of the library to develop your commands.

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

You can mix traditional event listeners and comment-based commands in the same GitHub App. +They use the exact same infrastructure.

+
+
+
+
+
+
+

Adding the dependency

+
+
+

First things first, add the quarkus-github-app-command-airline dependency to your GitHub App pom.xml:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.githubapp</groupId>
+    <artifactId>quarkus-github-app-command-airline</artifactId>
+    <version>2.3.2</version>
+</dependency>
+
+
+
+
+
+

Your first command

+
+
+

Let’s say we want to implement a command to re-run a CI workflow. +The idea is to react to users submitting a comment containing @mybot retest in a pull request.

+
+
+

This is as simple as:

+
+
+
+
@Cli(name = "@bot", commands = { RetestCommand.class }) (1)
+public class MyFirstCli {
+
+    @Command(name = "retest") (2)
+    static class RetestCommand implements Runnable { (3)
+
+        @Override
+        public void run() { (4)
+            // do something
+        }
+    }
+}
+
+
+
+ + + + + + + + + + + + + + + + + +
1First thing is to declare a @Cli class. The name of the @Cli is what will trigger the parsing of the command.
2We create a command called retest.
3All the commands of a same @Cli have to implement the same interface, in this case Runnable.
4Your interface must have a run(…​) method. You can inject parameters as we will see later but it has to be called run.
+
+
+

That is all that is necessary. +Every time a comment containing @bot retest is posted in your project, +the run() method above is called.

+
+
+

By default, the command is run whether the comment is added to issues or pull requests +(as far as comments are concerned a pull request is just another type of issue). +We will see a bit later how we can configure it.

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

Be careful about permissions when exposing commands, +typically, in this example, we probably don’t want all the users to be able to trigger a new CI run.

+
+
+

Make sure to implement the proper permission checks.

+
+
+
+
+
+
+

Injecting parameters

+
+
+

Injecting the IssueComment payload

+
+

To turn the command above into something actually useful, we miss a few things:

+
+
+
    +
  • +

    We don’t have any context about the comment (which issue or pull request was it posted in?).

    +
  • +
  • +

    We don’t have a GitHub client around.

    +
  • +
+
+
+

This is a very common requirement and something you can’t do without, really.

+
+
+

Luckily for us, we can get all this injected into the run() method of our commands.

+
+
+

Let’s take a first example:

+
+
+
+
@Cli(name = "@bot", commands = { Command1.class, Command2.class })
+public class PayloadInjectionCli {
+
+    interface Commands { (1)
+
+        void run(GHEventPayload.IssueComment issueCommentPayload) throws IOException; (2)
+    }
+
+    @Command(name = "command1")
+    static class Command1 implements Commands {
+
+        @Override
+        public void run(GHEventPayload.IssueComment issueCommentPayload) throws IOException { (3)
+            issueCommentPayload.getIssue().comment("Ack");
+        }
+    }
+
+    @Command(name = "command2")
+    static class Command2 implements Commands {
+
+        @Override
+        public void run(GHEventPayload.IssueComment issueCommentPayload) throws IOException {
+            if (issueCommentPayload.getIssue().isPullRequest()) {
+                GHPullRequest pullRequest = issueCommentPayload.getRepository()
+                        .getPullRequest(issueCommentPayload.getIssue().getNumber()); (4)
+
+                // do something with the pull request
+            }
+        }
+    }
+}
+
+
+
+ + + + + + + + + + + + + + + + + +
1As already mentioned, we have to define a common interface for all commands with a run(…​) method.
2It is possible to inject the IssueComment payload, from which you can get the issue (or the comment). +Keep in mind a pull request is also an issue.
3Unfortunately, most of GitHub API calls throw IOExceptions in case an error occurs. It is not pretty but just throw them from your methods, the framework will handle them for you.
4This is how you can get to a GHPullRequest instance that represents a pull request from the pull request associated issue.
+
+
+ + + + + +
+ + +
+

From the GHEventPayload.IssueComment instance, you can also get to the GHRepository via issueCommentPayload.getRepository() +and so do everything you need on the repository in which the comment was posted.

+
+
+
+
+
+

Injecting the GitHub client

+
+

You can inject a GitHub client as a parameter. +It is authenticated with your GitHub App installation’s token.

+
+
+

This is especially useful if you want to execute REST API calls that are outside of the bounds of your current GHRepository.

+
+
+
+
@Cli(name = "@bot", commands = { Command1.class, Command2.class })
+public class GitHubInjectionCli {
+
+    interface Commands {
+
+        void run(GHEventPayload.IssueComment issueCommentPayload, GitHub gitHub) throws IOException; (1)
+    }
+
+    @Command(name = "command1")
+    static class Command1 implements Commands {
+
+        @Override
+        public void run(GHEventPayload.IssueComment issueCommentPayload, GitHub gitHub) throws IOException {
+            // do something with the gitHub client
+        }
+    }
+
+    @Command(name = "command2")
+    static class Command2 implements Commands {
+
+        @Override
+        public void run(GHEventPayload.IssueComment issueCommentPayload, GitHub gitHub) throws IOException {
+            // do something with the gitHub client
+        }
+    }
+}
+
+
+
+ + + + + +
1You can inject a GitHub instance in your run() method.
+
+
+
+

Injecting a GraphQL client

+
+

In a similar way, you can inject a DynamicGraphQLClient as a parameter if you want to execute GraphQL queries. +It is authenticated with your GitHub App installation’s token.

+
+
+
+

Injecting CDI beans

+
+

You can inject CDI beans as parameters but it is not a recommended practice as it makes your common command interface more cluttered. +See CDI injection for more details.

+
+
+
+
+
+

CDI injection

+
+
+

You can inject any CDI bean in your commands, either via parameters of the run() method or via field injection.

+
+
+

It is recommended to use field injection to avoid cluttering the run() method:

+
+
+
+
@Cli(name = "@bot", commands = { Command1.class })
+public class CdiInjectionCli {
+
+    interface Commands {
+
+        void run(GHEventPayload.IssueComment issueCommentPayload) throws IOException;
+    }
+
+    @Command(name = "command1")
+    static class Command1 implements Commands {
+
+        @Inject
+        CdiBean cdiBean; (1)
+
+        @Override
+        public void run(GHEventPayload.IssueComment issueCommentPayload) throws IOException {
+            cdiBean.doSomething();
+        }
+    }
+}
+
+
+
+ + + + + +
1You can inject the @ApplicationScoped CdiBean via the CDI jakarta.inject.Inject annotation.
+
+
+
+
+

Additional options

+
+
+

@Command options

+
+

With the @CommandOptions annotation, you can fine tune the behavior of a @Command.

+
+
+

Scope

+
+

By default, commands are executed for both issues and pull requests. +Some commands might only make sense for issues or pull requests.

+
+
+

Luckily, you can limit the scope of a command using @CommandOptions(scope = …​):

+
+
+
+
    @Command(name = "only-for-issues")
+    @CommandOptions(scope = CommandScope.ISSUES) (1)
+    static class CommandOnlyForIssues implements Commands {
+
+        @Override
+        public void run(GHEventPayload.IssueComment issueCommentPayload) throws IOException {
+            // do something
+        }
+    }
+
+
+
+ + + + + +
1This command will only be executed in the context of an issue.
+
+
+
+
    @Command(name = "only-for-pull-requests")
+    @CommandOptions(scope = CommandScope.PULL_REQUESTS) (1)
+    static class CommandOnlyForPullRequests implements Commands {
+
+        @Override
+        public void run(GHEventPayload.IssueComment issueCommentPayload) throws IOException {
+            // do something
+        }
+    }
+
+
+
+ + + + + +
1This command will only be executed in the context of a pull request.
+
+
+
+

Execution error strategy

+
+

By default, when an execution error occurs, a MINUS_ONE reaction is added to the comment but that’s it. +You might want to customize this behavior and have your GitHub App post a comment:

+
+
+
+
    @Command(name = "execution-error-strategy")
+    @CommandOptions(executionErrorStrategy = ExecutionErrorStrategy.COMMENT_MESSAGE) (1)
+    static class CommandWithCustomExecutionErrorStrategy implements Commands {
+
+        @Override
+        public void run(GHEventPayload.IssueComment issueCommentPayload) throws IOException {
+            // do something
+        }
+    }
+
+
+
+ + + + + +
1When an error occurs executing the command, a comment containing > `%s`\n\n:rotating_light: An error occurred while executing the command. will be posted.
+
+
+

If you want to go further, you can customize this message:

+
+
+
+
    @Command(name = "execution-error-message")
+    @CommandOptions(executionErrorStrategy = ExecutionErrorStrategy.COMMENT_MESSAGE, executionErrorMessage = "Your custom error message") (1)
+    static class CommandWithCustomExecutionErrorMessage implements Commands {
+
+        @Override
+        public void run(GHEventPayload.IssueComment issueCommentPayload) throws IOException {
+            // do something
+        }
+    }
+
+
+
+ + + + + +
1When an error occurs executing the command, a comment containing Your custom error message will be posted.
+
+
+ + + + + +
+ + +
+

Use %s in your message to include the executed command.

+
+
+
+
+
+

Reaction strategy

+
+

By default, the Command Airline extension provides feedback about command execution with reactions.

+
+
+

It is possible to configure this behavior. +For instance to disable them entirely:

+
+
+
+
    @Command(name = "reaction-strategy")
+    @CommandOptions(reactionStrategy = ReactionStrategy.NONE)
+    static class CommandWithCustomReactionStrategy implements Commands {
+
+        @Override
+        public void run(GHEventPayload.IssueComment issueCommentPayload) throws IOException {
+            // do something
+        }
+    }
+
+
+
+
+
+

@Cli options

+
+

You can fine tune the behavior of your @Cli via the @CliOptions annotation.

+
+
+

Defining aliases

+
+

The name attribute of the @Cli annotation defines how your commands will be invoked. +For instance, @Cli(name = "@bot") means that your commands will be executed if a user starts their comments with @bot.

+
+
+

You might want to define several aliases for this invocation (e.g. @bot, @quarkus-bot, @quarkusbot), +which you can do as follows:

+
+
+
+
@Cli(name = "@quarkus-bot", commands = { AliasesCliCommand.class })
+@CliOptions(aliases = { "@quarkusbot", "@bot" }) (1)
+public class CliOptionsAliasesCli {
+
+
+
+ + + + + +
1Commands will be executed for comments starting with @quarkus-bot, @bot or @quarkusbot.
+
+
+
+

Default command options

+
+

As seen above, you can fine tune command options with the @CommandOptions annotation.

+
+
+

If you need to define common command options, you can do it at the @Cli level:

+
+
+
+
@Cli(name = "@bot", commands = { DefaultCommandOptionsCliCommand.class })
+@CliOptions(defaultCommandOptions = @CommandOptions(scope = CommandScope.ISSUES)) (1)
+public class CliOptionsDefaultCommandOptionsCli {
+
+
+
+ + + + + +
1Commands will be executed for comments starting with @quarkus-bot, @bot or @quarkusbot.
+
+
+ + + + + +
+ + +
+

You can override the default command options by adding a @CommandOptions annotation to a command.

+
+
+
+
+
+

Parse error strategy

+
+

By default, when an error occurs parsing the command, a comment is posted containing:

+
+
+
    +
  • +

    > `%s`\n\n:rotating_light: Unable to parse the command. (%s being the parsed command)

    +
  • +
  • +

    the errors

    +
  • +
  • +

    the help generated by Airline for this given @Cli, when relevant

    +
  • +
+
+
+

This behavior can be customized:

+
+
+
+
@Cli(name = "@bot", commands = { ParseErrorStrategyCliCommand.class })
+@CliOptions(parseErrorStrategy = ParseErrorStrategy.NONE) (1)
+public class CliOptionsParseErrorStrategyCli {
+
+
+
+ + + + + +
1In this case, no comment will be added when a parse error occurs. +A CONFUSED reaction will be added to the comment though.
+
+
+

The following strategies are available:

+
+
+
    +
  • +

    NONE - Nothing is done.

    +
  • +
  • +

    COMMENT_MESSAGE - A comment containing the parse error message is posted.

    +
  • +
  • +

    COMMENT_MESSAGE_HELP - A comment containing the parse error message and the generated help is posted.

    +
  • +
  • +

    COMMENT_MESSAGE_ERRORS - A comment containing the parse error message and the parse errors is posted.

    +
  • +
  • +

    COMMENT_MESSAGE_HELP_ERRORS - A comment containing the parse error message, the generated help and the parse errors is posted.

    +
  • +
+
+
+

You can also customize the error message:

+
+
+
+
@Cli(name = "@bot", commands = { ParseErrorMessageCliCommand.class })
+@CliOptions(parseErrorStrategy = ParseErrorStrategy.COMMENT_MESSAGE, parseErrorMessage = "Your custom message") (1)
+public class CliOptionsParseErrorMessageCli {
+
+
+
+ + + + + +
1A comment containing Your custom message is posted when a parse error occurs.
+
+
+ + + + + +
+ + +
+

Use %s in your message to include the parsed command.

+
+
+
+
+
+
+
+
+

Permissions

+
+
+

Permissions

+
+

GitHub has 3 levels of permissions for a repository:

+
+
+
    +
  • +

    Read

    +
  • +
  • +

    Write

    +
  • +
  • +

    Admin

    +
  • +
+
+
+

The Read permission is not very useful in our case as anyone able to add a comment to an issue or pull request has the Read permission. +But restricting some commands to users with the Write or Admin permission is a common requirement.

+
+
+

Note that when requiring a permission, you require that the user has at least the given permission. +So, if you require the Write permission, users with the Admin permission are also authorized to execute the command.

+
+
+

Requiring a permission for a command is as easy as adding a @Permission annotation to your command:

+
+
+
+
@Cli(name = "@bot", commands = { WriteCommand.class })
+public class PermissionCli {
+
+    interface Commands {
+
+        void run() throws IOException;
+    }
+
+    @Command(name = "write-command")
+    @Permission(GHPermissionType.WRITE) (1)
+    static class WriteCommand implements Commands {
+
+        @Override
+        public void run() throws IOException {
+            // do something
+        }
+    }
+}
+
+
+
+ + + + + +
1To execute the write-command, the Write permission is required.
+
+
+

Note that you can also define a permission at the @Cli level. +In this case, the permission will be applied to all commands, +except if you override it with a @Permission annotation at the command level.

+
+
+
+
@Cli(name = "@bot", commands = { WriteCommand.class, AdminCommand.class })
+@Permission(GHPermissionType.WRITE) (1)
+public class PermissionOverrideCli {
+
+    interface Commands {
+
+        void run() throws IOException;
+    }
+
+    @Command(name = "write-command") (2)
+    static class WriteCommand implements Commands {
+
+        @Override
+        public void run() throws IOException {
+            // do something
+        }
+    }
+
+    @Command(name = "admin-command")
+    @Permission(GHPermissionType.ADMIN) (3)
+    static class AdminCommand implements Commands {
+
+        @Override
+        public void run() throws IOException {
+            // do something
+        }
+    }
+}
+
+
+
+ + + + + + + + + + + + + +
1For all commands in this @Cli, the Write permission is required if not defined otherwise.
2The write-command doesn’t have any @Permission annotation so the default one is used: +the Write permission is required.
3The admin-command overrides the default permission: the Admin permission is required.
+
+
+
+

Team permissions

+
+

Team permissions behaves in exactly the same way as standard permissions, +except for the usage of the @Team annotation.

+
+
+

You can define several teams in the @Team annotation. +Permission is granted if the user is part of at least one team (logical OR).

+
+
+

Use the slug of the team to reference a team i.e. the team identifier in the team page URL.

+
+
+
+
@Cli(name = "@bot", commands = { MyTeamCommand.class })
+public class TeamPermissionCli {
+
+    interface Commands {
+
+        void run() throws IOException;
+    }
+
+    @Command(name = "command")
+    @Team({ "my-team1", "my-team2" }) (1)
+    static class MyTeamCommand implements Commands {
+
+        @Override
+        public void run() throws IOException {
+            // do something
+        }
+    }
+}
+
+
+
+ + + + + +
1The command will be executed only if the user is part of my-team1 or my-team2.
+
+
+ + + + + +
+ + +
+

When using team permissions, the GitHub App requires the read permission on the repository and the organization so that it can read the permissions.

+
+
+
+
+
+
+
+

Reaction based feedback

+
+
+

Feedback to commands is handled via reactions added to the comment.

+
+
+

The following reactions can be added:

+
+
+
    +
  • +

    ROCKET - command is executed, this reaction will be removed on command completion.

    +
  • +
  • +

    PLUS_ONE - command was executed successfully.

    +
  • +
  • +

    MINUS_ONE - the user doesn’t have the permission to execute the command or there was an error executing the command.

    +
  • +
  • +

    CONFUSED - there was an error parsing the command.

    +
  • +
+
+
+
+
+

Providing help

+
+
+

If you propose a lot of features, +it might be useful for the users to be able to get a description of the available commands and what they are doing.

+
+
+

Luckily, Airline can generate a comprehensive help description from your commands. +Obviously, the help will be more comprehensive if you describe your commands with the appropriate annotation attributes.

+
+
+

As we already mentioned, the Quarkus extension requires all your commands to implement the same command interface. +This is why we provide an abstract class that you can subclass to implement your help command.

+
+
+

Providing a help command to the users would look like:

+
+
+
+
@Cli(name = "@bot", commands = { Command1.class, Command2.class,
+        HelpCommand.class }, description = "Your helpful bot doing all sorts of things") (1)
+public class HelpCli {
+
+    interface Commands {
+
+        void run(GHEventPayload.IssueComment issueCommentPayload, GitHub gitHub) throws IOException;
+    }
+
+    @Command(name = "command1", description = "Do command1 with style") (2)
+    static class Command1 implements Commands {
+
+        @Override
+        public void run(GHEventPayload.IssueComment issueCommentPayload, GitHub gitHub) throws IOException {
+            // do something
+        }
+    }
+
+    @Command(name = "command2", description = "Do command2 with style")
+    static class Command2 implements Commands {
+
+        @Override
+        public void run(GHEventPayload.IssueComment issueCommentPayload, GitHub gitHub) throws IOException {
+            // do something
+        }
+    }
+
+    @Command(name = "help", description = "Print help")
+    static class HelpCommand extends AbstractHelpCommand implements Commands { (3)
+
+        @Override
+        public void run(GHEventPayload.IssueComment issueCommentPayload, GitHub gitHub) throws IOException {
+            super.run(issueCommentPayload); (4)
+        }
+    }
+}
+
+
+
+ + + + + + + + + + + + + + + + + +
1Add a description to your @Cli annotation. +Also add the help command to your commands.
2Add descriptions to your commands so that they are included in the help.
3Have your help command extend AbstractHelpCommand. +AbstractHelpCommand adds a comment with the help when someone execute the commands.
4Call the run() method of AbstractHelpCommand. +AbstractHelpCommand requires a GHEventPayload.IssueComment payload to be injected.
+
+
+
+
+

Some common examples of Airline usage

+
+
+

In this section, you will find a couple of common Airline examples.

+
+
+

For more information about what you can do with Airline, please refer to the Airline documentation.

+
+
+

Arguments

+
+

You can have Airline injecting command arguments to your command:

+
+
+
+
@Cli(name = "@bot", commands = { CommandWithArguments.class })
+public class ArgumentsCli {
+
+    interface Commands {
+
+        void run(GHEventPayload.IssueComment issueCommentPayload) throws IOException;
+    }
+
+    @Command(name = "add-users")
+    static class CommandWithArguments implements Commands {
+
+        @Arguments(description = "List of GitHub usernames") (1)
+        List<String> usernames;
+
+        @Override
+        public void run(GHEventPayload.IssueComment issueCommentPayload) throws IOException {
+            issueCommentPayload.getIssue().comment("Hello " + String.join(", ", usernames)); (2)
+        }
+    }
+}
+
+
+
+ + + + + + + + + +
1Use the @Arguments annotation to inject the arguments.
2You can then consume them in your run() method.
+
+
+
+

Group commands

+
+

Airline support command groups. +A popular example is how the git command line is architectured e.g. git remote …​.

+
+
+
+
@Cli(name = "@bot", groups = { @Group(name = "remote", commands = { ListCommand.class, ShowCommand.class }) }) (1)
+public class GroupCli {
+
+    interface Commands {
+
+        void run(GHEventPayload.IssueComment issueCommentPayload) throws IOException;
+    }
+
+    @Command(name = "list") (2)
+    static class ListCommand implements Commands {
+
+        @Override
+        public void run(GHEventPayload.IssueComment issueCommentPayload) throws IOException {
+            // do something
+        }
+    }
+
+    @Command(name = "show") (3)
+    static class ShowCommand implements Commands {
+
+        @Override
+        public void run(GHEventPayload.IssueComment issueCommentPayload) throws IOException {
+            // do something
+        }
+    }
+}
+
+
+
+ + + + + + + + + + + + + +
1Define groups in the @Cli annotation. +Each group has a name and is composed of a list of commands.
2To execute this command, add a comment with @bot remote list.
3To execute this command, add a comment with @bot remote show.
+
+
+
+

Injecting metadata

+
+

You can inject Airline metadata instances (e.g. GlobalMetadata, CommandMetadata) into the commands:

+
+
+
+
@Cli(name = "@bot", commands = { Command1.class })
+public class InjectMetadataCli {
+
+    interface Commands {
+
+        void run(GHEventPayload.IssueComment issueCommentPayload) throws IOException;
+    }
+
+    @Command(name = "command1")
+    static class Command1 implements Commands {
+
+        @AirlineInject (1)
+        GlobalMetadata<InjectMetadataCli> globalMetadata;
+
+        @AirlineInject (1)
+        CommandMetadata commandMetadata;
+
+        @Override
+        public void run(GHEventPayload.IssueComment issueCommentPayload) throws IOException {
+            // ...
+        }
+    }
+}
+
+
+
+ + + + + +
1Use @AirlineInject to inject Airline metadata.
+
+
+
+

Composition

+
+

You can use composition to create reusable Airline components:

+
+
+
+
@Cli(name = "@composition", commands = { TestCompositionCommand.class })
+public class CompositionCli {
+
+    @Command(name = "test")
+    static class TestCompositionCommand implements DefaultCommand {
+
+        @AirlineModule (1)
+        VerboseModule verboseModule = new VerboseModule();
+
+        @Override
+        public void run(GHEventPayload.IssueComment issueCommentPayload) throws IOException {
+            if (verboseModule.verbose) {
+                issueCommentPayload.getIssue().comment("hello from @composition test - verbose");
+            } else {
+                issueCommentPayload.getIssue().comment("hello from @composition test");
+            }
+        }
+    }
+
+    public static class VerboseModule {
+
+        @Option(name = { "-v", "--verbose" }, description = "Enables verbose mode")
+        protected boolean verbose = false;
+    }
+
+    public interface DefaultCommand {
+
+        void run(GHEventPayload.IssueComment issueCommentPayload) throws IOException;
+    }
+}
+
+
+
+ + + + + +
1Use @AirlineModule to inject the reusable options into the command.
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-github-app/dev/create-github-app.html b/quarkus-github-app/dev/create-github-app.html new file mode 100644 index 0000000000..f913675dd1 --- /dev/null +++ b/quarkus-github-app/dev/create-github-app.html @@ -0,0 +1,1256 @@ + + + + + + Create a GitHub App :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Create a GitHub App

+
+

Initialize your Quarkus application

+
+
+

A Quarkus GitHub App is a standard Quarkus application.

+
+
+

You can create one including the Quarkus GitHub App extension using the following Quarkus CLI command:

+
+
+ + + + + +
+ + +Make sure you use the 📋 button to copy the command. +
+
+
+
+
quarkus create app \
+    -x quarkus-github-app \ (1)
+    org.acme:my-github-app \ (2)
+    --no-code (3)
+
+
+
+ + + + + + + + + + + + + +
1The Quarkus GitHub App extension.
2The GA of your Maven project.
3Do not include unrelated generated code in the project.
+
+
+ + + + + +
+ + +
+

On Windows and macOS, it is recommended to concatenate all the options on one line (without \), +as the \ might not be correctly interpreted.

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

We highly recommend the usage of the Quarkus CLI but if you cannot install it or prefer using Maven, +you can create a Quarkus GitHub Action project using the following Maven command:

+
+
+ + + + + +
+ + +Make sure you use the 📋 button to copy the command. +
+
+
+
+
mvn io.quarkus:quarkus-maven-plugin:3.8.2:create \
+    -DplatformVersion=3.8.2 \
+    -DprojectGroupId=org.acme \ (1)
+    -DprojectArtifactId=my-github-app \ (2)
+    -Dextensions="io.quarkiverse.githubapp:quarkus-github-app:2.3.2" \ (3)
+    -DnoCode (4)
+
+
+
+ + + + + + + + + + + + + + + + + +
1The groupId of your Maven project.
2The artifactId of your Maven project.
3The Quarkus GitHub App extension.
4Do not include unrelated generated code in the project.
+
+
+ + + + + +
+ + +
+

On Windows and macOS, it is recommended to concatenate all the options on one line (without \), +as the \ might not be correctly interpreted.

+
+
+
+
+
+
+

This command creates a regular Quarkus Maven project. +You can add additional Quarkus extensions or Java dependencies.

+
+
+

Once the project is created, go to the my-github-app directory.

+
+
+
+
+

Initialize the configuration

+
+
+

As the configuration is environment-specific and you probably don’t want to commit it in your repository, +the best is to create a .env file.

+
+
+

The content of your .env file should be as follows:

+
+
+
+
QUARKUS_GITHUB_APP_APP_ID=<the numeric app id>
+QUARKUS_GITHUB_APP_APP_NAME=<the name of your app>
+QUARKUS_GITHUB_APP_WEBHOOK_PROXY_URL=<your Smee.io channel URL>
+QUARKUS_GITHUB_APP_WEBHOOK_SECRET=<your webhook secret>
+QUARKUS_GITHUB_APP_PRIVATE_KEY=-----BEGIN RSA PRIVATE KEY-----\
+                  <your private key>                          \
+-----END RSA PRIVATE KEY-----
+
+
+
+
+
QUARKUS_GITHUB_APP_APP_ID
+
+

The numeric app id appearing in the App ID field.

+
+
QUARKUS_GITHUB_APP_APP_NAME
+
+

The name of your app is the one appearing in the GitHub URL. +It is only used to improve usability in dev mode.

+
+
QUARKUS_GITHUB_APP_WEBHOOK_PROXY_URL
+
+

The URL you obtained when you created your Smee.io channel.

+
+
QUARKUS_GITHUB_APP_WEBHOOK_SECRET
+
+

The webhook secret you created at the previous step.

+
+
QUARKUS_GITHUB_APP_PRIVATE_KEY
+
+

The content of the private key you generated and downloaded. +Open the key file with a text editor as key viewers usually only show fingerprints.

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

Don’t forget to add backslashes at the end of the lines of your private key (except the last one). +In a property file, that is how a multi-line value is considered one value.

+
+
+
+
+

Once you have created your .env, you are all set.

+
+
+
+
+

Start dev mode and enjoy

+
+
+

If you are familiar with Quarkus, you already know the dev mode which improves productivity a lot. +If you are not, the principle is that you start your application once and code: +Quarkus will take care of reloading the application when it receives a request.

+
+
+

Just execute the following command to start Quarkus in dev mode:

+
+
+
+
quarkus dev
+
+
+
+ + + + + +
+ + +
+

If you have a configuration error, it’s probably because you did something wrong with the .env file. +Check the instructions above carefully.

+
+
+
+
+
+
+

Time to code

+
+
+

From now on, you are done with the setup and you can code your GitHub App. +Sky is the limit.

+
+
+

For instance, you can create the following class:

+
+
+
+
class CreateComment {
+
+	void onOpen(@Issue.Opened GHEventPayload.Issue issuePayload) throws IOException {
+		issuePayload.getIssue().comment("Hello from my GitHub App");
+	}
+}
+
+
+
+

From now on, every time you create an issue in your GitHub project, a comment will be added by your GitHub App.

+
+
+

In details:

+
+
+
    +
  • +

    No need for the public modifier, your classes and methods can be package protected.

    +
  • +
  • +

    We listen to the @Issue.Opened event i.e. this method will be called for each issue opened.

    +
  • +
  • +

    A payload of type GHEventPayload.Issue will be injected in our method automatically. +This class is provided by the Hub4j GitHub API.

    +
  • +
+
+
+
+
+

That’s all folks!

+
+
+

You are done developing your first Quarkus GitHub App.

+
+
+

Obviously the one we developed is not very useful, but it is a good start and using this framework:

+
+
+
    +
  • +

    You can listen to all the events currently supported by the Hub4j GitHub API.

    +
  • +
  • +

    You have the full power of Quarkus with live coding, easy configuration, dependency injection, native executables and more.

    +
  • +
  • +

    You can write automated tests that simulate GitHub events and assert the behavior of your application.

    +
  • +
  • +

    You have at your disposal the full ecosystem of Quarkus extensions and the broader Java ecosystem.

    +
  • +
+
+
+

Our Replay UI will come handy while developing your GitHub App.

+
+
+

You can learn more about all the events you can listen to in our Developer Reference.

+
+
+

When you are done developing your application, please refer to Push to Production.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-github-app/dev/developer-reference.html b/quarkus-github-app/dev/developer-reference.html new file mode 100644 index 0000000000..f0e9699ba2 --- /dev/null +++ b/quarkus-github-app/dev/developer-reference.html @@ -0,0 +1,1640 @@ + + + + + + Developer Reference :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Developer Reference

+
+ + +
+
+

Events

+
+
+

Listening to events

+
+

To listen to an event, you need to create a method with one of the event annotations:

+
+
+
+
class CreateComment {
+
+	void onOpen(@Issue.Opened GHEventPayload.Issue issuePayload) throws IOException {
+		issuePayload.getIssue().comment("Hello from my GitHub App");
+	}
+}
+
+
+
+

A few observations:

+
+
+
    +
  • +

    The method may either be package-protected or public.

    +
  • +
  • +

    Most of the GitHub API methods throw IOExceptions so your methods need to propagate it. We have some nice error handling.

    +
  • +
  • +

    The payload type needs to be consistent with the event type.

    +
  • +
+
+
+

A method may listen to several events as long as they share the same payload type:

+
+
+
+
class IssueListener {
+
+	void onOpenOrEdit(@Issue.Opened @Issue.Edited GHEventPayload.Issue issuePayload) {
+		// do something
+	}
+}
+
+
+
+

Several methods can listen to the same event types but you cannot control the order of their execution. +We use CDI events under the hood and the execution of event observer methods cannot be ordered. +If you need ordering for several steps, use a single method to control the execution of these steps. +They can be split in smaller private methods if need be.

+
+
+
+

Event types

+
+

Here are all the events currently supported, together with the type of the payload that will be injected.

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GitHub Event TypeEventsPayload

check_run

@CheckRun.Completed, @CheckRun.Created, @CheckRun.RequestedAction, @CheckRun.Rerequested

GHEventPayload.CheckRun

check_suite

@CheckSuite.Completed, @CheckSuite.Requested, @CheckSuite.Rerequested

GHEventPayload.CheckSuite

commit_comment

@CommitComment.Created

GHEventPayload.CommitComment

create

@Create

GHEventPayload.Create

delete

@Delete

GHEventPayload.Delete

deployment

@Deployment.Created

GHEventPayload.Deployment

deployment_status

@DeploymentStatus.Created

GHEventPayload.DeploymentStatus

discussion

@Discussion.Answered, @Discussion.CategoryChanged, @Discussion.Closed, @Discussion.Created, @Discussion.Deleted, @Discussion.Edited, @Discussion.Labeled, @Discussion.Locked, @Discussion.Pinned, @Discussion.Reopened, @Discussion.Transferred, @Discussion.Unanswered, @Discussion.Unlabeled, @Discussion.Unlocked, @Discussion.Unpinned

GHEventPayload.Discussion

discussion_comment

@DiscussionComment.Created, @DiscussionComment.Deleted, @DiscussionComment.Edited

GHEventPayload.DiscussionComment

fork

@Fork

GHEventPayload.Fork

installation

@Installation.Created, @Installation.Deleted, @Installation.NewPermissionsAccepted, @Installation.Suspend, @Installation.Unsuspend

GHEventPayload.Installation

installation_repositories

@InstallationRepositories.Added, @InstallationRepositories.Removed

GHEventPayload.InstallationRepositories

issues

@Issue.Assigned, @Issue.Closed, @Issue.Deleted, @Issue.Demilestoned, @Issue.Edited, @Issue.Labeled, @Issue.Locked, @Issue.Milestoned, @Issue.Opened, @Issue.Pinned, @Issue.Reopened, @Issue.Transferred, @Issue.Unassigned, @Issue.Unlabeled, @Issue.Unlocked, @Issue.Unpinned

GHEventPayload.Issue

issue_comment

@IssueComment.Created, @IssueComment.Deleted, @IssueComment.Edited

GHEventPayload.IssueComment

label

@Label.Created, @Label.Deleted, @Label.Edited

GHEventPayload.Label

ping

@Ping

GHEventPayload.Ping

public

@Public

GHEventPayload.Public

pull_request

@PullRequest.Assigned, @PullRequest.Closed, @PullRequest.Edited, @PullRequest.Labeled, @PullRequest.Locked, @PullRequest.Opened, @PullRequest.ReadyForReview, @PullRequest.Reopened, @PullRequest.ReviewRequested, @PullRequest.ReviewRequestRemoved, @PullRequest.Synchronize, @PullRequest.Unassigned, @PullRequest.Unlabeled, @PullRequest.Unlocked

GHEventPayload.PullRequest

pull_request_review

@PullRequestReview.Dismissed, @PullRequestReview.Edited, @PullRequestReview.Submitted

GHEventPayload.PullRequestReview

pull_request_review_comment

@PullRequestReviewComment.Created, @PullRequestReviewComment.Deleted, @PullRequestReviewComment.Edited

GHEventPayload.PullRequestReviewComment

push

@Push

GHEventPayload.Push

release

@Release.Created, @Release.Deleted, @Release.Edited, @Release.Prereleased, @Release.Published, @Release.Released, @Release.Unpublished

GHEventPayload.Release

repository

@Repository.Archived, @Repository.Created, @Repository.Deleted, @Repository.Edited, @Repository.Privatized, @Repository.Publicized, @Repository.Renamed, @Repository.Transferred, @Repository.Unarchived

GHEventPayload.Repository

status

@Status

GHEventPayload.Status

workflow_dispatch

@WorkflowDispatch

GHEventPayload.WorkflowDispatch

workflow_run

@WorkflowRun.Completed, @WorkflowRun.Requested

GHEventPayload.WorkflowRun

+
+

If you want to access the low level JSON payload, you can use the raw GitHubEvent, either by substituting it to the API payload:

+
+
+
+
class TriageIssue {
+
+    void triageIssue(@Issue.Opened GitHubEvent gitHubEvent) {
+        // do something
+    }
+}
+
+
+
+

Or by adding it as an additional parameter:

+
+
+
+
class TriageIssue {
+
+    void triageIssue(@Issue.Opened GHEventPayload.Issue issuePayload, GitHubEvent gitHubEvent) {
+        // do something
+    }
+}
+
+
+
+

The GitHubEvent exposes the raw JSON either as a string or as a Vert.x JsonObject, +together with some additional information like the installation id, the event or the action.

+
+
+

If you miss an event type, it is also possible to listen to events by using the @RawEvent annotation. +The @RawEvent annotation allows you to listen to all events/actions, and you may also specify the event and the action you want to listen to.

+
+
+

When using the @RawEvent annotation, the only allowed payload parameter type is GitHubEvent.

+
+
+
+
class ActOnDeploymentProtectionRule {
+
+    void onDeploymentProtectionRule(@RawEvent(event = "deployment_protection_rule", action = "requested") GitHubEvent gitHubEvent) {
+        // do something
+    }
+}
+
+
+
+

Both event and action are optional and you can listen to all events by using the following code:

+
+
+
+
class CatchAll {
+
+    void catchAll(@RawEvent GitHubEvent gitHubEvent) {
+        // do something
+    }
+}
+
+
+
+ + + + + +
+ + +
+

If you miss an event type, please report it by creating an issue. +We try to add to contribute to the Hub4j GitHub API all the event types that are useful.

+
+
+

When missing an event type, there are two options:

+
+
+
    +
  • +

    Either it is not available in the Hub4j GitHub API and in this case, it needs to be implemented there first in GHEventPayload.

    +
  • +
  • +

    Or it is available in the Hub4j GitHub API and it is just a matter of adding a new annotation in Quarkus GitHub App and the appropriate documentation in the Developer reference page. The annotation will be automatically taken into account.

    +
  • +
+
+
+
+
+
+
+
+

Configuration file

+
+
+

For some usage, you might need to include a configuration file that is repository-specific and versioned.

+
+
+

The Quarkus GitHub App extension supports the following features:

+
+
+
    +
  • +

    Automatic injection of config files into your methods.

    +
  • +
  • +

    YAML, JSON or text config files.

    +
  • +
  • +

    Automatic deserialization of your YAML or JSON config files into Java POJOs using Jackson.

    +
  • +
+
+
+

Injecting a configuration file in your method is as simple as:

+
+
+
+
class TriageIssue {
+
+    void triageIssue(@Issue.Opened GHEventPayload.Issue issuePayload,
+            @ConfigFile("quarkus-bot-java.yml") QuarkusBotConfigFile quarkusBotConfigFile) {
+        // do something
+    }
+}
+
+
+
+

The configuration file .github/quarkus-bot-java.yml present in the default branch of the repository +for which the event has been triggered +is parsed and deserialized to a QuarkusBotConfigFile instance using Jackson.

+
+
+

If the file does not exist in the repository, quarkusBotConfigFile will be null.

+
+
+

If you want to get the content of the configuration file as is, use a String.

+
+
+

Note that @ConfigFile injection supports using Optional<YourConfigType>.

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

If your repository is private, reading configuration files requires your GitHub App to have the Contents Read permission.

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

By default, the config file path is relative to the .github/ directory.

+
+
+

You can reference a file outside this directory by using an /absolute/path.

+
+
+
+
+
+
+

Error handler

+
+
+

The Quarkus GitHub App extension provides an error handler that will log errors with as many details as possible.

+
+
+

You can customize the error handler by creating a CDI bean implementing io.quarkiverse.githubapp.error.ErrorHandler:

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

Some errors may be triggered before the payload has been parsed. +In this case, the payload parameter passed to the handleError() method is null.

+
+
+
+
+
+
+

Injecting a GitHub instance

+
+
+

When you need to access the authenticated GitHub instance, for instance to call GitHub#getMyself(), +simply inject it into your method:

+
+
+
+
class TriageIssue {
+
+    void triageIssue(@Issue.Opened GHEventPayload.Issue issuePayload, GitHub gitHub) {
+        gitHub.getMyself();
+    }
+}
+
+
+
+

The injected GitHub instance is authenticated as an installation.

+
+
+
+
+

Injecting a GraphQL client

+
+
+

For some purposes, using the GitHub GraphQL API might get handy (typically to access the Discussions API that is only available in the GraphQL API). +In the same way you can inject an authenticated GitHub instance, you can inject an authenticated DynamicGraphQLClient as follows:

+
+
+
+
class TriageIssue {
+
+    void triageIssue(@Issue.Opened GHEventPayload.Issue issuePayload, DynamicGraphQLClient gitHubGraphQLClient) {
+        // do something GraphQLy with gitHubGraphQLClient
+    }
+}
+
+
+
+

The injected DynamicGraphQLClient instance is authenticated as an installation.

+
+
+

DynamicGraphQLClient is a dynamic SmallRye GraphQL client. +You can find more information about the SmallRye GraphQL client here and here.

+
+
+
+
+

Configuration Reference

+
+
+

The Quarkus GitHub App extension exposes the following configuration properties:

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The numeric application id provided by GitHub.

+
+
+

Optional for tests, but mandatory in production and dev mode.

+
+
+

Environment variable: QUARKUS_GITHUB_APP_APP_ID

+
+
+

string

+
+
+
+

The GitHub name of the application.

+
+
+

Optional, only used for improving the user experience.

+
+
+

Environment variable: QUARKUS_GITHUB_APP_APP_NAME

+
+
+

string

+
+
+
+

Read the configuration files from the source repository in case of a fork.

+
+
+

Environment variable: QUARKUS_GITHUB_APP_READ_CONFIG_FILES_FROM_SOURCE_REPOSITORY

+
+
+

boolean

false

+
+
+
+

The RSA private key.

+
+
+

Optional for tests, but mandatory in production and dev mode.

+
+
+

Environment variable: QUARKUS_GITHUB_APP_PRIVATE_KEY

+
+
+

PrivateKey

+
+
+
+

The webhook secret if defined in the GitHub UI.

+
+
+

Environment variable: QUARKUS_GITHUB_APP_WEBHOOK_SECRET

+
+
+

string

+
+
+
+

The Smee.io proxy URL used when testing locally.

+
+
+

Environment variable: QUARKUS_GITHUB_APP_WEBHOOK_PROXY_URL

+
+
+

string

+
+
+
+

The GitHub instance endpoint.

+
+
+

Defaults to the public github.com instance.

+
+
+

Environment variable: QUARKUS_GITHUB_APP_INSTANCE_ENDPOINT

+
+
+

string

https://api.github.com

+
+
+
+

The REST API endpoint.

+
+
+

Defaults to the public github.com instance REST API endpoint.

+
+
+

Environment variable: QUARKUS_GITHUB_APP_REST_API_ENDPOINT

+
+
+

string

${quarkus.github-app.instance-endpoint}

+
+
+
+

The GraphQL API endpoint.

+
+
+

Defaults to the public github.com instance GraphQL endpoint.

+
+
+

Environment variable: QUARKUS_GITHUB_APP_GRAPHQL_API_ENDPOINT

+
+
+

string

${quarkus.github-app.instance-endpoint}/graphql

+
+
+
+

A directory in which the payloads are saved.

+
+
+

Environment variable: QUARKUS_GITHUB_APP_DEBUG_PAYLOAD_DIRECTORY

+
+
+

path

+
+
+
+

Architecture Overview

+
+
+
+Architecture +
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-github-app/dev/includes/attributes.html b/quarkus-github-app/dev/includes/attributes.html new file mode 100644 index 0000000000..d60604a6b7 --- /dev/null +++ b/quarkus-github-app/dev/includes/attributes.html @@ -0,0 +1,933 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-github-app/dev/includes/quarkus-github-app.html b/quarkus-github-app/dev/includes/quarkus-github-app.html new file mode 100644 index 0000000000..d111395cac --- /dev/null +++ b/quarkus-github-app/dev/includes/quarkus-github-app.html @@ -0,0 +1,1137 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The numeric application id provided by GitHub.

+
+
+

Optional for tests, but mandatory in production and dev mode.

+
+
+

Environment variable: QUARKUS_GITHUB_APP_APP_ID

+
+
+

string

+
+
+
+

The GitHub name of the application.

+
+
+

Optional, only used for improving the user experience.

+
+
+

Environment variable: QUARKUS_GITHUB_APP_APP_NAME

+
+
+

string

+
+
+
+

Read the configuration files from the source repository in case of a fork.

+
+
+

Environment variable: QUARKUS_GITHUB_APP_READ_CONFIG_FILES_FROM_SOURCE_REPOSITORY

+
+
+

boolean

false

+
+
+
+

The RSA private key.

+
+
+

Optional for tests, but mandatory in production and dev mode.

+
+
+

Environment variable: QUARKUS_GITHUB_APP_PRIVATE_KEY

+
+
+

PrivateKey

+
+
+
+

The webhook secret if defined in the GitHub UI.

+
+
+

Environment variable: QUARKUS_GITHUB_APP_WEBHOOK_SECRET

+
+
+

string

+
+
+
+

The Smee.io proxy URL used when testing locally.

+
+
+

Environment variable: QUARKUS_GITHUB_APP_WEBHOOK_PROXY_URL

+
+
+

string

+
+
+
+

The GitHub instance endpoint.

+
+
+

Defaults to the public github.com instance.

+
+
+

Environment variable: QUARKUS_GITHUB_APP_INSTANCE_ENDPOINT

+
+
+

string

https://api.github.com

+
+
+
+

The REST API endpoint.

+
+
+

Defaults to the public github.com instance REST API endpoint.

+
+
+

Environment variable: QUARKUS_GITHUB_APP_REST_API_ENDPOINT

+
+
+

string

${quarkus.github-app.instance-endpoint}

+
+
+
+

The GraphQL API endpoint.

+
+
+

Defaults to the public github.com instance GraphQL endpoint.

+
+
+

Environment variable: QUARKUS_GITHUB_APP_GRAPHQL_API_ENDPOINT

+
+
+

string

${quarkus.github-app.instance-endpoint}/graphql

+
+
+
+

A directory in which the payloads are saved.

+
+
+

Environment variable: QUARKUS_GITHUB_APP_DEBUG_PAYLOAD_DIRECTORY

+
+
+

path

+
+
+
+
+ + + + + + + diff --git a/quarkus-github-app/dev/index.html b/quarkus-github-app/dev/index.html new file mode 100644 index 0000000000..49001c98b8 --- /dev/null +++ b/quarkus-github-app/dev/index.html @@ -0,0 +1,975 @@ + + + + + + Quarkus GitHub App :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus GitHub App

+
+

When maintaining large projects on GitHub, GitHub Apps come handy: +they allow you to automate most of the repetitive tasks.

+
+
+

The principle is simple: +for each event your application listens to, +GitHub will call your webhook URL with a payload +and from there, it is on you to handle the payload and do something with it.

+
+
+

There are already a ton of existing GitHub Apps +and they can improve the overall throughput of your project +and avoid human errors.

+
+
+

That being said, +your project might also have specific requirements or workflows +or you might be uncomfortable giving the keys of your repository +to an external entity.

+
+
+

We have some good news for you: +developing GitHub Apps is easy.

+
+
+

Until now, your best option was GitHub’s own Probot, +but if you prefer Java over JavaScript or TypeScript, +you have come to the right place: +Quarkus GitHub App is designed to make developing GitHub Apps in Java +easy and fun.

+
+
+

And with all the Quarkus goodness: developer joy, live reload and native executables.

+
+
+

Eager to start? First step is to register your GitHub App.

+
+
+
+
+
+ + + + + + + diff --git a/quarkus-github-app/dev/push-to-production.html b/quarkus-github-app/dev/push-to-production.html new file mode 100644 index 0000000000..6ea0744fcb --- /dev/null +++ b/quarkus-github-app/dev/push-to-production.html @@ -0,0 +1,1075 @@ + + + + + + Push to Production :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Push to Production

+
+

Register another GitHub App

+
+
+

There is a good chance you will continue to develop your GitHub App to add features and fix issues. +A good practice is to register a new GitHub App specific to production instead of reusing the one you created for development.

+
+
+

To do so, please follow the instructions in Register a GitHub App again.

+
+
+
+
+

Deploy your application

+
+
+

As a jar

+
+

You can build your application as a jar using the following command:

+
+
+
+
quarkus build
+
+
+
+

The application can be easily deployed to a Kubernetes or OpenShift cluster using the Kubernetes/OpenShift extensions.

+
+
+

Or you can simply build a container using the Container image extensions.

+
+
+
+

As a native executable

+
+

One of the great benefits of Quarkus is that you can easily build a native executable from your Java applications. +Native executables offer faster boot and lower memory footprint.

+
+
+

GitHub Apps are good candidates for native executables (but deploying as a jar is also perfectly valid).

+
+
+

Your GitHub App is no exception and you can build a native executable using GraalVM with:

+
+
+
+
quarkus build --native
+
+
+
+ + + + + +
+ + +
+

Building a native executable takes a while and is both CPU and memory intensive.

+
+
+
+
+

You can then start the native executable with:

+
+
+
+
./target/my-github-app-1.0.0-SNAPSHOT-runner
+
+
+
+ + + + + +
+ + +
+

For more information about building native executables, +see Building a native executable on the Quarkus website.

+
+
+

This particular guide also covers deploying native applications as containers.

+
+
+
+
+
+
+
+

Configure your GitHub App for production

+
+
+

There are some specific requirements for production:

+
+
+
    +
  • +

    The webhook URL points to the root of your deployed GitHub App.

    +
  • +
  • +

    Your GitHub App must be publicly available.

    +
  • +
  • +

    You have to define a webhook secret.

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

Do not use the Smee.io service for your production GitHub App.

+
+
+

Use it only for testing purposes.

+
+
+
+
+
+
+

Keep your secrets secret

+
+
+

Be careful to not expose your private key or your webhook secret in any sort as your GitHub App is publicly available.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-github-app/dev/register-github-app.html b/quarkus-github-app/dev/register-github-app.html new file mode 100644 index 0000000000..2e6cad5c73 --- /dev/null +++ b/quarkus-github-app/dev/register-github-app.html @@ -0,0 +1,1184 @@ + + + + + + Register a GitHub App :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Register a GitHub App

+
+
+
+

The first step when working on a new GitHub App is to register it on GitHub.

+
+
+

That is one of our main differences with Probot: +we don’t perform the magic to register your application when initializing it.

+
+
+

For now, we think it is better that you understand what you are doing +when registering your application, +especially since you will need to do it again when pushing your app to production.

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

We might revisit this decision at a later stage depending on your feedback.

+
+
+
+
+
+
+

Step 1 - Create a playground project

+
+
+

Create a test repository that will serve as a playground for experimenting.

+
+
+

We will install our GitHub App in this repository.

+
+
+
+
+

Step 2 - Register the application

+
+
+

To register a new application, go to GitHub Apps and click New GitHub App.

+
+
+

You can access this page by clicking on your profile picture at the top and then +Settings > Developer Settings > GitHub Apps > New GitHub App.

+
+
+

Fill in the following information.

+
+
+

Application name

+
+

When you are going to push your app to production, you will register a new GitHub App.

+
+
+

So you might want to make it clear in the name that this app is for development/test.

+
+
+
+

Homepage URL

+
+

The homepage URL could be, for instance, the URL of your app’s repository.

+
+
+
+

Identifying and authorizing users

+
+

You can skip this section for now: it’s not useful for a minimal app.

+
+
+
+

Post installation

+
+

You can skip this section for now: it’s not useful for a minimal app.

+
+
+
+

Webhook URL

+
+

There is a good chance your development box is not directly accessible from the Internet.

+
+
+

To solve this issue, GitHub provides the Smee.io service which uses Server Side Events to distribute the events to your locally running app.

+
+
+

Go to https://smee.io/ and click on Start a new channel.

+
+
+

The URL in the Webhook Proxy URL field at the top will be your webhook URL. +Keep it around, we will need it later.

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

For now, you don’t need to set up a webhook secret: +secret signature checking is disabled when using Smee.io as it modifies the original payload.

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

No need to start a Smee.io client: +Quarkus GitHub App connects to Smee.io automatically when a webhook proxy url is defined in your configuration.

+
+
+
+
+
+

Webhook secret

+
+

When running in dev mode, we don’t enforce signature checking +(one big reason for this is that Smee.io doesn’t pass the payloads as is).

+
+
+

However it is good practice to define a webhook secret as it is enforced in production mode.

+
+
+

To generate a webhook secret, you can use the method recommended by GitHub:

+
+
+
+
ruby -rsecurerandom -e 'puts SecureRandom.hex(20)'
+
+
+
+

You can also use pwgen:

+
+
+
+
pwgen -N 1 -s 40
+
+
+
+

This webhook secret will be required later so keep it around.

+
+
+
+

Permissions

+
+

Depending on what your application will do, you will need to set up the appropriate permissions.

+
+
+

Just start with enabling the Issues and Pull requests Read & write Repository permissions. +That is a good starting point to experiment.

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

You can add more permissions later but each installation of your GitHub App will need to validate the added permissions.

+
+
+

That is not really a problem when developing your app so don’t overthink it.

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

Subscribe to events

+
+

If you don’t subscribe to any event, your webhook URL will never be called.

+
+
+

For experimenting, subscribe to Issues, Issue comment and Pull request.

+
+
+

Now, you can click on Create GitHub App.

+
+
+
+
+
+

Step 3 - Create a private key

+
+
+

Now that you have registered your first GitHub App, there is one more thing you need to do: +generate a private key.

+
+
+

Scroll down, and in the Private keys section, click on Generate a private key.

+
+
+

You will be asked to download the key, keep it around, we will need it later.

+
+
+
+
+

Step 4 - Install your app

+
+
+

Install the GitHub App in your playground project.

+
+
+

This can be done from the Install App tab of the application’s page (https://github.com/settings/apps then Edit and Install App).

+
+
+
+
+

That’s it

+
+
+

OK, there is a lot more you can do in there and we will discuss more things in details later, +but for now, you are done: you have registered your first GitHub App +and you can start experimenting with it.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-github-app/dev/replay-ui.html b/quarkus-github-app/dev/replay-ui.html new file mode 100644 index 0000000000..5cafcd5337 --- /dev/null +++ b/quarkus-github-app/dev/replay-ui.html @@ -0,0 +1,956 @@ + + + + + + Replay UI :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Replay UI

+
+

When developing GitHub Apps, more often than not, being able to replay an event is useful. +It can be cumbersome to trigger the events from the GitHub UI by creating issues, pull requests, commenting…​

+
+
+

GitHub offers a replay UI for this purpose in the Advanced tab of your application page. +It is not very practical when developing though as you are not able to search and, +sometimes, the details of the events are not available immediately.

+
+
+

Quarkus GitHub App offers an integrated Replay UI when developing in dev mode. +You can inspect the received payloads and replay events from there. +It is available at http://localhost:8080/replay/.

+
+
+
+Replay UI +
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-github-app/dev/testing.html b/quarkus-github-app/dev/testing.html new file mode 100644 index 0000000000..eb73ece6d3 --- /dev/null +++ b/quarkus-github-app/dev/testing.html @@ -0,0 +1,1295 @@ + + + + + + Testing :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Testing

+
+

Manual testing vs. automated testing

+
+
+

The easiest way to start testing your GitHub application is probably +to create a playground project on GitHub and to run the application locally through Smee.io, +as explained in Register a GitHub App.

+
+
+

This will let you play around on your playground repository, +manually triggering events (by opening issues, pull requests, etc.), +then check in the application logs that these events were consumed by the application.

+
+
+

That’s enough to get started, but once you start using the application on real repositories, +you will want to make sure that changes to your code won’t break existing features. +Doing that manually on every change will get exhausting very quickly.

+
+
+

To automate tests, you will of course rely on JUnit as with any Quarkus application, +but there is an additional challenge: the application needs a GitHub repository to work on, +and needs to be fed GitHub events to react to.

+
+
+

Fortunately, the GitHub App extension provides tools to help you simulate events and mock a GitHub repository.

+
+
+
+
+

Add the testing dependency

+
+
+

Add the following dependency to your deployment module:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.githubapp</groupId>
+    <artifactId>quarkus-github-app-testing</artifactId>
+    <version>2.3.2</version>
+    <scope>test</scope>
+</dependency>
+
+
+
+
+
+

Add event payloads to the test resources

+
+
+

When you tested your application manually, +GitHub sent events (HTTP requests) to your application. +Those events can be inspected using the replay UI at http://localhost:8080/replay/.

+
+
+

In order to simulate events in automated tests, +you need to copy the payload of those events to resource files.

+
+
+

Let’s continue with the example from Create a GitHub App: +open an issue in your playground repository, +go to the replay UI to copy the event payload, +then put that payload in a file in your project: src/test/resources/issue-opened.json.

+
+
+
+
+

Create a test class

+
+
+

Add the following class to src/test/java, in a package of your choosing:

+
+
+
+
@QuarkusTest
+@GitHubAppTest
+class CreateCommentTest {
+    @Test
+    void testIssueOpened() throws IOException {
+        GitHubAppTesting.when() (1)
+                .payloadFromClasspath("/issue-opened.json") (2)
+                .event(GHEvent.ISSUES) (3)
+                .then().github(mocks -> { (4)
+                    Mockito.verify(mocks.issue(750705278)) (5)
+                            .comment("Hello from my GitHub App"); (6)
+                });
+    }
+}
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
1Use GitHubAppTesting.when() to start simulating an event.
2Define the payload of the simulated event by pointing to a file in the classpath.
3Define the type of the simulated event.
4Use .then().github(mocks → …​) to perform assertions on GitHub objects involved in the event handling.
5The given mocks object gives access to mocks of GitHub objects, indexed by their identifier. +See the payload of your event for the identifiers of relevant objects (issue, repository, …​). +You can use .issue(long), .pullRequest(long), or even .ghObject(Class<? extends GHObject>, long). +See the GitHubMockContext interface for a detailed list of methods.
6Assertions are performed as usual with Mockito.
+
+
+
+
+

Run your tests

+
+
+

Just run ./mvnw test from the commandline.

+
+
+
+
+

More advanced Mockito features

+
+
+

You can use most Mockito features on the GitHub object mocks; +that includes defining their behavior before the event is simulated:

+
+
+
+
@QuarkusTest
+@GitHubAppTest
+class CreateCommentTest {
+    @Test
+    void testIssueOpened() throws IOException {
+        GitHubAppTesting.given() (1)
+                .github(mocks -> { (2)
+                    Mockito.doThrow(new RuntimeException("Simulated exception")) (3)
+                            .when(mocks.issue(750705278))
+                            .comment(Mockito.any());
+                })
+                .when().payloadFromClasspath("/issue-opened.json")
+                .event(GHEvent.ISSUES)
+                .then().github(mocks -> { (4)
+                    Mockito.verify(mocks.issue(750705278)) (5)
+                            .createReaction(ReactionContent.CONFUSED);
+                });
+    }
+}
+
+
+
+ + + + + + + + + + + + + + + + + + + + + +
1Use given().github(…​) to configure mocks.
2The given mocks object gives access to mocks of GitHub objects, indexed by their identifier, +just like in .then().github(…​). +This can be used to configure the behavior of objects referenced in the event payload, +such as (here) the GHIssue.
3Here we’re configuring the mock to throw an exception when the application tries to comment on the issue.
4We can still use .then().github(mocks → …​) to perform assertions on GitHub objects involved in the event handling.
5Here we’re verifying that the application caught the runtime exception and added a confused reaction to the GitHub issue.
+
+
+

You can also use the class GitHubAppMockito to simplify mocking for some common scenarios:

+
+
+
+
@QuarkusTest
+@GitHubAppTest
+class CreateCommentTest {
+    @Test
+    void testIssueEdited() throws IOException {
+        var queryCommentsBuilder = GitHubAppMockito.mockBuilder(GHIssueCommentQueryBuilder.class); (1)
+        GitHubAppTesting.given()
+                .github(mocks -> {
+                    Mockito.when(mocks.issue(750705278).queryComments())
+                            .thenReturn(queryCommentsBuilder);
+                    var previousCommentFromBotMock = mocks.ghObject(GHIssueComment.class, 2);
+                    var commentsMock = GitHubAppMockito.mockPagedIterable(previousCommentFromBotMock); (2)
+                    Mockito.when(queryCommentsBuilder.list()) (3)
+                            .thenReturn(commentsMock);
+                })
+                .when().payloadFromClasspath("/issue-edited.json")
+                .event(GHEvent.ISSUES)
+                .then().github(mocks -> {
+                    Mockito.verify(mocks.issue(750705278)).queryComments();
+                    // The bot already commented , it should not comment again.
+                    Mockito.verifyNoMoreInteractions(mocks.issue(750705278));
+                });
+    }
+}
+
+
+
+ + + + + + + + + + + + + +
1Use GitHubAppMockito.mockBuilder to easily mock builders from the GitHub API. +It will mock the builder by setting its default answer to just return this;, +which is convenient since most methods in builders do that. +
+

Here we’re mocking the builder returned by GHIssue#queryComments().

+
2Use GitHubAppMockito.mockPagedIterable to easily mock PagedIterable from the GitHub API, +which is the return type from many query or listing methods. +
+

Here we’re mocking the list of comments returned when querying issue comments, +so that it includes exactly one (mocked) comment.

+
3When mocking builders, don’t forget to define the behavior of the "build method" (list()/create()/…​), +because the default answer set by GitHubAppMockito.mockBuilder (returning this) +will not work for that method.
+
+
+
+
+

Mocking the configuration file

+
+
+

If your event handler uses @ConfigFile to extract a configuration file from the GitHub repository, +this file can be defined explicitly as a string:

+
+
+
+
@QuarkusTest
+@GitHubAppTest
+class CreateCommentTest {
+    @Test
+    void testIssueOpened() throws IOException {
+        GitHubAppTesting.given() (1)
+                .github(mocks -> { (2)
+                    mocks.configFile("my-bot.yml") (3)
+                            .fromString("greeting.message: \"some custom message\"");
+                })
+                .when()
+                .payloadFromClasspath("/issue-opened.json")
+                .event(GHEvent.ISSUES)
+                .then().github(mocks -> {
+                    Mockito.verify(mocks.issue(750705278))
+                            .comment("some custom message");
+                });
+    }
+}
+
+
+
+ + + + + + + + + + + + + +
1Use given().github(…​) to configure mocks.
2The given mocks object gives access to mocks of GitHub objects…​ including the configuration file.
3Here we’re setting the content of the configuration file to a given string. +This string will be parsed and mapped to an object, then passed to the event handler +as the @ConfigFile-annotated argument.
+
+
+

Alternatively, the file can be extracted from a resource in the classpath:

+
+
+
+
@QuarkusTest
+@GitHubAppTest
+class CreateCommentTest {
+    @Test
+    void testIssueOpened() throws IOException {
+        GitHubAppTesting.given() (1)
+                .github(mocks -> { (2)
+                    mocks.configFile("my-bot.yml") (3)
+                            .fromClasspath("/my-bot-some-custom-message.yml");
+                })
+                .when()
+                .payloadFromClasspath("/issue-opened.json")
+                .event(GHEvent.ISSUES)
+                .then().github(mocks -> {
+                    Mockito.verify(mocks.issue(750705278))
+                            .comment("some custom message");
+                });
+    }
+}
+
+
+
+ + + + + + + + + + + + + +
1Use given().github(…​) to configure mocks.
2The given mocks object gives access to mocks of GitHub objects…​ including the configuration file.
3Here we’re setting the content of the configuration file to a file extracted from the classpath (test resources). +This file will be parsed and mapped to an object, then passed to the event handler +as the @ConfigFile-annotated argument.
+
+
+
+
+

Limitations

+
+
+
    +
  • +

    The testing tools can be used exclusively with Mockito.

    +
  • +
  • +

    The testing tools cannot be used to test an application running in native mode.

    +
  • +
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-google-cloud-services/main/bigquery.html b/quarkus-google-cloud-services/main/bigquery.html new file mode 100644 index 0000000000..7a17cfe5f9 --- /dev/null +++ b/quarkus-google-cloud-services/main/bigquery.html @@ -0,0 +1,1097 @@ + + + + + + Google Cloud Services - BigQuery :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Google Cloud Services - BigQuery

+
+
+
+

This extension allows to inject a com.google.cloud.bigquery.BigQuery object or a com.google.cloud.bigquery.storage.v1.BigQueryWriteClient object inside your Quarkus application.

+
+
+

Be sure to have read the Google Cloud Services extension pack global documentation before this one, it contains general configuration and information.

+
+
+
+
+

Bootstrapping the project

+
+
+

First, we need a new project. Create a new project with the following command (replace the version placeholder with the correct one):

+
+
+
+
mvn io.quarkus:quarkus-maven-plugin:${quarkusVersion}:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=bigquery-quickstart \
+    -Dextensions="resteasy-reactive-jackson,quarkus-google-cloud-bigquery"
+cd bigquery-quickstart
+
+
+
+

This command generates a Maven project, importing the Google Cloud BigQuery extension.

+
+
+

If you already have your Quarkus project configured, you can add the quarkus-google-cloud-bigquery extension to your project by running the following command in your project base directory:

+
+
+
+
./mvnw quarkus:add-extension -Dextensions="quarkus-google-cloud-bigquery"
+
+
+
+

This will add the following to your pom.xml:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.googlecloudservices</groupId>
+    <artifactId>quarkus-google-cloud-bigquery</artifactId>
+</dependency>
+
+
+
+
+
+

Some example

+
+
+

This is an example usage of the extension: we create a REST resource with a single endpoint that queries the Stackoverflow +public dataset for questions tagged with 'google-bigquery' and returns the results.

+
+
+
+
import java.util.UUID;
+import java.util.stream.Collectors;
+import java.util.stream.StreamSupport;
+
+import javax.inject.Inject;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+
+import com.google.cloud.bigquery.BigQuery;
+import com.google.cloud.bigquery.Job;
+import com.google.cloud.bigquery.JobId;
+import com.google.cloud.bigquery.JobInfo;
+import com.google.cloud.bigquery.QueryJobConfiguration;
+import com.google.cloud.bigquery.TableResult;
+
+@Path("/bigquery")
+public class BigQueryResource {
+    @Inject
+    BigQuery bigquery; // Inject BigQuery
+
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public String bigquery() throws InterruptedException {
+        QueryJobConfiguration queryConfig = QueryJobConfiguration.newBuilder(// Define a new Job with the query
+                "SELECT "
+                        + "CONCAT('https://stackoverflow.com/questions/', CAST(id as STRING)) as url, view_count "
+                        + "FROM `bigquery-public-data.stackoverflow.posts_questions` "
+                        + "WHERE tags like '%google-bigquery%' ORDER BY favorite_count DESC LIMIT 10")
+                .setUseLegacySql(false)
+                .build();
+
+        // Create a job ID so that we can safely retry.
+        JobId jobId = JobId.of(UUID.randomUUID().toString());
+        Job queryJob = bigquery.create(JobInfo.newBuilder(queryConfig).setJobId(jobId).build());
+
+        // Wait for the query to complete.
+        queryJob = queryJob.waitFor();
+
+        // Check for errors
+        if (queryJob == null) {
+            throw new RuntimeException("Job no longer exists");
+        } else if (queryJob.getStatus().getError() != null) {
+            throw new RuntimeException(queryJob.getStatus().getError().toString());
+        }
+
+        // Get the results and return them
+        TableResult result = queryJob.getQueryResults();
+        return StreamSupport.stream(result.iterateAll().spliterator(), false)
+                .map(row -> row.get("url").getStringValue() + " - " + row.get("view_count").getLongValue() + "\n")
+                .collect(Collectors.joining());
+    }
+}
+
+
+
+

If you want to use the BigQuery Storage Write API you can inject a BigQueryWriteClient :

+
+
+
+
import javax.inject.Inject;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+
+import com.google.cloud.bigquery.storage.v1.BigQueryWriteClient;
+
+@Path("/bigquery")
+public class BigQueryResource {
+    @Inject
+    BigQueryWriteClient bigQueryWriteClient;
+
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public String bigquery() {
+        // do whatever you want with the BigQueryWriteClient ...
+    }
+}
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-google-cloud-services/main/bigtable.html b/quarkus-google-cloud-services/main/bigtable.html new file mode 100644 index 0000000000..df5581f1a1 --- /dev/null +++ b/quarkus-google-cloud-services/main/bigtable.html @@ -0,0 +1,1130 @@ + + + + + + Google Cloud Services - Bigtable :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Google Cloud Services - Bigtable

+
+
+
+

This extension allows using Google Cloud Bigtable inside your Quarkus application.

+
+
+

Be sure to have read the Google Cloud Services extension pack global documentation before this one, it contains general configuration and information.

+
+
+
+
+

Bootstrapping the project

+
+
+

First, we need a new project. Create a new project with the following command (replace the version placeholder with the correct one):

+
+
+
+
mvn io.quarkus:quarkus-maven-plugin:<quarkusVersion>:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=pubsub-quickstart \
+    -Dextensions="resteasy-reactive-jackson,quarkus-google-cloud-bigtable"
+cd pubsub-quickstart
+
+
+
+

This command generates a Maven project, importing the Google Cloud Bigtable extension.

+
+
+

If you already have your Quarkus project configured, you can add the quarkus-google-cloud-bigtable extension to your project by running the following command in your project base directory:

+
+
+
+
./mvnw quarkus:add-extension -Dextensions="quarkus-google-cloud-bigtable"
+
+
+
+

This will add the following to your pom.xml:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.googlecloudservices</groupId>
+    <artifactId>quarkus-google-cloud-bigtable</artifactId>
+</dependency>
+
+
+
+
+
+

Preparatory steps

+
+
+

To test Bigtable you first need to create a Bigtable instance named test-instane

+
+
+

You can create one with gcloud:

+
+
+
+
gcloud bigtable instances create test-instance \
+    --cluster=test-cluster \
+    --cluster-zone=europe-west1-b \
+    --display-name=Test
+
+
+
+
+
+

Authentication

+
+
+

By default, Bigtable mandates the usage of the GOOGLE_APPLICATION_CREDENTIALS environment variable to define its credentials, so +you need to set this one instead of relying on the quarkus.google.cloud.service-account-location property.

+
+
+
+
export GOOGLE_APPLICATION_CREDENTIALS=<your-service-account-file>
+
+
+
+

Another solution, is to inject a CredentialsProvider provided by the extension, and to use the various BigTable*Settings classes +to instantiate Bigtable components. This can be seen on the example that follows.

+
+
+
+
+

Some example

+
+
+

This is an example usage of the extension: we create a REST resource with a single endpoint that write a row inside the Bigtable test-column-family column family of the test-table table then retrieve it.

+
+
+

We also init the Bigtable table at @PostConstruct time if it didn’t exist.

+
+
+
+
import java.io.IOException;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+
+import com.google.api.gax.core.CredentialsProvider;
+import com.google.cloud.bigtable.admin.v2.BigtableTableAdminClient;
+import com.google.cloud.bigtable.admin.v2.BigtableTableAdminSettings;
+import com.google.cloud.bigtable.admin.v2.models.CreateTableRequest;
+import com.google.cloud.bigtable.data.v2.BigtableDataClient;
+import com.google.cloud.bigtable.data.v2.BigtableDataSettings;
+import com.google.cloud.bigtable.data.v2.models.Row;
+import com.google.cloud.bigtable.data.v2.models.RowCell;
+import com.google.cloud.bigtable.data.v2.models.RowMutation;
+
+@Path("/bigtable")
+public class BigtableResource {
+   private static final String INSTANCE_ID = "test-instance";
+       private static final String TABLE_ID = "test-table";
+       private static final String COLUMN_FAMILY_ID = "test-column-family";
+
+       @ConfigProperty(name = "quarkus.google.cloud.project-id")
+       String projectId;
+
+        @Inject
+        CredentialsProvider credentialsProvider;
+
+       @PostConstruct
+       void initBigtable() throws IOException {
+           // init Bigtable settings using the injected CredentialsProvider
+           BigtableTableAdminSettings settings = BigtableTableAdminSettings.newBuilder()
+                   .setCredentialsProvider(credentialsProvider)
+                   .setProjectId(projectId)
+                   .setInstanceId(INSTANCE_ID)
+                   .build();
+           try (BigtableTableAdminClient adminClient = BigtableTableAdminClient.create(settings)) {
+               if (!adminClient.exists(TABLE_ID)) {
+                   System.out.println("Creating table: " + TABLE_ID);
+                   CreateTableRequest createTableRequest = CreateTableRequest.of(TABLE_ID).addFamily(COLUMN_FAMILY_ID);
+                   adminClient.createTable(createTableRequest);
+                   System.out.printf("Table %s created successfully%n", TABLE_ID);
+               }
+           }
+       }
+
+       @GET
+       public String bigtable() throws IOException {
+           // init Bigtable settings using the injected CredentialsProvider
+           BigtableTableAdminSettings settings = BigtableTableAdminSettings.newBuilder()
+                   .setCredentialsProvider(credentialsProvider)
+                   .setProjectId(projectId)
+                   .setInstanceId(INSTANCE_ID)
+                   .build();
+           try (BigtableDataClient dataClient = BigtableDataClient.create(settings)) {
+                // create a row
+                RowMutation rowMutation = RowMutation.create(tableId, "key1").setCell(columnFamily, "test", "value1");
+                dataClient.mutateRow(rowMutation);
+
+                Row row = dataClient.readRow(tableId, "key1");
+                System.out.println("Row: " + row.getKey().toStringUtf8());
+                StringBuilder cells = new StringBuilder();
+                for (RowCell cell : row.getCells()) {
+                    cells.append(String.format(
+                            "Family: %s    Qualifier: %s    Value: %s%n",
+                            cell.getFamily(), cell.getQualifier().toStringUtf8(), cell.getValue().toStringUtf8()));
+                }
+                return cells.toString();
+            } finally {
+                dataClient.close();
+            }
+    }
+}
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-google-cloud-services/main/firebase-admin.html b/quarkus-google-cloud-services/main/firebase-admin.html new file mode 100644 index 0000000000..9b6ccb40a8 --- /dev/null +++ b/quarkus-google-cloud-services/main/firebase-admin.html @@ -0,0 +1,1105 @@ + + + + + + Google Cloud Services - Firebase Admin :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Google Cloud Services - Firebase Admin

+
+
+
+

This extension allows to inject both a com.google.firebase.FirebaseApp and a com.google.firebase.auth.FirebaseAuth object inside your Quarkus application.

+
+
+

Be sure to have read the Google Cloud Services extension pack global documentation before this one, it contains general configuration and information.

+
+
+
+
+

Bootstrapping the project

+
+
+

First, we need a new project. Create a new project with the following command (replace the version placeholder with the correct one):

+
+
+
+
mvn io.quarkus:quarkus-maven-plugin:${quarkusVersion}:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=firebase-admin-quickstart \
+    -Dextensions="resteasy-reactive-jackson,quarkus-google-cloud-firebase-admin"
+cd firebase-admin-quickstart
+
+
+
+

This command generates a Maven project, importing the Google Cloud Firebase Admin extension.

+
+
+

If you already have your Quarkus project configured, you can add the quarkus-google-cloud-firebase-admin extension to your project by running the following command in your project base directory:

+
+
+
+
./mvnw quarkus:add-extension -Dextensions="quarkus-google-cloud-firebase-admin"
+
+
+
+

This will add the following to your pom.xml:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.googlecloudservices</groupId>
+    <artifactId>quarkus-google-cloud-firebase-admin</artifactId>
+</dependency>
+
+
+
+
+
+

Some example

+
+
+

This is an example usage of the extension: we create a REST resource with a single endpoint that retrieves a user by UID.

+
+
+
+
import com.google.firebase.auth.FirebaseAuth;
+import com.google.firebase.auth.FirebaseAuthException;
+import com.google.firebase.auth.UserRecord;
+import javax.inject.Inject;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+
+@Path("/auth")
+public class FirebaseAuthResourceTest {
+
+    @Inject
+    FirebaseAuth firebaseAuth;
+
+    @GET
+    @Path("/users/{uid}")
+    @Produces(MediaType.APPLICATION_JSON)
+    public UserRecord getUserById(@PathParam("uid") String uid) throws FirebaseAuthException {
+        return firebaseAuth.getUser(uid);
+    }
+
+}
+
+
+
+
+
+

Firebase Authentication

+
+
+

This extension also supports Firebase Authentication, allowing you to secure your endpoints using Firebase’s authentication mechanisms. +This section describes how to use Firebase Authentication in your Quarkus application.

+
+
+

Remember that you need to enable the Firebase Authentication service in your Firebase project. quarkus.google.cloud.firebase-admin.auth.enable must be set to true in your application configuration.

+
+
+

Configuration

+
+
    +
  • +

    quarkus.google.cloud.firebase-admin.auth.enabled - Enable Firebase Authentication. +Default value is false.

    +
  • +
+
+
+
+

Example

+
+

If you want to access the user’s claims you can use SecurityIdentity:

+
+
+
+
import io.quarkus.security.identity.SecurityIdentity;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+
+import com.google.firebase.FirebaseApp;
+import com.google.firebase.FirebaseOptions;
+import org.eclipse.microprofile.jwt.JsonWebToken;
+
+@Path("/app")
+public class FirebaseAppResource {
+
+    @Inject
+    FirebaseApp firebaseApp;
+
+    @Inject
+    SecurityIdentity identity;
+
+    @GET
+    @Path("/options")
+    @Produces(MediaType.APPLICATION_JSON)
+    public FirebaseOptions getOptions() {
+        if(identity instanceof JsonWebToken) {
+            System.out.println("JWT: " + ((JsonWebToken) identity).getClaim("email"));
+        }
+
+        return firebaseApp.getOptions();
+    }
+
+}
+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-google-cloud-services/main/firestore.html b/quarkus-google-cloud-services/main/firestore.html new file mode 100644 index 0000000000..df3f9929a8 --- /dev/null +++ b/quarkus-google-cloud-services/main/firestore.html @@ -0,0 +1,1111 @@ + + + + + + Google Cloud Services - Firestore :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Google Cloud Services - Firestore

+
+
+
+

This extension allows to inject a com.google.cloud.firestore.Firestore object inside your Quarkus application.

+
+
+

Be sure to have read the Google Cloud Services extension pack global documentation before this one, it contains general configuration and information.

+
+
+
+
+

Bootstrapping the project

+
+
+

First, we need a new project. +Create a new project with the following command (replace the version placeholder with the correct one):

+
+
+
+
mvn io.quarkus:quarkus-maven-plugin:<quarkusVersion>:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=firestore-quickstart \
+    -Dextensions="resteasy-reactive-jackson,quarkus-google-cloud-firestore"
+cd firestore-quickstart
+
+
+
+

This command generates a Maven project, importing the Google Cloud Firestore extension.

+
+
+

If you already have your Quarkus project configured, you can add the quarkus-google-cloud-firestore extension to your project by running the following command in your project base directory:

+
+
+
+
./mvnw quarkus:add-extension -Dextensions="quarkus-google-cloud-firestore"
+
+
+
+

This will add the following to your pom.xml:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.googlecloudservices</groupId>
+    <artifactId>quarkus-google-cloud-firestore</artifactId>
+</dependency>
+
+
+
+
+
+

Some example

+
+
+

This is an example usage of the extension: we create a REST resource with a single endpoint that creates a 'persons' collection, inserts three persons in it, then search for persons with last name Doe and returns them.

+
+
+
+
import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.ExecutionException;
+import java.util.stream.Collectors;
+
+import javax.inject.Inject;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+
+import com.google.api.core.ApiFuture;
+import com.google.api.core.ApiFutures;
+import com.google.cloud.firestore.CollectionReference;
+import com.google.cloud.firestore.Firestore;
+import com.google.cloud.firestore.Query;
+import com.google.cloud.firestore.QuerySnapshot;
+import com.google.cloud.firestore.WriteResult;
+
+@Path("/firestore")
+public class FirestoreResource {
+    @Inject
+    Firestore firestore; // Inject Firestore
+
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public String firestore() throws ExecutionException, InterruptedException {
+        // Insert 3 persons
+        CollectionReference persons = firestore.collection("persons");
+        List<ApiFuture<WriteResult>> futures = new ArrayList<>();
+        futures.add(persons.document("1").set(new Person(1L, "John", "Doe")));
+        futures.add(persons.document("2").set(new Person(2L, "Jane", "Doe")));
+        futures.add(persons.document("3").set(new Person(3L, "Charles", "Baudelaire")));
+        ApiFutures.allAsList(futures).get();
+
+        // Search for lastname=Doe
+        Query query = persons.whereEqualTo("lastname", "Doe");
+        ApiFuture<QuerySnapshot> querySnapshot = query.get();
+        return querySnapshot.get().getDocuments().stream()
+                .map(document -> document.getId() + " - " + document.getString("firstname") + " "
+                        + document.getString("lastname") + "\n")
+                .collect(Collectors.joining());
+    }
+}
+
+
+
+ + + + + +
+ + +Here we let Firestore serialize the Person object, Firestore will use reflection for this. +So if you deploy your application as a GraalVM native image you will need to register the Person class for reflection. +This can be done by annotating it with @RegisterForReflection. +
+
+
+
+
+

Dev Service

+
+
+

Configuring the Dev Service

+
+

The extension provides a Dev Service that can be used to run a local Firestore emulator. +This is useful for testing purposes, so you don’t have to rely on a real Firestore instance. +By default, the Dev Service is disabled, but you can enable it by setting the

+
+
+
    +
  • +

    quarkus.google.cloud.firestore.devservice.enabled property to true

    +
  • +
+
+
+

You can also set the

+
+
+
    +
  • +

    quarkus.google.cloud.firestore.devservice.port property to change the port on which the emulator will be started (by default there is no port set, so the emulator will use a random port)

    +
  • +
+
+
+
+

Using the Dev Service

+
+

Once the Dev Service is enabled, the Firestore client which you can @Inject in your application will be configured to use the emulator.

+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-google-cloud-services/main/includes/attributes.html b/quarkus-google-cloud-services/main/includes/attributes.html new file mode 100644 index 0000000000..888263c692 --- /dev/null +++ b/quarkus-google-cloud-services/main/includes/attributes.html @@ -0,0 +1,951 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-google-cloud-services/main/index.html b/quarkus-google-cloud-services/main/index.html new file mode 100644 index 0000000000..58d8fd5651 --- /dev/null +++ b/quarkus-google-cloud-services/main/index.html @@ -0,0 +1,1153 @@ + + + + + + Google Cloud Services extension pack for Quarkus :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Google Cloud Services extension pack for Quarkus

+
+
+
+

The Google Cloud Services extension pack provides Quarkus extensions for the following services:

+
+
+ +
+
+

They all share an optional common configuration property to set the project ID:

+
+
+
+
quarkus.google.cloud.project-id=<your-project-id>
+
+
+
+

If the project ID is not set, the extensions will default to using ServiceOptions.getDefaultProjectId() +that will use the default project detected via Application Default Credentials.

+
+
+

All these extensions work with applications built as native image executables.

+
+
+

These extensions work well within the various Google Cloud Functions extensions available inside Quarkus as they directly authenticate via the built-in credentials, see the deploying to google cloud platform guide.

+
+
+
+
+

Dependency management

+
+
+

All Google Cloud services extensions are part of the Quarkus platform, if you’re using the platform BOM (io.quarkus.platform:quarkus-bom) there is no need to manage their version.

+
+
+

If you’re not using the platform BOM, you can use the Google Cloud services BOM to manage all versions:

+
+
+
+
  <dependencyManagement>
+    <dependencies>
+      <dependency>
+        <groupId>io.quarkiverse.googlecloudservices</groupId>
+        <artifactId>quarkus-google-cloud-services-bom</artifactId>
+        <version>${quarkus.google-cloud-services.version}</version>
+        <type>pom</type>
+        <scope>import</scope>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
+
+
+
+
+
+

Authenticating to Google Cloud

+
+
+

There are several ways to authenticate to Google Cloud, +it depends on where your application runs (inside our outside Google Cloud Platform) and for which service.

+
+
+

The current authentication flow is as follows:

+
+
+
    +
  • +

    Check the quarkus.google.cloud.service-account-location property, if it exists, use the service account file from this location.

    +
  • +
  • +

    Check the quarkus.google.cloud.service-account-encoded-key property, if it exists, use the service account base64 encoded content.

    +
  • +
  • +

    Check the access token returned as part of OpenId Connect Authorization Code Grant response after a user has authenticated with +Google OpenId Connect provider (see Quarkus OpenId Connect for Web Applications). +This access token can be used to access Google Services on behalf of the currently authenticated user +but will be ignored if the quarkus.google.cloud.access-token-enabled property is set to false.

    +
  • +
  • +

    Use GoogleCredentials.getApplicationDefault() that will search for credentials in multiple places:

    +
  • +
  • +

    Credentials file pointed to by the GOOGLE_APPLICATION_CREDENTIALS environment variable.

    +
  • +
  • +

    Credentials provided by the Google Cloud SDK gcloud auth application-default login command.

    +
  • +
  • +

    Google Cloud managed environment (Google App Engine, Google Cloud Functions, GCE, …​) built-in credentials.

    +
  • +
+
+
+

Google PubSub and Google Bigtable should be authenticated using the GOOGLE_APPLICATION_CREDENTIALS environment variable, +or use the provided CredentialsProvider when instantiating their objects.

+
+
+
+
+

Using Google Cloud services emulators

+
+
+

If you plan to use one of the Google Cloud services emulators (for running on localhost, or for testing purpose), on a non-authenticated environment, +you’ll need to mock the Google Cloud authentication credentials, and optionally the CredentialsProvider if you’re using it (otherwise it will be removed by Quarkus CDI engine).

+
+
+

For testing, this can be done by creating a CDI producer that will produce a mocked bean (with Quarkus mock support and Mockito) +to replace the Credentials and the CredentialsProvider beans.

+
+
+
+
import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.Default;
+import javax.enterprise.inject.Produces;
+import javax.inject.Singleton;
+
+import com.google.api.gax.core.CredentialsProvider;
+import com.google.api.gax.core.NoCredentialsProvider;
+import com.google.auth.Credentials;
+import com.google.cloud.NoCredentials;
+
+import io.quarkus.test.Mock;
+
+@Mock
+@ApplicationScoped
+public class GoogleCredentialsMockProducer {
+
+    @Produces
+    @Singleton
+    @Default
+    public Credentials googleCredential() {
+        return NoCredentials.getInstance();
+    }
+
+  // only needed if you're injecting it inside one of your CDI beans
+  @Produces
+  @Singleton
+  @Default
+  public CredentialsProvider credentialsProvider() {
+    return NoCredentialsProvider.create();
+  }
+}
+
+
+
+
+
+

Example applications

+
+
+

Example applications can be found inside the integration-test folder of the GitHub repository:

+
+
+
    +
  • +

    main: RESTEasy endpoints using all the Google Cloud Services extensions, to be deployed as a standalone JAR.

    +
  • +
  • +

    google-cloud-functions: A Google Cloud HTTP function using Google Cloud Storage.

    +
  • +
  • +

    app-engine: A RESTEasy endpoint using Google Cloud Storage, to be deployed inside Google App Engine.

    +
  • +
  • +

    firebase-admin: RESTEasy endpoints using Firebase Admin SDK features, such as user management.

    +
  • +
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-google-cloud-services/main/logging.html b/quarkus-google-cloud-services/main/logging.html new file mode 100644 index 0000000000..fff6570ef5 --- /dev/null +++ b/quarkus-google-cloud-services/main/logging.html @@ -0,0 +1,1220 @@ + + + + + + Google Cloud Services - Logging :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Google Cloud Services - Logging

+
+
+
+

This extension allows you to integrate your logs directly into Google Cloud Logging, including the ability to set +resource labels and log record labels, include trace ID and to use structured logging.

+
+
+

You can integrate your logs into Cloud Logging via a standard logger of the com.google.cloud.logging.Logging object that you can inject in your code.

+
+
+
+
+

Bootstrapping the project

+
+
+

First, we need a new project. Create a new project with the following command (replace the version placeholder with the correct one):

+
+
+
+
mvn io.quarkus:quarkus-maven-plugin:<quarkusVersion>:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=firestore-quickstart \
+    -Dextensions="resteasy-reactive-jackson,quarkus-google-cloud-logging"
+cd firestore-quickstart
+
+
+
+

This command generates a Maven project, importing the Google Cloud Logging extension.

+
+
+

If you already have your Quarkus project configured, you can add the quarkus-google-cloud-logging extension to your project by running the following command in your project base directory:

+
+
+
+
./mvnw quarkus:add-extension -Dextensions="quarkus-google-cloud-logging"
+
+
+
+

This will add the following to your pom.xml:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.googlecloudservices</groupId>
+    <artifactId>quarkus-google-cloud-logging</artifactId>
+</dependency>
+
+
+
+
+
+

How-to: Log

+
+
+

When configured, all that is needed is to log data as you wish. You can use JUL, jboss-logging or Slf4j, or even Google Cloud Logging directly. +You can also inject the logger to use, for example:

+
+
+
+
package mypackage;
+
+import javax.inject.Inject;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+
+import org.jboss.logging.Logger;
+
+@Path("/logging")
+public class LoggingResource {
+
+    @Inject
+    Logger logger;
+
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public String tryLog() {
+        logger.info("Greeting the World");
+        return "Hello World!";
+    }
+}
+
+
+
+
+
+

Configuration

+
+
+

Basic

+
+

Currently, the logging system uses a single Google Cloud Operations log and this is a mandatory configuration parameter.

+
+
+
    +
  • +

    quarkus.google.cloud.logging.default-log

    +
  • +
  • +

    quarkus.google.cloud.project-id

    +
  • +
+
+
+

If you want to disable the logging to Google Cloud you can do so:

+
+
+
    +
  • +

    quarkus.google.cloud.logging.enabled=false

    +
  • +
+
+
+

This is useful for testing not to write to Google Operations during development:

+
+
+
    +
  • +

    %test.quarkus.google.cloud.logging.enabled=false

    +
  • +
+
+
+
+

Formatting

+
+

This logging system can either use a standard text based format, Elastic Common Schema, or a completely custom schema.

+
+
+
    +
  • +

    quarkus.google.cloud.logging.format=[TEXT|JSON]

    +
  • +
+
+
+

Structured Logging

+
+

By setting the logging format to JSON this library will use the ECS format. As local record parameters and MDC values are not +official part of the ECS specification, these default to parameters and mdc respectively, but this can be configured (see below).

+
+
+
    +
  • +

    quarkus.google.cloud.logging.structured.stack-trace.included=[true|false] - Should stack traces be included? Default to true

    +
  • +
  • +

    quarkus.google.cloud.logging.structured.parameters.included=[true|false] - Should log record parameters be included? Defaults to true

    +
  • +
  • +

    quarkus.google.cloud.logging.structured.parameters.field-name - This is the field name to use in ESC for parameters, defaults to parameters

    +
  • +
  • +

    quarkus.google.cloud.logging.structured.mdc.included=[true|false] - Should the MDC values be included? Defaults to true

    +
  • +
  • +

    quarkus.google.cloud.logging.structured.mdc.field-name - This is the field name to use in ESC for MDC values, defaults to mdc

    +
  • +
+
+
+
+
+

Resource type and labels

+
+

You can configure the resource type and the resource labels. This is used by Google Cloud Operations as dimensions +when analysing logs. Please refer to the [Google Cloud documentation](https://cloud.google.com/logging/docs/api/v2/resource-list#resource-types) +for the allowable resource types and their associated labels.

+
+
+
    +
  • +

    quarkus.google.cloud.logging.resource.type - The type string, defaults to generic_node

    +
  • +
  • +

    quarkus.google.cloud.logging.resource.label.<string> - This is a string map with key/value pairs

    +
  • +
+
+
+
+

Log record labels

+
+

You can configure default labels for each log record:

+
+
+
    +
  • +

    quarkus.google.cloud.logging.default-label.<string> - This is a string map with key/value pairs

    +
  • +
+
+
+
+

Tracing

+
+

In order to include trace and span ID in the log, you must bind a TraceInfoExtractor to the CDI context, e.g.:

+
+
+
+
package mypackage;
+
+import javax.enterprise.context.ApplicationScoped;
+
+import org.jboss.logmanager.ExtLogRecord;
+
+import io.quarkiverse.googlecloudservices.logging.runtime.TraceInfo;
+import io.quarkiverse.googlecloudservices.logging.runtime.TraceInfoExtractor;
+
+@ApplicationScoped
+public class TestTraceInfoExtractor implements TraceInfoExtractor {
+
+    @Override
+    public TraceInfo extract(ExtLogRecord record) {
+        return new TraceInfo(/* something, something */);
+    }
+}
+
+
+
+

This will include the trace and span ID in the ESC log if they are not null. +By default, this will also be set on the Google Cloud Operations log entry as a link to Google Cloud Operations tracing, but this is configurable:

+
+
+
    +
  • +

    quarkus.google.cloud.logging.gcp-tracing.enabled=[true|false]

    +
  • +
+
+
+
+
+
+

Injecting GCP Logging

+
+
+

You can inject a com.google.cloud.logging.Logging instance directly. If you do so, the configuration for the project to use, still apply.

+
+
+
+
import java.time.Instant;
+import java.util.List;
+
+import com.google.cloud.logging.Logging;
+import com.google.cloud.logging.LogEntry;
+import com.google.cloud.logging.Payload;
+import com.google.cloud.logging.Severity;
+
+@Inject
+Logging gcpLogging;
+
+
+public void log(String s) {
+    gcpLogging.write(List.of(LogEntry.newBuilder(Payload.StringPayload.of(s))
+        .setSeverity(Severity.DEBUG)
+        .setTimestamp(Instant.now())
+        .build()));
+}
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-google-cloud-services/main/pubsub.html b/quarkus-google-cloud-services/main/pubsub.html new file mode 100644 index 0000000000..e574c355fd --- /dev/null +++ b/quarkus-google-cloud-services/main/pubsub.html @@ -0,0 +1,1227 @@ + + + + + + Google Cloud Services - PubSub :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Google Cloud Services - PubSub

+
+
+
+

This extension allows using Google Cloud PubSub inside your Quarkus application.

+
+
+

Be sure to have read the Google Cloud Services extension pack global documentation before this one, it contains general configuration and information.

+
+
+
+
+

Bootstrapping the project

+
+
+

First, we need a new project. Create a new project with the following command (replace the version placeholder with the correct one):

+
+
+
+
mvn io.quarkus:quarkus-maven-plugin:<quarkusVersion>:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=pubsub-quickstart \
+    -Dextensions="resteasy-reactive-jackson,quarkus-google-cloud-pubsub"
+cd pubsub-quickstart
+
+
+
+

This command generates a Maven project, importing the Google Cloud PubSub extension.

+
+
+

If you already have your Quarkus project configured, you can add the quarkus-google-cloud-pubsub extension to your project by running the following command in your project base directory:

+
+
+
+
./mvnw quarkus:add-extension -Dextensions="quarkus-google-cloud-pubsub"
+
+
+
+

This will add the following to your pom.xml:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.googlecloudservices</groupId>
+    <artifactId>quarkus-google-cloud-pubsub</artifactId>
+</dependency>
+
+
+
+
+
+

Preparatory steps

+
+
+

To test PubSub you first need to create a topic named test-topic

+
+
+

You can create one with gcloud:

+
+
+
+
gcloud pubsub topics create test-topic
+
+
+
+
+
+

Authentication

+
+
+

This extension provides a QuarkusPubSub CDI bean that can help to interact with Google PubSub. +QuarkusPubSub is automatically authenticated, so you don’t have to do anything else to use it.

+
+
+

If you don’t want to use QuarkusPubSub, be sure to configure the authentication. +By default, PubSub mandates the usage of the GOOGLE_APPLICATION_CREDENTIALS environment variable to define its credentials, so +you need to set it instead of relying on the quarkus.google.cloud.service-account-location property. +Another solution, is to inject a CredentialsProvider provided by the extension, and to use it inside the various PubSub +builders and settings objects when, instantiating PubSub components.

+
+
+
+
+

Some example

+
+
+

This is an example usage of the extension: we create a REST resource with a single endpoint that sends a message to the test-topic topic when hit.

+
+
+

We also register a consumer to the same topic at @PostConstruct time that logs all received messages on the topic so we can check that it works.

+
+
+
+
import java.io.IOException;
+import java.util.concurrent.TimeUnit;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+
+import org.jboss.logging.Logger;
+
+import com.google.api.core.ApiFuture;
+import com.google.api.core.ApiFutureCallback;
+import com.google.api.core.ApiFutures;
+import com.google.cloud.pubsub.v1.MessageReceiver;
+import com.google.cloud.pubsub.v1.Publisher;
+import com.google.cloud.pubsub.v1.Subscriber;
+import com.google.common.util.concurrent.MoreExecutors;
+import com.google.protobuf.ByteString;
+import com.google.pubsub.v1.PubsubMessage;
+import com.google.pubsub.v1.Subscription;
+import com.google.pubsub.v1.Topic;
+
+import io.quarkiverse.googlecloudservices.pubsub.QuarkusPubSub;
+
+@Path("/pubsub")
+public class PubSubResource {
+    private static final Logger LOG = Logger.getLogger(PubSubResource.class);
+
+    @Inject
+    QuarkusPubSub pubSub;
+
+    private Subscriber subscriber;
+
+    @PostConstruct
+    void init() throws IOException {
+        // init topic and subscription
+        pubSub.createTopic("test-topic");
+        pubSub.createSubscription("test-topic", "test-subscription");
+
+        // Subscribe to PubSub
+        MessageReceiver receiver = (message, consumer) -> {
+            LOG.infov("Got message {0}", message.getData().toStringUtf8());
+            consumer.ack();
+        };
+        subscriber = pubSub.subscriber("test-subscription", receiver);
+        subscriber.startAsync().awaitRunning();
+    }
+
+    @PreDestroy
+    void destroy() {
+        // Stop the subscription at destroy time
+        if (subscriber != null) {
+            subscriber.stopAsync();
+        }
+    }
+
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public void pubsub() throws IOException, InterruptedException {
+        // Init a publisher to the topic
+        Publisher publisher = pubSub.publisher("test-topic");
+
+        try {
+            ByteString data = ByteString.copyFromUtf8("my-message");// Create a new message
+            PubsubMessage pubsubMessage = PubsubMessage.newBuilder().setData(data).build();
+            ApiFuture<String> messageIdFuture = publisher.publish(pubsubMessage);// Publish the message
+            ApiFutures.addCallback(messageIdFuture, new ApiFutureCallback<String>() {// Wait for message submission and log the result
+                public void onSuccess(String messageId) {
+                    LOG.infov("published with message id {0}", messageId);
+                }
+
+                public void onFailure(Throwable t) {
+                    LOG.warnv("failed to publish: {0}", t);
+                }
+            }, MoreExecutors.directExecutor());
+        } finally {
+            publisher.shutdown();
+            publisher.awaitTermination(1, TimeUnit.MINUTES);
+        }
+    }
+}
+
+
+
+
+
+

Dev Service

+
+
+

Configuring the Dev Service

+
+

The extension provides a Dev Service that can be used to run a local PubSub emulator. This is useful for testing purposes, so you don’t have to rely on a real PubSub instance. By default, the Dev Service is disabled, but you can enable it by setting the

+
+
+
    +
  • +

    quarkus.google.cloud.pubsub.devservice.enabled property to true

    +
  • +
+
+
+

You can also set the

+
+
+
    +
  • +

    quarkus.google.cloud.pubsub.devservice.port property to change the port on which the emulator will be started (by default there is no port set, so the emulator will use a random port)

    +
  • +
+
+
+
+

Using the Dev Service

+
+

If we want to connect to the Dev Service, we need to specify TransportChannelProvider when creating subscriptions and publishers.

+
+
+

We can just reuse the code from the previous example and add the TransportChannelProvider to the Subscriber and Publisher. So what do we need to change?

+
+
+

As a first thing, we should declare a variable which we can then reuse and also inject the quarkus.google.cloud.pubsub.emulator-host property:

+
+
+
+
@ConfigProperty(name = "quarkus.google.cloud.pubsub.emulator-host")
+String emulatorHost;
+
+private TransportChannelProvider channelProvider;
+
+
+
+

Then, we can create a TransportChannelProvider that provides connection to devservice within the init method:

+
+
+
+
// Create a ChannelProvider that connects to the Dev Service
+ManagedChannel channel = ManagedChannelBuilder.forTarget(emulatorHost).usePlaintext().build();
+channelProvider = FixedTransportChannelProvider.create(GrpcTransportChannel.create(channel));
+
+
+
+

Also in the same method when creating the Subscriber we set the TransportChannelProvider:

+
+
+
+
// Create a subscriber and set the ChannelProvider
+subscriber = Subscriber.newBuilder(subscriptionName, receiver).setChannelProvider(channelProvider).build();
+subscriber.startAsync().awaitRunning();
+
+
+
+

The same is done when creating the Publisher in the pubsub method:

+
+
+
+
// Init a publisher to the topic
+Publisher publisher = Publisher.newBuilder(topicName)
+.setCredentialsProvider(credentialsProvider)
+// Set the ChannelProvider
+.setChannelProvider(channelProvider)
+.build();
+
+
+
+

And finally we also set the TransportChannelProvider when creating the SubscriptionAdminClient in the initSubscription method:

+
+
+
+
SubscriptionAdminSettings subscriptionAdminSettings = SubscriptionAdminSettings.newBuilder()
+.setCredentialsProvider(credentialsProvider)
+// Set the ChannelProvider
+.setTransportChannelProvider(channelProvider)
+.build();
+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-google-cloud-services/main/secretmanager.html b/quarkus-google-cloud-services/main/secretmanager.html new file mode 100644 index 0000000000..c8068c0dc5 --- /dev/null +++ b/quarkus-google-cloud-services/main/secretmanager.html @@ -0,0 +1,1114 @@ + + + + + + Google Cloud Services - Secret Manager :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Google Cloud Services - Secret Manager

+
+
+
+

This extension allows to use the Google Cloud Platform Secret Manager client library inside your Quarkus application.The current implementation is focused on accessing the secrets, but extending the implementation into also allowing to create or edit a secret might be a natural next step.

+
+
+

It also allows to use secrets from the secret manager directly inside your application.properties.

+
+
+

Be sure to have read the Google Cloud Services extension pack global documentation before this one, it contains general configuration and information.

+
+
+
+
+

Bootstrapping the project

+
+
+

First, we need a new project.Create a new project with the following command (replace the version placeholder with the correct one):

+
+
+
+
mvn io.quarkus:quarkus-maven-plugin:${quarkusVersion}:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=secretmanager-quickstart \
+    -Dextensions="resteasy-reactive-jackson,quarkus-google-cloud-secret-manager"
+cd secretmanager-quickstart
+
+
+
+

This command generates a Maven project, importing the Google Cloud Secret Manager extension.

+
+
+

If you already have your Quarkus project configured, you can add the quarkus-google-cloud-secret-manager extension to your project by running the following command in your project base directory:

+
+
+
+
./mvnw quarkus:add-extension -Dextensions="quarkus-google-cloud-secret-manager"
+
+
+
+

This will add the following to your pom.xml:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.googlecloudservices</groupId>
+    <artifactId>quarkus-google-cloud-secret-manager</artifactId>
+</dependency>
+
+
+
+
+
+

Client Usage Example

+
+
+

This is an example fetching a single secret from GCP Secret Manager.

+
+
+

First, you’ll have to create the secret in the GCP Secret Manager, as described in Google’s documentation at https://cloud.google.com/secret-manager/docs/creating-and-accessing-secrets.

+
+
+

The following gcloud commands will create a secret named test-secret with the value s3cr3t in it.

+
+
+
+
gcloud secrets create test-secret --replication-policy="automatic"
+printf "s3cr3t" | gcloud secrets versions add integration-test --data-file=-
+
+
+
+

The secretName parameter in the examples below refer to the name you give your secret, whereas the injected secretManagerProjectId refers to the name of your project on GCP.

+
+
+
+
import com.google.cloud.secretmanager.v1.AccessSecretVersionResponse;
+import com.google.cloud.secretmanager.v1.SecretManagerServiceClient;
+import com.google.cloud.secretmanager.v1.SecretVersionName;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+
+@RequestScoped
+public class GCPSecretManager {
+
+    @Inject
+    SecretManagerServiceClient client;
+
+    @ConfigProperty(name = "quarkus.google.cloud.project-id")
+    String projectId;
+
+    public String getSecretFromSecretManager(String secretName) throws IOException {
+        SecretVersionName secretVersionName = SecretVersionName.of(projectId, secretName, "latest");
+        AccessSecretVersionResponse response = client.accessSecretVersion(secretVersionName);
+        return response.getPayload().getData().toStringUtf8();
+    }
+}
+
+
+
+
+
+

Reading Secrets as Properties

+
+
+

You can also load and reference secrets from GCP Secret Manager in your application.properties file by using the following syntax:

+
+
+
+
# 1. Long form - specify the project ID, secret ID, and version
+${sm//projects/<project-id>/secrets/<secret-id>/versions/<version-id>}
+
+# 2. Long form - specify project ID, secret ID, and use latest version
+${sm//projects/<project-id>/secrets/<secret-id>}
+
+# 3. Short form - specify project ID, secret ID, and version
+${sm//<project-id>/<secret-id>/<version-id>}
+
+# 4. Short form - default project; specify secret + version
+#
+# The default project is inferred from the "quarkus.google.cloud.project-id" property
+# in your application.properties, or from application-default credentials if
+# this is not set.
+${sm//<secret-id>/<version>}
+
+# 5. Shortest form - specify secret ID, use default project and latest version.
+${sm//<secret-id>}
+
+
+
+

You can use this syntax to load secrets directly from application.properties:

+
+
+
+
quarkus.database.password=${sm//my-secret-id/latest}
+
+
+
+

Alternatively, you can also reference the secret value as a @ConfigProperty without specifying it from application.properties.

+
+
+
+
@ConfigProperty(name = "${sm//my-secret-id}")
+String secret;
+
+
+
+ + + + + +
+ + +When using secrets directly on your application.properties, the Google Cloud authentication is made early so +access token based authentication cannot be used. +
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-google-cloud-services/main/spanner.html b/quarkus-google-cloud-services/main/spanner.html new file mode 100644 index 0000000000..44887bb756 --- /dev/null +++ b/quarkus-google-cloud-services/main/spanner.html @@ -0,0 +1,1110 @@ + + + + + + Google Cloud Services - Spanner :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Google Cloud Services - Spanner

+
+
+
+

This extension allows to inject a com.google.cloud.spanner.Spanner object inside your Quarkus application.

+
+
+

Be sure to have read the Google Cloud Services extension pack global documentation before this one, it contains general configuration and information.

+
+
+
+
+

Bootstrapping the project

+
+
+

First, we need a new project.Create a new project with the following command (replace the version placeholder with the correct one):

+
+
+
+
mvn io.quarkus:quarkus-maven-plugin:<quarkusVersion>:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=spanner-quickstart \
+    -Dextensions="resteasy-reactive-jackson,quarkus-google-cloud-spanner"
+cd spanner-quickstart
+
+
+
+

This command generates a Maven project, importing the Google Cloud Spanner extension.

+
+
+

If you already have your Quarkus project configured, you can add the quarkus-google-cloud-spanner extension to your project by running the following command in your project base directory:

+
+
+
+
./mvnw quarkus:add-extension -Dextensions="quarkus-google-cloud-spanner"
+
+
+
+

This will add the following to your pom.xml:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.googlecloudservices</groupId>
+    <artifactId>quarkus-google-cloud-spanner</artifactId>
+</dependency>
+
+
+
+
+
+

Preparatory steps

+
+
+

To test Spanner you first need to have a running Spanner cluster named test-instance.

+
+
+

You can create one with gcloud:

+
+
+
+
gcloud spanner instances create test-instance --config=regional-us-central1 \
+    --description="Test Instance" --nodes=1
+
+
+
+

Then you need a database named test-database.

+
+
+

You can create one with gcloud:

+
+
+
+
gcloud spanner databases create test-database --instance test-instance
+
+
+
+

And finally you need to create a table named Singers.

+
+
+

You can do it with gcloud:

+
+
+
+
gcloud spanner databases ddl update test-database --instance test-instance \
+  --ddl='CREATE TABLE Singers ( SingerId INT64 NOT NULL, FirstName STRING(1024), LastName STRING(1024), SingerInfo BYTES(MAX) ) PRIMARY KEY (SingerId)'
+
+
+
+
+
+

Some example

+
+
+

This is an example usage of the extension: we create a REST resource with a single endpoint that inserts four singers inside the Singers table, +then reads the all table and returns its elements.

+
+
+
+
import javax.inject.Inject;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import org.jboss.logging.Logger;
+
+import com.google.cloud.spanner.*;
+
+@Path("/spanner")
+public class SpannerResource {
+    private static final Logger LOG = Logger.getLogger(SpannerResource.class);
+
+    @Inject
+    Spanner spanner;// Inject Spanner
+
+    @ConfigProperty(name = "quarkus.google.cloud.project-id")
+    String projectId;// Inject the project name
+
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public String spanner() {
+        // Create a database client
+        DatabaseId id = DatabaseId.of(projectId, "test-instance", "test-database");
+        DatabaseClient dbClient = spanner.getDatabaseClient(id);
+
+        // Insert 4 singer records
+        dbClient.readWriteTransaction().run(transaction -> {
+            String sql = "INSERT INTO Singers (SingerId, FirstName, LastName) VALUES "
+                    + "(12, 'Melissa', 'Garcia'), "
+                    + "(13, 'Russell', 'Morales'), "
+                    + "(14, 'Jacqueline', 'Long'), "
+                    + "(15, 'Dylan', 'Shaw')";
+            long rowCount = transaction.executeUpdate(Statement.of(sql));
+            LOG.infov("{0} records inserted.", rowCount);
+            return null;
+        });
+
+        // Read them
+        try (ResultSet resultSet = dbClient.singleUse() // Execute a single read or query against Cloud Spanner.
+                .executeQuery(Statement.of("SELECT SingerId, FirstName, LastName FROM Singers"))) {
+            StringBuilder builder = new StringBuilder();
+            while (resultSet.next()) {
+                builder.append(resultSet.getLong(0)).append(' ').append(resultSet.getString(1)).append(' ')
+                        .append(resultSet.getString(2)).append('\n');
+            }
+            return builder.toString();
+        }
+    }
+
+}
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-google-cloud-services/main/storage.html b/quarkus-google-cloud-services/main/storage.html new file mode 100644 index 0000000000..b208cf403d --- /dev/null +++ b/quarkus-google-cloud-services/main/storage.html @@ -0,0 +1,1061 @@ + + + + + + Google Cloud Services - Storage :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Google Cloud Services - Storage

+
+
+
+

This extension allows to inject a com.google.cloud.storage.Storage object inside your Quarkus application.

+
+
+

Be sure to have read the Google Cloud Services extension pack global documentation before this one, it contains general configuration and information.

+
+
+
+
+

Bootstrapping the project

+
+
+

First, we need a new project.Create a new project with the following command (replace the version placeholder with the correct one):

+
+
+
+
mvn io.quarkus:quarkus-maven-plugin:<quarkusVersion>:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=bigquery-quickstart \
+    -Dextensions="resteasy-reactive-jackson,quarkus-google-cloud-storage"
+cd storage-quickstart
+
+
+
+

This command generates a Maven project, importing the Google Cloud Storage extension.

+
+
+

If you already have your Quarkus project configured, you can add the quarkus-google-cloud-storage extension to your project by running the following command in your project base directory:

+
+
+
+
./mvnw quarkus:add-extension -Dextensions="quarkus-google-cloud-storage"
+
+
+
+

This will add the following to your pom.xml:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.googlecloudservices</groupId>
+    <artifactId>quarkus-google-cloud-storage</artifactId>
+</dependency>
+
+
+
+
+
+

Preparatory steps

+
+
+

To test Storage you first need to create a bucket named quarkus-hello then upload a file hello.txt in it. +This file will be read by the test and returned from the endpoint.

+
+
+

You can use gsutil:

+
+
+
+
gsutil mb gs://quarkus-hello
+echo "Hello World!" > hello.txt
+gsutil cp hello.txt gs://my-bucket
+
+
+
+
+
+

Some example

+
+
+

This is an example usage of the extension: we create a REST resource with a single endpoint that gets the hello.txt object +from the quarkus-hello bucket and returns its content.

+
+
+
+
import javax.inject.Inject;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+
+import com.google.cloud.storage.Blob;
+import com.google.cloud.storage.Bucket;
+import com.google.cloud.storage.Storage;
+
+@Path("/storage")
+public class StorageResource {
+
+    @Inject
+    Storage storage;// Inject Storage
+
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public String storage() {
+        Bucket bucket = storage.get("quarkus-hello");// Get the bucket
+        Blob blob = bucket.get("hello.txt"); // Get the object
+        return new String(blob.getContent()); // Return its content
+    }
+
+}
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-groovy/dev/includes/attributes.html b/quarkus-groovy/dev/includes/attributes.html new file mode 100644 index 0000000000..8a0e2d758c --- /dev/null +++ b/quarkus-groovy/dev/includes/attributes.html @@ -0,0 +1,912 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-groovy/dev/index.html b/quarkus-groovy/dev/index.html new file mode 100644 index 0000000000..ced6fedf6b --- /dev/null +++ b/quarkus-groovy/dev/index.html @@ -0,0 +1,1594 @@ + + + + + + Quarkus Groovy :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Groovy

+
+
+
+

Quarkus Groovy is a Quarkus extension allowing to write Quarkus applications in Groovy. This extension allows developers to take advantage of the characteristics of both technologies, combining the agility and expressiveness of the Groovy language with the efficiency and ease of development of Quarkus.

+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.groovy:quarkus-groovy extension first to your build file.

+
+
+

With Maven

+
+

Add the following dependency to your pom.xml file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.groovy</groupId>
+    <artifactId>quarkus-groovy</artifactId>
+    <version>${quarkusGroovyVersion}</version> (1)
+</dependency>
+
+
+
+ + + + + +
1Version of the Quarkus Groovy extension set in the properties of the project
+
+
+
+

With Gradle

+
+

Add the following dependency to your build.gradle file:

+
+
+
+
implementation "io.quarkiverse.groovy:quarkus-groovy:${quarkusGroovyVersion}" (1)
+
+
+
+ + + + + +
1Version of the Quarkus Groovy extension set in gradle.properties
+
+
+
+
+
+

Compilation

+
+
+

To compile the main and test sources written in Groovy, the required plugins which are the Groovy and Quarkus plugins need to be configured.

+
+
+

With Maven

+
+

The Maven plugin gmavenplus-plugin is used to compile all the Groovy sources of the project.

+
+
+

The required plugins are configured as next:

+
+
+
+
<build>
+    <sourceDirectory>src/main/groovy</sourceDirectory> (1)
+    <testSourceDirectory>src/test/groovy</testSourceDirectory> (2)
+    <plugins>
+        <plugin>
+            <groupId>io.quarkus</groupId>
+            <artifactId>quarkus-maven-plugin</artifactId>
+            <version>${quarkus.version}</version> (3)
+            <executions>
+                <execution>
+                    <goals>
+                        <goal>build</goal>
+                    </goals>
+                </execution>
+            </executions>
+        </plugin>
+        <plugin>
+            <groupId>org.codehaus.gmavenplus</groupId>
+            <artifactId>gmavenplus-plugin</artifactId>
+            <version>${groovy-maven-plugin.version}</version> (4)
+            <executions>
+                <execution>
+                    <goals>
+                        <goal>compile</goal> (5)
+                        <goal>compileTests</goal> (6)
+                    </goals>
+                </execution>
+            </executions>
+        </plugin>
+    </plugins>
+</build>
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
1Indicates the location of the main sources written in Groovy
2Indicates the location of the test sources written in Groovy
3The version of the Quarkus plugin set in the properties of the project
4The version of the GMavenPlus plugin set in the properties of the project
5Indicates the GMavenPlus plugin that main sources have to be compiled
6Indicates the GMavenPlus plugin that test sources have to be compiled
+
+
+

For some specific extensions such as hibernate-orm-panache and hibernate-reactive-panache, the source code needs to be compiled using with the flag -parameters indicating that the parameter names must be added to the class files. +To be able to do that some additional parameters are needed as you can see below:

+
+
+
+
<plugins>
+    <plugin>
+        <groupId>io.quarkus</groupId>
+        <artifactId>quarkus-maven-plugin</artifactId>
+        <version>${quarkus.version}</version>
+        <configuration>
+            <compilerOptions> (1)
+                <compiler>
+                    <name>groovy</name>
+                    <args>
+                        <arg>groovy.parameters=true</arg>
+                    </args>
+                </compiler>
+            </compilerOptions>
+        </configuration>
+        <!-- Rest of the Quarkus plugin's configuration -->
+    </plugin>
+    <plugin>
+        <groupId>org.codehaus.gmavenplus</groupId>
+        <artifactId>gmavenplus-plugin</artifactId>
+        <version>${groovy-maven-plugin.version}</version>
+        <configuration>
+            <parameters>true</parameters> (2)
+        </configuration>
+        <!-- Rest of the GMavenPlus plugin's configuration -->
+    </plugin>
+</plugins>
+
+
+
+ + + + + + + + + +
1Specific Quarkus plugin configuration to indicate the Quarkus Groovy extension to compile the code in dev mode with the flag -parameters.
2Indicates the GMavenPlus plugin to compile the code with the flag -parameters.
+
+
+
+

With Gradle

+
+

The Gradle plugin Groovy Plugin is used to compile all the Groovy sources of the project.

+
+
+

The required plugins are configured as next in the build.gradle file:

+
+
+
+
plugins {
+    id 'io.quarkus'
+    id 'groovy'
+}
+
+
+
+

The version of the Quarkus plugin can be set in a pluginManagement block as next:

+
+
+
+
pluginManagement {
+    plugins {
+        id 'io.quarkus' version "${quarkusPluginVersion}" (1)
+    }
+}
+
+
+
+ + + + + +
1Version of the Quarkus plugin set in gradle.properties
+
+
+

For some specific extensions such as hibernate-orm-panache and hibernate-reactive-panache, the source code needs to be compiled using with the flag -parameters indicating that the parameter names must be added to the class files. +To be able to do that some additional parameters are needed as you can see below:

+
+
+
+
quarkusDev {
+    compilerOptions { (2)
+        compiler("groovy").args(["groovy.parameters=true"])
+    }
+}
+
+tasks.withType(GroovyCompile).configureEach {
+    groovyOptions.parameters = true (1)
+}
+
+
+
+ + + + + + + + + +
1Specific Quarkus plugin configuration to indicate the Quarkus Groovy extension to compile the code in dev mode with the flag -parameters.
2Indicates the Groovy Plugin to compile the code with the flag -parameters.
+
+
+
+

Supported compilation options

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescription

groovy.warnings

The warning level

groovy.parameters

Indicates whether parameter metadata generation must be enabled

groovy.preview.features

Whether the bytecode version has preview features enabled

groovy.classpath

Classpath for use during compilation

groovy.output.verbose

Whether verbose operation has been requested

groovy.output.debug

Whether debugging operation has been requested

groovy.errors.tolerance

The requested error tolerance

groovy.default.scriptExtension

Extension used to find a groovy file

groovy.script.base

The name of the base class for scripts. It must be a subclass of Script.

groovy.recompile

Whether the recompilation is enabled

groovy.recompile.minimumInterval

The minimum of time after a script can be recompiled

groovy.disabled.global.ast.transformations

The list of disabled global AST transformation class names

+
+
+
+
+

Hibernate ORM Panache

+
+
+

Purpose

+
+

Hibernate ORM is the de facto Jakarta Persistence (formerly known as JPA) implementation and offers you the full breadth of an Object Relational Mapper. It makes complex mappings possible, but it does not make simple and common mappings trivial. Hibernate ORM with Panache focuses on making your entities trivial and fun to write in Quarkus.

+
+
+
+

Installation

+
+

If you want to use this extension, you need to add the io.quarkiverse.groovy:quarkus-groovy-hibernate-orm-panache extension first to your build file.

+
+
+ + + + + +
+ + +The extensions io.quarkiverse.groovy:quarkus-groovy and io.quarkus:quarkus-hibernate-orm are part of the dependencies of this extension. +
+
+
+

With Maven

+
+

Add the following dependency to your pom.xml file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.groovy</groupId>
+    <artifactId>quarkus-groovy-hibernate-orm-panache</artifactId>
+    <version>${quarkusGroovyVersion}</version> (1)
+</dependency>
+
+
+
+ + + + + +
1Version of the Quarkus Groovy extension set in the properties of the project
+
+
+
+

With Gradle

+
+

Add the following dependency to your build.gradle file:

+
+
+
+
implementation "io.quarkiverse.groovy:quarkus-groovy-hibernate-orm-panache:${quarkusGroovyVersion}" (1)
+
+
+
+ + + + + +
1Version of the Quarkus Groovy extension set in gradle.properties
+
+
+
+
+

Usage

+
+

The extension is mostly the same as the original extension from the Quarkus project the main differences are:

+
+
+
    +
  • +

    The package where the base classes of the entities and repositories are located. +Indeed, instead of being io.quarkus.hibernate.orm.panache, it is io.quarkiverse.groovy.hibernate.orm.panache.

    +
  • +
  • +

    All static methods in PanacheEntityBase (such as find, findAll, list, listAll, count…​) that depend on bytecode injection have been removed due to a side effect of the static compilation that by-pass the generated methods. As workaround, the methods in the corresponding repository must be used.

    +
  • +
  • +

    The methods delete to delete entities by query has been renamed to deleteByQuery to prevent method call clashing with delete(Entity) in dynamic compilation mode.

    +
  • +
+
+
+
+
+
+

Hibernate Reactive Panache

+
+
+

Purpose

+
+

Hibernate Reactive is the only reactive Jakarta Persistence (formerly known as JPA) implementation and offers you the full breadth of an Object Relational Mapper allowing you to access your database over reactive drivers. It makes complex mappings possible, but it does not make simple and common mappings trivial. Hibernate Reactive with Panache focuses on making your entities trivial and fun to write in Quarkus.

+
+
+
+

Installation

+
+

If you want to use this extension, you need to add the io.quarkiverse.groovy:quarkus-groovy-hibernate-reactive-panache extension first to your build file.

+
+
+ + + + + +
+ + +The extensions io.quarkiverse.groovy:quarkus-groovy and io.quarkus:quarkus-hibernate-reactive are part of the dependencies of this extension. +
+
+
+

With Maven

+
+

Add the following dependency to your pom.xml file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.groovy</groupId>
+    <artifactId>quarkus-groovy-hibernate-reactive-panache</artifactId>
+    <version>${quarkusGroovyVersion}</version> (1)
+</dependency>
+
+
+
+ + + + + +
1Version of the Quarkus Groovy extension set in the properties of the project
+
+
+
+

With Gradle

+
+

Add the following dependency to your build.gradle file:

+
+
+
+
implementation "io.quarkiverse.groovy:quarkus-groovy-hibernate-reactive-panache:${quarkusGroovyVersion}" (1)
+
+
+
+ + + + + +
1Version of the Quarkus Groovy extension set in gradle.properties
+
+
+
+
+

Usage

+
+

The extension is mostly the same as the original extension from the Quarkus project the main differences are:

+
+
+
    +
  • +

    The package where the base classes of the entities and repositories are located. +Indeed, instead of being io.quarkus.hibernate.reactive.panache, it is io.quarkiverse.groovy.hibernate.reactive.panache.

    +
  • +
  • +

    All static methods in PanacheEntityBase (such as find, findAll, list, listAll, count…​) that depend on bytecode injection have been removed due to a side effect of the static compilation that by-pass the generated methods. As workaround, the methods in the corresponding repository must be used.

    +
  • +
  • +

    The methods delete to delete entities by query has been renamed to deleteByQuery to prevent method call clashing with delete(Entity) in dynamic compilation mode.

    +
  • +
+
+
+
+
+
+

JAXB

+
+
+

Purpose

+
+

By default, some issues can be met when using JAXB to map Groovy classes, due to the addition of the method getMetaClass to the generated bytecode. +This extension allows you to automatically make getMetaClass as transient to avoid natively the known issues.

+
+
+
+

Installation

+
+

If you want to use this extension, you need to add the io.quarkiverse.groovy:quarkus-groovy-jaxb extension first to your build file.

+
+
+ + + + + +
+ + +The extension io.quarkiverse.groovy:quarkus-groovy and the artifact io.quarkus:quarkus-jaxb are part of the dependencies of this extension. +
+
+
+

With Maven

+
+

Add the following dependency to your pom.xml file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.groovy</groupId>
+    <artifactId>quarkus-groovy-jaxb</artifactId>
+    <version>${quarkusGroovyVersion}</version> (1)
+</dependency>
+
+
+
+ + + + + +
1Version of the Quarkus Groovy extension set in the properties of the project
+
+
+
+

With Gradle

+
+

Add the following dependency to your build.gradle file:

+
+
+
+
implementation "io.quarkiverse.groovy:quarkus-groovy-jaxb:${quarkusGroovyVersion}" (1)
+
+
+
+ + + + + +
1Version of the Quarkus Groovy extension set in gradle.properties
+
+
+
+
+
+
+

JUnit 5

+
+
+

Purpose

+
+

This extension is only meant for integration tests where the server side code is written using JUnit 5 in native mode. +This extension allows you to automatically configure JUnit 5 to be used in native mode.

+
+
+
+

Installation

+
+

If you want to use this extension, you need to add the io.quarkiverse.groovy:quarkus-groovy-junit5 extension first to your build file.

+
+
+ + + + + +
+ + +The extension io.quarkiverse.groovy:quarkus-groovy and the artifact io.quarkus:quarkus-junit5 are part of the dependencies of this extension. +
+
+
+

With Maven

+
+

Add the following dependency to your pom.xml file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.groovy</groupId>
+    <artifactId>quarkus-groovy-junit5</artifactId>
+    <version>${quarkusGroovyVersion}</version> (1)
+</dependency>
+
+
+
+ + + + + +
1Version of the Quarkus Groovy extension set in the properties of the project
+
+
+
+

With Gradle

+
+

Add the following dependency to your build.gradle file:

+
+
+
+
implementation "io.quarkiverse.groovy:quarkus-groovy-junit5:${quarkusGroovyVersion}" (1)
+
+
+
+ + + + + +
1Version of the Quarkus Groovy extension set in gradle.properties
+
+
+
+
+
+
+

Compile Static

+
+
+

The Quarkus project was designed with performance in mind, using Groovy’s CompileStatic annotation can improve the performance of the project. This annotation enforces static compilation of the code, allowing verification of types and method resolution during compilation rather than at runtime as is common in Groovy.

+
+
+

The static compilation is also very handy in native mode to avoid complex reflection configuration that is required when using the dynamic compilation.

+
+
+

Code example

+
+
+
+
package org.acme.groovy
+
+import jakarta.ws.rs.GET
+import jakarta.ws.rs.Path
+import jakarta.ws.rs.Produces
+import jakarta.ws.rs.core.MediaType
+import groovy.transform.CompileStatic
+
+@CompileStatic
+@Path("/hello")
+class GreetingResource {
+
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    String get() {
+        return 'Hello Word'
+    }
+
+}
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-helm/dev/_images/argocd-app-status.png b/quarkus-helm/dev/_images/argocd-app-status.png new file mode 100644 index 0000000000..02083b652b Binary files /dev/null and b/quarkus-helm/dev/_images/argocd-app-status.png differ diff --git a/quarkus-helm/dev/_images/argocd-create-app-parameters.png b/quarkus-helm/dev/_images/argocd-create-app-parameters.png new file mode 100644 index 0000000000..7ccaed8c9d Binary files /dev/null and b/quarkus-helm/dev/_images/argocd-create-app-parameters.png differ diff --git a/quarkus-helm/dev/_images/argocd-create-app.png b/quarkus-helm/dev/_images/argocd-create-app.png new file mode 100644 index 0000000000..791501770b Binary files /dev/null and b/quarkus-helm/dev/_images/argocd-create-app.png differ diff --git a/quarkus-helm/dev/example-argocd.html b/quarkus-helm/dev/example-argocd.html new file mode 100644 index 0000000000..f906efae8b --- /dev/null +++ b/quarkus-helm/dev/example-argocd.html @@ -0,0 +1,1088 @@ + + + + + + Example: How to configure a Continuous Delivery (CD) workflow using Quarkus Helm and ArgoCD :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Example: How to configure a Continuous Delivery (CD) workflow using Quarkus Helm and ArgoCD

+
+
+
+

In this example, we’re going to use the REST CRUD application in Quarkus from this example. Then, we’re going to push the Helm chart resources into a GIT repository. Next, we’re going to use the ArgoCD user interface to add a new application and configure it to use the GIT repository where we pushed the generated Helm chart.

+
+
+
+
+

Prerequisites

+
+
+
    +
  • +

    Maven 3.8+

    +
  • +
  • +

    Java 17+

    +
  • +
  • +

    Have logged into an ArgoCD instance

    +
  • +
  • +

    Have installed the GIT command line

    +
  • +
+
+
+
+
+

Create application/Configure container image/Configure Quarkus Helm

+
+
+

We’re going to continue with the same REST CRUD application that we created for this example, so if you haven’t seen this example yet, go for it.

+
+
+
+
+

Generate the Quarkus Helm charts out of the target folder

+
+
+

After configuring the Quarkus Helm extension, the generated Helm charts will be created at target/helm/kubernetes/demo folder and usually the target folder is ignored when pushing changes into GIT, so let’s configure the Quarkus Helm repository to create the Helm charts into another repository.

+
+
+
+
quarkus.helm.output-directory=../folder
+
+
+
+

Now, the Quarkus Helm extension will create the charts into the upper level project folder and will create a folder directory name.

+
+
+

Next, assuming your project is already a GIT repository, you need to commit this directory and push it:

+
+
+
+
git add folder
+git commit -m "Added folder that contains generated Helm charts"
+git push
+
+
+
+

Finally, let’s go to ArgoCD.

+
+
+
+
+

Create Application in ArgoCD

+
+
+

Assuming that you’re configured the ArgoCD project and the destination clusters/namespaces, you need to go to the ArgoCD user interface and click on the "+ NEW APP":

+
+
+
+argocd create app +
+
+
+

In the next form, set the application name as you wish, the sync policy to automatic and as source and the ArgoCD project.

+
+
+

Next, configure the Source by selecting the URL of your GIT repository and the correct branch. When doing this, ArgoCD will automatically detect the Helm charts that were found. Select the right one in the Path field.

+
+
+

Then, use the cluster URL you configured in the destination.

+
+
+

Moreover, ArgoCD will automatically map the Helm values YAML file into form parameters, so you can easily provide or overwrite any property:

+
+
+
+argocd create app parameters +
+
+
+

Now, click on "Create" and ArgoCD will automatically display all the resources, the application health and sync status:

+
+
+
+
+

Updating the generated Helm chart

+
+
+

You have everything set up for the CD workflow now! +This means that everytime you make changes to the generated Helm chart and commit/push these changes, ArgoCD will detect these changes and synchronize the running application :)

+
+
+
+argocd create app parameters +
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-helm/dev/example-config.html b/quarkus-helm/dev/example-config.html new file mode 100644 index 0000000000..5c966750bd --- /dev/null +++ b/quarkus-helm/dev/example-config.html @@ -0,0 +1,1168 @@ + + + + + + Example: How to map Integer, String, and Boolean types :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Example: How to map Integer, String, and Boolean types

+
+
+
+

In this example, we’re going to create a very simple REST CRUD application in Quarkus and configure Integer, String and boolean properties into our applications.

+
+
+

Sometimes, this is a challenging use case because most of the Kubernetes resources and System properties only support String/text properties.

+
+
+
+
+

Prerequisites

+
+
+
    +
  • +

    Maven 3.8+

    +
  • +
  • +

    Java 17+

    +
  • +
  • +

    Have logged into a Kubernetes cluster

    +
  • +
  • +

    Have installed the Helm command line

    +
  • +
+
+
+
+
+

Create application

+
+
+

Our application will print a hello message with the string, integer, and boolean config properties. We’ll only need the following extensions:

+
+
+ +
+
+

Let’s create our application from scratch:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.7.3:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=example \
+    -Dextensions="resteasy-reactive,kubernetes-config"
+cd example
+
+
+
+

The generated application will contain the following Hello resource:

+
+
+
+
import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+
+@Path("/hello")
+public class GreetingResource {
+
+    @ConfigProperty(name = "hello.message")
+    String message;
+
+    @ConfigProperty(name = "hello.number")
+    int number;
+
+    @ConfigProperty(name = "hello.flag")
+    boolean flag;
+
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public String hello() {
+        return message + ", number=" + number + ", flag=" + flag;
+    }
+}
+
+
+
+

Next, we need to provide the actual properties via the application.properties file:

+
+
+
+
hello.message=Hello from application.properties
+hello.number=1
+hello.flag=true
+
+
+
+

Now, if we run our application and call our service via http://localhost:8080/hello, it will return Hello from application.properties, number=1, flag=true.

+
+
+

How can we configure Quarkus Helm to map the hello properties and update them when installing the generated Helm chart?

+
+
+

One way is using System properties, however this only supports String. If we map the above properties using system properties as described in the Mapping System Properties section:

+
+
+
+
hello.message=${helloMessage}
+hello.number=${helloNumber}
+hello.flag=${helloFlag}
+
+
+
+

When installing the Helm chart, this would fail because the hello.number and hello.flag properties are Strings. This is because internally Quarkus Helm is mapping the helloMessage system property as container environment properties which only supports String types.

+
+
+

Then, how can we do it? Quarkus Kubernetes Config to the rescue!

+
+
+

Let’s add a ConfigMap resource in src/main/kubernetes/kubernetes.yml:

+
+
+
+
apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: app-config
+data:
+  hello.message: Hello from configmap
+  hello.number: 2
+  hello.flag: false
+
+
+
+

The Quarkus Kubernetes extension will incorporate this ConfigMap resource in the generated resources at target/kubernetes/kubernetes.yml.

+
+
+

Next, we need to configure Quarkus to read this ConfigMap resource when starting the application in Kubernetes:

+
+
+
+
quarkus.kubernetes-config.enabled=true
+quarkus.kubernetes-config.config-maps=app-config
+
+
+
+

As it is, if we build our application and install the Helm chart in Kubernetes, when calling the Hello endpoint, it would return: Hello from configmap, number=2, flag=false.

+
+
+

So good so far! Next, we can map the ConfigMap values into the Helm Chart values, so we can update these properties when installing the Helm chart. We can do this by adding the following properties:

+
+
+
+
# Map values in ConfigMap
+quarkus.helm.values.message.paths=(kind == ConfigMap).data.'hello.message'
+quarkus.helm.values.number.paths=(kind == ConfigMap).data.'hello.number'
+quarkus.helm.values.number.value-as-int=1 (1)
+quarkus.helm.values.flag.paths=(kind == ConfigMap).data.'hello.flag'
+quarkus.helm.values.flag.value-as-bool=true (2)
+
+
+
+ + + + + + + + + +
1Since the default value type for ConfigMap is still a string, we need to let the Quarkus Helm extension that the actual type is an integer using the value-as-int property.
2And the same with the flag property. We need to instruct the Quarkus Helm extension that the actual type for the flag field is a boolean using value-as-bool.
+
+
+

Finally, after building our application, we can install the Helm chart and configure the Hello properties with the right types. For example, installing the chart as follows:

+
+
+
+
helm install quarkus target/helm/kubernetes/example --set app.number=3 --set app.flag=true --set app.message="Hello from helm"
+
+
+
+

And calling the service again, it would return Hello from helm, number=3, flag=true.

+
+
+

Happy coding!

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-helm/dev/example-crud.html b/quarkus-helm/dev/example-crud.html new file mode 100644 index 0000000000..5a8f206d18 --- /dev/null +++ b/quarkus-helm/dev/example-crud.html @@ -0,0 +1,1425 @@ + + + + + + Example: How to generate the Helm Chart of a REST CRUD Quarkus application :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Example: How to generate the Helm Chart of a REST CRUD Quarkus application

+
+
+
+

In this example, we’re going to create a very simple REST CRUD application in Quarkus. Then, we’ll configure it to build the application image, and push it to a container registry, so Kubernetes can pull this image from. Next, we’ll configure the Quarkus Kubernetes and Helm extensions to generate the Helm chart and push it into a Helm repository. Finally, we’ll see how to install the generated Helm chart into Kubernetes from the Helm repository.

+
+
+
+
+

Prerequisites

+
+
+
    +
  • +

    Maven 3.8+

    +
  • +
  • +

    Java 17+

    +
  • +
  • +

    Have logged into a Kubernetes cluster

    +
  • +
  • +

    Have installed the Helm command line

    +
  • +
+
+
+
+
+

Create application

+
+
+

Our application will simply manage fruits. For doing this, we’ll use the following extensions:

+
+
+ +
+
+

Let’s create our application from scratch:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.7.3:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=example \
+    -Dextensions="resteasy-reactive,hibernate-orm-rest-data-panache,jdbc-postgresql"
+cd example
+
+
+
+

The generated application will contain the following Hello resource:

+
+
+
+
import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+
+@Path("/hello")
+public class GreetingResource {
+
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public String hello() {
+        return "Hello from RESTEasy Reactive";
+    }
+}
+
+
+
+

So, if we start our application, for example running the Maven command mvn quarkus:dev (Quarkus DEV mode), we could call it using http://localhost:8080/hello.

+
+
+

To continue with, let’s add our first Fruit entity:

+
+
+
+
@Entity
+public class Fruit extends PanacheEntity {
+    public String name;
+}
+
+
+
+

Note that by extending to the PanacheEntity class, we’re adding a id column to our Fruit entity as primary key of type Long. So, our Fruit entity will have two columns: id and name columns.

+
+
+

Because we want to generate the CRUD resources of the Fruit entity, let’s configure the Hibernate ORM REST Data with Panache extension by simply adding the following interface:

+
+
+
+
public interface FruitResource extends PanacheEntityResource<Fruit, Long> {
+}
+
+
+
+

And that’s all we would need to expose the CRUD (list, get, update, delete) endpoints. If we start our application again in DEV mode (mvn quarkus:dev), we could retrieve the list of fruits by calling http://localhost:8080/fruit. However, as we don’t have data yet, the list is empty. So, let’s add some initial data by adding the file import.sql into src/main/resources:

+
+
+
+
insert into Fruit(id, name) values (1, 'apple');
+insert into Fruit(id, name) values (2, 'banana');
+
+
+
+

And if we try http://localhost:8080/fruit again, we should see these fruits now!

+
+
+
+
[{"id":  1, "name": "apple"}, {"id":  2, "name": "banana"}]
+
+
+
+

But how could it work if we didn’t specify any database yet? That’s the magic of running the application in DEV mode. This mode will transparently start a database in your local machine and provide the configuration, so your application works with this database.

+
+
+
    +
  • +

    How does DEV mode know which database engine to start?

    +
  • +
+
+
+

DEV mode will check the JDBC driver you have configured in your project. In this example, we used jdbc-postgresql, so it will start a Postgresql database.

+
+
+
    +
  • +

    What properties is DEV mode adding to our application?

    +
  • +
+
+
+

There are a few, but the most important properties are:

+
+
+
+
quarkus.datasource.jdbc.url=<the JDBC url>
+quarkus.datasource.username=<the database username>
+quarkus.datasource.password=<the database password>
+
+
+
+

Therefore, to execute our application, we would need to provide these properties to use a running Postgresql database. The problem is that we don’t know where is the Postgresql database that we’ll use in Kubernetes! Then, one approach to address this situation is to provide these properties using environment properties:

+
+
+
+
quarkus.datasource.jdbc.url=${POSTGRESQL_URL}
+quarkus.datasource.username=${POSTGRESQL_USERNAME}
+quarkus.datasource.password=${POSTGRESQL_PASSWORD}
+
+
+
+

We’ll see in the following sections, how to populate these environment properties when installing the application in Kubernetes.

+
+
+
+
+

Configure the container image

+
+
+

We need to package our application into a container image, so Kubernetes can pull this image and start the application. +Fortunately, Quarkus provides several container image extensions to create this container image either using Docker, JIB or Buildpack.

+
+
+

In this example, we’ll use the container image Docker extension, let’s add it:

+
+
+
+
mvn quarkus:add-extension -Dextensions='container-image-docker'
+
+
+
+

Note that if you’re using or going to use the Quarkus OpenShift extension, this automatically brings the container image s2i extension, and hence Quarkus will fail to build because you’re now using two container image extensions: docker and s2i. To solve this, you need to explicitly specify that you want to use the container image docker extension by adding:

+
+
+
+
quarkus.container-image.builder=docker
+
+
+
+

Next, we need to enable the container image build and also the push property:

+
+
+
+
quarkus.container-image.build=true
+quarkus.container-image.push=true
+quarkus.container-image.image=<CONTAINER REGISTRY>/<USERNAME>/<APP NAME>:<APP TAG>
+
+
+
+

Note that you need to provide the right quarkus.container-image.image using a container registry you have logged in, for example: quarkus.container-image.image=quay.io/myuser/demo:0.0.1 (here, the container registry is quay.io, but you could use Docker Hub as well).

+
+
+

When building your application using maven mvn clean package, now you will see that the container image is built and pushed into the container registry we have configured.

+
+
+

Next, let’s generate the Kubernetes resources and the Helm chart.

+
+
+
+
+

Configure Quarkus Helm

+
+
+

Quarkus Helm needs either Quarkus Kubernetes or OpenShift to be present because it uses the manifests generated by any of these extensions as source. Let’s use the Quarkus Kubernetes extension here, along to the Quarkus Helm extension:

+
+
+
+
mvn quarkus:add-extension -Dextensions='kubernetes,helm'
+
+
+
+

The Quarkus Helm extension will automatically map the system properties that are used in the application properties as pod container environment properties. So, if you go to the generated Helm chart at the target/helm/kubernetes/demo folder, you will see that the file values.yaml is also mapping these variables:

+
+
+
+
app:
+  serviceType: ClusterIP
+  image: quay.io/jcarvaja/quarkus-example:latest
+  envs:
+    POSTGRESQL_URL: ""
+    POSTGRESQL_USERNAME: ""
+    POSTGRESQL_PASSWORD: ""
+
+
+
+

And that these values will be used in the deployment template at templates/deployment.yaml:

+
+
+
+
apiVersion: apps/v1
+kind: Deployment
+metadata:
+  labels:
+    app.kubernetes.io/version: 1.0.0-SNAPSHOT
+    app.kubernetes.io/name: helm-quickstart
+  name: demo
+spec:
+  replicas: 1
+  selector:
+    matchLabels:
+      app.kubernetes.io/version: 1.0.0-SNAPSHOT
+      app.kubernetes.io/name: demo
+  template:
+    metadata:
+      labels:
+        app.kubernetes.io/version: 1.0.0-SNAPSHOT
+        app.kubernetes.io/name: demo
+    spec:
+      containers:
+        - env:
+            - name: KUBERNETES_NAMESPACE
+              valueFrom:
+                fieldRef:
+                  fieldPath: metadata.namespace
+            - name: POSTGRESQL_URL
+              value: {{ .Values.app.envs.POSTGRESQL_URL }}
+            - name: POSTGRESQL_PASSWORD
+              value: {{ .Values.app.envs.POSTGRESQL_PASSWORD }}
+            - name: POSTGRESQL_USERNAME
+              value: {{ .Values.app.envs.POSTGRESQL_USERNAME }}
+          image: {{ .Values.app.image }}
+          imagePullPolicy: Always
+          name: demo
+          ports:
+            - containerPort: 8080
+              name: http
+              protocol: TCP
+
+
+
+

Thanks to these replacements that the Quarkus Helm does, we can overwrite the default values when installing the Helm chart into Kubernetes!

+
+
+

Let’s now define a Helm dependency to start a Postgresql database when we install the Helm chart:

+
+
+
+
quarkus.helm.dependencies.postgresql.version=11.9.1
+quarkus.helm.dependencies.postgresql.repository=https://charts.bitnami.com/bitnami
+quarkus.helm.dependencies.postgresql.wait-for-service=demo-db:5432
+
+
+
+

Note that we’ll add the property quarkus.helm.dependencies.postgresql.wait-for-service=demo-db:5432, so our application waits for this service before starting (you can go here to know more about this feature).

+
+
+

This Helm dependency will start the Postgresql database provided by Bitnami. According to the Bitnami documentation, to configure the database name, user and password we need to provide the following properties:

+
+
+
    +
  • +

    postgresql.auth.database

    +
  • +
  • +

    postgresql.auth.username

    +
  • +
  • +

    postgresql.auth.password

    +
  • +
+
+
+

Therefore, we need to configure Quarkus Helm to map these properties into the generated values.yaml file by adding:

+
+
+
+
quarkus.helm.values."postgresql.auth.database".value=demo_database
+quarkus.helm.values."postgresql.auth.username".value=user
+quarkus.helm.values."postgresql.auth.password".value=supersecret
+
+
+
+

Note that Bitnami images require root access to work which is incompatible with how OpenShift works, so if you want to install the Helm chart into OpenShift, you would also need to disable the root access by providing the following properties to the Postgresql dependency:

+
+
+
+
quarkus.helm.values."postgresql.volumePermissions.enabled".value-as-bool=false
+quarkus.helm.values."postgresql.volumePermissions.securityContext.runAsUser".value=auto
+quarkus.helm.values."postgresql.securityContext.enabled".value-as-bool=false
+quarkus.helm.values."postgresql.shmVolume.chmod.enabled".value-as-bool=false
+quarkus.helm.values."postgresql.primary.containerSecurityContext.enabled".value-as-bool=false
+quarkus.helm.values."postgresql.primary.containerSecurityContext.runAsUser".value=auto
+quarkus.helm.values."postgresql.primary.podSecurityContext.enabled".value-as-bool=false
+quarkus.helm.values."postgresql.primary.podSecurityContext.fsGroup".value=auto
+
+
+
+

And finally, we also need to overwrite the correct values of the environment properties:

+
+
+
+
quarkus.helm.values."app.envs.POSTGRESQL_URL".value=jdbc:postgresql://demo-db:5432/demo_database
+quarkus.helm.values."app.envs.POSTGRESQL_USERNAME".value=user
+quarkus.helm.values."app.envs.POSTGRESQL_PASSWORD".value=supersecret
+
+
+
+

Now, if we build again our project and check the generated Helm chart folder, we’ll see that the Chart.yaml file will have the expected Postgresql dependency:

+
+
+
+
name: demo
+version: 1.0.0-SNAPSHOT
+apiVersion: v2
+dependencies:
+  - name: postgresql
+    version: 11.9.1
+    repository: https://charts.bitnami.com/bitnami
+    alias: postgresql
+
+
+
+

And it will be properly configured because the values.yml file will have the expected configuration:

+
+
+
+
app:
+  serviceType: ClusterIP
+  image: quay.io/jcarvaja/quarkus-example:latest
+  envs:
+    POSTGRESQL_URL: jdbc:postgresql://demo-db:5432/demo_database
+    POSTGRESQL_USERNAME: user
+    POSTGRESQL_PASSWORD: supersecret
+postgresql:
+  auth:
+    password: supersecret
+    database: demo_database
+    username: user
+
+
+
+
+
+

Installation

+
+
+

We can several ways to install the generated Helm chart:

+
+
+

A. Directly using the Helm chart folder

+
+
+
helm install --dependency-update demo ./target/helm/kubernetes/demo
+
+
+
+

Note that the flag --dependency-update is necessary to download the Postgresql dependency before installing the Helm chart.

+
+
+
+

B. From a Helm repository

+
+

For this method, you need to push the generated Helm chart into a Helm repository. To know more about this feature, please go to this section.

+
+
+

For example, to use the ChartMuseum Helm repository and perform the push of the generated Helm chart when building your application:

+
+
+
+
quarkus.helm.repository.type=CHARTMUSEUM
+quarkus.helm.repository.url=<URL OF CHARTMUSEUM>/api/charts
+quarkus.helm.repository.push=true
+
+
+
+

Note that if you’re using the OpenShift extension, multiple deployment targets will be automatically generated: one for Kubernetes and another one for OpenShift (with the OpenShift specific resources). In this case, two Helm charts will be also generated: one for Kubernetes and another one for OpenShift, so when pushing the Helm chart into a Helm repository, you need to select only one by using the property quarkus.helm.repository.deployment-target. For example:

+
+
+
+
quarkus.helm.repository.deployment-target=openshift
+
+
+
+

After building your application and pushing the Helm chart into the Helm repository, you can now install the Helm chart from the Helm repository:

+
+
+
+
# registering the chartmuseum repository into your local machine
+helm repo add chartmuseum <URL OF CHARTMUSEUM>
+
+# and install it
+helm install demo chartmuseum/demo
+
+
+
+
+

C. Using a Continuous Delivery (CD) platform

+
+

A continuous delivery platform will automatically watch for changes in either a GIT or Helm repository and deploy the application or synchronize a running application in Kubernetes.

+
+
+

You can know more about this method in this example which uses ArgoCD as Continuous Delivery platform which is really well integrated with Helm.

+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-helm/dev/includes/attributes.html b/quarkus-helm/dev/includes/attributes.html new file mode 100644 index 0000000000..73f904b8ee --- /dev/null +++ b/quarkus-helm/dev/includes/attributes.html @@ -0,0 +1,972 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-helm/dev/includes/quarkus-helm.html b/quarkus-helm/dev/includes/quarkus-helm.html new file mode 100644 index 0000000000..19ce58b216 --- /dev/null +++ b/quarkus-helm/dev/includes/quarkus-helm.html @@ -0,0 +1,2303 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Enabled the generation of Helm files.

+
+
+

Environment variable: QUARKUS_HELM_ENABLED

+
+
+

boolean

true

+
+
+
+

Name of the Helm chart. If not set, it will use the application name.

+
+
+

Environment variable: QUARKUS_HELM_NAME

+
+
+

string

+
+
+
+

Project’s home page of the Helm chart. It must be a URL.

+
+
+

Environment variable: QUARKUS_HELM_HOME

+
+
+

string

+
+
+
+

The Helm chart list of URLs to source code for this project.

+
+
+

Environment variable: QUARKUS_HELM_SOURCES

+
+
+

list of string

+
+
+
+

Version of the Helm chart. If not set, it will use the application version.

+
+
+

Environment variable: QUARKUS_HELM_VERSION

+
+
+

string

+
+
+
+

The Helm chart single-sentence description.

+
+
+

Environment variable: QUARKUS_HELM_DESCRIPTION

+
+
+

string

+
+
+
+

List of keywords to add to the chart.

+
+
+

Environment variable: QUARKUS_HELM_KEYWORDS

+
+
+

list of string

+
+
+
+

Icon of the Helm chart. It must be a URL to an SVG or PNG image.

+
+
+

Environment variable: QUARKUS_HELM_ICON

+
+
+

string

+
+
+
+

The Chart API version. The default value is v2.

+
+
+

Environment variable: QUARKUS_HELM_API_VERSION

+
+
+

string

v2

+
+
+
+

The condition to enable this chart.

+
+
+

Environment variable: QUARKUS_HELM_CONDITION

+
+
+

string

+
+
+
+

Tags of this chart.

+
+
+

Environment variable: QUARKUS_HELM_TAGS

+
+
+

string

+
+
+
+

The version of the application enclosed of this chart.

+
+
+

Environment variable: QUARKUS_HELM_APP_VERSION

+
+
+

string

+
+
+
+

Whether this chart is deprecated.

+
+
+

Environment variable: QUARKUS_HELM_DEPRECATED

+
+
+

boolean

+
+
+
+

KubeVersion is a SemVer constraint specifying the version of Kubernetes required.

+
+
+

Environment variable: QUARKUS_HELM_KUBE_VERSION

+
+
+

string

+
+
+
+

Specifies the chart type: application or library.

+
+
+

Environment variable: QUARKUS_HELM_TYPE

+
+
+

string

+
+
+
+

Alias of the root element in the generated values file.

+
+
+

Environment variable: QUARKUS_HELM_VALUES_ROOT_ALIAS

+
+
+

string

app

+
+
+
+

Notes template to be generated.

+
+
+

Environment variable: QUARKUS_HELM_NOTES

+
+
+

string

/NOTES.template.txt

+
+
+
+

Extension of the Helm tarball file. Default is tar.gz.

+
+
+

Environment variable: QUARKUS_HELM_EXTENSION

+
+
+

string

tar.gz

+
+
+
+

Classifier to be appended into the generated Helm tarball file.

+
+
+

Environment variable: QUARKUS_HELM_TAR_FILE_CLASSIFIER

+
+
+

string

+
+
+
+

If Helm tar file is generated.

+
+
+

Environment variable: QUARKUS_HELM_CREATE_TAR_FILE

+
+
+

boolean

false

+
+
+
+

Whether to generate the values.schema.json file that is used to validate the Helm Chart input values.

+
+
+

Environment variable: QUARKUS_HELM_CREATE_VALUES_SCHEMA_FILE

+
+
+

boolean

true

+
+
+
+

Whether to generate the README.md file that includes the Chart description and table with the configurable parameters and their default values.

+
+
+

Environment variable: QUARKUS_HELM_CREATE_README_FILE

+
+
+

boolean

true

+
+
+
+

The input folder in which to place the user-defined Helm files. These files will be used as inputs to populate the generated Helm files. At the moment, the supported Helm files are: README.md, LICENSE, values.schema.json, app-readme.md or app-README.md, questions.yml or questions.yaml, the "crds" directory, and requirements.yml or requirements.yaml. Moreover, you can provide a custom values.yaml or Chart.yaml and the content will be merged with the auto-generated configuration. It also supports absolute paths. By default, it will use the folder "src/main/helm".

+
+
+

Environment variable: QUARKUS_HELM_INPUT_DIRECTORY

+
+
+

string

src/main/helm

+
+
+
+

The output folder in which to place the Helm generated folder. The folder is relative to the target output directory in Quarkus that is also configurable using the property quarkus.package.output-directory. It also supports absolute paths. By default, it will be generated in the folder named "helm".

+
+
+

Environment variable: QUARKUS_HELM_OUTPUT_DIRECTORY

+
+
+

string

helm

+
+
+
+

If true, it will perform the upload to a Helm repository.

+
+
+

Environment variable: QUARKUS_HELM_REPOSITORY_PUSH

+
+
+

boolean

false

+
+
+
+

The deployment target to push. Options are: kubernetes, openshift, knative…​

+
+
+

Environment variable: QUARKUS_HELM_REPOSITORY_DEPLOYMENT_TARGET

+
+
+

string

${quarkus.kubernetes.deployment-target}

+
+
+
+

The Helm repository type. Options are: CHARTMUSEUM, ARTIFACTORY, and NEXUS.

+
+
+

Environment variable: QUARKUS_HELM_REPOSITORY_TYPE

+
+
+
+

chartmuseum, artifactory, nexus

+
+
+
+
+

The Helm repository URL.

+
+
+

Environment variable: QUARKUS_HELM_REPOSITORY_URL

+
+
+

string

+
+
+
+

The Helm repository username.

+
+
+

Environment variable: QUARKUS_HELM_REPOSITORY_USERNAME

+
+
+

string

+
+
+
+

The Helm repository password.

+
+
+

Environment variable: QUARKUS_HELM_REPOSITORY_PASSWORD

+
+
+

string

+
+
+
+

If enabled, the extension will check whether there are properties using system properties in the form of ${XXX} and if so, it will expose these properties as env-var values within the generated container resource.

+
+
+

Environment variable: QUARKUS_HELM_MAP_SYSTEM_PROPERTIES

+
+
+

boolean

true

+
+
+
+

If true, the naming validation will be disabled. The naming validation rejects property names that contain "-" characters.

+
+
+

Environment variable: QUARKUS_HELM_DISABLE_NAMING_VALIDATION

+
+
+

boolean

false

+
+
+
+

Configuration for the separator string in the filename of profile specific values files i.e. values.profile.yaml, defaults to "."

+
+
+

Environment variable: QUARKUS_HELM_VALUES_PROFILE_SEPARATOR

+
+
+

string

.

+
+
+
+

Title of the values schema json file.

+
+
+

Environment variable: QUARKUS_HELM_VALUES_SCHEMA_TITLE

+
+
+

string

Values

+
+
+
+

Name of the maintainer.

+
+
+

Environment variable: QUARKUS_HELM_MAINTAINERS__MAINTAINERS__NAME

+
+
+

string

+
+
+
+

Email of the maintainer.

+
+
+

Environment variable: QUARKUS_HELM_MAINTAINERS__MAINTAINERS__EMAIL

+
+
+

string

+
+
+
+

URL profile of the maintainer.

+
+
+

Environment variable: QUARKUS_HELM_MAINTAINERS__MAINTAINERS__URL

+
+
+

string

+
+
+
+

Annotations are additional mappings uninterpreted by Helm, made available for inspection by other applications.

+
+
+

Environment variable: QUARKUS_HELM_ANNOTATIONS

+
+
+

Map<String,String>

+
+
+
+

Name of the dependency.

+
+
+

Environment variable: QUARKUS_HELM_DEPENDENCIES__DEPENDENCIES__NAME

+
+
+

string

+
+
+
+

Version of the dependency.

+
+
+

Environment variable: QUARKUS_HELM_DEPENDENCIES__DEPENDENCIES__VERSION

+
+
+

string

required

+
+
+
+

Repository of the dependency.

+
+
+

Environment variable: QUARKUS_HELM_DEPENDENCIES__DEPENDENCIES__REPOSITORY

+
+
+

string

required

+
+
+
+

Dependency condition. If the property starts with @., then the property won’t be added under the root element in the generated values.yaml file.

+
+
+

Environment variable: QUARKUS_HELM_DEPENDENCIES__DEPENDENCIES__CONDITION

+
+
+

string

+
+
+
+

Dependency tags.

+
+
+

Environment variable: QUARKUS_HELM_DEPENDENCIES__DEPENDENCIES__TAGS

+
+
+

list of string

+
+
+
+

Whether this dependency should be loaded.

+
+
+

Environment variable: QUARKUS_HELM_DEPENDENCIES__DEPENDENCIES__ENABLED

+
+
+

boolean

+
+
+
+

Alias of the dependency.

+
+
+

Environment variable: QUARKUS_HELM_DEPENDENCIES__DEPENDENCIES__ALIAS

+
+
+

string

+
+
+
+

Instruct the application to wait for the service that should be installed as part of this Helm dependency. You can set only a service name or a combination of a service name plus the service port (service:port).

+
+
+

Environment variable: QUARKUS_HELM_DEPENDENCIES__DEPENDENCIES__WAIT_FOR_SERVICE

+
+
+

string

+
+
+
+

If wait for service is set, it will use this image to configure the init-containers within the deployment resource.

+
+
+

Environment variable: QUARKUS_HELM_DEPENDENCIES__DEPENDENCIES__WAIT_FOR_SERVICE_IMAGE

+
+
+

string

busybox:1.34.1

+
+
+
+

If wait for service is set, it will use this command to run the init-containers within the deployment resource.

+
+
+

Environment variable: QUARKUS_HELM_DEPENDENCIES__DEPENDENCIES__WAIT_FOR_SERVICE_PORT_COMMAND_TEMPLATE

+
+
+

string

for i in $(seq 1 200); do nc -z -w3 ::service-name ::service-port && exit 0; done; exit 1

+
+
+
+

If wait for service is set, it will use this command to run the init-containers within the deployment resource.

+
+
+

Environment variable: QUARKUS_HELM_DEPENDENCIES__DEPENDENCIES__WAIT_FOR_SERVICE_ONLY_COMMAND_TEMPLATE

+
+
+

string

until nslookup ::service-name; do echo waiting for service; sleep 2; done

+
+
+
+

The name of the property that will be present in the Helm values file. If the property starts with @., then the property won’t be added under the root element in the generated values.yaml file.

+
+
+

Environment variable: QUARKUS_HELM_VALUES__VALUES__PROPERTY

+
+
+

string

+
+
+
+

A comma-separated list of YAMLPath expressions to map the Dekorate auto-generated properties to the final Helm values file.

+
+
+

Environment variable: QUARKUS_HELM_VALUES__VALUES__PATHS

+
+
+

list of string

+
+
+
+

The profile where this value reference will be mapped to. For example, if the profile is dev, then a values.dev.yml file will be created with the value.

+
+
+

Environment variable: QUARKUS_HELM_VALUES__VALUES__PROFILE

+
+
+

string

+
+
+
+

The value that the property will have in the Helm values file. If not set, the extension will resolve it from the generated artifacts.

+
+
+

Environment variable: QUARKUS_HELM_VALUES__VALUES__VALUE

+
+
+

string

+
+
+
+

The integer value that the property will have in the Helm values file. If not set, the extension will resolve it from the generated artifacts.

+
+
+

Environment variable: QUARKUS_HELM_VALUES__VALUES__VALUE_AS_INT

+
+
+

int

+
+
+
+

The boolean value that the property will have in the Helm values file. If not set, the extension will resolve it from the generated artifacts.

+
+
+

Environment variable: QUARKUS_HELM_VALUES__VALUES__VALUE_AS_BOOL

+
+
+

boolean

+
+
+
+

The map value that the property will have in the Helm values file. If not set, the extension will resolve it from the generated artifacts.

+
+
+

Environment variable: QUARKUS_HELM_VALUES__VALUES__VALUE_AS_MAP

+
+
+

Map<String,String>

+
+
+
+

A list separated by comma that the property will have in the Helm values file. If not set, the extension will resolve it from the generated artifacts.

+
+
+

Environment variable: QUARKUS_HELM_VALUES__VALUES__VALUE_AS_LIST

+
+
+

list of string

+
+
+
+

If not provided, it will use {{ .Values.. }}.

+
+
+

Environment variable: QUARKUS_HELM_VALUES__VALUES__EXPRESSION

+
+
+

string

+
+
+
+

Description of the property.

+
+
+

Environment variable: QUARKUS_HELM_VALUES__VALUES__DESCRIPTION

+
+
+

string

+
+
+
+

Minimum value allowed for this property.

+
+
+

Environment variable: QUARKUS_HELM_VALUES__VALUES__MINIMUM

+
+
+

int

+
+
+
+

Maximum value allowed for this property.

+
+
+

Environment variable: QUARKUS_HELM_VALUES__VALUES__MAXIMUM

+
+
+

int

+
+
+
+

Pattern to validate the value of this property.

+
+
+

Environment variable: QUARKUS_HELM_VALUES__VALUES__PATTERN

+
+
+

string

+
+
+
+

If true, then this property is mandatory.

+
+
+

Environment variable: QUARKUS_HELM_VALUES__VALUES__REQUIRED

+
+
+

boolean

false

+
+
+
+

The YAMLPath path where to include the template within the resource.

+
+
+

Environment variable: QUARKUS_HELM_EXPRESSIONS__EXPRESSIONS__PATH

+
+
+

string

required

+
+
+
+

The expression template to include.

+
+
+

Environment variable: QUARKUS_HELM_EXPRESSIONS__EXPRESSIONS__EXPRESSION

+
+
+

string

required

+
+
+
+

The property to use in the if statement. If the property starts with @., then the property won’t be added under the root element in the generated values.yaml file.

+
+
+

Environment variable: QUARKUS_HELM_ADD_IF_STATEMENT__ADD_IF_STATEMENT__PROPERTY

+
+
+

string

+
+
+
+

The resource kind where to include the if statement.

+
+
+

Environment variable: QUARKUS_HELM_ADD_IF_STATEMENT__ADD_IF_STATEMENT__ON_RESOURCE_KIND

+
+
+

string

+
+
+
+

The resource kind where to include the if statement.

+
+
+

Environment variable: QUARKUS_HELM_ADD_IF_STATEMENT__ADD_IF_STATEMENT__ON_RESOURCE_NAME

+
+
+

string

+
+
+
+

The default value of the property

+
+
+

Environment variable: QUARKUS_HELM_ADD_IF_STATEMENT__ADD_IF_STATEMENT__WITH_DEFAULT_VALUE

+
+
+

boolean

true

+
+
+
+

Provide custom description of the add-if-statement property.

+
+
+

Environment variable: QUARKUS_HELM_ADD_IF_STATEMENT__ADD_IF_STATEMENT__DESCRIPTION

+
+
+

string

Determine if the resource should be installed or not.

+
+
+
+

Name of the property to add or update. Example: app.replicas.

+
+
+

Environment variable: QUARKUS_HELM_VALUES_SCHEMA_PROPERTIES__PROPERTIES__NAME

+
+
+

string

+
+
+
+

Description of the property.

+
+
+

Environment variable: QUARKUS_HELM_VALUES_SCHEMA_PROPERTIES__PROPERTIES__DESCRIPTION

+
+
+

string

+
+
+
+

Type of the property.

+
+
+

Environment variable: QUARKUS_HELM_VALUES_SCHEMA_PROPERTIES__PROPERTIES__TYPE

+
+
+

string

string

+
+
+
+

Minimum value allowed for this property.

+
+
+

Environment variable: QUARKUS_HELM_VALUES_SCHEMA_PROPERTIES__PROPERTIES__MINIMUM

+
+
+

int

+
+
+
+

Maximum value allowed for this property.

+
+
+

Environment variable: QUARKUS_HELM_VALUES_SCHEMA_PROPERTIES__PROPERTIES__MAXIMUM

+
+
+

int

+
+
+
+

Pattern to validate the value of this property.

+
+
+

Environment variable: QUARKUS_HELM_VALUES_SCHEMA_PROPERTIES__PROPERTIES__PATTERN

+
+
+

string

+
+
+
+

If true, then this property is mandatory.

+
+
+

Environment variable: QUARKUS_HELM_VALUES_SCHEMA_PROPERTIES__PROPERTIES__REQUIRED

+
+
+

boolean

false

+
+
+
+
+ + + + + + + diff --git a/quarkus-helm/dev/index.html b/quarkus-helm/dev/index.html new file mode 100644 index 0000000000..863b5a71aa --- /dev/null +++ b/quarkus-helm/dev/index.html @@ -0,0 +1,3783 @@ + + + + + + Helm Extension for Quarkus :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Helm Extension for Quarkus

+
+
+
+

Helm is a package and install manager that standardizes and simplifies packaging and deployment of containerized applications with Kubernetes.

+
+
+

Under the hood, the Quarkus Helm extension uses Dekorate to generate the Helm chart manifests at build time.

+
+
+

Before getting started, make sure you’re using the right Quarkus Helm version that is compatible with the Quarkus version you’re using in your project. See the following table to see the compatibility among versions:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Quarkus Helm VersionQuarkus Version

1.2.1

Quarkus 3.5.0+

1.2.0

Quarkus 3.5.0+

1.1.0

Quarkus 3.3.0+

1.0.9

Quarkus 3.2.0+

1.0.8

Quarkus 3.1.0+

1.0.7

Quarkus 3.1.0+

1.0.6

Quarkus 3.0.0+

1.0.5

Quarkus 3.0.0+

1.0.4

Quarkus 3.0.0+

1.0.3

Quarkus 3.0.0+

1.0.1

Quarkus 3.0.0+

1.0.0

Quarkus 3.0.0.Alpha - Quarkus 3.0.0.Beta

0.2.9

Quarkus 2.16+

0.2.8

Quarkus 2.16+

0.2.7

Quarkus 2.16+

0.2.6

Quarkus 2.16+

0.2.5

Quarkus 2.16+

0.2.4

Quarkus 2.16+

0.2.3

Quarkus 2.16+

0.2.2

Quarkus 2.16+

0.2.1

Quarkus 2.14.2 - 2.14.3 - 2.15+

0.2.0

Quarkus 2.14.0 - 2.14.1

0.1.2

Quarkus 2.13

0.1.1

Quarkus 2.13

0.1.0

Quarkus 2.13

0.0.7

Quarkus 2.13

0.0.6

Quarkus 2.12

+
+

Apart from all the features supported by the Quarkus Helm extension, in this documentation you will also find several examples about how to use this extension in:

+
+ +
+
+
+

Using the Helm Extension in Kubernetes

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    roughly 10 minutes

    +
  • +
  • +

    JDK 11+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    Docker installed

    +
  • +
  • +

    Helm command line installed

    +
  • +
  • +

    Have connected/logged to a Kubernetes cluster

    +
  • +
+
+
+

Create a Quarkus application with the Helm extension

+
+

The Quarkus Helm extension will generate the Helm Chart of a Quarkus application.

+
+
+

In this example, we’ll create a Quarkus application with the Quarkus Helm extension by running the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.7.3:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=helm-quickstart \
+    -DclassName="org.acme.quickstart.GreetingResource" \
+    -Dpath="/hello" \
+    -Dextensions="resteasy-reactive,helm"
+cd helm-quickstart
+
+
+
+

If you already have your Quarkus project configured, you can add the helm extension to your project by running the following command in your project base directory:

+
+
+
+
./mvnw quarkus:add-extension -Dextensions="helm"
+
+
+
+

This command will add the following dependency to your pom.xml file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.helm</groupId>
+    <artifactId>quarkus-helm</artifactId>
+    <version>1.2.3</version>
+</dependency>
+
+
+
+

After you add the Quarkus Helm extension to your project, you can now generate the Helm resources by running the following Maven command:

+
+
+
+
./mvnw clean package
+
+
+
+

When using the Quarkus Helm extension, the Quarkus Kubernetes extension will be transitively loaded as well. So, the helm resources will include the following templates at target/helm/kubernetes/<chart name>/:

+
+
+
    +
  • +

    Chart.yaml

    +
  • +
  • +

    values.yaml

    +
  • +
  • +

    /charts

    +
  • +
  • +

    /templates

    +
  • +
  • +

    /templates/deployment.yaml

    +
  • +
  • +

    /templates/ingress.yaml

    +
  • +
  • +

    /templates/service.yaml

    +
  • +
  • +

    /templates/NOTES.txt

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

The <chart name> is set from either the property quarkus.helm.name or the @HelmChart annotation or the Quarkus application.

+
+
+
+
+
+

Chart Installation

+
+

Let’s now see how to install the previously generated Helm resources on a Kubernetes cluster.

+
+
+

First, you need to build the application container image and push it into a container registry. For doing this, Quarkus provides some container image extensions to ease up this step. Let’s add the Quarkus container image docker extension in this example:

+
+
+
+
./mvnw quarkus:add-extension -Dextensions="container-image-docker"
+
+
+
+

Now, we can generate the Helm resources and build/push the application container image at once by running the following Maven command:

+
+
+
+
./mvnw clean package -Dquarkus.container-image.build=true -Dquarkus.container-image.push=true -Dquarkus.container-image.registry=<your container registry> -Dquarkus.container-image.group=<your container registry namespace>
+
+
+
+ + + + + +
+ + +
+

Make sure the application container image is public and available to be used by your Kubernetes cluster.

+
+
+
+
+

Finally, let’s use Helm to deploy it into the cluster:

+
+
+
+
helm install helm-example ./target/helm/kubernetes/<chart name>
+
+
+
+

The above command will use the default values, which are located in ./target/helm/kubernetes/<chart name>/values.yaml. +To override the default values, pass as parameter you own value file --values /path/to/another.values.yaml or set them using --set key1=val1 --set key2=val2.

+
+
+
+

How can I update my deployment?

+
+
    +
  • +

    Either via the upgrade option of Helm command line:

    +
  • +
+
+
+

After making changes to your project and regenerating the Helm resources and the application container image, then you need to upgrade your deployment:

+
+
+
+
helm upgrade helm-example ./target/helm/kubernetes/<chart name>
+
+
+
+
    +
  • +

    Or via the set option of Helm command line:

    +
  • +
+
+
+
+
helm upgrade helm-example ./target/helm/kubernetes/<chart name> --set app.replicas=1
+
+
+
+
+

How can we delete my deployment?

+
+
+
helm uninstall helm-example
+
+
+
+
+
+
+

Using the Helm Extension in OpenShift

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    roughly 10 minutes

    +
  • +
  • +

    JDK 11+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    Docker installed

    +
  • +
  • +

    Helm command line installed

    +
  • +
  • +

    Have connected/logged to a OpenShift cluster

    +
  • +
+
+
+

Create a Quarkus application with the Helm extension

+
+

The Quarkus Helm extension will generate the Helm Chart of a Quarkus application.

+
+
+

In this example, we’ll create a Quarkus application with the Quarkus Helm and the Quarkus OpenShift extensions by running the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.7.3:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=helm-quickstart \
+    -DclassName="org.acme.quickstart.GreetingResource" \
+    -Dpath="/hello" \
+    -Dextensions="resteasy-reactive,openshift,helm"
+cd helm-quickstart
+
+
+
+

If you already have your Quarkus project configured, you can add the helm extension to your project by running the following command in your project base directory:

+
+
+
+
./mvnw quarkus:add-extension -Dextensions="helm"
+
+
+
+

This command will add the following dependency to your pom.xml file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.helm</groupId>
+    <artifactId>quarkus-helm</artifactId>
+    <version>1.2.3</version>
+</dependency>
+
+
+
+

If you want to expose your application in OpenShift, you also need to enable the Route resource by adding the following configuration in your application properties:

+
+
+
+
quarkus.openshift.route.expose=true
+
+
+
+

And since the Quarkus OpenShift extension will also generate the Kubernetes manifests, you need to explicitly specify the deployment target you want to use:

+
+
+
+
quarkus.helm.repository.deployment-target=openshift
+
+
+
+

Once we add the Quarkus Helm extension to your project, you can now generate the Helm resources by running the following Maven command:

+
+
+
+
./mvnw clean package
+
+
+
+

Then the helm resources will include the following templates at target/helm/openshift/<chart name>/:

+
+
+
    +
  • +

    Chart.yaml

    +
  • +
  • +

    values.yaml

    +
  • +
  • +

    /charts

    +
  • +
  • +

    /templates

    +
  • +
  • +

    /templates/deployment.yaml

    +
  • +
  • +

    /templates/route.yaml

    +
  • +
  • +

    /templates/service.yaml

    +
  • +
  • +

    /templates/NOTES.txt

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

The <chart name> is set from either the property quarkus.helm.name or the @HelmChart annotation or the Quarkus application.

+
+
+
+
+
+

Chart Installation

+
+

Let’s now see how to install the previously generated Helm resources on a OpenShift cluster.

+
+
+

First, you need to build the application container image and push it into a container registry. For doing this, Quarkus provides some container image extensions to ease up this step. Let’s add the Quarkus container image docker extension in this example:

+
+
+
+
./mvnw quarkus:add-extension -Dextensions="container-image-docker"
+
+
+
+

Now, we can generate the Helm resources and build/push the application container image at once by running the following Maven command:

+
+
+
+
./mvnw clean package -Dquarkus.container-image.builder=docker -Dquarkus.container-image.build=true -Dquarkus.container-image.push=true -Dquarkus.container-image.registry=<your container registry> -Dquarkus.container-image.group=<your container registry namespace>
+
+
+
+ + + + + +
+ + +
+

Make sure the application container image is public and available to be used by your Kubernetes cluster.

+
+
+
+
+

Finally, let’s use Helm to deploy it into the cluster:

+
+
+
+
helm install helm-example ./target/helm/openshift/<chart name>
+
+
+
+

The above command will use the default values, which are located in ./target/helm/openshift/<chart name>/values.yaml. +To override the default values, pass as parameter you own value file --values /path/to/another.values.yaml or set them using --set key1=val1 --set key2=val2.

+
+
+
+

How can I update my deployment?

+
+
    +
  • +

    Either via the upgrade option of Helm command line:

    +
  • +
+
+
+

After making changes to your project and regenerating the Helm resources and the application container image, then you need to upgrade your deployment:

+
+
+
+
helm upgrade helm-example ./target/helm/openshift/<chart name>
+
+
+
+
    +
  • +

    Or via the set option of Helm command line:

    +
  • +
+
+
+
+
helm upgrade helm-example ./target/helm/openshift/<chart name> --set app.replicas=1
+
+
+
+
+

How can we delete my deployment?

+
+
+
helm uninstall helm-example
+
+
+
+
+
+
+

Generating the Helm Values file

+
+
+

By default, the Quarkus Helm extension will generate the Helm values file (values.yaml) by mapping the following pre-configured properties:

+
+
+
    +
  • +

    The Kubernetes/Openshift replicas

    +
  • +
  • +

    The Kubernetes/Openshift image

    +
  • +
  • +

    The Kubernetes/Openshift Env Var values (only for plain values - secrets or configmaps are not supported yet)

    +
  • +
  • +

    The Kubernetes ingress host

    +
  • +
  • +

    The Openshift S2i builder image

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

If you would like to automatically map any other pre-configured properties, please submit a feature request at this repository, and we’ll work on it.

+
+
+
+
+

For example, if you set 3 replicas for your deployment:

+
+
+
+
quarkus.helm.name=my-chart
+quarkus.helm.description=Description of my Chart
+
+# Set replicas to 3
+quarkus.kubernetes.replicas=3
+
+
+
+

The extension will generate the next Helm values file at target/helm/<deployment target>/<chart name>/values.yaml:

+
+
+
+
app:
+  replicas: 3
+
+
+
+

And the Deployment file at target/helm/<deployment target>/<chart name>/templates/deployment.yaml will have a reference to this value:

+
+
+
+
apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: helm-on-kubernetes-example
+spec:
+  replicas: '{{ .Values.app.replicas }}'
+
+
+
+

This is done transparently to users.

+
+
+

Adding custom properties to the Helm Values file using YAMLPath expressions

+
+

As we have introduced in the previous section, the Quarkus Helm extension will automatically map some properties like the replicas or the images to the Values helm file. Still, some users might need to map more properties. For example, let’s see the following YAML resource:

+
+
+
+
apiVersion: v1
+kind: Service
+metadata:
+  name: helm-on-kubernetes-example
+
+
+
+

The property at metadata.name, with value helm-on-kubernetes-example, will not be replaced with {{ .Values.app.name }} in the Helm templates. +However, the extension allows users to define YAMLPath expressions to map these properties into the Helm values file. Let’s see how to do it using the above example to map the property metadata.name with {{ .Values.app.name }}. You only need to add the following properties to your configuration:

+
+
+
+
quarkus.helm.name=my-chart
+quarkus.helm.description=Description of my Chart
+
+# Map all the metadata name resources
+quarkus.helm.values.name.paths=metadata.name
+
+
+
+

The resulting values.yaml file will look like as:

+
+
+
+
app:
+  name: helm-on-kubernetes-example
+
+
+
+

The app.name value is set automatically by the Quarkus Helm extension. However, users can provide other values using the value property:

+
+
+
+
quarkus.helm.name=my-chart
+quarkus.helm.description=Description of my Chart
+
+# Map all the metadata name resources
+quarkus.helm.values.name.paths=metadata.name
+## Overwrite value:
+quarkus.helm.values.name.value=this-is-another-name
+
+
+
+

And the values.yaml file will now contain:

+
+
+
+
app:
+  name: this-is-another-name
+
+
+
+
+

Using values in the application properties

+
+

We can directly use the configuration from the generated Values yaml file in the application.properties file. For example, if the generated values.yaml contains:

+
+
+
+
app:
+  greetings: Hello
+
+
+
+

We can map this value into the application.properties as this property was a system property:

+
+
+
+
greetings.message=${app.greetings}
+
+
+
+

Now, when installing the Helm chart, we can configure the greetings message by doing:

+
+
+
+
helm install helm-example ./target/helm/kubernetes/<chart name> --set app.greetings=Hola
+
+
+
+
+

Mapping System Properties

+
+ + + + + +
+ + +
+

Mapping system properties only works with string/text properties. For mapping other types, you would need to use the Kubernetes Config extension. See example here.

+
+
+
+
+

It’s a very common use case to expose some properties to be configurable when installing the Helm chart. For example, the data source JDBC url:

+
+
+
+
quarkus.datasource.jdbc.url=jdbc:postgresql://host:1111/database
+quarkus.datasource.username=user
+quarkus.datasource.password=pass
+
+
+
+

If we add the above properties into the application.properties file, the connection to the datasource is hardcoded to use a Postgresql instance at jdbc:postgresql://host:1111/database, and you won’t be able to change it when installing the Helm chart.

+
+
+

To allow some properties to be configurable at installing the Helm chart, you have several options:

+
+
+ +
+
+

This extension allows mounting ConfigMap and/or Secret resources where to take the application properties from. You can find more information about how to use it, in the official guide.

+
+
+
    +
  • +

    Using system properties:

    +
  • +
+
+
+

You can map the actual configuration you would like to change at installing the Helm chart using system properties, for example:

+
+
+
+
quarkus.datasource.jdbc.url=${POSTGRESQL_URL:jdbc:postgresql://host:1111/database}
+quarkus.datasource.username=${POSTGRESQL_USERNAME:user}
+quarkus.datasource.password=${POSTGRESQL_PASSWORD:pass}
+
+
+
+ + + + + +
+ + +
+

In Quarkus, you can specify system properties using the pattern ${NAME-OF-THE-PROPERTY:DEFAULT-VALUE} where Quarkus will try to load the system property NAME-OF-THE-PROPERTY and if not found or set, it will use the value DEFAULT-VALUE.

+
+
+
+
+

Next, the Quarkus Helm extension will detect that you’re using system properties in your application properties file and will configure the env var resources at the generated Deployment resource, and also map these properties into the generated Helm Chart values file:

+
+
+
+
app:
+  envs:
+    POSTGRESQL_URL: jdbc:postgresql://host:1111/database
+    POSTGRESQL_USERNAME: user
+    POSTGRESQL_PASSWORD: pass
+
+
+
+ + + + + +
+ + +
+

The Quarkus Helm extension does not force you to use a specific naming convention and by consequence, you can declare the system property using one the following:

+
+
+
    +
  1. +

    Uppercase and underscore separating the words. Example: POSTGRESQL_URL,

    +
  2. +
  3. +

    Camel case format. Example: postgresqlUrl,

    +
  4. +
  5. +

    Separated by dots. Example: postgresql.url

    +
  6. +
+
+
+

The extension will use the property names declared as such under the envs properties, except for the case of the separated by dots (example: postgresql.url) that will be split the words as follows:

+
+
+
+
app:
+  envs:
+    postgresql:
+      url: jdbc:postgresql://host:1111/database
+
+
+
+
+
+

Therefore, you can now change these values when installing or updating the Helm chart by using:

+
+
+
+
helm install helm-example ./target/helm/kubernetes/<chart name> --set app.envs.POSTGRESQL_URL=foo --set app.envs.POSTGRESQL_USERNAME=bar --set app.envs.POSTGRESQL_PASSWORD=tar
+
+
+
+ + + + + +
+ + +
+

The mapping of system properties is enabled by default. If you want to disable it, you need to add this property quarkus.helm.map-system-properties=false into the application properties file.

+
+
+
+
+
+

Mapping multiple properties at once

+
+

What about if the properties are located in different places, for example:

+
+
+
+
apiVersion: networking.k8s.io/v1
+kind: Ingress
+metadata:
+  name: helm-on-kubernetes-example ## (1)
+spec:
+  rules:
+    - host: my-host
+      http:
+        paths:
+          - backend:
+              service:
+                name: helm-on-kubernetes-example ## (2)
+                port:
+                  name: http
+            path: /
+            pathType: Prefix
+
+
+
+

From this example, we need to map the value helm-on-kubernetes-example which is used in two places: (1) metadata.name and (2) spec.rules..http.paths..backend.service.name to the same property name. For doing this, we need to provide a comma-separated list of YAMLPath expressions to be mapped to app.name:

+
+
+
+
quarkus.helm.name=my-chart
+quarkus.helm.description=Description of my Chart
+
+# Map all the metadata name resources
+## Comma separated list of YAMLPath expressions:
+quarkus.helm.values.name.paths=metadata.name,(kind == Ingress).spec.rules.http.paths.backend.service.name
+
+
+
+

Now, the extension will first map the expression metadata.name and then the expression (kind == Ingress).spec.rules.http.paths.backend.service.name (this expression only applies to Ingress resources).

+
+
+
+

Alias name

+
+

The alias name is the name used to keep all the properties linked as:

+
+
+
+
app:
+  replicas: 3
+
+
+
+

The alias name in the above example is "app" which is the default value. You can modify it using the property "quarkus.helm.values-root-alias=myAppName" and then the generated Helm resources will look like:

+
+
+
+
myAppName:
+  replicas: 3
+
+
+
+
+
+
+

Adding Helm dependencies

+
+
+

Sometimes, your application requires of some other services to work. The typical scenario is when your application needs of a database to store the application data in. In this scenario, you need to declare the database service as a Helm dependency. For example, let’s declare the Postgres Bitnami Helm dependency as database instance:

+
+
+

Chart.yaml:

+
+
+
+
dependencies:
+  - name: postgresql
+    version: 11.6.22
+    repository: https://charts.bitnami.com/bitnami
+    alias: database # this is optional. The default value is the `name`.
+
+
+
+ + + + + +
+ + +
+

Before installing or packaging your Helm chart, you need to download the dependencies (you can use the Helm command helm dependency update ./target/helm/<deployment target>/<chart name>)

+
+
+
+
+

Next, you can configure the dependencies adding the dependency configuration into the values.yaml file. For example, following the previous Postgres Bitnami dependency:

+
+
+

values.yaml:

+
+
+
+
database: # the value in the `alias` property, or the `name` if unset.
+  global:
+    postgresql:
+      auth:
+        database: my_db_name
+        postgresPassword: secret
+
+
+
+

Let’s now see how you can add this configuration using the Quarkus Helm extension, so the chart.yaml and the values.yaml files are properly populated using a Helm dependency. You simply need to add the following properties:

+
+
+

application.properties:

+
+
+
+
quarkus.helm.dependencies.postgresql.alias=database
+quarkus.helm.dependencies.postgresql.version=11.6.22
+quarkus.helm.dependencies.postgresql.repository=https://charts.bitnami.com/bitnami
+
+quarkus.helm.values.0.property=database.global.postgresql.auth.postgresPassword
+quarkus.helm.values.0.value=secret
+quarkus.helm.values.1.property=postgresql.global.postgresql.auth.database
+quarkus.helm.values.1.value=my_db_name
+
+
+
+

The Quarkus Helm extension will check whether the property set in quarkus.helm.values.xxx.property starts with a dependency alias or name. If so, it will use directly the value set. Otherwise, it will interpret that the property is an application property and will add the prefix set in the property quarkus.helm.values-root-alias (default value is app).

+
+
+

Alternatively, you can provide the properties of your dependency by providing the file values.yaml or the file Chart.yaml at src/main/helm (the path is configurable using the property quarkus.helm.input-directory). Let’s see an example:

+
+
+

src/main/helm/values.yaml:

+
+
+
+
database: # the value in the `alias` property, or the `name` if unset.
+  global:
+    postgresql:
+      auth:
+        database: my_db_name
+        postgresPassword: secret
+
+
+
+

This configuration will be aggregated in the autogenerated values file at target/helm/<deployment target>/<chart name>/values.yaml.

+
+
+

Install the Helm Dependencies in order

+
+

By default, Helm will start the Helm dependencies and the application at the same time. This might cause issues when running your application (as one of the dependencies might not have been started yet, for example, the database).

+
+
+

The good news is that you can force the dependency installation order using the Quarkus Helm extension by adding the property quarkus.helm.dependencies.XX.wait-for-service=<service name>:

+
+
+
+
quarkus.helm.dependencies.postgresql.alias=database
+quarkus.helm.dependencies.postgresql.version=11.6.22
+quarkus.helm.dependencies.postgresql.repository=https://charts.bitnami.com/bitnami
+quarkus.helm.dependencies.postgresql.wait-for-service=chart-database:5432
+
+
+
+ + + + + +
+ + +
+

The service name strongly depends on the Helm dependency to be installed, so you need to know the service name that the chart will expose beforehand.

+
+
+
+
+

This configuration will add the following init-containers in the Deployment resource of your Quarkus application:

+
+
+

src/main/helm/kubernetes/templates/deployment.yaml:

+
+
+
+
initContainers:
+- image: alpine:3.16.2
+  args:
+  - -c
+  - for i in $(seq 1 200); do nc -z -w3 chart-database && exit 0 || sleep 3; done; exit 1
+  command:
+  - sh
+
+
+
+

You can configure the image and the argument template to use with the properties quarkus.helm.dependencies.XX.wait-for-service-image, quarkus.helm.dependencies.0.wait-for-service-port-command-template and quarkus.helm.dependencies.0.wait-for-service-only-command-template.

+
+
+
+
+
+

Validating the input

+
+
+

Helm allows validating the input provided by the user when installing/updating the Helm charts. For example, we might want that the minimum value of the replicas is 3, so if users set a lesser value, Helm rejects it.

+
+
+

These validation rules are specified in the values.schema.json file which this extension will automatically generate with: +- A description of the automatically mapped properties. +- The structure of the properties.

+
+
+

Therefore, to implement your validation rule, all you would need is to set the minimum value for app.replicas to 3 as follows:

+
+
+
+
quarkus.helm.values-schema.properties.replicas.minimum=3
+
+
+
+

Apart from minimum, you can also specify a maximum value, or a pattern that the value has to follow or use the required flag.

+
+
+
+
+

Using Helm templates/functions

+
+
+

The Quarkus Helm extension partially supports Helm extensions via Helm templates and functions. You can make use of the templates and more complex functions using Helm expressions:

+
+
+
+
# Example of expressions
+quarkus.helm.expressions.0.path=(kind == Service).metadata.annotations.'app.quarkus.io/commit-id'
+quarkus.helm.expressions.0.expression={{ .Values.app.favorite.drink | default "tea" | quote }}
+
+# Example of multiline expression
+quarkus.helm.expressions.1.path=(kind == ConfigMap && metadata.name == my-configmap).data
+quarkus.helm.expressions.1.expression={{- range $key, $val := .Values.app.favorite }}\n\
+{{ indent 2 $key }}: {{ $val | quote }}\n\
+{{- end }}
+
+
+
+

The Quarkus Helm extension will replace the specified path with the provided expression.

+
+
+

To provide your custom templates, you can add them into the folder src/main/helm/templates/_helpers.tpl, for example:

+
+
+
+
{{/*
+Expand the name of the chart.
+*/}}
+{{- define "foo.name" -}}
+{{- default .Chart.Name .Values.nameOverride | trunc 5 }}
+{{- end }}
+
+
+
+

And next, you can use this function using the Helm include primitive:

+
+
+
+
quarkus.helm.expressions.0.path=(kind == Service).metadata.annotations.'app.quarkus.io/build-timestamp'
+quarkus.helm.expressions.0.expression={{ include "foo.name" . }}
+
+
+
+

Moreover, you can specify your Helm templates to only a concrete kind resource, for example, only for Service resources. To do this, you need to add the resource src/main/helm/templates/<kind>.yaml (following the example src/main/helm/templates/service.yaml). For example, the following resource will add two template functions called "mychart.labels" and "mychart.not-used":

+
+
+
+
{{- define "mychart.labels" }}
+    generator: helm
+{{- end }}
+{{- define "mychart.not-used" }}
+not:
+  used: !
+{{- end }}
+
+
+
+

And let’s use the template "mychart.labels":

+
+
+
+
quarkus.helm.expressions.0.path=(kind == Service && metadata.name == quarkus-helm-integration-tests-kubernetes-with-templates).metadata.labels
+quarkus.helm.expressions.0.expression={{- template "mychart.labels" }}
+
+
+
+
+
+

Push to Helm Repositories

+
+
+

A Helm chart repository is a location where packaged charts can be used and shared across the community.

+
+
+

We can configure the Quarkus Helm extension to automatically push the generated Helm charts into Helm repositories using the following configuration:

+
+
+
+
# To enable pushing to a Helm repository
+quarkus.helm.repository.push=true
+# The Helm repository type. Options are: `CHARTMUSEUM`, `ARTIFACTORY`, and `NEXUS`.
+quarkus.helm.repository.type=CHARTMUSEUM
+quarkus.helm.repository.url=<chart museum url>
+# Optional
+quarkus.helm.repository.username=...
+# Optional
+quarkus.helm.repository.password=...
+
+
+
+ + + + + +
+ + +
+

All the previous properties can be set via system properties at build time.

+
+
+
+
+

Let’s see a practical example. First, we need to deploy a Helm repository. The easiest way to set up one, it’s installing ChartMuseum via docker:

+
+
+
+
docker run --rm -u 0 -it -d -p 8080:8080 -e DEBUG=1 -e STORAGE=local -e STORAGE_LOCAL_ROOTDIR=/charts -v $(pwd)/charts:/charts chartmuseum/chartmuseum:latest
+
+
+
+

The ChartMuseum data will be stored in the "./charts" folder.

+
+
+

Next, we’re going to build the Helm chart with the push to a repository enabled and using the just created helm repository:

+
+
+
+
mvn clean install -Dquarkus.helm.repository.push=true -Dquarkus.helm.repository.url=http://localhost:8080/api/charts -Dquarkus.helm.repository.type=CHARTMUSEUM
+
+
+
+

For the local ChartMuseum, we don’t need to provide either the username or the password.

+
+
+

Finally, let’s install the Helm chart from the Helm repository:

+
+
+
+
helm repo add local http://localhost:8080
+helm install --devel my-quarkus local/quarkus-hello-world
+
+
+
+
+
+

Helm Profiles

+
+
+

By default, all the properties are mapped to the same Helm values file values.yaml. However, the Quarkus Helm extension also supports the generation of Helm values by profiles. +For example, let’s say we have two environments: one for testing and another one for production; each environment has a different ingress host where your Kubernetes applications will be exposed. +We can configure our application as:

+
+
+
+
quarkus.kubernetes.ingress.expose=true
+# Mapped to `values.yaml` by the preconfigured Ingress decorator
+quarkus.kubernetes.ingress.host=my-host
+
+# Helm Chart
+quarkus.helm.name=my-chart
+## Overwrite the value of `quarkus.kubernetes.host` to `values.<profile-name>.yaml`:
+quarkus.helm.values.host.paths=(kind == Ingress).spec.rules.host
+quarkus.helm.values.host.value=my-test-host
+quarkus.helm.values.host.profile=test
+
+
+
+

This configuration will generate the values.yaml using the value set at the property quarkus.kubernetes.ingress.host:

+
+
+
+
app:
+  host: my-host
+
+
+
+

But as you are now using a profile named test (see quarkus.helm.values.host.profile) in one of your mapped properties, it will also generate a values.test.yaml file with the content:

+
+
+
+
app:
+  host: my-test-host
+
+
+
+ + + + + +
+ + +
+

By default, Quarkus Helm uses the "." character in the filename of profile specific values files i.e. values.test.yaml. You can configure this separator using the property quarkus.helm.values-profile-separator. For example, using quarkus.helm.values-profile-separator=- would generate values-test.yaml instead.

+
+
+
+
+
+
+

Conditionally enable/disable resources

+
+
+

Based on a boolean property that is available part of the values.yaml, you can specify whether you want to install or not any resource. For example, we want to install the generated Ingress resource only if I pass the following property app.ingress.enabled=true when installing the chart. Let’s see how to do this using the quarkus.helm.add-if-statement properties:

+
+
+
+
quarkus.helm.add-if-statement."ingress.enabled".on-resource-kind=Ingress
+quarkus.helm.add-if-statement."ingress.enabled".with-default-value=false
+
+
+
+

This configuration will add the app.ingress.enabled property in the values.yaml file:

+
+
+
+
app:
+  ingress:
+    enabled: false
+
+
+
+

So, when installing the chart, the Ingress resource won’t be installed by default. +Now, to install it, you need to explicitly set the app.ingress.enabled=true property as helm install quarkus local/chart --set app.ingress.enabled=false and then the Ingress resource would be installed.

+
+
+
+
+

Command line interface

+
+
+

Using the helm binary requires the user to specify things like name and path for each chart, which is a repetitive process. +Moreover, on multi-module projects it requires the command to be run for each of the modules providing a chart.

+
+
+

This extension provides a CLI utility that can be used along with the official Quarkus CLI. To use the Quarkus CLI, install the latest version of the Quarkus CLI. Use quarkus -v to verify the version number.

+
+
+

The plugin is enabled automatically when the Quarkus CLI is running from within a module that is using the helm extension.

+
+
+

Note: If the plugin is not added automatically, it is possible that the extension catalog has not yet been updated with a quarkus-helm version that contains the CLI plugin. Until, then please use the manual installation steps.

+
+
+

Manual installation

+
+

To manually enable the CLI plugin for quarkus-helm:

+
+
+
+
quarkus plug add io.quarkiverse.helm:quarkus-helm-cli:{quarkus-helm-version} -d "Helm CLI"
+
+
+
+
+

Using the CLI

+
+

Listing charts

+
+

To list the available charts of the current projects or its sub-modules:

+
+
+
+
quarkus helm list
+
+
+
+

To select a specific platform (e.g. kubernetes or openshift):

+
+
+
+
quarkus helm list --platform kubernetes
+
+
+
+
+

Installing charts

+
+

To install all the available charts of the current project or its sub-modules;

+
+
+
+
quarkus helm install
+
+
+
+

The command supports the --platform option too. +The command also supports the --set option from the original helm cli:

+
+
+
+
quarkus helm install --set app.replicas=3
+
+
+
+

In case you want to select a single chart among multiple modules for installation (e.g. user-service):

+
+
+
+
quarkus helm install user-service
+
+
+
+
+

Upgrading charts

+
+

To upgrade:

+
+
+
+
quarkus helm upgrade
+
+
+
+

The upgrade command supports the same options as the install subcommand.

+
+
+
+

Uninstalling charts

+
+

To uninstall a chart:

+
+
+
+
quarkus helm uninstall
+
+
+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Enabled the generation of Helm files.

+
+
+

Environment variable: QUARKUS_HELM_ENABLED

+
+
+

boolean

true

+
+
+
+

Name of the Helm chart. If not set, it will use the application name.

+
+
+

Environment variable: QUARKUS_HELM_NAME

+
+
+

string

+
+
+
+

Project’s home page of the Helm chart. It must be a URL.

+
+
+

Environment variable: QUARKUS_HELM_HOME

+
+
+

string

+
+
+
+

The Helm chart list of URLs to source code for this project.

+
+
+

Environment variable: QUARKUS_HELM_SOURCES

+
+
+

list of string

+
+
+
+

Version of the Helm chart. If not set, it will use the application version.

+
+
+

Environment variable: QUARKUS_HELM_VERSION

+
+
+

string

+
+
+
+

The Helm chart single-sentence description.

+
+
+

Environment variable: QUARKUS_HELM_DESCRIPTION

+
+
+

string

+
+
+
+

List of keywords to add to the chart.

+
+
+

Environment variable: QUARKUS_HELM_KEYWORDS

+
+
+

list of string

+
+
+
+

Icon of the Helm chart. It must be a URL to an SVG or PNG image.

+
+
+

Environment variable: QUARKUS_HELM_ICON

+
+
+

string

+
+
+
+

The Chart API version. The default value is v2.

+
+
+

Environment variable: QUARKUS_HELM_API_VERSION

+
+
+

string

v2

+
+
+
+

The condition to enable this chart.

+
+
+

Environment variable: QUARKUS_HELM_CONDITION

+
+
+

string

+
+
+
+

Tags of this chart.

+
+
+

Environment variable: QUARKUS_HELM_TAGS

+
+
+

string

+
+
+
+

The version of the application enclosed of this chart.

+
+
+

Environment variable: QUARKUS_HELM_APP_VERSION

+
+
+

string

+
+
+
+

Whether this chart is deprecated.

+
+
+

Environment variable: QUARKUS_HELM_DEPRECATED

+
+
+

boolean

+
+
+
+

KubeVersion is a SemVer constraint specifying the version of Kubernetes required.

+
+
+

Environment variable: QUARKUS_HELM_KUBE_VERSION

+
+
+

string

+
+
+
+

Specifies the chart type: application or library.

+
+
+

Environment variable: QUARKUS_HELM_TYPE

+
+
+

string

+
+
+
+

Alias of the root element in the generated values file.

+
+
+

Environment variable: QUARKUS_HELM_VALUES_ROOT_ALIAS

+
+
+

string

app

+
+
+
+

Notes template to be generated.

+
+
+

Environment variable: QUARKUS_HELM_NOTES

+
+
+

string

/NOTES.template.txt

+
+
+
+

Extension of the Helm tarball file. Default is tar.gz.

+
+
+

Environment variable: QUARKUS_HELM_EXTENSION

+
+
+

string

tar.gz

+
+
+
+

Classifier to be appended into the generated Helm tarball file.

+
+
+

Environment variable: QUARKUS_HELM_TAR_FILE_CLASSIFIER

+
+
+

string

+
+
+
+

If Helm tar file is generated.

+
+
+

Environment variable: QUARKUS_HELM_CREATE_TAR_FILE

+
+
+

boolean

false

+
+
+
+

Whether to generate the values.schema.json file that is used to validate the Helm Chart input values.

+
+
+

Environment variable: QUARKUS_HELM_CREATE_VALUES_SCHEMA_FILE

+
+
+

boolean

true

+
+
+
+

Whether to generate the README.md file that includes the Chart description and table with the configurable parameters and their default values.

+
+
+

Environment variable: QUARKUS_HELM_CREATE_README_FILE

+
+
+

boolean

true

+
+
+
+

The input folder in which to place the user-defined Helm files. These files will be used as inputs to populate the generated Helm files. At the moment, the supported Helm files are: README.md, LICENSE, values.schema.json, app-readme.md or app-README.md, questions.yml or questions.yaml, the "crds" directory, and requirements.yml or requirements.yaml. Moreover, you can provide a custom values.yaml or Chart.yaml and the content will be merged with the auto-generated configuration. It also supports absolute paths. By default, it will use the folder "src/main/helm".

+
+
+

Environment variable: QUARKUS_HELM_INPUT_DIRECTORY

+
+
+

string

src/main/helm

+
+
+
+

The output folder in which to place the Helm generated folder. The folder is relative to the target output directory in Quarkus that is also configurable using the property quarkus.package.output-directory. It also supports absolute paths. By default, it will be generated in the folder named "helm".

+
+
+

Environment variable: QUARKUS_HELM_OUTPUT_DIRECTORY

+
+
+

string

helm

+
+
+
+

If true, it will perform the upload to a Helm repository.

+
+
+

Environment variable: QUARKUS_HELM_REPOSITORY_PUSH

+
+
+

boolean

false

+
+
+
+

The deployment target to push. Options are: kubernetes, openshift, knative…​

+
+
+

Environment variable: QUARKUS_HELM_REPOSITORY_DEPLOYMENT_TARGET

+
+
+

string

${quarkus.kubernetes.deployment-target}

+
+
+
+

The Helm repository type. Options are: CHARTMUSEUM, ARTIFACTORY, and NEXUS.

+
+
+

Environment variable: QUARKUS_HELM_REPOSITORY_TYPE

+
+
+
+

chartmuseum, artifactory, nexus

+
+
+
+
+

The Helm repository URL.

+
+
+

Environment variable: QUARKUS_HELM_REPOSITORY_URL

+
+
+

string

+
+
+
+

The Helm repository username.

+
+
+

Environment variable: QUARKUS_HELM_REPOSITORY_USERNAME

+
+
+

string

+
+
+
+

The Helm repository password.

+
+
+

Environment variable: QUARKUS_HELM_REPOSITORY_PASSWORD

+
+
+

string

+
+
+
+

If enabled, the extension will check whether there are properties using system properties in the form of ${XXX} and if so, it will expose these properties as env-var values within the generated container resource.

+
+
+

Environment variable: QUARKUS_HELM_MAP_SYSTEM_PROPERTIES

+
+
+

boolean

true

+
+
+
+

If true, the naming validation will be disabled. The naming validation rejects property names that contain "-" characters.

+
+
+

Environment variable: QUARKUS_HELM_DISABLE_NAMING_VALIDATION

+
+
+

boolean

false

+
+
+
+

Configuration for the separator string in the filename of profile specific values files i.e. values.profile.yaml, defaults to "."

+
+
+

Environment variable: QUARKUS_HELM_VALUES_PROFILE_SEPARATOR

+
+
+

string

.

+
+
+
+

Title of the values schema json file.

+
+
+

Environment variable: QUARKUS_HELM_VALUES_SCHEMA_TITLE

+
+
+

string

Values

+
+
+
+

Name of the maintainer.

+
+
+

Environment variable: QUARKUS_HELM_MAINTAINERS__MAINTAINERS__NAME

+
+
+

string

+
+
+
+

Email of the maintainer.

+
+
+

Environment variable: QUARKUS_HELM_MAINTAINERS__MAINTAINERS__EMAIL

+
+
+

string

+
+
+
+

URL profile of the maintainer.

+
+
+

Environment variable: QUARKUS_HELM_MAINTAINERS__MAINTAINERS__URL

+
+
+

string

+
+
+
+

Annotations are additional mappings uninterpreted by Helm, made available for inspection by other applications.

+
+
+

Environment variable: QUARKUS_HELM_ANNOTATIONS

+
+
+

Map<String,String>

+
+
+
+

Name of the dependency.

+
+
+

Environment variable: QUARKUS_HELM_DEPENDENCIES__DEPENDENCIES__NAME

+
+
+

string

+
+
+
+

Version of the dependency.

+
+
+

Environment variable: QUARKUS_HELM_DEPENDENCIES__DEPENDENCIES__VERSION

+
+
+

string

required

+
+
+
+

Repository of the dependency.

+
+
+

Environment variable: QUARKUS_HELM_DEPENDENCIES__DEPENDENCIES__REPOSITORY

+
+
+

string

required

+
+
+
+

Dependency condition. If the property starts with @., then the property won’t be added under the root element in the generated values.yaml file.

+
+
+

Environment variable: QUARKUS_HELM_DEPENDENCIES__DEPENDENCIES__CONDITION

+
+
+

string

+
+
+
+

Dependency tags.

+
+
+

Environment variable: QUARKUS_HELM_DEPENDENCIES__DEPENDENCIES__TAGS

+
+
+

list of string

+
+
+
+

Whether this dependency should be loaded.

+
+
+

Environment variable: QUARKUS_HELM_DEPENDENCIES__DEPENDENCIES__ENABLED

+
+
+

boolean

+
+
+
+

Alias of the dependency.

+
+
+

Environment variable: QUARKUS_HELM_DEPENDENCIES__DEPENDENCIES__ALIAS

+
+
+

string

+
+
+
+

Instruct the application to wait for the service that should be installed as part of this Helm dependency. You can set only a service name or a combination of a service name plus the service port (service:port).

+
+
+

Environment variable: QUARKUS_HELM_DEPENDENCIES__DEPENDENCIES__WAIT_FOR_SERVICE

+
+
+

string

+
+
+
+

If wait for service is set, it will use this image to configure the init-containers within the deployment resource.

+
+
+

Environment variable: QUARKUS_HELM_DEPENDENCIES__DEPENDENCIES__WAIT_FOR_SERVICE_IMAGE

+
+
+

string

busybox:1.34.1

+
+
+
+

If wait for service is set, it will use this command to run the init-containers within the deployment resource.

+
+
+

Environment variable: QUARKUS_HELM_DEPENDENCIES__DEPENDENCIES__WAIT_FOR_SERVICE_PORT_COMMAND_TEMPLATE

+
+
+

string

for i in $(seq 1 200); do nc -z -w3 ::service-name ::service-port && exit 0; done; exit 1

+
+
+
+

If wait for service is set, it will use this command to run the init-containers within the deployment resource.

+
+
+

Environment variable: QUARKUS_HELM_DEPENDENCIES__DEPENDENCIES__WAIT_FOR_SERVICE_ONLY_COMMAND_TEMPLATE

+
+
+

string

until nslookup ::service-name; do echo waiting for service; sleep 2; done

+
+
+
+

The name of the property that will be present in the Helm values file. If the property starts with @., then the property won’t be added under the root element in the generated values.yaml file.

+
+
+

Environment variable: QUARKUS_HELM_VALUES__VALUES__PROPERTY

+
+
+

string

+
+
+
+

A comma-separated list of YAMLPath expressions to map the Dekorate auto-generated properties to the final Helm values file.

+
+
+

Environment variable: QUARKUS_HELM_VALUES__VALUES__PATHS

+
+
+

list of string

+
+
+
+

The profile where this value reference will be mapped to. For example, if the profile is dev, then a values.dev.yml file will be created with the value.

+
+
+

Environment variable: QUARKUS_HELM_VALUES__VALUES__PROFILE

+
+
+

string

+
+
+
+

The value that the property will have in the Helm values file. If not set, the extension will resolve it from the generated artifacts.

+
+
+

Environment variable: QUARKUS_HELM_VALUES__VALUES__VALUE

+
+
+

string

+
+
+
+

The integer value that the property will have in the Helm values file. If not set, the extension will resolve it from the generated artifacts.

+
+
+

Environment variable: QUARKUS_HELM_VALUES__VALUES__VALUE_AS_INT

+
+
+

int

+
+
+
+

The boolean value that the property will have in the Helm values file. If not set, the extension will resolve it from the generated artifacts.

+
+
+

Environment variable: QUARKUS_HELM_VALUES__VALUES__VALUE_AS_BOOL

+
+
+

boolean

+
+
+
+

The map value that the property will have in the Helm values file. If not set, the extension will resolve it from the generated artifacts.

+
+
+

Environment variable: QUARKUS_HELM_VALUES__VALUES__VALUE_AS_MAP

+
+
+

Map<String,String>

+
+
+
+

A list separated by comma that the property will have in the Helm values file. If not set, the extension will resolve it from the generated artifacts.

+
+
+

Environment variable: QUARKUS_HELM_VALUES__VALUES__VALUE_AS_LIST

+
+
+

list of string

+
+
+
+

If not provided, it will use {{ .Values.. }}.

+
+
+

Environment variable: QUARKUS_HELM_VALUES__VALUES__EXPRESSION

+
+
+

string

+
+
+
+

Description of the property.

+
+
+

Environment variable: QUARKUS_HELM_VALUES__VALUES__DESCRIPTION

+
+
+

string

+
+
+
+

Minimum value allowed for this property.

+
+
+

Environment variable: QUARKUS_HELM_VALUES__VALUES__MINIMUM

+
+
+

int

+
+
+
+

Maximum value allowed for this property.

+
+
+

Environment variable: QUARKUS_HELM_VALUES__VALUES__MAXIMUM

+
+
+

int

+
+
+
+

Pattern to validate the value of this property.

+
+
+

Environment variable: QUARKUS_HELM_VALUES__VALUES__PATTERN

+
+
+

string

+
+
+
+

If true, then this property is mandatory.

+
+
+

Environment variable: QUARKUS_HELM_VALUES__VALUES__REQUIRED

+
+
+

boolean

false

+
+
+
+

The YAMLPath path where to include the template within the resource.

+
+
+

Environment variable: QUARKUS_HELM_EXPRESSIONS__EXPRESSIONS__PATH

+
+
+

string

required

+
+
+
+

The expression template to include.

+
+
+

Environment variable: QUARKUS_HELM_EXPRESSIONS__EXPRESSIONS__EXPRESSION

+
+
+

string

required

+
+
+
+

The property to use in the if statement. If the property starts with @., then the property won’t be added under the root element in the generated values.yaml file.

+
+
+

Environment variable: QUARKUS_HELM_ADD_IF_STATEMENT__ADD_IF_STATEMENT__PROPERTY

+
+
+

string

+
+
+
+

The resource kind where to include the if statement.

+
+
+

Environment variable: QUARKUS_HELM_ADD_IF_STATEMENT__ADD_IF_STATEMENT__ON_RESOURCE_KIND

+
+
+

string

+
+
+
+

The resource kind where to include the if statement.

+
+
+

Environment variable: QUARKUS_HELM_ADD_IF_STATEMENT__ADD_IF_STATEMENT__ON_RESOURCE_NAME

+
+
+

string

+
+
+
+

The default value of the property

+
+
+

Environment variable: QUARKUS_HELM_ADD_IF_STATEMENT__ADD_IF_STATEMENT__WITH_DEFAULT_VALUE

+
+
+

boolean

true

+
+
+
+

Provide custom description of the add-if-statement property.

+
+
+

Environment variable: QUARKUS_HELM_ADD_IF_STATEMENT__ADD_IF_STATEMENT__DESCRIPTION

+
+
+

string

Determine if the resource should be installed or not.

+
+
+
+

Name of the property to add or update. Example: app.replicas.

+
+
+

Environment variable: QUARKUS_HELM_VALUES_SCHEMA_PROPERTIES__PROPERTIES__NAME

+
+
+

string

+
+
+
+

Description of the property.

+
+
+

Environment variable: QUARKUS_HELM_VALUES_SCHEMA_PROPERTIES__PROPERTIES__DESCRIPTION

+
+
+

string

+
+
+
+

Type of the property.

+
+
+

Environment variable: QUARKUS_HELM_VALUES_SCHEMA_PROPERTIES__PROPERTIES__TYPE

+
+
+

string

string

+
+
+
+

Minimum value allowed for this property.

+
+
+

Environment variable: QUARKUS_HELM_VALUES_SCHEMA_PROPERTIES__PROPERTIES__MINIMUM

+
+
+

int

+
+
+
+

Maximum value allowed for this property.

+
+
+

Environment variable: QUARKUS_HELM_VALUES_SCHEMA_PROPERTIES__PROPERTIES__MAXIMUM

+
+
+

int

+
+
+
+

Pattern to validate the value of this property.

+
+
+

Environment variable: QUARKUS_HELM_VALUES_SCHEMA_PROPERTIES__PROPERTIES__PATTERN

+
+
+

string

+
+
+
+

If true, then this property is mandatory.

+
+
+

Environment variable: QUARKUS_HELM_VALUES_SCHEMA_PROPERTIES__PROPERTIES__REQUIRED

+
+
+

boolean

false

+
+
+
+

References

+
+
+ +
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-hibernate-search-extras/1.x/includes/attributes.html b/quarkus-hibernate-search-extras/1.x/includes/attributes.html new file mode 100644 index 0000000000..64f7406198 --- /dev/null +++ b/quarkus-hibernate-search-extras/1.x/includes/attributes.html @@ -0,0 +1,921 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-hibernate-search-extras/1.x/includes/quarkus-hibernate-search-orm-elasticsearch-aws.html b/quarkus-hibernate-search-extras/1.x/includes/quarkus-hibernate-search-orm-elasticsearch-aws.html new file mode 100644 index 0000000000..ec212db9bb --- /dev/null +++ b/quarkus-hibernate-search-extras/1.x/includes/quarkus-hibernate-search-orm-elasticsearch-aws.html @@ -0,0 +1,2243 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Whether requests should be signed using the AWS credentials.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_SIGNING_ENABLED

+
+
+

boolean

false

+
+
+
+

An Amazon Web Services region that hosts the Elasticsearch service.

+
+
+

Must be provided if signing is enabled; the region won’t be automatically detected.

+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

+
+
+
+

Whether requests should be signed using the AWS credentials.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_SIGNING_ENABLED

+
+
+

boolean

false

+
+
+
+

An Amazon Web Services region that hosts the Elasticsearch service.

+
+
+

Must be provided if signing is enabled; the region won’t be automatically detected.

+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

+
+
+
+

Whether requests should be signed using the AWS credentials.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_SIGNING_ENABLED

+
+
+

boolean

false

+
+
+
+

An Amazon Web Services region that hosts the Elasticsearch service.

+
+
+

Must be provided if signing is enabled; the region won’t be automatically detected.

+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

+
+
+
+

Whether requests should be signed using the AWS credentials.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_SIGNING_ENABLED

+
+
+

boolean

false

+
+
+
+

An Amazon Web Services region that hosts the Elasticsearch service.

+
+
+

Must be provided if signing is enabled; the region won’t be automatically detected.

+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain. +Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain. +Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain. +Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain. +Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider. +If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

+
+
+
+

The name of the profile that should be used by this credentials provider. +If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

+
+
+
+

The name of the profile that should be used by this credentials provider. +If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

+
+
+
+

The name of the profile that should be used by this credentials provider. +If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed. +This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed. +This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed. +This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed. +This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-hibernate-search-extras/1.x/index.html b/quarkus-hibernate-search-extras/1.x/index.html new file mode 100644 index 0000000000..b9a83ad659 --- /dev/null +++ b/quarkus-hibernate-search-extras/1.x/index.html @@ -0,0 +1,2332 @@ + + + + + + Quarkus Hibernate Search Extras :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Hibernate Search Extras

+
+
+
+

This set of extensions provides various extra features for the Quarkus Hibernate Search integration.

+
+
+
+
+

Compatibility

+
+
+

Quarkus Hibernate Search Extras provides different version streams for different versions of Quarkus.

+
+
+

Refer to the README on the main branch +to pick the appropriate version for your application.

+
+
+
+
+

AWS Integration

+
+
+

AWS request signing

+
+

If you need to use Amazon’s managed Elasticsearch service, +you will find it requires a proprietary authentication method involving request signing.

+
+
+

To enable AWS request signing in Hibernate Search, an additional extension is required:

+
+
+
+
./mvnw quarkus:add-extension -Dextensions="hibernate-search-orm-elasticsearch-aws"
+
+
+
+

Once the extension is there, you will need some more configuration:

+
+
+ +
+
+

For example:

+
+
+
+
quarkus.hibernate-search-orm.elasticsearch.aws.region=us-east-1
+quarkus.hibernate-search-orm.elasticsearch.aws.signing.enabled=true
+
+
+
+

Or, if credentials are not available in the application environment (AWS instance role, …​):

+
+
+
+
quarkus.hibernate-search-orm.elasticsearch.aws.region=us-east-1
+quarkus.hibernate-search-orm.elasticsearch.aws.signing.enabled=true
+quarkus.hibernate-search-orm.elasticsearch.aws.credentials.type=static
+quarkus.hibernate-search-orm.elasticsearch.aws.credentials.static-provider.access-key-id=AKIDEXAMPLE
+quarkus.hibernate-search-orm.elasticsearch.aws.credentials.static-provider.secret-access-key=wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY
+
+
+
+
+

AWS Integration Configuration Reference

+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Whether requests should be signed using the AWS credentials.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_SIGNING_ENABLED

+
+
+

boolean

false

+
+
+
+

An Amazon Web Services region that hosts the Elasticsearch service.

+
+
+

Must be provided if signing is enabled; the region won’t be automatically detected.

+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

+
+
+
+

Whether requests should be signed using the AWS credentials.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_SIGNING_ENABLED

+
+
+

boolean

false

+
+
+
+

An Amazon Web Services region that hosts the Elasticsearch service.

+
+
+

Must be provided if signing is enabled; the region won’t be automatically detected.

+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

+
+
+
+

Whether requests should be signed using the AWS credentials.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_SIGNING_ENABLED

+
+
+

boolean

false

+
+
+
+

An Amazon Web Services region that hosts the Elasticsearch service.

+
+
+

Must be provided if signing is enabled; the region won’t be automatically detected.

+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

+
+
+
+

Whether requests should be signed using the AWS credentials.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_SIGNING_ENABLED

+
+
+

boolean

false

+
+
+
+

An Amazon Web Services region that hosts the Elasticsearch service.

+
+
+

Must be provided if signing is enabled; the region won’t be automatically detected.

+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain. +Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain. +Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain. +Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain. +Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider. +If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

+
+
+
+

The name of the profile that should be used by this credentials provider. +If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

+
+
+
+

The name of the profile that should be used by this credentials provider. +If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

+
+
+
+

The name of the profile that should be used by this credentials provider. +If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed. +This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed. +This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed. +This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed. +This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-hibernate-search-extras/2.x/includes/attributes.html b/quarkus-hibernate-search-extras/2.x/includes/attributes.html new file mode 100644 index 0000000000..be4031b59d --- /dev/null +++ b/quarkus-hibernate-search-extras/2.x/includes/attributes.html @@ -0,0 +1,921 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-hibernate-search-extras/2.x/includes/quarkus-hibernate-search-orm-elasticsearch-aws.html b/quarkus-hibernate-search-extras/2.x/includes/quarkus-hibernate-search-orm-elasticsearch-aws.html new file mode 100644 index 0000000000..8a49edef24 --- /dev/null +++ b/quarkus-hibernate-search-extras/2.x/includes/quarkus-hibernate-search-orm-elasticsearch-aws.html @@ -0,0 +1,2243 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Whether requests should be signed using the AWS credentials.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_SIGNING_ENABLED

+
+
+

boolean

false

+
+
+
+

An Amazon Web Services region that hosts the Elasticsearch service.

+
+
+

Must be provided if signing is enabled; the region won’t be automatically detected.

+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

+
+
+
+

Whether requests should be signed using the AWS credentials.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_SIGNING_ENABLED

+
+
+

boolean

false

+
+
+
+

An Amazon Web Services region that hosts the Elasticsearch service.

+
+
+

Must be provided if signing is enabled; the region won’t be automatically detected.

+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

+
+
+
+

Whether requests should be signed using the AWS credentials.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_SIGNING_ENABLED

+
+
+

boolean

false

+
+
+
+

An Amazon Web Services region that hosts the Elasticsearch service.

+
+
+

Must be provided if signing is enabled; the region won’t be automatically detected.

+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

+
+
+
+

Whether requests should be signed using the AWS credentials.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_SIGNING_ENABLED

+
+
+

boolean

false

+
+
+
+

An Amazon Web Services region that hosts the Elasticsearch service.

+
+
+

Must be provided if signing is enabled; the region won’t be automatically detected.

+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain. +Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain. +Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain. +Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain. +Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider. +If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

+
+
+
+

The name of the profile that should be used by this credentials provider. +If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

+
+
+
+

The name of the profile that should be used by this credentials provider. +If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

+
+
+
+

The name of the profile that should be used by this credentials provider. +If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed. +This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed. +This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed. +This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed. +This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-hibernate-search-extras/2.x/index.html b/quarkus-hibernate-search-extras/2.x/index.html new file mode 100644 index 0000000000..a0abe797ce --- /dev/null +++ b/quarkus-hibernate-search-extras/2.x/index.html @@ -0,0 +1,2332 @@ + + + + + + Quarkus Hibernate Search Extras :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Hibernate Search Extras

+
+
+
+

This set of extensions provides various extra features for the Quarkus Hibernate Search integration.

+
+
+
+
+

Compatibility

+
+
+

Quarkus Hibernate Search Extras provides different version streams for different versions of Quarkus.

+
+
+

Refer to the README on the main branch +to pick the appropriate version for your application.

+
+
+
+
+

AWS Integration

+
+
+

AWS request signing

+
+

If you need to use Amazon’s managed Elasticsearch service, +you will find it requires a proprietary authentication method involving request signing.

+
+
+

To enable AWS request signing in Hibernate Search, an additional extension is required:

+
+
+
+
./mvnw quarkus:add-extension -Dextensions="hibernate-search-orm-elasticsearch-aws"
+
+
+
+

Once the extension is there, you will need some more configuration:

+
+
+ +
+
+

For example:

+
+
+
+
quarkus.hibernate-search-orm.elasticsearch.aws.region=us-east-1
+quarkus.hibernate-search-orm.elasticsearch.aws.signing.enabled=true
+
+
+
+

Or, if credentials are not available in the application environment (AWS instance role, …​):

+
+
+
+
quarkus.hibernate-search-orm.elasticsearch.aws.region=us-east-1
+quarkus.hibernate-search-orm.elasticsearch.aws.signing.enabled=true
+quarkus.hibernate-search-orm.elasticsearch.aws.credentials.type=static
+quarkus.hibernate-search-orm.elasticsearch.aws.credentials.static-provider.access-key-id=AKIDEXAMPLE
+quarkus.hibernate-search-orm.elasticsearch.aws.credentials.static-provider.secret-access-key=wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY
+
+
+
+
+

AWS Integration Configuration Reference

+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Whether requests should be signed using the AWS credentials.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_SIGNING_ENABLED

+
+
+

boolean

false

+
+
+
+

An Amazon Web Services region that hosts the Elasticsearch service.

+
+
+

Must be provided if signing is enabled; the region won’t be automatically detected.

+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

+
+
+
+

Whether requests should be signed using the AWS credentials.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_SIGNING_ENABLED

+
+
+

boolean

false

+
+
+
+

An Amazon Web Services region that hosts the Elasticsearch service.

+
+
+

Must be provided if signing is enabled; the region won’t be automatically detected.

+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

+
+
+
+

Whether requests should be signed using the AWS credentials.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_SIGNING_ENABLED

+
+
+

boolean

false

+
+
+
+

An Amazon Web Services region that hosts the Elasticsearch service.

+
+
+

Must be provided if signing is enabled; the region won’t be automatically detected.

+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

+
+
+
+

Whether requests should be signed using the AWS credentials.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_SIGNING_ENABLED

+
+
+

boolean

false

+
+
+
+

An Amazon Web Services region that hosts the Elasticsearch service.

+
+
+

Must be provided if signing is enabled; the region won’t be automatically detected.

+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_REGION

+
+
+

Region

+
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain. +Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain. +Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain. +Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether this provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain. +Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

+
+
+
+

AWS Access key id

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_STATIC_PROVIDER_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret access key

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_STATIC_PROVIDER_SECRET_ACCESS_KEY

+
+
+

string

+
+
+
+

AWS Session token

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_STATIC_PROVIDER_SESSION_TOKEN

+
+
+

string

AWS Profile credentials provider configuration

Type

Default

+
+
+
+

The name of the profile that should be used by this credentials provider. +If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

+
+
+
+

The name of the profile that should be used by this credentials provider. +If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

+
+
+
+

The name of the profile that should be used by this credentials provider. +If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

+
+
+
+

The name of the profile that should be used by this credentials provider. +If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed. +This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed. +This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed. +This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

+
+
+
+

Whether the provider should fetch credentials asynchronously in the background. +If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed. +This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

+
+
+
+

The maximum size of the output that can be returned by the external process before an exception is raised.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_PROCESS_PROVIDER_PROCESS_OUTPUT_LIMIT

+
+
+

MemorySize

1024

+
+
+
+

The command that should be executed to retrieve credentials.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_PROCESS_PROVIDER_COMMAND

+
+
+

string

Custom credentials provider configuration

Type

Default

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

+
+
+
+

The name of custom AwsCredentialsProvider bean.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM__PERSISTENCE_UNIT_NAME__ELASTICSEARCH_BACKENDS__BACKEND_NAME__AWS_CREDENTIALS_CUSTOM_PROVIDER_NAME

+
+
+

string

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-hibernate-search-extras/3.x/includes/attributes.html b/quarkus-hibernate-search-extras/3.x/includes/attributes.html new file mode 100644 index 0000000000..e4e0b183e4 --- /dev/null +++ b/quarkus-hibernate-search-extras/3.x/includes/attributes.html @@ -0,0 +1,921 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-hibernate-search-extras/3.x/includes/quarkus-hibernate-search-orm-elasticsearch-aws.html b/quarkus-hibernate-search-extras/3.x/includes/quarkus-hibernate-search-orm-elasticsearch-aws.html new file mode 100644 index 0000000000..31e32a850b --- /dev/null +++ b/quarkus-hibernate-search-extras/3.x/includes/quarkus-hibernate-search-orm-elasticsearch-aws.html @@ -0,0 +1,1467 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

boolean

false

+ + + +
+
+
+

An Amazon Web Services region that hosts the Elasticsearch service.

+
+
+

Must be provided if signing is enabled; the region won’t be automatically detected.

+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_REGION

+
+
+

Region

+ + + +
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+ + + +
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+ + + +
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

string

string

string

AWS Profile credentials provider configuration

Type

Default

+ + + +
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+ + + +
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+ + + +
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

MemorySize

1024

string

Custom credentials provider configuration

Type

Default

string

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() javadoc for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-hibernate-search-extras/3.x/index.html b/quarkus-hibernate-search-extras/3.x/index.html new file mode 100644 index 0000000000..87acfbf1ff --- /dev/null +++ b/quarkus-hibernate-search-extras/3.x/index.html @@ -0,0 +1,1556 @@ + + + + + + Quarkus Hibernate Search Extras :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Hibernate Search Extras

+
+
+
+

This set of extensions provides various extra features for the Quarkus Hibernate Search integration.

+
+
+
+
+

Compatibility

+
+
+

Quarkus Hibernate Search Extras provides different version streams for different versions of Quarkus.

+
+
+

Refer to the README on the main branch +to pick the appropriate version for your application.

+
+
+
+
+

AWS Integration

+
+
+

AWS request signing

+
+

If you need to use Amazon’s managed Elasticsearch service, +you will find it requires a proprietary authentication method involving request signing.

+
+
+

To enable AWS request signing in Hibernate Search, an additional extension is required:

+
+
+
+
./mvnw quarkus:add-extension -Dextensions="hibernate-search-orm-elasticsearch-aws"
+
+
+
+

Once the extension is there, you will need some more configuration:

+
+
+ +
+
+

For example:

+
+
+
+
quarkus.hibernate-search-orm.elasticsearch.aws.region=us-east-1
+quarkus.hibernate-search-orm.elasticsearch.aws.signing.enabled=true
+
+
+
+

Or, if credentials are not available in the application environment (AWS instance role, …​):

+
+
+
+
quarkus.hibernate-search-orm.elasticsearch.aws.region=us-east-1
+quarkus.hibernate-search-orm.elasticsearch.aws.signing.enabled=true
+quarkus.hibernate-search-orm.elasticsearch.aws.credentials.type=static
+quarkus.hibernate-search-orm.elasticsearch.aws.credentials.static-provider.access-key-id=AKIDEXAMPLE
+quarkus.hibernate-search-orm.elasticsearch.aws.credentials.static-provider.secret-access-key=wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY
+
+
+
+
+

AWS Integration Configuration Reference

+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

boolean

false

+ + + +
+
+
+

An Amazon Web Services region that hosts the Elasticsearch service.

+
+
+

Must be provided if signing is enabled; the region won’t be automatically detected.

+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_REGION

+
+
+

Region

+ + + +
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+ + + +
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+ + + +
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

string

string

string

AWS Profile credentials provider configuration

Type

Default

+ + + +
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+ + + +
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+ + + +
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

MemorySize

1024

string

Custom credentials provider configuration

Type

Default

string

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() javadoc for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-hibernate-search-extras/dev/includes/attributes.html b/quarkus-hibernate-search-extras/dev/includes/attributes.html new file mode 100644 index 0000000000..2af705c9d7 --- /dev/null +++ b/quarkus-hibernate-search-extras/dev/includes/attributes.html @@ -0,0 +1,921 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-hibernate-search-extras/dev/includes/quarkus-hibernate-search-orm-elasticsearch-aws.html b/quarkus-hibernate-search-extras/dev/includes/quarkus-hibernate-search-orm-elasticsearch-aws.html new file mode 100644 index 0000000000..fee080e3b0 --- /dev/null +++ b/quarkus-hibernate-search-extras/dev/includes/quarkus-hibernate-search-orm-elasticsearch-aws.html @@ -0,0 +1,1467 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

boolean

false

+ + + +
+
+
+

An Amazon Web Services region that hosts the Elasticsearch service.

+
+
+

Must be provided if signing is enabled; the region won’t be automatically detected.

+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_REGION

+
+
+

Region

+ + + +
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+ + + +
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+ + + +
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

string

string

string

AWS Profile credentials provider configuration

Type

Default

+ + + +
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+ + + +
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+ + + +
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

MemorySize

1024

string

Custom credentials provider configuration

Type

Default

string

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() javadoc for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-hibernate-search-extras/dev/index.html b/quarkus-hibernate-search-extras/dev/index.html new file mode 100644 index 0000000000..6f1da9a62e --- /dev/null +++ b/quarkus-hibernate-search-extras/dev/index.html @@ -0,0 +1,1556 @@ + + + + + + Quarkus Hibernate Search Extras :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Hibernate Search Extras

+
+
+
+

This set of extensions provides various extra features for the Quarkus Hibernate Search integration.

+
+
+
+
+

Compatibility

+
+
+

Quarkus Hibernate Search Extras provides different version streams for different versions of Quarkus.

+
+
+

Refer to the README on the main branch +to pick the appropriate version for your application.

+
+
+
+
+

AWS Integration

+
+
+

AWS request signing

+
+

If you need to use Amazon’s managed Elasticsearch service, +you will find it requires a proprietary authentication method involving request signing.

+
+
+

To enable AWS request signing in Hibernate Search, an additional extension is required:

+
+
+
+
./mvnw quarkus:add-extension -Dextensions="hibernate-search-orm-elasticsearch-aws"
+
+
+
+

Once the extension is there, you will need some more configuration:

+
+
+ +
+
+

For example:

+
+
+
+
quarkus.hibernate-search-orm.elasticsearch.aws.region=us-east-1
+quarkus.hibernate-search-orm.elasticsearch.aws.signing.enabled=true
+
+
+
+

Or, if credentials are not available in the application environment (AWS instance role, …​):

+
+
+
+
quarkus.hibernate-search-orm.elasticsearch.aws.region=us-east-1
+quarkus.hibernate-search-orm.elasticsearch.aws.signing.enabled=true
+quarkus.hibernate-search-orm.elasticsearch.aws.credentials.type=static
+quarkus.hibernate-search-orm.elasticsearch.aws.credentials.static-provider.access-key-id=AKIDEXAMPLE
+quarkus.hibernate-search-orm.elasticsearch.aws.credentials.static-provider.secret-access-key=wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY
+
+
+
+
+

AWS Integration Configuration Reference

+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

boolean

false

+ + + +
+
+
+

An Amazon Web Services region that hosts the Elasticsearch service.

+
+
+

Must be provided if signing is enabled; the region won’t be automatically detected.

+
+
+

See software.amazon.awssdk.regions.Region for available regions.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_REGION

+
+
+

Region

+ + + +
+
+
+

Configure the credentials provider that should be used to authenticate with AWS.

+
+
+

Available values:

+
+
+
    +
  • +

    default - the provider will attempt to identify the credentials automatically using the following checks:

    +
    +
      +
    • +

      Java System Properties - aws.accessKeyId and aws.secretAccessKey

      +
    • +
    • +

      Environment Variables - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY

      +
    • +
    • +

      Credential profiles file at the default location (~/.aws/credentials) shared by all AWS SDKs and the AWS CLI

      +
    • +
    • +

      Credentials delivered through the Amazon EC2 container service if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable is set and security manager has permission to access the variable.

      +
    • +
    • +

      Instance profile credentials delivered through the Amazon EC2 metadata service

      +
    • +
    +
    +
  • +
  • +

    static - the provider that uses the access key and secret access key specified in the static-provider section of the config.

    +
  • +
  • +

    system-property - it loads credentials from the aws.accessKeyId, aws.secretAccessKey and aws.sessionToken system properties.

    +
  • +
  • +

    env-variable - it loads credentials from the AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_SESSION_TOKEN environment variables.

    +
  • +
  • +

    profile - credentials are based on AWS configuration profiles. This loads credentials from +a profile file, +allowing you to share multiple sets of AWS security credentials between different tools like the AWS SDK for Java and the AWS CLI.

    +
  • +
  • +

    container - It loads credentials from a local metadata service. Containers currently supported by the AWS SDK are +Amazon Elastic Container Service (ECS) and AWS Greengrass

    +
  • +
  • +

    instance-profile - It loads credentials from the Amazon EC2 Instance Metadata Service.

    +
  • +
  • +

    process - Credentials are loaded from an external process. This is used to support the credential_process setting in the profile +credentials file. See Sourcing Credentials From External Processes +for more information.

    +
  • +
  • +

    anonymous - It always returns anonymous AWS credentials. Anonymous AWS credentials result in un-authenticated requests and will +fail unless the resource or API’s policy has been configured to specifically allow anonymous access.

    +
  • +
+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_TYPE

+
+
+
+

default, static, system-property, env-variable, profile, container, instance-profile, process, custom, anonymous

+

default

Default credentials provider configuration

Type

Default

+ + + +
+
+
+

Whether this provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_DEFAULT_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+ + + +
+
+
+

Whether the provider should reuse the last successful credentials provider in the chain.

+
+
+

Reusing the last successful credentials provider will typically return credentials faster than searching through the chain.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_DEFAULT_PROVIDER_REUSE_LAST_PROVIDER_ENABLED

+
+
+

boolean

true

Static credentials provider configuration

Type

Default

string

string

string

AWS Profile credentials provider configuration

Type

Default

+ + + +
+
+
+

The name of the profile that should be used by this credentials provider.

+
+
+

If not specified, the value in AWS_PROFILE environment variable or aws.profile system property is used and defaults to default name.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_PROFILE_PROVIDER_PROFILE_NAME

+
+
+

string

Process credentials provider configuration

Type

Default

+ + + +
+
+
+

Whether the provider should fetch credentials asynchronously in the background.

+
+
+

If this is true, threads are less likely to block when credentials are loaded, but additional resources are used to maintain the provider.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_PROCESS_PROVIDER_ASYNC_CREDENTIAL_UPDATE_ENABLED

+
+
+

boolean

false

+ + + +
+
+
+

The amount of time between when the credentials expire and when the credentials should start to be refreshed.

+
+
+

This allows the credentials to be refreshed *before* they are reported to expire.

+
+
+

Environment variable: QUARKUS_HIBERNATE_SEARCH_ORM_ELASTICSEARCH_AWS_CREDENTIALS_PROCESS_PROVIDER_CREDENTIAL_REFRESH_THRESHOLD

+
+
+

Duration +

15S

MemorySize

1024

string

Custom credentials provider configuration

Type

Default

string

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() javadoc for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+ + + + + +
+ + +
About the MemorySize format
+
+

A size configuration option recognises string in this format (shown as a regular expression): [0-9]+[KkMmGgTtPpEeZzYy]?. +If no suffix is given, assume bytes.

+
+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-hibernate-types/dev/config.html b/quarkus-hibernate-types/dev/config.html new file mode 100644 index 0000000000..ada724e35e --- /dev/null +++ b/quarkus-hibernate-types/dev/config.html @@ -0,0 +1,916 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

+
+ +
+
+
+
+
+ + + + + + + diff --git a/quarkus-hibernate-types/dev/includes/attributes.html b/quarkus-hibernate-types/dev/includes/attributes.html new file mode 100644 index 0000000000..7afef68591 --- /dev/null +++ b/quarkus-hibernate-types/dev/includes/attributes.html @@ -0,0 +1,912 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-hibernate-types/dev/index.html b/quarkus-hibernate-types/dev/index.html new file mode 100644 index 0000000000..cd9b920091 --- /dev/null +++ b/quarkus-hibernate-types/dev/index.html @@ -0,0 +1,951 @@ + + + + + + Quarkus Hibernate types :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Hibernate types

+
+
+
+

Quarkus Hibernate types extension is based on the https://github.com/vladmihalcea/hibernate-types.

+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the quarkiverse-hibernate-types extension first. +In your pom.xml file, add:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.hibernate</groupId>
+    <artifactId>quarkus-hibernate-types</artifactId>
+    <version>0.1.0</version>
+</dependency>
+
+
+
+
+
+

Extension Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

+
+ +
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-hivemq-client/dev/config-reference.html b/quarkus-hivemq-client/dev/config-reference.html new file mode 100644 index 0000000000..d115c28bb9 --- /dev/null +++ b/quarkus-hivemq-client/dev/config-reference.html @@ -0,0 +1,1133 @@ + + + + + + Quarkus HiveMQ - Configuration Reference :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus HiveMQ - Configuration Reference

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

Configuration property

Type

Default

Direction

+

reconnect-attempts

+
+
+
+
+

Set the max reconnect attempts.

+
+
+

int

5

INCOMING_AND_OUTGOING

+

reconnect-interval-seconds

+
+
+
+
+

Set the reconnect interval in seconds.

+
+
+

string

INCOMING_AND_OUTGOING

+

check-topic-enabled

+
+
+
+
+

Enable check for liveness/readiness.

+
+
+

boolean

false

INCOMING_AND_OUTGOING

+

check-topic-name

+
+
+
+
+

Topic Used to check liveness/readiness.

+
+
+

string

$SYS/broker/uptime

INCOMING_AND_OUTGOING

+

readiness-timeout

+
+
+
+
+

Timeout to declare the MQTT Client not ready (in ms).

+
+
+

int

20000

INCOMING_AND_OUTGOING

+

liveness-timeout

+
+
+
+
+

Timeout to declare the MQTT Client not alive.

+
+
+

int

120000

INCOMING_AND_OUTGOING

+

ssl.keystore.type

+
+
+
+
+

Set the keystore type

+
+
+

string

jks

INCOMING_AND_OUTGOING

+

ssl.keystore.location

+
+
+
+
+

Set the keystore location. In case of pem type this is the cert path

+
+
+

string

INCOMING_AND_OUTGOING

+

ssl.keystore.password

+
+
+
+
+

"Set the keystore password. In case of pem type this is not necessary

+
+
+

string

INCOMING_AND_OUTGOING

+

ssl.truststore.type

+
+
+
+
+

Set the truststore type

+
+
+

string

jks

INCOMING_AND_OUTGOING

+

ssl.truststore.location

+
+
+
+
+

Set the truststore location. In case of pem type this is the cert path

+
+
+

string

INCOMING_AND_OUTGOING

+

ssl.truststore.password

+
+
+
+
+

"Set the truststore password. In case of pem type this is not necessary

+
+
+

string

INCOMING_AND_OUTGOING

+
+
+
+
+ + + + + + + diff --git a/quarkus-hivemq-client/dev/includes/attributes.html b/quarkus-hivemq-client/dev/includes/attributes.html new file mode 100644 index 0000000000..a7b83ed3db --- /dev/null +++ b/quarkus-hivemq-client/dev/includes/attributes.html @@ -0,0 +1,933 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-hivemq-client/dev/includes/config.html b/quarkus-hivemq-client/dev/includes/config.html new file mode 100644 index 0000000000..68dfce68a0 --- /dev/null +++ b/quarkus-hivemq-client/dev/includes/config.html @@ -0,0 +1,1128 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Configuration property

Type

Default

Direction

+

reconnect-attempts

+
+
+
+
+

Set the max reconnect attempts.

+
+
+

int

5

INCOMING_AND_OUTGOING

+

reconnect-interval-seconds

+
+
+
+
+

Set the reconnect interval in seconds.

+
+
+

string

INCOMING_AND_OUTGOING

+

check-topic-enabled

+
+
+
+
+

Enable check for liveness/readiness.

+
+
+

boolean

false

INCOMING_AND_OUTGOING

+

check-topic-name

+
+
+
+
+

Topic Used to check liveness/readiness.

+
+
+

string

$SYS/broker/uptime

INCOMING_AND_OUTGOING

+

readiness-timeout

+
+
+
+
+

Timeout to declare the MQTT Client not ready (in ms).

+
+
+

int

20000

INCOMING_AND_OUTGOING

+

liveness-timeout

+
+
+
+
+

Timeout to declare the MQTT Client not alive.

+
+
+

int

120000

INCOMING_AND_OUTGOING

+

ssl.keystore.type

+
+
+
+
+

Set the keystore type

+
+
+

string

jks

INCOMING_AND_OUTGOING

+

ssl.keystore.location

+
+
+
+
+

Set the keystore location. In case of pem type this is the cert path

+
+
+

string

INCOMING_AND_OUTGOING

+

ssl.keystore.password

+
+
+
+
+

"Set the keystore password. In case of pem type this is not necessary

+
+
+

string

INCOMING_AND_OUTGOING

+

ssl.truststore.type

+
+
+
+
+

Set the truststore type

+
+
+

string

jks

INCOMING_AND_OUTGOING

+

ssl.truststore.location

+
+
+
+
+

Set the truststore location. In case of pem type this is the cert path

+
+
+

string

INCOMING_AND_OUTGOING

+

ssl.truststore.password

+
+
+
+
+

"Set the truststore password. In case of pem type this is not necessary

+
+
+

string

INCOMING_AND_OUTGOING

+
+
+
+
+ + + + + + + diff --git a/quarkus-hivemq-client/dev/index.html b/quarkus-hivemq-client/dev/index.html new file mode 100644 index 0000000000..f34ef3a488 --- /dev/null +++ b/quarkus-hivemq-client/dev/index.html @@ -0,0 +1,1215 @@ + + + + + + Getting Started :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Getting Started

+
+
+
+

This extension allows usage of the HiveMQ MQTT Client inside a Quarkus App, in JVM and Native mode.

+
+
+

Together with the "SmallRye Reactive Messaging MQTT" extension allows usage of a new connector type smallrye-mqtt-hivemq that will use HiveMQ Client instead of Vertx MQTT client.

+
+
+

This adds some benefits to the original SmallRye MQTT:

+
+
+
    +
  • +

    Battle tested MQTT Client outside Vertx landscape

    +
  • +
  • +

    Management of external CA file for secure connections with self-signed certificates

    +
  • +
  • +

    Backpressure support integrated with MQTT QOS

    +
  • +
  • +

    Native mode support

    +
  • +
  • +

    DevServices support

    +
  • +
  • +

    Automatic and configurable reconnection handling and message redelivery

    +
  • +
  • +

    Real Health Check against a configurable topic (defaults to the standard MQTT $SYS/broker/uptime) integrated in Quarkus HealthReport

    +
  • +
  • +

    Many others you can read in official documentation here.

    +
  • +
+
+
+
+
+

Matrix compatibility

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

Quarkus-hivemq-client version

Quarkus version

HiveMQ client version

2.1.0

3.7.3

1.3.3

2.0.0

3.6.5

1.3.3

1.1.0

2.16.12.Final

1.3.3

1.0.0

2.16.10.Final

1.3.2

+
+
+
+

Installation

+
+
+

Requirements:

+
+
+
    +
  • +

    Maven 3.8.1+

    +
  • +
  • +

    JDK 17+ installed with JAVA_HOME configured appropriately

    +
  • +
+
+
+

If you want to use this extension, you need to add the io.quarkiverse.hivemqclient:quarkus-hivemq-client extension first to your build file.

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.hivemqclient</groupId>
+    <artifactId>quarkus-hivemq-client</artifactId>
+</dependency>
+
+
+
+

You can do that by running the following command:

+
+
+
+
./mvnw quarkus:add-extension -Dextensions="hivemq"
+
+
+
+ + + + + +
+ + +Keep in mind that you will also need io.quarkus:quarkus-smallrye-reactive-messaging-mqtt as a dependency on your build file as others smallrye reactive messaging APIs +
+
+
+
+
+

Create an application from scratch

+
+
+

You can create a Quarkus application with the HiveMQ-SmallRye extension from scratch by running the following command:

+
+
+
+
mvn io.quarkus:quarkus-maven-plugin:3.7.3:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=hivemq-quickstart \
+    -DclassName="org.acme.quickstart.GreetingResource" \
+    -Dextensions="resteasy-reactive,hivemq,smallrye-reactive-messaging-mqtt"
+
+cd hivemq-quickstart
+
+
+
+
+
+

Usage

+
+
+

Add your channels configuration in src/main/resources/application.properties

+
+
+

Then configure your application by adding the HiveMQ connector type:

+
+
+
+
# Configure the MQTT sink (we write to it)
+mp.messaging.outgoing.topic-price.connector=smallrye-mqtt-hivemq
+mp.messaging.outgoing.topic-price.topic=prices
+mp.messaging.outgoing.topic-price.auto-generated-client-id=true
+
+# Configure the MQTT source (we read from it)
+mp.messaging.incoming.prices.connector=smallrye-mqtt-hivemq
+mp.messaging.incoming.prices.topic=prices
+mp.messaging.incoming.prices.auto-generated-client-id=true
+
+
+
+ + + + + +
+ + +change topic and channels names according to your needs +
+
+
+

And then implement your business logic

+
+
+
+
package incoming;
+
+import org.eclipse.microprofile.reactive.messaging.Incoming;
+
+import jakarta.enterprise.context.ApplicationScoped;
+
+@ApplicationScoped
+public class MqttPriceConsumer {
+
+    @Incoming("prices")
+    public void consume(byte[] raw) {
+        double price = Double.parseDouble(new String(raw));
+
+        // process your price.
+    }
+
+}
+
+
+
+
+
package outgoing;
+
+import org.eclipse.microprofile.reactive.messaging.Outgoing;
+
+import jakarta.enterprise.context.ApplicationScoped;
+
+@ApplicationScoped
+public class PriceGenerator {
+
+    private static final Logger LOG = Logger.getLogger(PriceGenerator.class);
+
+    private Random random = new Random();
+
+    @Outgoing("topic-price")
+    public Multi<Integer> generate() {
+        return Multi.createFrom().ticks().every(Duration.ofSeconds(1))
+                .onOverflow().drop()
+                .map(tick -> {
+                    int price = random.nextInt(100);
+                    LOG.infof("Sending price: %d", price);
+                    return price;
+                });
+    }
+
+}
+
+
+
+ + + + + +
+ + +On the above example, we are pushing events into the channel topic-price (which, based on the application.properties, is pointing to the topic prices). On the other hand, we are consuming these events through the channel prices, which is also pointing to the same topic. +
+
+
+
+
+

Native mode support

+
+
+

There is nothing special on HiveMQ extension that require any additional information than the official one.

+
+
+

Currently, we are using the following images on CI:

+
+
+
+
ubi-quarkus-native-image
+ubi-quarkus-mandrel
+ubi-quarkus-graalvmce-builder-image
+
+
+
+

for example, you can run mvn -V -B -am clean verify -Dnative -Dquarkus.native.builder-image=quay.io/quarkus/ubi-quarkus-mandrel:22.3-java17

+
+
+
+
+

Dev Services

+
+
+

If no outgoing/incoming host/port is defined then Dev Services will launch a default instance and will connect your channels to the HiveMQ broker.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-ironjacamar/dev/includes/attributes.html b/quarkus-ironjacamar/dev/includes/attributes.html new file mode 100644 index 0000000000..b30859dc97 --- /dev/null +++ b/quarkus-ironjacamar/dev/includes/attributes.html @@ -0,0 +1,912 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-ironjacamar/dev/includes/quarkus-ironjacamar.html b/quarkus-ironjacamar/dev/includes/quarkus-ironjacamar.html new file mode 100644 index 0000000000..bf175b2d06 --- /dev/null +++ b/quarkus-ironjacamar/dev/includes/quarkus-ironjacamar.html @@ -0,0 +1,1724 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Whether IronJacamar (pool) metrics are published in case a metrics extension is present.

+
+
+

This is a global setting and is not specific to a resource adapter.

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_METRICS_ENABLED

+
+
+

boolean

false

+ +
+
+
+

The kind of resource adapter.

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_KIND

+
+
+

string

+ +
+
+
+

Enable pool metrics collection. If unspecified, collecting metrics will be enabled by default if a metrics extension is active.

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_POOL_ENABLE_METRICS

+
+
+

boolean

+ +
+
+
+

The configuration for this resource adapter

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CONFIG

+
+
+

Map<String,String>

+ +
+
+
+

The transaction support level for the Connection Manager

+
+
+

See the TransactionSupportLevel Javadoc for more information

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_TRANSACTION_SUPPORT_LEVEL

+
+
+
+

no-transaction, local-transaction, xa-transaction

+

xa-transaction

+ +
+
+
+

The number of times to retry the allocation of a connection

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_ALLOCATION_RETRY

+
+
+

int

5

+ +
+
+
+

The time to wait between retries of the allocation of a connection

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_ALLOCATION_RETRY_WAIT

+
+
+

Duration +

1S

+ +
+
+
+

The transaction timeout for the XAResource

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_XA_RESOURCE_TIMEOUT

+
+
+

Duration +

120S

+ +
+
+
+

The flush strategy for the Connection Manager

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_FLUSH_STRATEGY

+
+
+
+

unknown, failing-connection-only, invalid-idle-connections, idle-connections, gracefully, entire-pool, all-invalid-idle-connections, all-idle-connections, all-gracefully, all-connections

+

failing-connection-only

+ +
+
+
+

Whether the connection manager is sharable

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_SHARABLE

+
+
+

boolean

true

+ +
+
+
+

Whether the connection manager should enlist connections

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_ENLISTMENT

+
+
+

boolean

true

+ +
+
+
+

Whether the connection manager should be connectable

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_CONNECTABLE

+
+
+

boolean

false

+ +
+
+
+

Whether the connection manager should track connections

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_TRACKING

+
+
+

boolean

+ +
+
+
+

Whether the connection manager should use CCM

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_USE_CCM

+
+
+

boolean

true

+ +
+
+
+

Whether the connection manager should use interleaving

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_INTERLEAVING

+
+
+

boolean

false

+ +
+
+
+

Whether the connection manager should use same RM override

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_IS_SAME_RM_OVERRIDE

+
+
+

boolean

+ +
+
+
+

Whether the connection manager should wrap the XAResource

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_WRAP_XA_RESOURCE

+
+
+

boolean

true

+ +
+
+
+

Whether the connection manager should pad the XID

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_PAD_XID

+
+
+

boolean

false

+ +
+
+
+

The recovery username for the Connection Manager

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_RECOVERY_USERNAME

+
+
+

string

+ +
+
+
+

The recovery password for the Connection Manager

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_RECOVERY_PASSWORD

+
+
+

string

+ +
+
+
+

The recovery security domain for the Connection Manager

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_RECOVERY_SECURITY_DOMAIN

+
+
+

string

+ +
+
+
+

The pool strategy

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_POOL_STRATEGY

+
+
+
+

pool-by-cri, pool-by-subject, pool-by-subject-and-cri, one-pool, reauth

+

pool-by-cri

+ +
+
+
+

Minimum size of the pool

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_POOL_CONFIG_MIN_SIZE

+
+
+

int

0

+ +
+
+
+

Initial size of the pool

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_POOL_CONFIG_INITIAL_SIZE

+
+
+

int

+ +
+
+
+

Maximum size of the pool

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_POOL_CONFIG_MAX_SIZE

+
+
+

int

20

+ +
+
+
+

Blocking timeout

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_POOL_CONFIG_BLOCKING_TIMEOUT

+
+
+

Duration +

30000MS

+ +
+
+
+

Idle timeout period. Default 30 mins

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_POOL_CONFIG_IDLE_TIMEOUT_MINUTES

+
+
+

Duration +

30M

+ +
+
+
+

Validate on match validation

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_POOL_CONFIG_VALIDATE_ON_MATCH

+
+
+

boolean

false

+ +
+
+
+

Background validation

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_POOL_CONFIG_BACKGROUND_VALIDATION

+
+
+

boolean

false

+ +
+
+
+

Background validation - millis

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_POOL_CONFIG_BACKGROUND_VALIDATION_MILLIS

+
+
+

Duration +

+ +
+
+
+

Prefill pool

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_POOL_CONFIG_PREFILL

+
+
+

boolean

false

+ +
+
+
+

Strict minimum, default false

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_POOL_CONFIG_STRICT_MIN

+
+
+

boolean

false

+ +
+
+
+

Do we want to immediately break when a connection cannot be matched and not evaluate the rest of the pool?

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_POOL_CONFIG_USE_FAST_FAIL

+
+
+

boolean

false

+ +
+
+
+

Fairness of semaphore permits, default true

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_POOL_CONFIG_FAIR

+
+
+

boolean

true

+ +
+
+
+

Whether the pool is sharable

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_POOL_SHARABLE

+
+
+

boolean

true

+ +
+
+
+

Should the pool be created without a separate pool for non-transactional connections?

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_POOL_NO_TX_SEPARATE_POOL

+
+
+

boolean

false

+ +
+
+
+

The configuration for this resource adapter

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_ACTIVATION_SPEC_CONFIG

+
+
+

Map<String,String>

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() javadoc for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-ironjacamar/dev/index.html b/quarkus-ironjacamar/dev/index.html new file mode 100644 index 0000000000..7387c1a6b5 --- /dev/null +++ b/quarkus-ironjacamar/dev/index.html @@ -0,0 +1,2025 @@ + + + + + + Quarkus IronJacamar :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus IronJacamar

+
+
+
+

This extension allows you to deploy JCA Resource Adapters in Quarkus. +IronJacamar is a Jakarta Connector Architecture (JCA) implementation.

+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.ironjacamar:quarkus-ironjacamar extension first to your build file.

+
+
+

For instance, with Maven, add the following dependency to your POM file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.ironjacamar</groupId>
+    <artifactId>quarkus-ironjacamar</artifactId>
+    <version>1.1.2</version>
+</dependency>
+
+
+
+
+
+

Integration

+
+
+

We recommend you to create a Quarkus extension dedicated for your Resource Adapter. +This will allow you to build your Resource Adapter to native and perform the optimizations needed to run in Quarkus. +If you don’t want to create a Quarkus extension for your Resource Adapter, just implement the ResourceAdapterFactory in your application code and you’ll be fine.

+
+
+
+
+

Implementing a ResourceAdapterFactory

+
+
+

A ResourceAdapterFactory is an SPI that the IronJacamar extension introduces to create ResourceAdapter, ManagedConnectionFactory and ActivationSpec instances. +You must use the @ResourceAdapterKind annotation on it to specify the resource adapter kind that will be used to identify the factory in the application code.

+
+
+
+
@ResourceAdapterKind(value = "artemis") (1)
+@ResourceAdapterTypes(connectionFactoryTypes = { jakarta.jms.ConnectionFactory.class }) (2)
+public class ArtemisResourceAdapterFactory implements ResourceAdapterFactory {...} (3)
+
+
+
+ + + + + + + + + + + + + +
1The value is the name of the resource adapter kind. +Because a Quarkus application can manage multiple resource adapters, this is used in the configuration to select the proper resource adapter to be configured and started.
2The connection factory types that this resource adapter supports. +This must be the types that the object returned in the jakarta.resource.spi.ManagedConnectionFactory.createConnectionFactory(jakarta.resource.spi.ConnectionManager) has. +That will allow you to @Inject this object in your application code (eg. @Inject ConnectionFactory in this example).
3The implementation of the ResourceAdapterFactory interface. +This is the class that will be instantiated by the IronJacamar extension to create the resource adapter instance.
+
+
+
+
+

Using a ResourceEndpoint

+
+
+

Resource endpoints are activated in the ResourceAdapter (think EJB’s @MessageDriven annotation) and are declared using the @ResourceEndpoint annotation.

+
+
+
+
import io.quarkiverse.ironjacamar.ResourceEndpoint;
+
+@ResourceEndpoint(activationSpecConfigKey = "myqueue") (1)
+public class MyResourceEndpoint implements jakarta.jms.MessageListener {...} (2)
+
+
+
+ + + + + + + + + +
1An optional activation spec configuration key. +The activationSpecConfigKey is the key that will be consumed from the configuration (see the application.properties example below)
2The resource endpoint implementation. +Because the Artemis ResourceAdapter implementation expects a jakarta.jms.MessageListener instance, you must implement this interface.
+
+
+

The configuration may vary according to what the chosen ResourceAdapterFactory implementation expects.

+
+
+
+
Important
+
+

The required interface may vary according to the resource adapter used. +If you are unsure of what to use, look at your resource adapter documentation.

+
+
+
+
+
+
+

Configuration

+
+
+

In your application

+
+
+
quarkus.ironjacamar.ra.kind=artemis (1)
+
+quarkus.ironjacamar.ra.config.connection-parameters=host=localhost;port=5445;protocols=HORNETQ (2)
+quarkus.ironjacamar.ra.config.protocol-manager-factory=org.apache.activemq.artemis.core.protocol.hornetq.client.HornetQClientProtocolManagerFactory
+quarkus.ironjacamar.ra.config.user=guest
+quarkus.ironjacamar.ra.config.password=guest
+
+quarkus.ironjacamar.activation-spec.myqueue.config.destination-type=jakarta.jms.Queue (3)
+quarkus.ironjacamar.activation-spec.myqueue.config.destination=jms.queue.MyQueue
+quarkus.ironjacamar.activation-spec.myqueue.config.max-session=2
+quarkus.ironjacamar.activation-spec.myqueue.config.rebalance-connections=true
+
+
+
+ + + + + + + + + + + + + +
1This is the resource adapter kind. +It must match the value of the @ResourceAdapterKind annotation in the ResourceAdapterFactory implementation.
2(Optional) You can specify the resource adapter configuration that will be passed to your ResourceAdapterFactory#createResourceAdapter implementation method.
3(Optional) You can specify optional activation spec configuration ResourceAdapterFactory#createActivationSpec implementation method.
+
+
+
+
+
+

Multiple Resource Adapters

+
+
+

You can configure more than one ResourceAdapter instance in your application. +Just name the resource adapter in the configuration:

+
+
+
+
quarkus.ironjacamar.main.ra.kind=artemis (1)
+quarkus.ironjacamar.other.ra.kind=artemis
+
+
+
+

To reference in the code, you must use the @io.smallrye.common.annotation.Identifier annotation:

+
+
+
+
import io.quarkiverse.ironjacamar.ResourceEndpoint;
+import io.smallrye.common.annotation.Identifier;
+
+import jakarta.inject.Inject;
+
+import jakarta.jms.ConnectionFactory;
+import jakarta.jms.Message;
+import jakarta.jms.MessageListener;
+
+@ResourceEndpoint
+@Identifier("other") (1)
+public class MyResourceEndpoint implements MessageListener {
+
+    @Inject
+    @Identifier("main")
+    ConnectionFactory connectionFactory; (2)
+
+    @Override
+    public void onMessage(Message message) {
+        //...
+    }
+}
+
+
+
+ + + + + + + + + +
1This MessageListener will be activated by the other resource adapter configured above.
2This ConnectionFactory will be the one configured in the main resource adapter.
+
+
+
+
+

Transactions

+
+
+

Quarkus IronJacamar supports the @Transactional annotation on ResourceEndpoint implementations to automatically enlist the connection in the current transaction:

+
+
+
+
import io.quarkiverse.ironjacamar.ResourceEndpoint;
+
+import jakarta.inject.Inject;
+import jakarta.jms.ConnectionFactory;
+import jakarta.jms.Message;
+import jakarta.jms.MessageListener;
+import javax.transaction.Transactional;
+
+@ResourceEndpoint
+public class MyResourceEndpoint implements MessageListener {
+
+    @Inject
+    ConnectionFactory connectionFactory;
+
+    @Override
+    @Transactional
+    public void onMessage(Message message) {
+        //...
+    }
+}
+
+
+
+

It also supports the @Transactional annotation on methods consuming the managed connection factories produced by the ResourceAdapterFactory implementation:

+
+
+
+
@Path("/jca")
+@ApplicationScoped
+public class JcaResource {
+
+        @Inject
+        ConnectionFactory connectionFactory;
+
+        @GET
+        @Path("/send")
+        @Transactional
+        public void send() {
+            try (Connection connection = connectionFactory.createConnection()) {
+                //...
+            }
+        }
+}
+
+
+
+

Some adapter implementations may require additional configuration to enable transaction support. Check the adapter documentation for more details.

+
+
+
+
NOTE
+
+

if running in a XA transaction, it is recommended to enable recovery by using quarkus.transaction-manager.enable-recovery=true. Check the guide on Using Transactions in Quarkus for more details.

+
+
+
+
+
+
+

Metrics

+
+
+

If you are using the quarkus-micrometer or quarkus-smallrye-metrics extension, quarkus-ironjacamar can contribute some connection pool-related metrics to the metric registry.

+
+
+

This can be activated by setting the quarkus.ironjacamar.metrics.enabled property to true.

+
+
+

Alternatively, you can disable the pool metrics for a specific resource adapter by setting the quarkus.ironjacamar."resource-adapter-name".ra.cm.pool.enable-metrics property to false.

+
+
+
+
+

Extension Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Whether IronJacamar (pool) metrics are published in case a metrics extension is present.

+
+
+

This is a global setting and is not specific to a resource adapter.

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_METRICS_ENABLED

+
+
+

boolean

false

+ +
+
+
+

The kind of resource adapter.

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_KIND

+
+
+

string

+ +
+
+
+

Enable pool metrics collection. If unspecified, collecting metrics will be enabled by default if a metrics extension is active.

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_POOL_ENABLE_METRICS

+
+
+

boolean

+ +
+
+
+

The configuration for this resource adapter

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CONFIG

+
+
+

Map<String,String>

+ +
+
+
+

The transaction support level for the Connection Manager

+
+
+

See the TransactionSupportLevel Javadoc for more information

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_TRANSACTION_SUPPORT_LEVEL

+
+
+
+

no-transaction, local-transaction, xa-transaction

+

xa-transaction

+ +
+
+
+

The number of times to retry the allocation of a connection

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_ALLOCATION_RETRY

+
+
+

int

5

+ +
+
+
+

The time to wait between retries of the allocation of a connection

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_ALLOCATION_RETRY_WAIT

+
+
+

Duration +

1S

+ +
+
+
+

The transaction timeout for the XAResource

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_XA_RESOURCE_TIMEOUT

+
+
+

Duration +

120S

+ +
+
+
+

The flush strategy for the Connection Manager

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_FLUSH_STRATEGY

+
+
+
+

unknown, failing-connection-only, invalid-idle-connections, idle-connections, gracefully, entire-pool, all-invalid-idle-connections, all-idle-connections, all-gracefully, all-connections

+

failing-connection-only

+ +
+
+
+

Whether the connection manager is sharable

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_SHARABLE

+
+
+

boolean

true

+ +
+
+
+

Whether the connection manager should enlist connections

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_ENLISTMENT

+
+
+

boolean

true

+ +
+
+
+

Whether the connection manager should be connectable

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_CONNECTABLE

+
+
+

boolean

false

+ +
+
+
+

Whether the connection manager should track connections

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_TRACKING

+
+
+

boolean

+ +
+
+
+

Whether the connection manager should use CCM

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_USE_CCM

+
+
+

boolean

true

+ +
+
+
+

Whether the connection manager should use interleaving

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_INTERLEAVING

+
+
+

boolean

false

+ +
+
+
+

Whether the connection manager should use same RM override

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_IS_SAME_RM_OVERRIDE

+
+
+

boolean

+ +
+
+
+

Whether the connection manager should wrap the XAResource

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_WRAP_XA_RESOURCE

+
+
+

boolean

true

+ +
+
+
+

Whether the connection manager should pad the XID

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_PAD_XID

+
+
+

boolean

false

+ +
+
+
+

The recovery username for the Connection Manager

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_RECOVERY_USERNAME

+
+
+

string

+ +
+
+
+

The recovery password for the Connection Manager

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_RECOVERY_PASSWORD

+
+
+

string

+ +
+
+
+

The recovery security domain for the Connection Manager

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_RECOVERY_SECURITY_DOMAIN

+
+
+

string

+ +
+
+
+

The pool strategy

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_POOL_STRATEGY

+
+
+
+

pool-by-cri, pool-by-subject, pool-by-subject-and-cri, one-pool, reauth

+

pool-by-cri

+ +
+
+
+

Minimum size of the pool

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_POOL_CONFIG_MIN_SIZE

+
+
+

int

0

+ +
+
+
+

Initial size of the pool

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_POOL_CONFIG_INITIAL_SIZE

+
+
+

int

+ +
+
+
+

Maximum size of the pool

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_POOL_CONFIG_MAX_SIZE

+
+
+

int

20

+ +
+
+
+

Blocking timeout

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_POOL_CONFIG_BLOCKING_TIMEOUT

+
+
+

Duration +

30000MS

+ +
+
+
+

Idle timeout period. Default 30 mins

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_POOL_CONFIG_IDLE_TIMEOUT_MINUTES

+
+
+

Duration +

30M

+ +
+
+
+

Validate on match validation

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_POOL_CONFIG_VALIDATE_ON_MATCH

+
+
+

boolean

false

+ +
+
+
+

Background validation

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_POOL_CONFIG_BACKGROUND_VALIDATION

+
+
+

boolean

false

+ +
+
+
+

Background validation - millis

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_POOL_CONFIG_BACKGROUND_VALIDATION_MILLIS

+
+
+

Duration +

+ +
+
+
+

Prefill pool

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_POOL_CONFIG_PREFILL

+
+
+

boolean

false

+ +
+
+
+

Strict minimum, default false

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_POOL_CONFIG_STRICT_MIN

+
+
+

boolean

false

+ +
+
+
+

Do we want to immediately break when a connection cannot be matched and not evaluate the rest of the pool?

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_POOL_CONFIG_USE_FAST_FAIL

+
+
+

boolean

false

+ +
+
+
+

Fairness of semaphore permits, default true

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_POOL_CONFIG_FAIR

+
+
+

boolean

true

+ +
+
+
+

Whether the pool is sharable

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_POOL_SHARABLE

+
+
+

boolean

true

+ +
+
+
+

Should the pool be created without a separate pool for non-transactional connections?

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_RA_CM_POOL_NO_TX_SEPARATE_POOL

+
+
+

boolean

false

+ +
+
+
+

The configuration for this resource adapter

+
+
+

Environment variable: QUARKUS_IRONJACAMAR_ACTIVATION_SPEC_CONFIG

+
+
+

Map<String,String>

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() javadoc for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-itext/dev/includes/attributes.html b/quarkus-itext/dev/includes/attributes.html new file mode 100644 index 0000000000..f5bfb31e9f --- /dev/null +++ b/quarkus-itext/dev/includes/attributes.html @@ -0,0 +1,912 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-itext/dev/index.html b/quarkus-itext/dev/index.html new file mode 100644 index 0000000000..a96fa6015c --- /dev/null +++ b/quarkus-itext/dev/index.html @@ -0,0 +1,955 @@ + + + + + + Quarkus iText :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus iText

+
+
+
+

A Quarkus extension that lets you utilize iText Library to create and manipulate PDFs on the fly.

+
+
+ + + + + +
+ + +This is a fork of iText 2.1.7 version, the last version under MPL/LGPL. +
+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.itext:quarkus-itext extension first to your build file.

+
+
+

For instance, with Maven, add the following dependency to your POM file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.itext</groupId>
+    <artifactId>quarkus-itext</artifactId>
+    <version>3.0.4</version>
+</dependency>
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-jackson-jq/dev/config.html b/quarkus-jackson-jq/dev/config.html new file mode 100644 index 0000000000..b9ca39856a --- /dev/null +++ b/quarkus-jackson-jq/dev/config.html @@ -0,0 +1,1082 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Comma-separated list of absolute resource paths to scan recursively for templates. All tree folder from 'resource-paths' will be added as a resource. Unprefixed locations or locations starting with classpath will be processed in the same way.

+
+
+

list of string

freemarker/templates

+
+
+
+

Comma-separated of file system paths where freemarker templates are located

+
+
+

list of string

+
+
+
+

Set the preferred charset template files are stored in.

+
+
+

string

+
+
+
+

Sets how errors will appear. rethrow, debug, html-debug, ignore.

+
+
+

string

+
+
+
+

If false, don’t log exceptions inside FreeMarker that it will be thrown at you anyway.

+
+
+

boolean

+
+
+
+

Wrap unchecked exceptions thrown during template processing into TemplateException-s.

+
+
+

boolean

+
+
+
+

If false, do not fall back to higher scopes when reading a null loop variable.

+
+
+

boolean

+
+
+
+

The string value for the boolean true and false values, usually intended for human consumption (not for a computer language), separated with comma.

+
+
+

string

+
+
+
+

Sets the default number format used to convert numbers to strings.

+
+
+

string

+
+
+
+

If true, the object wrapper will be configured to expose fields.

+
+
+

boolean

+
+
+
+

List of directives to register with format name=classname

+
+
+

Map<String,String>

+
+
+
+
+ + + + + + + diff --git a/quarkus-jackson-jq/dev/index.html b/quarkus-jackson-jq/dev/index.html new file mode 100644 index 0000000000..442ec9dbf5 --- /dev/null +++ b/quarkus-jackson-jq/dev/index.html @@ -0,0 +1,1116 @@ + + + + + + Quarkus - Jackson Jq :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus - Jackson Jq

+
+
+
+

Describe what the extension does here.

+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.jackson-jq:quarkus-jackson-jq extension first. +In your pom.xml file, add:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.jackson-jq</groupId>
+    <artifactId>quarkus-jackson-jq</artifactId>
+</dependency>
+
+
+
+
+
+

Extension Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Comma-separated list of absolute resource paths to scan recursively for templates. All tree folder from 'resource-paths' will be added as a resource. Unprefixed locations or locations starting with classpath will be processed in the same way.

+
+
+

list of string

freemarker/templates

+
+
+
+

Comma-separated of file system paths where freemarker templates are located

+
+
+

list of string

+
+
+
+

Set the preferred charset template files are stored in.

+
+
+

string

+
+
+
+

Sets how errors will appear. rethrow, debug, html-debug, ignore.

+
+
+

string

+
+
+
+

If false, don’t log exceptions inside FreeMarker that it will be thrown at you anyway.

+
+
+

boolean

+
+
+
+

Wrap unchecked exceptions thrown during template processing into TemplateException-s.

+
+
+

boolean

+
+
+
+

If false, do not fall back to higher scopes when reading a null loop variable.

+
+
+

boolean

+
+
+
+

The string value for the boolean true and false values, usually intended for human consumption (not for a computer language), separated with comma.

+
+
+

string

+
+
+
+

Sets the default number format used to convert numbers to strings.

+
+
+

string

+
+
+
+

If true, the object wrapper will be configured to expose fields.

+
+
+

boolean

+
+
+
+

List of directives to register with format name=classname

+
+
+

Map<String,String>

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-jaeger/dev/includes/attributes.html b/quarkus-jaeger/dev/includes/attributes.html new file mode 100644 index 0000000000..1748ac2969 --- /dev/null +++ b/quarkus-jaeger/dev/includes/attributes.html @@ -0,0 +1,912 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-jaeger/dev/includes/quarkus-jaeger.html b/quarkus-jaeger/dev/includes/quarkus-jaeger.html new file mode 100644 index 0000000000..763196e64b --- /dev/null +++ b/quarkus-jaeger/dev/includes/quarkus-jaeger.html @@ -0,0 +1,1311 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Defines if the Jaeger extension is enabled.

+
+
+

Environment variable: QUARKUS_JAEGER_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether metrics are published in case a metrics extension is present.

+
+
+

Environment variable: QUARKUS_JAEGER_METRICS_ENABLED

+
+
+

boolean

false

+
+
+
+

The traces endpoint, in case the client should connect directly to the Collector, like http://jaeger-collector:14268/api/traces

+
+
+

Environment variable: QUARKUS_JAEGER_ENDPOINT

+
+
+

URI

+
+
+
+

Authentication Token to send as "Bearer" to the endpoint

+
+
+

Environment variable: QUARKUS_JAEGER_AUTH_TOKEN

+
+
+

string

+
+
+
+

Username to send as part of "Basic" authentication to the endpoint

+
+
+

Environment variable: QUARKUS_JAEGER_USER

+
+
+

string

+
+
+
+

Password to send as part of "Basic" authentication to the endpoint

+
+
+

Environment variable: QUARKUS_JAEGER_PASSWORD

+
+
+

string

+
+
+
+

The hostname and port for communicating with agent via UDP

+
+
+

Environment variable: QUARKUS_JAEGER_AGENT_HOST_PORT

+
+
+

host:port

+
+
+
+

Whether the reporter should also log the spans

+
+
+

Environment variable: QUARKUS_JAEGER_REPORTER_LOG_SPANS

+
+
+

boolean

+
+
+
+

The reporter’s maximum queue size

+
+
+

Environment variable: QUARKUS_JAEGER_REPORTER_MAX_QUEUE_SIZE

+
+
+

int

+
+
+
+

The reporter’s flush interval

+
+
+

Environment variable: QUARKUS_JAEGER_REPORTER_FLUSH_INTERVAL

+
+
+

Duration +

+
+
+
+

The sampler type (const, probabilistic, ratelimiting or remote)

+
+
+

Environment variable: QUARKUS_JAEGER_SAMPLER_TYPE

+
+
+

string

+
+
+
+

The sampler parameter (number)

+
+
+

Environment variable: QUARKUS_JAEGER_SAMPLER_PARAM

+
+
+

BigDecimal

+
+
+
+

The host name and port when using the remote controlled sampler

+
+
+

Environment variable: QUARKUS_JAEGER_SAMPLER_MANAGER_HOST_PORT

+
+
+

host:port

+
+
+
+

The service name

+
+
+

Environment variable: QUARKUS_JAEGER_SERVICE_NAME

+
+
+

string

+
+
+
+

A comma separated list of name = value tracer level tags, which get added to all reported spans. The value can also refer to an environment variable using the format ${envVarName:default}, where the :default is optional, and identifies a value to be used if the environment variable cannot be found

+
+
+

Environment variable: QUARKUS_JAEGER_TAGS

+
+
+

string

+
+
+
+

Comma separated list of formats to use for propagating the trace context. Defaults to the standard Jaeger format. Valid values are jaeger and b3

+
+
+

Environment variable: QUARKUS_JAEGER_PROPAGATION

+
+
+

string

+
+
+
+

The sender factory class name

+
+
+

Environment variable: QUARKUS_JAEGER_SENDER_FACTORY

+
+
+

string

+
+
+
+

Whether the trace context should be logged.

+
+
+

Environment variable: QUARKUS_JAEGER_LOG_TRACE_CONTEXT

+
+
+

boolean

true

+
+
+
+

Whether the registration of tracer as the global tracer should be disabled. This setting should only be turned on in tests that need to install a mock tracer.

+
+
+

Environment variable: QUARKUS_JAEGER_DISABLE_TRACER_REGISTRATION

+
+
+

boolean

false

+
+
+
+

Whether jaeger should run in zipkin compatibility mode

+
+
+

Environment variable: QUARKUS_JAEGER_ZIPKIN_COMPATIBILITY_MODE

+
+
+

boolean

false

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() javadoc for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-jaeger/dev/index.html b/quarkus-jaeger/dev/index.html new file mode 100644 index 0000000000..22f024ff79 --- /dev/null +++ b/quarkus-jaeger/dev/index.html @@ -0,0 +1,1366 @@ + + + + + + Quarkus Jaeger :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Jaeger

+
+
+
+

This extension is consumed by the Quarkus SmallRye OpenTracing extension.

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

OpenTelemetry is the recommended approach to tracing and telemetry for Quarkus.

+
+
+

The SmallRye OpenTracing support is discontinued and this extension is not actively maintained. +If you are interested in maintaining this extension, please reach out to us in the GitHub issues of this extension.

+
+
+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.jaeger:quarkus-jaeger extension first to your build file.

+
+
+

For instance, with Maven, add the following dependency to your POM file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.jaeger</groupId>
+    <artifactId>quarkus-jaeger</artifactId>
+    <version>1.0.0</version>
+</dependency>
+
+
+
+
+
+

Extension Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Defines if the Jaeger extension is enabled.

+
+
+

Environment variable: QUARKUS_JAEGER_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether metrics are published in case a metrics extension is present.

+
+
+

Environment variable: QUARKUS_JAEGER_METRICS_ENABLED

+
+
+

boolean

false

+
+
+
+

The traces endpoint, in case the client should connect directly to the Collector, like http://jaeger-collector:14268/api/traces

+
+
+

Environment variable: QUARKUS_JAEGER_ENDPOINT

+
+
+

URI

+
+
+
+

Authentication Token to send as "Bearer" to the endpoint

+
+
+

Environment variable: QUARKUS_JAEGER_AUTH_TOKEN

+
+
+

string

+
+
+
+

Username to send as part of "Basic" authentication to the endpoint

+
+
+

Environment variable: QUARKUS_JAEGER_USER

+
+
+

string

+
+
+
+

Password to send as part of "Basic" authentication to the endpoint

+
+
+

Environment variable: QUARKUS_JAEGER_PASSWORD

+
+
+

string

+
+
+
+

The hostname and port for communicating with agent via UDP

+
+
+

Environment variable: QUARKUS_JAEGER_AGENT_HOST_PORT

+
+
+

host:port

+
+
+
+

Whether the reporter should also log the spans

+
+
+

Environment variable: QUARKUS_JAEGER_REPORTER_LOG_SPANS

+
+
+

boolean

+
+
+
+

The reporter’s maximum queue size

+
+
+

Environment variable: QUARKUS_JAEGER_REPORTER_MAX_QUEUE_SIZE

+
+
+

int

+
+
+
+

The reporter’s flush interval

+
+
+

Environment variable: QUARKUS_JAEGER_REPORTER_FLUSH_INTERVAL

+
+
+

Duration +

+
+
+
+

The sampler type (const, probabilistic, ratelimiting or remote)

+
+
+

Environment variable: QUARKUS_JAEGER_SAMPLER_TYPE

+
+
+

string

+
+
+
+

The sampler parameter (number)

+
+
+

Environment variable: QUARKUS_JAEGER_SAMPLER_PARAM

+
+
+

BigDecimal

+
+
+
+

The host name and port when using the remote controlled sampler

+
+
+

Environment variable: QUARKUS_JAEGER_SAMPLER_MANAGER_HOST_PORT

+
+
+

host:port

+
+
+
+

The service name

+
+
+

Environment variable: QUARKUS_JAEGER_SERVICE_NAME

+
+
+

string

+
+
+
+

A comma separated list of name = value tracer level tags, which get added to all reported spans. The value can also refer to an environment variable using the format ${envVarName:default}, where the :default is optional, and identifies a value to be used if the environment variable cannot be found

+
+
+

Environment variable: QUARKUS_JAEGER_TAGS

+
+
+

string

+
+
+
+

Comma separated list of formats to use for propagating the trace context. Defaults to the standard Jaeger format. Valid values are jaeger and b3

+
+
+

Environment variable: QUARKUS_JAEGER_PROPAGATION

+
+
+

string

+
+
+
+

The sender factory class name

+
+
+

Environment variable: QUARKUS_JAEGER_SENDER_FACTORY

+
+
+

string

+
+
+
+

Whether the trace context should be logged.

+
+
+

Environment variable: QUARKUS_JAEGER_LOG_TRACE_CONTEXT

+
+
+

boolean

true

+
+
+
+

Whether the registration of tracer as the global tracer should be disabled. This setting should only be turned on in tests that need to install a mock tracer.

+
+
+

Environment variable: QUARKUS_JAEGER_DISABLE_TRACER_REGISTRATION

+
+
+

boolean

false

+
+
+
+

Whether jaeger should run in zipkin compatibility mode

+
+
+

Environment variable: QUARKUS_JAEGER_ZIPKIN_COMPATIBILITY_MODE

+
+
+

boolean

false

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() javadoc for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-java-embedded-framework/dev/_images/devservicewidget.png b/quarkus-java-embedded-framework/dev/_images/devservicewidget.png new file mode 100644 index 0000000000..3b2d24584d Binary files /dev/null and b/quarkus-java-embedded-framework/dev/_images/devservicewidget.png differ diff --git a/quarkus-java-embedded-framework/dev/architecture.html b/quarkus-java-embedded-framework/dev/architecture.html new file mode 100644 index 0000000000..dade011c4e --- /dev/null +++ b/quarkus-java-embedded-framework/dev/architecture.html @@ -0,0 +1,936 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

TBD

+
+
+
+
+
+ + + + + + + diff --git a/quarkus-java-embedded-framework/dev/board.html b/quarkus-java-embedded-framework/dev/board.html new file mode 100644 index 0000000000..5def8f376e --- /dev/null +++ b/quarkus-java-embedded-framework/dev/board.html @@ -0,0 +1,1088 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Before you start development you need to prepare your embedded environment

+
+
+

Prepare Linux

+
+
+
+
sudo apt update -y
+sudo apt upgrade -y
+apt -y install \
+    build-essential \
+    libz-dev \
+    git \
+    zlib1g-dev \
+    apt-transport-https \
+    ca-certificates \
+    curl \
+    wget \
+    linux-generic
+
+
+
+
+
+

Install GraalVM

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

Please update GRAAL_VERSION and GRAAL_JDK_VERSION values +to the latest if needed

+
+
+
+
+
+
sudo su
+export GRAAL_VERSION="22.1.0"
+export GRAAL_JDK_VERSION="17"
+export ARCH_LINUX_AARCH64="linux-aarch64"
+export GRAAL_ARCHITECTURE=${ARCH_LINUX_AARCH64}
+export GRAAL_DOWNLOAD_PATH="https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-${GRAAL_VERSION}/graalvm-ce-java${GRAAL_JDK_VERSION}-${GRAAL_ARCHITECTURE}-${GRAAL_VERSION}.tar.gz"
+export GRAAL_FILE="graalvm-ce-java${GRAAL_JDK_VERSION}-${GRAAL_ARCHITECTURE}-${GRAAL_VERSION}"
+export GRAAL_GZIP_FILE="${GRAAL_FILE}.tar.gz"
+wget ${GRAAL_DOWNLOAD_PATH} -P /tmp
+tar -xvzf "/tmp/${GRAAL_GZIP_FILE}" -C /tmp
+mkdir /usr/lib/jvm
+export TMP_PATH="/tmp/graalvm-ce-java${GRAAL_JDK_VERSION}-${GRAAL_VERSION}/"
+export JVM_PATH="/usr/lib/jvm/graalvm-ce-java${GRAAL_JDK_VERSION}-${GRAAL_VERSION}"
+mv ${TMP_PATH} /usr/lib/jvm/
+rm "/tmp/${GRAAL_GZIP_FILE}"
+ln -s ${JVM_PATH} /usr/lib/jvm/graalvm
+update-alternatives --install /usr/bin/java java /usr/lib/jvm/graalvm/bin/java 20
+update-alternatives --set java /usr/lib/jvm/graalvm/bin/java
+export GRAALVM_HOME=/usr/lib/jvm/graalvm/
+export JAVA_HOME=/usr/lib/jvm/graalvm/
+export PATH=$PATH:$GRAALVM_HOME
+export PATH=$PATH:$GRAALVM_HOME/bin
+echo "export JAVA_HOME=/usr/lib/jvm/graalvm/" >>/etc/profile
+echo "export GRAALVM_HOME=/usr/lib/jvm/graalvm/" >>/etc/profile
+echo "export PATH=$PATH:$GRAALVM_HOME" >>/etc/profile
+echo "export PATH=$PATH:$GRAALVM_HOME/bin" >>/etc/profile
+export NATIVE_IMAGE_JAR="native-image-installable-svm-java${GRAAL_JDK_VERSION}-${GRAAL_ARCHITECTURE}-${GRAAL_VERSION}.jar"
+wget "https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-${GRAAL_VERSION}/${NATIVE_IMAGE_JAR}" -P /tmp
+${GRAALVM_HOME}/bin/gu -L install "/tmp/${NATIVE_IMAGE_JAR}"
+rm "/tmp/${NATIVE_IMAGE_JAR}"
+
+
+
+
+
+

Install Maven

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

Please update MAVEN_VERSION value +to the latest if needed

+
+
+
+
+
+
export MAVEN_VERSION="3.8.6"
+wget "https://dlcdn.apache.org/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz" -P /tmp
+tar -xvzf "/tmp/apache-maven-${MAVEN_VERSION}-bin.tar.gz" -C /tmp
+rm -d -r "/usr/lib/maven/apache-maven-${MAVEN_VERSION}"
+mv "/tmp/apache-maven-${MAVEN_VERSION}/" /usr/lib/maven/
+update-alternatives --install /usr/bin/mvn mvn /usr/lib/maven/apache-maven-${MAVEN_VERSION}/bin/mvn 20
+update-alternatives --set mvn /usr/lib/maven/apache-maven-${MAVEN_VERSION}/bin/mvn
+export M2_HOME=/usr/lib/maven
+export PATH=$PATH:$M2_HOME
+export PATH=$PATH:$M2_HOME/bin
+echo "export M2_HOME=/usr/lib/maven" >>/etc/profile
+echo "export PATH=$PATH:$M2_HOME" >>/etc/profile
+echo "export PATH=$PATH:$M2_HOME/bin" >>/etc/profile
+
+
+
+
+
+

Install Samba

+
+
+

For the remote development you need to share board folders to your PC

+
+
+
+
sudo apt -y install samba samba-common-bin
+
+
+
+

Edit samba configuration file and save over Ctrl+X

+
+
+
+
sudo nano /etc/samba/smb.conf
+[board]
+comment = My Board
+path = /home/pi
+browseable = yes
+writeable = yes
+force create mode = 0777
+force directory mode = 0777
+public = yes
+
+
+
+

and reboot

+
+
+
+
sudo systemctl restart smbd
+
+
+
+

Congratulations! Your environment is ready.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-java-embedded-framework/dev/config.html b/quarkus-java-embedded-framework/dev/config.html new file mode 100644 index 0000000000..f4d384a02d --- /dev/null +++ b/quarkus-java-embedded-framework/dev/config.html @@ -0,0 +1,1291 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Serial Bus

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Enable or disable serial bus

+
+
+

boolean

false

+
+
+
+

Path to serial or USB bus like /dev/serial1 or /dev/dev/ttyUSB0

+
+
+

string

+
+
+
+

Set serial bus speed to one of values described in SerialBaudRate class

+
+
+

enum

B9600

+
+
+
+

SPI Bus

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Enable or disable SPI bus

+
+
+

boolean

false

+
+
+
+

Path to SPI bus like /dev/spidev0.0

+
+
+

string

+
+
+
+

SPI bus speed. Please check your vendor CPU documentation for acceptable values

+
+
+

integer

500000

+
+
+
+

SPI bus mode.

+
+
+

SPI_MODE_0 SPI_MODE_1 SPI_MODE_3 SPI_MODE_4

SPI_MODE_1

+
+
+
+

Word length for byte in bus

+
+
+

enum

8

+
+
+
+

Bits ordering for bus

+
+
+

BIG_ENDIAN LITTLE_ENDIAN

BIG_ENDIAN

+
+
+
+

I2C Bus

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Enable or disable I2C bus

+
+
+

boolean

false

+
+
+
+

Path to I2C bus like /dev/i2c-0

+
+
+

string

+
+
+
+

Describe is I2C 7 bits or 10 bits bus. Please check with CPU vendor documentation.

+
+
+

boolean

false

+
+
+
+

Amount of retries in bus. Default is not set and using default vendor value

+
+
+

integer

-1

+
+
+
+

Timeout in bus. Default is not set and using default vendor value.

+
+
+

integer

-1

+
+
+
+

GPIO

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Enable or disable GPIOs

+
+
+

boolean

false

+
+
+
+

Path to GPIO like /dev/gpiochip0

+
+
+

string

+
+
+
+

OneWire

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Enable or disable One Wire bus

+
+
+

boolean

false

+
+
+
+

Path to GPIO like /sys/bus/w1/devices/28-01203882217a/w1_slave

+
+
+

string

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-java-embedded-framework/dev/config/gpio.html b/quarkus-java-embedded-framework/dev/config/gpio.html new file mode 100644 index 0000000000..cd274ae929 --- /dev/null +++ b/quarkus-java-embedded-framework/dev/config/gpio.html @@ -0,0 +1,979 @@ + + + + + + GPIO :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ + +
+
+
+ + + + + + + diff --git a/quarkus-java-embedded-framework/dev/config/i2c.html b/quarkus-java-embedded-framework/dev/config/i2c.html new file mode 100644 index 0000000000..f3ca68e822 --- /dev/null +++ b/quarkus-java-embedded-framework/dev/config/i2c.html @@ -0,0 +1,1021 @@ + + + + + + I2C Bus :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

I2C Bus

+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Enable or disable I2C bus

+
+
+

boolean

false

+
+
+
+

Path to I2C bus like /dev/i2c-0

+
+
+

string

+
+
+
+

Describe is I2C 7 bits or 10 bits bus. Please check with CPU vendor documentation.

+
+
+

boolean

false

+
+
+
+

Amount of retries in bus. Default is not set and using default vendor value

+
+
+

integer

-1

+
+
+
+

Timeout in bus. Default is not set and using default vendor value.

+
+
+

integer

-1

+
+
+
+
+ + + + + + + diff --git a/quarkus-java-embedded-framework/dev/config/onewire.html b/quarkus-java-embedded-framework/dev/config/onewire.html new file mode 100644 index 0000000000..b265e95dba --- /dev/null +++ b/quarkus-java-embedded-framework/dev/config/onewire.html @@ -0,0 +1,979 @@ + + + + + + OneWire :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ + +
+
+
+ + + + + + + diff --git a/quarkus-java-embedded-framework/dev/config/serial.html b/quarkus-java-embedded-framework/dev/config/serial.html new file mode 100644 index 0000000000..05b52cf240 --- /dev/null +++ b/quarkus-java-embedded-framework/dev/config/serial.html @@ -0,0 +1,993 @@ + + + + + + Serial Bus :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Serial Bus

+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Enable or disable serial bus

+
+
+

boolean

false

+
+
+
+

Path to serial or USB bus like /dev/serial1 or /dev/dev/ttyUSB0

+
+
+

string

+
+
+
+

Set serial bus speed to one of values described in SerialBaudRate class

+
+
+

enum

B9600

+
+
+
+
+ + + + + + + diff --git a/quarkus-java-embedded-framework/dev/config/spi.html b/quarkus-java-embedded-framework/dev/config/spi.html new file mode 100644 index 0000000000..f119a1ead0 --- /dev/null +++ b/quarkus-java-embedded-framework/dev/config/spi.html @@ -0,0 +1,1035 @@ + + + + + + SPI Bus :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

SPI Bus

+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Enable or disable SPI bus

+
+
+

boolean

false

+
+
+
+

Path to SPI bus like /dev/spidev0.0

+
+
+

string

+
+
+
+

SPI bus speed. Please check your vendor CPU documentation for acceptable values

+
+
+

integer

500000

+
+
+
+

SPI bus mode.

+
+
+

SPI_MODE_0 SPI_MODE_1 SPI_MODE_3 SPI_MODE_4

SPI_MODE_1

+
+
+
+

Word length for byte in bus

+
+
+

enum

8

+
+
+
+

Bits ordering for bus

+
+
+

BIG_ENDIAN LITTLE_ENDIAN

BIG_ENDIAN

+
+
+
+
+ + + + + + + diff --git a/quarkus-java-embedded-framework/dev/dev.html b/quarkus-java-embedded-framework/dev/dev.html new file mode 100644 index 0000000000..5e1592edff --- /dev/null +++ b/quarkus-java-embedded-framework/dev/dev.html @@ -0,0 +1,936 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

TBD

+
+
+
+
+
+ + + + + + + diff --git a/quarkus-java-embedded-framework/dev/examples.html b/quarkus-java-embedded-framework/dev/examples.html new file mode 100644 index 0000000000..76e3df1729 --- /dev/null +++ b/quarkus-java-embedded-framework/dev/examples.html @@ -0,0 +1,936 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

TBD

+
+
+
+
+
+ + + + + + + diff --git a/quarkus-java-embedded-framework/dev/index.html b/quarkus-java-embedded-framework/dev/index.html new file mode 100644 index 0000000000..6f17936807 --- /dev/null +++ b/quarkus-java-embedded-framework/dev/index.html @@ -0,0 +1,1321 @@ + + + + + + Quarkus - Java Embedded Framework :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus - Java Embedded Framework

+
+
+
+

Describe what the extension does here.

+
+
+
+
+

Installation

+
+
+

Before installation of Quarkus extension you need to prepare your Raspberry Pi.

+
+
+

If you not expert in embedded development theory can be helpful

+
+
+

If you want to use this extension in your projects, you need to add the io.quarkiverse.jef:quarkus-java-embedded-framework extension first. +In your pom.xml file, add:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.jef</groupId>
+    <artifactId>quarkus-java-embedded-framework</artifactId>
+</dependency>
+
+
+
+
+
+

Extension Configuration Reference

+
+
+

Serial Bus

+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Enable or disable serial bus

+
+
+

boolean

false

+
+
+
+

Path to serial or USB bus like /dev/serial1 or /dev/dev/ttyUSB0

+
+
+

string

+
+
+
+

Set serial bus speed to one of values described in SerialBaudRate class

+
+
+

enum

B9600

+
+
+

SPI Bus

+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Enable or disable SPI bus

+
+
+

boolean

false

+
+
+
+

Path to SPI bus like /dev/spidev0.0

+
+
+

string

+
+
+
+

SPI bus speed. Please check your vendor CPU documentation for acceptable values

+
+
+

integer

500000

+
+
+
+

SPI bus mode.

+
+
+

SPI_MODE_0 SPI_MODE_1 SPI_MODE_3 SPI_MODE_4

SPI_MODE_1

+
+
+
+

Word length for byte in bus

+
+
+

enum

8

+
+
+
+

Bits ordering for bus

+
+
+

BIG_ENDIAN LITTLE_ENDIAN

BIG_ENDIAN

+
+
+

I2C Bus

+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Enable or disable I2C bus

+
+
+

boolean

false

+
+
+
+

Path to I2C bus like /dev/i2c-0

+
+
+

string

+
+
+
+

Describe is I2C 7 bits or 10 bits bus. Please check with CPU vendor documentation.

+
+
+

boolean

false

+
+
+
+

Amount of retries in bus. Default is not set and using default vendor value

+
+
+

integer

-1

+
+
+
+

Timeout in bus. Default is not set and using default vendor value.

+
+
+

integer

-1

+
+
+

GPIO

+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Enable or disable GPIOs

+
+
+

boolean

false

+
+
+
+

Path to GPIO like /dev/gpiochip0

+
+
+

string

+
+
+

OneWire

+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Enable or disable One Wire bus

+
+
+

boolean

false

+
+
+
+

Path to GPIO like /sys/bus/w1/devices/28-01203882217a/w1_slave

+
+
+

string

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-java-embedded-framework/dev/theory.html b/quarkus-java-embedded-framework/dev/theory.html new file mode 100644 index 0000000000..7405ee99f4 --- /dev/null +++ b/quarkus-java-embedded-framework/dev/theory.html @@ -0,0 +1,936 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

TBD

+
+
+
+
+
+ + + + + + + diff --git a/quarkus-java-embedded-framework/dev/troubleshooting.html b/quarkus-java-embedded-framework/dev/troubleshooting.html new file mode 100644 index 0000000000..c7ef998b53 --- /dev/null +++ b/quarkus-java-embedded-framework/dev/troubleshooting.html @@ -0,0 +1,1065 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Enable Linux Event Tracing

+
+
+

To track what commands or data send to buses or from buses you need to enable linux tracing debugfs

+
+
+

Enable I2C tracing

+
+
+
sudo su
+echo 'i2c:*' > /sys/kernel/debug/tracing/set_event
+echo 'smbus:*' > /sys/kernel/debug/tracing/set_event
+
+
+
+ + + + + +
+ + +
+

All events will be available in /sys/kernel/debug/tracing/trace with labels: +i2c_* and smbus_*

+
+
+
+
+
+

Enable SPI tracing

+
+
+
sudo su
+echo 'spi:*' > /sys/kernel/debug/tracing/set_event
+
+
+
+ + + + + +
+ + +
+

All events will be available in /sys/kernel/debug/tracing/trace with label: +spi_*

+
+
+
+
+
+

Enable GPIO/OneWire tracing

+
+
+
sudo su
+echo 'gpio:*' > /sys/kernel/debug/tracing/set_event
+
+
+
+ + + + + +
+ + +
+

All events will be available in /sys/kernel/debug/tracing/trace with labels: +gpio_* for GPIO pins and with w1_* for one wire

+
+
+
+
+

These commands will enable logging only for current linux session and will be disabled after reboot. +If you want to add tracing logging permanently please add commands to cmdline boot options. +For example in RaspberryPi need to update /boot/cmdline.txt and add tracing in the format below:

+
+
+
+
trace_evace_event=i2c:*,smbus:*,spi:*,gpio:*
+
+
+
+
+
+
+

Java Embedded Framework Dev Services

+
+
+

When you compile your application with quarkus:dev Quarkus will enable Dev Services for JEF Extension

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

For the remote debugging from your development machine you need to run Quarkus via

+
+
+
+
mvn compile quarkus:dev -Dmaven.test.skip=true -DdebugHost=0.0.0.0
+
+
+
+

In this case /q/dev and remote debugging will be available from remote machine

+
+
+
+
+

JEF DevServices widget will look like:

+
+
+
+Dev Services widget +
+
+
+

Some additional information about interfaces will be available if you click to the links.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-jdbc-clickhouse/dev/includes/attributes.html b/quarkus-jdbc-clickhouse/dev/includes/attributes.html new file mode 100644 index 0000000000..c9d5302022 --- /dev/null +++ b/quarkus-jdbc-clickhouse/dev/includes/attributes.html @@ -0,0 +1,912 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-jdbc-clickhouse/dev/index.html b/quarkus-jdbc-clickhouse/dev/index.html new file mode 100644 index 0000000000..0926a4b243 --- /dev/null +++ b/quarkus-jdbc-clickhouse/dev/index.html @@ -0,0 +1,969 @@ + + + + + + Quarkus Jdbc Clickhouse :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Jdbc Clickhouse

+
+
+
+ + + + + +
+ + +Describe what the extension does here. +
+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.quarkus-jdbc-clickhouse:quarkus-jdbc-clickhouse extension first to your build file.

+
+
+

For instance, with Maven, add the following dependency to your POM file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.jdbc</groupId>
+    <artifactId>quarkus-jdbc-clickhouse</artifactId>
+    <version>3.0.1</version>
+</dependency>
+
+
+
+
+
+

Extension Configuration Reference

+
+
+ + + + + +
+ + +Remove this section if you don’t have Quarkus configuration properties in your extension. +
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-jdbc-sqlite/dev/datasource.html b/quarkus-jdbc-sqlite/dev/datasource.html new file mode 100644 index 0000000000..61884541bd --- /dev/null +++ b/quarkus-jdbc-sqlite/dev/datasource.html @@ -0,0 +1,979 @@ + + + + + + Configuring the datasource :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Configuring the datasource

+
+

Datasource

+
+
+

You can find all the information about how to configure a datasource in Quarkus in the official Quarkus documentation.

+
+
+

The db-kind used by this extension is sqlite so a configuration defining a default SQLite datasource looks like:

+
+
+
+
quarkus.datasource.db-kind=sqlite
+quarkus.datasource.jdbc.url=... (1)
+
+
+
+ + + + + +
1See below for SQLite JDBC URLs.
+
+
+
+
+

JDBC URL

+
+
+

SQLite only runs as an embedded database.

+
+
+

You can specify connection details using the JDBC URL, or use the defaults.

+
+
+

An SQLite JDBC URL looks like the following:

+
+
+

jdbc:sqlite:[path]/[name][?key=value…​]

+
+
+
+
Example
+
+

jdbc:sqlite:/home/user/mydatabase.db

+
+
+
+
+

SQLite also supports in-memory database management, which does not create any database files. +To use an in-memory database, specify the following JDBC URL:

+
+
+

jdbc:sqlite::memory:

+
+
+

The official documentation and URI Examples go into more details and list optional parameters as well.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-jdbc-sqlite/dev/index.html b/quarkus-jdbc-sqlite/dev/index.html new file mode 100644 index 0000000000..fd22eef83f --- /dev/null +++ b/quarkus-jdbc-sqlite/dev/index.html @@ -0,0 +1,953 @@ + + + + + + Quarkus JDBC Sqlite :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus JDBC Sqlite

+
+
+
+

Quarkus JDBC SQLite is a Quarkus extention for the SQLite database.

+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.jdbc:quarkus-jdbc-sqlite extension first.

+
+
+

For instance, in your pom.xml file, add the following dependency:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.jdbc</groupId>
+    <artifactId>quarkus-jdbc-sqlite</artifactId>
+</dependency>
+
+
+
+
+
+

Configuration

+
+
+

You can find more information about how to configure the datasource here.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-jdbi/dev/includes/attributes.html b/quarkus-jdbi/dev/includes/attributes.html new file mode 100644 index 0000000000..889b8ca7ce --- /dev/null +++ b/quarkus-jdbi/dev/includes/attributes.html @@ -0,0 +1,912 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-jdbi/dev/index.html b/quarkus-jdbi/dev/index.html new file mode 100644 index 0000000000..c8bf47aa32 --- /dev/null +++ b/quarkus-jdbi/dev/index.html @@ -0,0 +1,950 @@ + + + + + + Quarkus Jdbi :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Jdbi

+
+
+
+

Jdbi provides convenient, idiomatic access to relational data in Java +It is using reflection quite a bit, so you need this extension will allow native image processing.

+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.jdbi:quarkus-jdbi extension first to your build file.

+
+
+

For instance, with Maven, add the following dependency to your POM file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.jdbi</groupId>
+    <artifactId>quarkus-jdbi</artifactId>
+    <version>1.3.1</version>
+</dependency>
+
+
+
+
+
+

Extension Configuration Reference

+
+ +
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-jgit/dev/includes/attributes.html b/quarkus-jgit/dev/includes/attributes.html new file mode 100644 index 0000000000..d7614e0547 --- /dev/null +++ b/quarkus-jgit/dev/includes/attributes.html @@ -0,0 +1,912 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-jgit/dev/index.html b/quarkus-jgit/dev/index.html new file mode 100644 index 0000000000..42c8feaf82 --- /dev/null +++ b/quarkus-jgit/dev/index.html @@ -0,0 +1,986 @@ + + + + + + Quarkus JGit :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus JGit

+
+
+
+

The Quarkus JGit extension enables the use of Eclipse JGit +in a native executable.

+
+
+
+
+

Configuration

+
+
+

Once you have your Quarkus project configured you can add the jgit extension +to your project by running the following command in your project base directory:

+
+
+
+
./mvnw quarkus:add-extension -Dextensions="jgit"
+
+
+
+

This will add the following to your pom.xml:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.jgit</groupId>
+    <artifactId>quarkus-jgit</artifactId>
+    <version>3.0.7</version>
+</dependency>
+
+
+
+
+
+

Usage

+
+
+

The JGit dependency is resolved transitively when the extension is added to your project. +Here is an example using it in a JAX-RS endpoint:

+
+
+
+
    @GET
+    @Path("/clone")
+    @Produces(MediaType.TEXT_PLAIN)
+    public String cloneRepository(@QueryParam("url") String url) throws Exception {
+        File tmpDir = Files.createTempDirectory("tmpgit").toFile();
+        try (Git git = Git.cloneRepository().setDirectory(tmpDir).setURI(url).call()) {
+            return tmpDir.toString();
+        }
+    }
+
+
+
+ + + + + +
+ + +
+

When building a native executable, make sure that the SSL support is configured appropriately.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-jgrapht/dev/index.html b/quarkus-jgrapht/dev/index.html new file mode 100644 index 0000000000..0c9d3480ac --- /dev/null +++ b/quarkus-jgrapht/dev/index.html @@ -0,0 +1,940 @@ + + + + + + Quarkus JGraphT :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus JGraphT

+
+
+
+

Describe what the extension does here.

+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.jgrapht:quarkus-jgrapht extension first. +In your pom.xml file, add:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.jgrapht</groupId>
+    <artifactId>quarkus-jgrapht</artifactId>
+</dependency>
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-jnosql/dev/includes/attributes.html b/quarkus-jnosql/dev/includes/attributes.html new file mode 100644 index 0000000000..82dbb5f7bf --- /dev/null +++ b/quarkus-jnosql/dev/includes/attributes.html @@ -0,0 +1,912 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-jnosql/dev/index.html b/quarkus-jnosql/dev/index.html new file mode 100644 index 0000000000..d42a562b83 --- /dev/null +++ b/quarkus-jnosql/dev/index.html @@ -0,0 +1,1381 @@ + + + + + + Quarkus Jnosql :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Jnosql

+ +
+

Introduction

+
+
+

The Quarkus NoSQL Extension facilitates seamless interaction between Quarkus and Eclipse JNoSQL, enabling easy integration with various NoSQL databases in Quarkus applications. By following the steps outlined in this documentation, Quarkus developers can effortlessly incorporate Eclipse JNoSQL into their projects, simplifying NoSQL database interactions and empowering the development of efficient and scalable applications. Eclipse JNoSQL adheres to two essential Jakarta EE specifications: Jakarta Data and Jakarta NoSQL.

+
+
+

Jakarta NoSQL is a Java framework designed to streamline the integration of Java applications with various NoSQL databases. It offers a consistent and easy-to-use API, allowing developers to interact with different NoSQL databases seamlessly.

+
+
+

On the other hand, the Jakarta Data specification provides an API for simplified data access to various database types, including relational and NoSQL databases. Java developers can access these repositories through multiple methods, such as composing custom queries on a Repository interface.

+
+
+

Integrating Eclipse JNoSQL into Quarkus projects ensures adherence to these Jakarta EE standards and leverages the benefits of standardized APIs for enhanced productivity and maintainability.

+
+
+
+
+

Why Use Quarkus JNoSQL Extension?

+
+
+

The Quarkus NoSQL Extension offers several advantages for developers:

+
+
+
    +
  • +

    Simplified NoSQL Integration: Abstracts the complexity of working with different NoSQL databases, providing a consistent API regardless of the underlying technology. Facilitates easy switching between databases or using multiple databases in a single application.

    +
  • +
  • +

    Type-Safe Queries: Empowers developers to write database queries using Java code rather than raw query strings, improving code readability and catching errors at compile-time.

    +
  • +
  • +

    Seamless Quarkus Integration: Utilizes Quarkus' fast startup times and efficient resource utilization while working with NoSQL databases, ensuring lightweight and responsive applications.

    +
  • +
  • +

    Database Agnosticism: Supports a wide range of NoSQL databases, including key-value stores, document databases, and column-family stores. Offers flexibility to choose the most suitable database for specific use cases without major code changes.

    +
  • +
  • +

    Rich Documentation and Ecosystem: Eclipse JNoSQL boasts a thriving community and comprehensive documentation, making it easy for developers to find support, tutorials, and examples. Integration with Quarkus allows tapping into the vibrant Quarkus ecosystem as well.

    +
  • +
+
+
+
+
+

Installation

+
+
+

To use this extension, add the io.quarkiverse.jnosql:quarkus-jnosql extension to your build file. For instance, with Maven, include the following dependency in your POM file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.jnosql</groupId>
+    <artifactId>quarkus-jnosql</artifactId>
+    <version>3.2.2.1</version>
+</dependency>
+
+
+
+
+
+

Getting Started

+
+
+

Getting started with Quarkus JNoSQL is straightforward:

+
+
+
    +
  1. +

    Add the Quarkus JNoSQL Extension to your project’s dependencies. You can find the latest version on Maven Central.

    +
  2. +
  3. +

    Define your entities using JNoSQL annotations. For example:

    +
  4. +
+
+
+
+
import jakarta.nosql.Column;
+import jakarta.nosql.Entity;
+import jakarta.nosql.Id;
+
+@Entity
+public class TestEntity {
+
+   @Id
+   private String id;
+
+   @Column
+   private String testField;
+}
+
+
+
+
+
+

Key-Value Database Configuration

+
+
+

Configuration

+
+

Configure the JNoSql KeyValue Quarkus extension by specifying the name of the database that will be utilized within the Eclipse JNoSQL framework in your application.properties:

+
+
+
+
jnosql.keyvalue.database=my-database-name
+
+
+
+
+

Usage

+
+

Inject the KeyValueTemplate into your class and use it to interact with the KeyValue database:

+
+
+
+
import jakarta.inject.Inject;
+import org.jnosql.artemis.key.KeyValueTemplate;
+
+@Inject
+private KeyValueTemplate template;
+
+public void insert(TestEntity entity) {
+    template.insert(entity);
+}
+
+
+
+
+
+
+

Key-Value Database Specific Configuration

+
+
+

When configuring databases for use with Quarkus and Eclipse JNoSQL, it’s important to note that instead of using the traditional Eclipse JNoSQL properties and configuration, Quarkus provides its properties and configuration for seamless integration. Below are sections detailing the configuration specifics for different NoSQL databases within the Quarkus environment.

+
+
+ + + + + +
+ + +The forthcoming sections will delve into the configuration details for ArangoDB, DynamoDB, Hazelcast, and Redis databases, providing comprehensive guidance for each. +
+
+
+

ArangoDB

+
+

Add the ArangoDB dependency to your project’s pom.xml:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.jnosql</groupId>
+    <artifactId>quarkus-jnosql-keyvalue-arangodb</artifactId>
+</dependency>
+
+
+
+

For specific configuration details, please refer to the ArangoDB JNoSQL driver.

+
+
+
+

DynamoDB

+
+

Add the DynamoDB dependency to your project’s pom.xml:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.jnosql</groupId>
+    <artifactId>quarkus-jnosql-keyvalue-dynamodb</artifactId>
+</dependency>
+
+
+
+

Please refer to the DynamoDB Quarkiverse extension for specific configuration details.

+
+
+
+

Hazelcast

+
+

Add the Hazelcast dependency to your project’s pom.xml:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.jnosql</groupId>
+    <artifactId>quarkus-jnosql-keyvalue-hazelcast</artifactId>
+</dependency>
+
+
+
+

Please refer to the Quarkus Hazelcast extension for specific configuration details.

+
+
+
+

Redis

+
+

Add the Redis dependency to your project’s pom.xml:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.jnosql</groupId>
+    <artifactId>quarkus-jnosql-keyvalue-redis</artifactId>
+</dependency>
+
+
+
+

For specific configuration details, please refer to the Redis Quarkus extension.

+
+
+
+
+
+

Document Database Configuration

+
+
+

Configuration

+
+

Configure the JNoSql Document Quarkus extension by specifying the database’s name in your application.properties:

+
+
+
+
jnosql.document.database=my-database-name
+
+
+
+
+

Usage

+
+

Inject the DocumentTemplate into your class and use it to interact with the Document database:

+
+
+
+
import jakarta.inject.Inject;
+import org.jnosql.artemis.document.DocumentTemplate;
+
+@Inject
+private DocumentTemplate template;
+
+public void insert(TestDocumentEntity entity) {
+    template.insert(entity);
+}
+
+
+
+
+
+
+

Document Database Specific Configuration

+
+
+

When configuring databases for use with Quarkus and Eclipse JNoSQL, it’s important to note that instead of using the traditional Eclipse JNoSQL properties and configuration, Quarkus provides its properties and configuration for seamless integration. Below are sections detailing the configuration specifics for different NoSQL databases within the Quarkus environment.

+
+
+ + + + + +
+ + +The forthcoming sections will delve into the configuration details for ArangoDB, CouchDB, Elasticsearch, MongoDB, and Solr databases, providing comprehensive guidance for each. +
+
+
+

ArangoDB

+
+

Add the ArangoDB dependency to your project’s pom.xml:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.jnosql</groupId>
+    <artifactId>quarkus-jnosql-document-arangodb</artifactId>
+</dependency>
+
+
+
+

For specific configuration details, please refer to the ArangoDB JNoSQL driver.

+
+
+
+

CouchDB

+
+

Add the CouchDB dependency to your project’s pom.xml:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.jnosql</groupId>
+    <artifactId>quarkus-jnosql-document-couchdb</artifactId>
+</dependency>
+
+
+
+

For specific configuration details, please refer to the CouchDB JNoSQL driver.

+
+
+
+

Elasticsearch

+
+

Add the Elasticsearch dependency to your project’s pom.xml:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.jnosql</groupId>
+    <artifactId>quarkus-jnosql-document-elasticsearch</artifactId>
+</dependency>
+
+
+
+

For specific configuration details, please refer to the ElasticSearch driver.

+
+
+
+

MongoDB

+
+

Add the MongoDB dependency to your project’s pom.xml:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.jnosql</groupId>
+    <artifactId>quarkus-jnosql-document-mongodb</artifactId>
+</dependency>
+
+
+
+

For specific configuration details, please refer to the MongoDB configuration.

+
+
+
+

Solr

+
+

Add the Solr dependency to your project’s pom.xml:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.jnosql</groupId>
+    <artifactId>quarkus-jnosql-document-solr</artifactId>
+</dependency>
+
+
+
+

For specific configuration details, please refer to the Solr JNoSQL driver.

+
+
+
+
+
+

Column Database Configuration

+
+
+

Configuration

+
+

Configure the JNoSql Column Quarkus extension by specifying the database’s name in your application.properties:

+
+
+
+
jnosql.column.database=my-database-name
+
+
+
+
+

Usage

+
+

Inject the ColumnTemplate into your class and use it to interact with the Column database:

+
+
+
+
import jakarta.inject.Inject;
+import org.jnosql.artemis.column.ColumnTemplate;
+
+@Inject
+private ColumnTemplate template;
+
+public void insert(TestColumnEntity entity) {
+    template.insert(entity);
+}
+
+
+
+
+
+
+

Column Database Specific Configuration

+
+
+

Cassandra

+
+

Add the Cassandra dependency to your project’s pom.xml:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.jnosql</groupId>
+    <artifactId>quarkus-jnosql-column-cassandra</artifactId>
+</dependency>
+
+
+
+

Please refer to the Cassandra Quarkus extension for specific configuration details.

+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-jpastreamer/1.x/includes/attributes.html b/quarkus-jpastreamer/1.x/includes/attributes.html new file mode 100644 index 0000000000..789957ea6d --- /dev/null +++ b/quarkus-jpastreamer/1.x/includes/attributes.html @@ -0,0 +1,919 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-jpastreamer/1.x/index.html b/quarkus-jpastreamer/1.x/index.html new file mode 100644 index 0000000000..cde50773f1 --- /dev/null +++ b/quarkus-jpastreamer/1.x/index.html @@ -0,0 +1,1120 @@ + + + + + + Quarkus JPASteamer Documentation :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus JPASteamer Documentation

+
+
+
+ + + + + +
+ + +This is an excerpt of the full JPAStreamer docs. For the full documentation, see +JPAStreamer User Guide. +
+
+
+

JPAStreamer is an extension for JPA applications developed by Speedment Inc. It allows JPA queries to be expressed as standard Java Streams, which means queries are type-safe and intuitive to read and write. The library is designed to augment the API of the underlying JPA provider, .e.g Hibernate, without the need for replacing existing software components, thus JPAStreamer can be integrated without effecting the current codebase.

+
+
+

Here is an example of a typical Stream query, highlighting the similarities between the Stream and CRUD operations.

+
+
+
+
    jpaStreamer.stream(Film.class) (1)
+                .filter(Film$.title.startsWith("A")) (2)
+                .sorted(Film$.length.reversed()) (3)
+                .limit(limit); (4)
+
+
+
+ + + + + + + + + + + + + + + + + +
1FROM
2SELECT
3ORDER BY
4LIMIT
+
+
+ + + + + +
+ + +It is important to notice that JPAStreamer does not materialize the Stream, but inspects the Stream pipeline and merge the operations to a standard HQL query which is executed in the database. +
+
+
+
+
+

Installation

+
+
+

Prerequisites

+
+

JPASteamer requires that the following criteria are fulfilled:

+
+
+
    +
  • +

    JDK 11+ installed and correctly mapped to JAVA_HOME

    +
  • +
  • +

    A Quarkus database application that relies on a JPA provider and has a JPA meta model. A common example is a standard Hibernate application with JPA Entities that maps to database objects.

    +
  • +
+
+
+
+

Maven Installation

+
+

To use JPAStreamer in your Quarkus application, simply add the JPAStreamer Quarkus extension to your build file. With Maven, this is done by adding the following dependency to your POM file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.jpastreamer</groupId>
+    <artifactId>quarkus-jpastreamer</artifactId>
+    <version>1.0.1</version>
+</dependency>
+
+
+
+

You can also add the JPAStreamer dependency automatically with the command:

+
+
+
+
quarkus extension add 'io.quarkiverse.jpastreamer:quarkus-jpastreamer'
+
+
+
+
+

JPAStreamer and Panache

+
+

Using the JPAStreamer Quarkus extension is no different from using the standard JPAStreamer library. Thus the JPAStreamer User Guide is the most complete reference during development.

+
+
+

There are however a few things to consider if running JPAStreamer alongside Panache in a Quarkus Hibernate application. The most recent version of JPAStreamer does not have support for Panache’s Active Record Pattern. This means the resulting JPAStreamer metamodel will most likely be erroneous. Therefore, we currently recommend Panache’s Repository Pattern.

+
+
+

JPAStreamer can be initialized in a Panache Repository as follows:

+
+
+
+
@ApplicationScoped
+public class FilmRepository implements PanacheRepository<Film> {
+
+    private final JPAStreamer jpaStreamer = JPAStreamer.of(this::getEntityManager); (1)
+
+    public String startsWitASortedByLength(short limit) {
+        return jpaStreamer.stream(Film.class) (2)
+                .filter(Film$.title.startsWith("A")) (3)
+                .sorted(Film$.length.reversed()) (4)
+                .limit(limit); (5)
+    }
+}
+
+
+
+ + + + + + + + + + + + + + + + + + + + + +
1Instantiate JPAStreamer with a Supplier<EntityManager>
2Selects the Film entity as the stream source
3Only selects films with a title that starts with "A"
4Sort the films by descending length (longest first)
5Limit the results to a given number of films
+
+
+
+

Native Builds

+
+

JPAStreamer is compatible with native builds, thus runs on Graal VM if the Quarkus application is built for native use.

+
+
+
+
+
+

Licence

+
+
+

The JPAStreamer Quarkus extension is released under the LGPL 2.1 License.

+
+
+
+
+

Short Video

+
+
+

Here is a short 1-minute video describing JPAStreamer:

+
+
+
+ +
+
+
+
+
+

Contributing

+
+
+

We gladly welcome any form of contributions, whether it is comments and questions, filed issues or pull requests.

+
+
+

Before we can accept your patches we need to establish a common legal ground to protect your rights to your contributions and the users of JPAStreamer. This is done by signing a Contributor License Agreement (CLA) with Speedment, Inc. The details of this process is laid out here.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-jpastreamer/dev/includes/attributes.html b/quarkus-jpastreamer/dev/includes/attributes.html new file mode 100644 index 0000000000..621dcfb2e7 --- /dev/null +++ b/quarkus-jpastreamer/dev/includes/attributes.html @@ -0,0 +1,919 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-jpastreamer/dev/index.html b/quarkus-jpastreamer/dev/index.html new file mode 100644 index 0000000000..2d3a8b10f4 --- /dev/null +++ b/quarkus-jpastreamer/dev/index.html @@ -0,0 +1,1176 @@ + + + + + + Quarkus JPASteamer Documentation :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus JPASteamer Documentation

+
+
+
+ + + + + +
+ + +This is an excerpt of the full JPAStreamer docs. For the full documentation, see +JPAStreamer User Guide. +
+
+
+

JPAStreamer is an extension for JPA applications developed by Speedment Inc. It allows JPA queries to be expressed as standard Java Streams, making queries type-safe and intuitive to read and write. The library is designed to enhance the API of the underlying JPA provider (e.g., Hibernate) without replacing existing software components. This allows for seamless integration of JPAStreamer into the current codebase.

+
+
+

Here is an example of a typical Stream query, highlighting the similarities between Stream and CRUD operations:

+
+
+
+
    jpaStreamer.stream(Film.class) (1)
+                .filter(Film$.title.startsWith("A")) (2)
+                .sorted(Film$.length.reversed()) (3)
+                .limit(limit); (4)
+
+
+
+ + + + + + + + + + + + + + + + + +
1FROM
2SELECT
3ORDER BY
4LIMIT
+
+
+ + + + + +
+ + +JPAStreamer does not materialize the Stream. Instead, it inspects the Stream pipeline and merges the operations into a standard HQL query that is executed in the database. +
+
+
+
+
+

Installation

+
+
+

Prerequisites

+
+

To use JPAStreamer, make sure the following criteria are fulfilled:

+
+
+
    +
  • +

    JDK 11+ installed and correctly mapped to JAVA_HOME.

    +
  • +
  • +

    A Quarkus database application that relies on a JPA provider and has a JPA metamodel. A common example is a standard Hibernate application with JPA Entities that map to database objects.

    +
  • +
+
+
+
+

Maven Installation

+
+

To use JPAStreamer in your Quarkus application, add the JPAStreamer Quarkus extension to your build file. With Maven, add the following dependency to your POM file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.jpastreamer</groupId>
+    <artifactId>quarkus-jpastreamer</artifactId>
+    <version>3.0.3.Final</version>
+</dependency>
+
+
+
+

You can also add the JPAStreamer dependency automatically with the following command:

+
+
+
+
quarkus extension add 'io.quarkiverse.jpastreamer:quarkus-jpastreamer'
+
+
+
+
+

Instantiating JPAStreamer

+
+

Using the JPAStreamer Quarkus extension is no different from using the standard JPAStreamer library. Thus, the JPAStreamer User Guide is the most complete reference during development.

+
+
+

Here is an example of how JPAStreamer can be instantiated with CDI Injection in a Hibernate application:

+
+
+
+
@ApplicationScoped
+public class FilmRepository {
+
+    @Inject
+    JPAStreamer jpaStreamer; (1)
+
+    public String startsWitASortedByLength(short limit) {
+        return jpaStreamer.stream(Film.class) (2)
+                .filter(Film$.title.startsWith("A")) (3)
+                .sorted(Film$.length.reversed()) (4)
+                .limit(limit); (5)
+    }
+}
+
+
+
+ + + + + + + + + + + + + + + + + + + + + +
1Inject an instance of JPAStreamer
2Selects the Film entity as the stream source
3Only selects films with a title that starts with "A"
4Sort the films by descending length (longest first)
5Limit the results to a given number of films
+
+
+
+

JPAStreamer and Panache

+
+

When running JPAStreamer alongside Panache in a Quarkus Hibernate application, there are a few things to consider. The most recent version of JPAStreamer does not have support for Panache’s Active Record Pattern. This means the resulting JPAStreamer metamodel will most likely be erroneous. Therefore, we currently recommend Panache’s Repository Pattern.

+
+
+

JPAStreamer can be injected in a Panache Repository as follows:

+
+
+
+
@ApplicationScoped
+public class FilmRepository implements PanacheRepository<Film> {
+
+    @Inject
+    JPAStreamer jpaStreamer; (1)
+
+    public String startsWitASortedByLength(short limit) {
+        return jpaStreamer.stream(Film.class) (2)
+                .filter(Film$.title.startsWith("A")) (3)
+                .sorted(Film$.length.reversed()) (4)
+                .limit(limit); (5)
+    }
+}
+
+
+
+ + + + + + + + + + + + + + + + + + + + + +
1Inject an instance of JPAStreamer
2Selects the Film entity as the stream source
3Only selects films with a title that starts with "A"
4Sort the films by descending length (longest first)
5Limit the results to a given number of films
+
+
+
+

Native Builds

+
+

JPAStreamer is compatible with Quarkus native builds.

+
+
+
+
+
+

Demo Repository

+
+
+

If you want to see JPAStreamer in a more complete context, check out the JPAStreamer demo repository here.

+
+
+
+
+

Licence

+
+
+

The JPAStreamer Quarkus extension is released under the LGPL 2.1 License.

+
+
+
+
+

Short Video

+
+
+

Here is a short 1-minute video describing JPAStreamer:

+
+
+
+ +
+
+
+
+
+

Contributing

+
+
+

We gladly welcome any form of contributions, including comments, questions, filed issues, or pull requests.

+
+
+

Before we can accept your patches, we need to establish a common legal ground to protect your rights to your contributions and the users of JPAStreamer. This is done by signing a Contributor License Agreement (CLA) with Speedment, Inc. The details of this process is laid out here.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-jsch/dev/includes/attributes.html b/quarkus-jsch/dev/includes/attributes.html new file mode 100644 index 0000000000..9801a27217 --- /dev/null +++ b/quarkus-jsch/dev/includes/attributes.html @@ -0,0 +1,912 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-jsch/dev/index.html b/quarkus-jsch/dev/index.html new file mode 100644 index 0000000000..453deae026 --- /dev/null +++ b/quarkus-jsch/dev/index.html @@ -0,0 +1,941 @@ + + + + + + Quarkus - JSch :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus - JSch

+
+
+
+

The Quarkus JSch extensions brings native support for the JSch library.

+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.jsch:quarkus-jsch extension first. +In your pom.xml file, add:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.jsch</groupId>
+    <artifactId>quarkus-jsch</artifactId>
+    <version>3.0.7</version>
+</dependency>
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-kafka-streams-processor/dev/includes/attributes.html b/quarkus-kafka-streams-processor/dev/includes/attributes.html new file mode 100644 index 0000000000..6a25e4a726 --- /dev/null +++ b/quarkus-kafka-streams-processor/dev/includes/attributes.html @@ -0,0 +1,912 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-kafka-streams-processor/dev/includes/kafka-streams-processor-configuration-keys.html b/quarkus-kafka-streams-processor/dev/includes/kafka-streams-processor-configuration-keys.html new file mode 100644 index 0000000000..fb27dd5406 --- /dev/null +++ b/quarkus-kafka-streams-processor/dev/includes/kafka-streams-processor-configuration-keys.html @@ -0,0 +1,1225 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The Kafka topics for incoming messages (comma separated if multiple topics).

+
+
+

Environment variable: KAFKASTREAMSPROCESSOR_INPUT_TOPIC

+
+
+
+

string

+
+
+
+
+

The Kafka topics for outgoing messages.

+
+
+

Environment variable: KAFKASTREAMSPROCESSOR_OUTPUT_TOPIC

+
+
+
+

string

+
+
+
+
+

The Kafka topic for outgoing messages for the given sink name.

+
+
+

Environment variable: KAFKASTREAMSPROCESSOR_OUTPUT_SINKS__sink__TOPIC

+
+
+

string

+
+
+
+

Dead letter Queue name

+
+
+

Environment variable: KAFKASTREAMSPROCESSOR_DLQ_TOPIC

+
+
+

String

+
+
+
+

Global Dead letter Queue to produce error messages note manage by the application

+
+
+

Environment variable: KAFKASTREAMSPROCESSOR_GLOBAL_DLQ_TOPIC

+
+
+

String

+
+
+
+

Global Dead letter Queue maximum request size

+
+
+

Environment variable: KAFKASTREAMSPROCESSOR_GLOBAL_DLQ_PRODUCER_MAX_MESSAGE_SIZE

+
+
+

int

java.lang.Integer.MAX_VALUE

+
+
+
+

Enable the production of the error message in the global DLQ when the application can not manage the error.

+
+
+

Environment variable: RESILIENCY_KAFKA_GLOBALDLQ_ENABLED

+
+
+

boolean

false

+
+
+
+

Kafka Streams Processor error strategy

+
+
+

Environment variable: KAFKASTREAMSPROCESSOR_ERROR_STRATEGY

+
+
+

String

continue

+
+
+
+

Max number of retries. See microprofile doc.

+
+
+

Environment variable: KAFKASTREAMSPROCESSOR_RETRY_MAX_RETRIES

+
+
+

String

-1

+
+
+
+

The delay between retries. See microprofile doc.

+
+
+

Environment variable: KAFKASTREAMSPROCESSOR_RETRY_DELAY

+
+
+

long

0

+
+
+
+

The unit for delay. Default milliseconds. See microprofile doc.

+
+
+

Environment variable: KAFKASTREAMSPROCESSOR_RETRY_DELAY_UNIT

+
+
+

ChronoUnit

MILLIS

+
+
+
+

The max duration. See microprofile doc.

+
+
+

Environment variable: KAFKASTREAMSPROCESSOR_RETRY_MAX_DURATION

+
+
+

long

180000

+
+
+
+

The unit for max duration. See microprofile doc.

+
+
+

Environment variable: KAFKASTREAMSPROCESSOR_RETRY_DURATION_UNIT

+
+
+

ChronoUnit

MILLIS

+
+
+
+

Jitter value to randomly vary retry delays for. See microprofile doc.

+
+
+

Environment variable: KAFKASTREAMSPROCESSOR_RETRY_JITTER

+
+
+

long

200

+
+
+
+

The delay unit for jitter. Default is milliseconds. See microprofile doc.

+
+
+

Environment variable: KAFKASTREAMSPROCESSOR_RETRY_JITTER_DELAY_UNIT

+
+
+

ChronoUnit

MILLIS

+
+
+
+

The list of exception types that should trigger a retry. +Default is the provided io.quarkiverse.kafkastreamsprocessor.api.exception.RetryableException. +See microprofile doc.

+
+
+

Environment variable: KAFKASTREAMSPROCESSOR_RETRY_RETRY_ON

+
+
+

Exception class names

[io.quarkiverse.kafkastreamsprocessor.api.exception.RetryableException]

+
+
+
+

The list of exception types that should <i>not</i> trigger a retry. +Default is empty list +See microprofile doc.

+
+
+

Environment variable: KAFKASTREAMSPROCESSOR_RETRY_ABORT_ON

+
+
+

Exception class names

[]

+
+
+
+
+ + + + + + + diff --git a/quarkus-kafka-streams-processor/dev/includes/quarkus-other-extension-configurations.html b/quarkus-kafka-streams-processor/dev/includes/quarkus-other-extension-configurations.html new file mode 100644 index 0000000000..87d545a906 --- /dev/null +++ b/quarkus-kafka-streams-processor/dev/includes/quarkus-other-extension-configurations.html @@ -0,0 +1,1007 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

A comma-separated list of topic names.

+
+
+

The micro-service will only be ready once all these topics are present in the Kafka cluster.

+
+
+

Environment variable: QUARKUS_KAFKA_STREAMS_TOPIC

+
+
+

list of string

+
+
+
+

A unique identifier for this Kafka Streams application.

+
+
+

It is used as Kafka consumer group id, so multiple replicas of micro-service balance their partition workload.

+
+
+

Environment variable: QUARKUS_KAFKA_STREAMS_APPLICATION_ID

+
+
+

string

${quarkus.application.name}

+
+
+
+

It is the number of milliseconds a producer is willing to wait before sending a batch out.

+
+
+

Environment variable: KAFKA_STREAMS_PRODUCER_LINGER_MS

+
+
+

int

0

+
+
+
+

The compression type for all data generated by the producer.

+
+
+

Environment variable: KAFKA_STREAMS_COMPRESSION_TYPE

+
+
+

Possible values:

+

none +gzip +snappy +lz4 +zstd

none

+
+
+
+
+ + + + + + + diff --git a/quarkus-kafka-streams-processor/dev/index.html b/quarkus-kafka-streams-processor/dev/index.html new file mode 100644 index 0000000000..8858c695f6 --- /dev/null +++ b/quarkus-kafka-streams-processor/dev/index.html @@ -0,0 +1,2754 @@ + + + + + + Kafka Streams Processor :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Kafka Streams Processor

+
+
+
+

This extension eases the implementation of event-driven architecture streaming microservices based on Kafka Streams’ Processor API. +It avoids Kafka Streams' users a lot of boilerplate code to have a dedicated topology and a proper production readiness (health, observability, error handling). +All that is left to develop is a simple Processor class. +The extension takes care of the rest.

+
+
+
+
+

Streaming processor

+
+
+

A streaming microservice has some requirements:

+
+
+
    +
  • +

    Kafka Streams processors are not thread-safe, so a processor scope is @jakarta.enterprise.context.Dependent by default.

    +
  • +
  • +

    An incoming message, from an input topic, can be acknowledged only when it has been processed and its result message has been produced and stored in a Kafka output topic.

    +
  • +
  • +

    If an incoming message could not be acknowledged (e.g: a microservice crash) then the incoming message will be redelivered (at-least-once guarantee).

    +
  • +
  • +

    Incoming messages are processed in the order of arrival (ordering guarantee)

    +
  • +
+
+
+

There are currently several bootstraps or libraries that support writing stream processor-based applications on different broker technologies. +This extension’s processor solution is based on Kafka Streams' Processor API.

+
+
+

Kafka Streams

+
+

Kafka Streams is an opensource client library that allows to write streaming applications.

+
+
+

It is enabled by the quarkus-kafka-streams extension:

+
+
+
pom.xml
+
+
<dependency>
+    <groupId>io.quarkus</groupId>
+    <artifactId>quarkus-kafka-streams</artifactId>
+    <scope>runtime</scope>
+</dependency>
+
+
+
+

Only one threading model is supported: 1 thread per topic-partition (see details)

+
+
+

The number of partitions on the source topic determines up to how many threads can consume in parallel.

+
+
+

Synchronous/blocking programing must be used to ensure guarantee of execution and ordering.

+
+
+ + + + + +
+ + +There is a proposal under discussion for adding asynchronous processing to Kafka Streams. +
+
+
+
+

A simplified Processor API

+
+

On top of Kafka Streams, the quarkus-kafka-streams-processor extension adds features to help you to write streaming microservices.

+
+
+

The following dependency needs to be added:

+
+
+
+
<project>
+    <dependencyManagement>
+      <dependencies>
+        <dependency>
+          <groupId>io.quarkiverse.kafkastreamsprocessor</groupId>
+          <artifactId>quarkus-kafka-streams-processor-bom</artifactId>
+          <version>${quarkus.kafkastreamsprocessor.version}</version>
+          <type>pom</type>
+          <scope>import</scope>
+        </dependency>
+      </dependencies>
+    </dependencyManagement>
+    <dependencies>
+      <dependency>
+        <groupId>io.quarkiverse.kafkastreamsprocessor</groupId>
+        <artifactId>quarkus-kafka-streams-processor-api</artifactId>
+      </dependency>
+      <dependency>
+        <groupId>io.quarkiverse.kafkastreamsprocessor</groupId>
+        <artifactId>quarkus-kafka-streams-processor</artifactId>
+        <scope>runtime</scope>
+      </dependency>
+    </dependencies>
+</project>
+
+
+
+

With the extension, it is expected to define an annotated Kafka Streams' Processor. +It is discovered as a CDI bean and instrumented by the Quarkus runtime. +The difference here with the fully fledged Kafka Streams Processor API is that there is no need to build a custom Topology for each new microservice. +It is built by the Quarkus runtime.

+
+
+

Example:

+
+
+
PingProcessor.java
+
+
@Slf4j
+@Processor (1)
+public class PingProcessor extends ContextualProcessor<String, Ping, String, Ping> { (2)
+
+  @Override
+  public void process(Record<String, Ping> record) { (3)
+    resultMessage = countChars(record.value().getMessage());
+    Ping pong = Ping.newBuilder().setMessage(resultMessage).build();
+    context().forward(record.withValue(pong)); (4)
+  }
+
+  /**
+   * Counts the nb of characters and returns it as string.
+   */
+  private String countChars(String input) {
+    return String.valueOf(input.length());
+  }
+}
+
+
+
+ + + + + + + + + + + + + + + + + +
1Processors are beans managed by CDI, and as such need to be annotated with +@io.quarkiverse.kafkastreamsprocessor.api.Processor so that any other CDI dependency may be injected. +Kafka Streams' processors are not thread-safe, so a processor scope is @jakarta.enterprise.context.Dependent by default.
2Directly extend org.apache.kafka.streams.processor.api.ContextualProcessor, specifying the type of keys and values. +For keys, only type String is supported. +For values, see supported types.
3The process method is called for each incoming message. +Any processing must be done synchronously.
4The forward method allows to produce an outgoing message. +Internally Kafka Streams links the acknowledgment on the outgoing message with the commit of the associated incoming message.
+
+
+
+

Topology builder

+
+

In short (see core concepts), in Kafka Streams a Topology is made of:

+
+
+
    +
  • +

    Sources: 1 or more input topics

    +
  • +
  • +

    Processors: a graph of 1 or more record handlers

    +
  • +
  • +

    Stores (optional): for stateful use cases, the processor must be assigned one or multiple stores to keep the state.

    +
  • +
  • +

    Sinks: 1 or more output topics

    +
  • +
+
+
+

The extension will automatically build the following topology:

+
+
+
    +
  • +

    Scan for a CDI bean of type org.apache.kafka.streams.processor.api.Processor<KIn, VIn, KOut, VOut> (single processor). +The deprecated type org.apache.kafka.streams.processor.Processor<K, V> is also supported for backward-compatibility.

    +
  • +
  • +

    Register a source for topics in kafkastreamsprocessor.input.topic, String key serializer and Protobuf value deserializer based on the declared type <V> of the processor.

    +
  • +
  • +

    Register as many sinks as topics listed in properties matching kafkastreamsprocessor.output.sinks.<sink>.topic, String key serializer and Protobuf value serializer. +Sink name is taken from the properties name. +If no kafkastreamsprocessor.output.sinks.<sink>.topic properties are defined and a single topic is defined in kafkastreamsprocessor.output.topic, a default sink is used.

    +
  • +
+
+
+
+
+
+

Configuration

+
+
+

Please consider two kind of properties:

+
+
+

First class citizen properties

+
+

First class citizen properties are a set of properties prefixed with quarkus.kafka-streams. +They are consumed by the Quarkus kafka-streams extension itself (used at build time and overridable, for some of them, at runtime).

+
+
+

In Kafka Streams Processor the following configuration keys are required:

+
+ + +
+

All the properties used in the extension are recapped +here

+
+
+
+

Pass-through properties

+
+

Due to the important number of properties that can be set to configure a Kafka Streams application, it’s impossible for Quarkus extension to know them all.

+
+
+

But it’s possible to use pass-through properties in the configuration of your application, using the name of property but prefixed with kafka-streams.

+
+
+
+
# First citizen property
+quarkus.kafka-streams.bootstrap-servers=localhost:9092
+
+# Pass-through properties
+kafka-streams.producer.linger.ms=0
+kafka-streams.compression.type=gzip
+
+
+
+
+

Override pass-through properties

+
+

Overriding pass-through properties at runtime is a little bit hacky because you need to prefix the property with quarkus. +Then, you can pass it as a Java system property.

+
+
+ + + + + +
+ + +Passing the property as an environment variable with Microprofile Config convention IS NOT working. +
+
+
+

Fo example, the possible way to override a pass-through property in a Kafka Streams Processor microservice would be to use the corresponding system property in the JVM commandline:

+
+
+
+
-Dquarkus.kafka-streams.producer.linger.ms=50
+
+
+
+
+
+
+

Data serialization

+
+
+

Data serialization refers to the process of converting complex data structures or objects into a format that can be easily transmitted over a network. +The extension’s processors support different serialization formats. +By analyzing the types of declared input and output payloads of the processor, it’s possible to infer the type of data to serialize and set up the correct serializer and deserializer.

+
+
+

As of today, the extension’s processors support three first-class citizen formats and one customization feature:

+
+
+ +
+
+ + + + + +
+ + +JSON is the default serialization format. +If the payload cannot be serialized to JSON, an error is thrown. +Depending on the Global DLQ Error management the message will be produced in the DLQ, and the incoming message will be acknowledged in the input topic. +
+
+
+

JSON

+
+

JSON is a first class citizen serialization format, the SDK will use JSON as default serialization format.

+
+
+

Example

+
+

In this example, we implement a processor working with a POJO as value type. +The POJO is read from kafka, or written to kafka, with the POJO’s JSON textual representation.

+
+
+
PojoProcessor.java
+
+
@Slf4j
+@Processor (1)
+public class PojoProcessor extends ContextualProcessor<String, SamplePojo, String, SamplePojo> { (2)
+    @Override
+    public void process(Record<String, SamplePojo> record) { (3)
+        String reversedMsg = new StringBuilder(record.value().getStringField()).reverse().toString();
+        log.info("Received value {} sending back {} in response", record.value().getStringField(), reversedMsg);
+        SamplePojo pojo = new SamplePojo(reversedMsg, record.value().getNumericalField() + 37,
+                !record.value().getBooleanField());
+        context().forward(record.withValue(pojo)); (4)
+    }
+}
+
+
+
+ + + + + + + + + + + + + + + + + +
1Your Processor is declared with the annotation as for a regular processor.
2The handled value type, is a class that can be serialized in JSON.
3Same POJO value in the process() method.
4Similarly, a POJO value can be sent down to the output topic.
+
+
+
+

Configuring JSON serialization

+
+

In order to customize the JSON serialization, the SDK relies on the ObjectMapper customization from Quarkus

+
+
+
+
+

Serialization to Protobuf and its caveats

+
+

Protobuf values and String are the first class citizen data types in Kafka Streams Processor messaging.

+
+
+

To ease development with Protobuf, various libraries support code generation from .proto files or +OpenAPI descriptors, for instance openapi-generator.

+
+
+

The main problem with this approach is that certain details of the serialization logic are implementation-dependent and may have impacts on the usability of the generated APIs.

+
+
+

Null values

+
+

One such case in the handling of optional elements, i.e. how to detect in business code if an element was absent, or present but with an empty value.

+
+
+

There are multiple solutions to this problem, e.g.:

+
+
+
    +
  • +

    Use built-in primitive types

    +
  • +
  • +

    Use custom Nullable types instead of primitives

    +
  • +
  • +

    Use built-in wrapper types instead of primitives

    +
  • +
  • +

    Use optional in proto3

    +
  • +
+
+
+
+

Serializer & Deserializer Customization

+
+
API
+
+

The SDK provides the interface io.quarkiverse.kafkastreamsprocessor.api.configuration.ConfigurationCustomizer which allows you to specify the serializer and deserializer you need. +You need to declare a bean implementing that interface.

+
+
+

It is available through the following dependency:

+
+
+
pom.xml
+
+
<dependency>
+  <groupId>io.quarkiverse.kafkastreamsprocessor</groupId>
+  <artifactId>quarkus-kafka-streams-processor-api</artifactId>
+</dependency>
+
+
+
+ + + + + +
+ + +Multiple customizers can be defined, and their execution order controlled through @Priority annotations. +
+
+
+
+
Example
+
+

In this example, we implement a processor working with a POJO as value type. +The POJO is read from kafka, or written to kafka, with a custom serialization format provided by sink and source serializer/deserializer that need to be known at build time.

+
+
+
PojoProcessor.java
+
+
@Slf4j
+@Processor (1)
+public class PojoProcessor extends ContextualProcessor<String, SamplePojo, String, SamplePojo> { (2)
+    @Override
+    public void process(Record<String, SamplePojo> record) { (3)
+        String reversedMsg = new StringBuilder(record.value().getStringField()).reverse().toString();
+        log.info("Received value {} sending back {} in response", record.value().getStringField(), reversedMsg);
+        SamplePojo pojo = new SamplePojo(reversedMsg, record.value().getNumericalField() + 37,
+                !record.value().getBooleanField());
+        context().forward(record.withValue(pojo)); (4)
+    }
+}
+
+
+
+ + + + + + + + + + + + + + + + + +
1Your Processor is declared with the annotation as for a regular processor.
2The handled value type, in this example, is a simple POJO, nothing fancy.
3Same POJO value in the process() method.
4Similarly, a POJO value can be sent down to the output topic.
+
+
+
+
+
+

Ser/Des Customization

+
+
SampleConfigurationCustomizer.java
+
+
@Dependent
+public class SampleConfigurationCustomizer implements ConfigurationCustomizer {
+  @Override
+  public void fillConfiguration(Configuration configuration) {
+      configuration.setSinkValueSerializer(new MyCustomSerializer<SamplePojo>());
+    configuration.setSourceValueSerde(new MyCustomSerde(SamplePojo));
+  }
+}
+
+
+
+

The io.quarkiverse.kafkastreamsprocessor.api.configuration.ConfigurationCustomizer implementation provided sets the required Serializer and Deserializer into the method’s io.quarkiverse.kafkastreamsprocessor.api.configuration.Configuration object. +In this example, we set a custom serialization through the usage of Kafka Serdes.

+
+
+
+
+
+

Error management

+
+
+

Strategy for error management

+
+

When an exception occurs while processing a record, different strategies have been defined:

+
+
+
    +
  • +

    "continue" (default) : drop the message and continue processing

    +
  • +
  • +

    "fail" (not implemented yet) : fail and stop processing more message

    +
  • +
  • +

    "dead-letter-queue" : send the message to the DLQ and continue processing

    +
  • +
+
+
+
+

DLQ monitoring

+
+

Such exception occurs are counted by a custom metric of this extension. +If the dead-letter-queue strategy is chosen, the messages produced to the DLQ topics are counted.

+
+
+
+

Dead-letter-queue strategy

+
+

In the case of a dead-letter-queue strategy, the DLQ topic is added to the readiness probe to ensure the ability to produce the poisonous message to this topic.

+
+
+ + + + + +
+ + +This local DLQ is meant only to store the poisonous message that the application could not consume successfully. +For error happening at production time, one can use a global DLQ defined for this purpose. +
+
+
+

Global Dead Letter Queue

+
+

When a microservice cannot produce to a downstream Kafka broker and that the error cannot be managed by the application, the message will be produced in a global DLQ.

+
+
+

The following value must be set in the application.properties file

+
+
+
application.properties
+
+
kafkastreamsprocessor.global-dlq.topic=<global-dlq-topic>
+
+
+
+

By default, the maximum size for the message is java.lang.Integer.MAX_VALUE for the global DLQ. +It can be modified with:

+
+
+
application.properties
+
+
kafkastreamsprocessor.global-dlq.max-message-size=3000
+
+
+
+

All the properties used in the extension are recapped +here

+
+
+
+

Error metadata

+
+

For tracking purpose following headers are added to the record:

+
+
+
    +
  • +

    dead-letter-reason: The reason of the failure if any (Exception message)

    +
  • +
  • +

    dead-letter-cause: The cause of the failure if any (Exception cause)

    +
  • +
  • +

    dead-letter-topic: The original topic of the record, in this case the output topic where production failed

    +
  • +
  • +

    dead-letter-partition: The original partition of the record

    +
  • +
+
+
+
+
+

Retries

+
+

In order to improve resiliency and to avoid losing messages due to the temporary unavailability of an external system (database, HTTP endpoint, …​), the Kafka Streams Processor SDK has a retry logic for the exceptions raised during the process of the message.

+
+
+ + + + + +
+ + +The retry relies on the at-least-once guarantees of messaging: the processing must already support being called multiple times with the same message, and must make sure any external interaction is idempotent. +
+
+
+

A RetryDecorator has been introduced inside the topology definition. +Its responsibility is to retry indefinitely the @io.quarkiverse.kafkastreamsprocessor.api.Processor retryableProcess method when a io.quarkiverse.kafkastreamsprocessor.api.exception.RetryableException is raised.

+
+
+

Configuration

+
+

The default behavior can be overriden via the following configuration, ie:

+
+
+
application.properties
+
+
kafkastreamsprocessor.retry.max-retries=-1
+kafkastreamsprocessor.retry.retry-on=io.quarkiverse.kafkastreamsprocessor.api.exception.RetryableException
+
+
+
+

As this implementation is based on Eclipse Microprofile Fault Tolerance it’s also possible to override some default policy (ie: maxDuration, jitter…​) under the prefix kafkastreamsprocessor.retry..

+
+
+
+

Ad hoc usage

+
+

You can also use the Fault Tolerance @org.eclipse.microprofile.faulttolerance.Retry annotation for some other logic in your code.

+
+
+
PingerService.java
+
+
public class PingerService {
+    @Retry (1)
+    @Override
+    public Response ping(String message) {
+    }
+}
+
+
+
+ + + + + +
1Define the method to retry with org.eclipse.microprofile.faulttolerance.Retry annotation
+
+
+
application.properties
+
+
# Override max retry default value
+io.quarkiverse.kafkastreamsprocessor.example.PingerService/Retry/maxRetries=3
+
+
+
+
+
+
+
+

Monitoring

+
+
+

Kafka metrics cardinality

+
+

Users have to pay attention to some specificities of Kafka Streams metrics: some metrics have labels whose values are dynamic. +There’s a possible impact on Prometheus because this could drastically increase the amount of data needed to store the time series. +To understand how IDs label are computed, one can read the following documentation on KafkaStreams runtime information

+
+
+

To mitigate the impact, it is a good practice to fix arbitrary prefix to dynamic labels but still, the dynamicity cannot be removed entirely.

+
+
+

As an example, all Kafka metrics have in common the label client_id, the resulting computation of the label by the SDK is:

+
+
+
Example metric
+
+
kafka_consumer_fetch_manager_records_consumed_total{client_id="application-name-StreamThread-1-consumer",kafka_version="3.6.3",topic="ping-events",} 1.0
+
+
+
+

The metric client_id value is formed of :

+
+
+
    +
  • +

    quarkus-kafka-streams-processor-simple-sample which is the client id defined in kafka-streams.client.id config property

    +
  • +
  • +

    StreamThread-1-consumer which is computed by KafkaStreams and depends on the number of threads.

    +
  • +
+
+
+

So it is a good practice to set kafka-streams.client.id with the name of the microservice.

+
+
+
+

quarkus-kafka-streams-processor metric list

+
+

This list includes the additional metrics, on top of the Kafka Streams and the general Kafka ones, that this extension instruments:

+
+ + +++++ + + + + + + + + + + + + + + +
Table 1. Messaging metrics
Micrometer metric nameTypeDescription

kafkastreamsprocessor.processor.errors

Counter

Total number of errors encountered during Kafka Streams message processing

+ + +++++ + + + + + + + + + + + + + + +
Table 2. Punctuation metrics
Micrometer metric nameTypeDescription

kafkastreamsprocessor.punctuation.errors

Counter

The number of times a Punctuator’s execution failed with an exception since the start of the microservice.

+ + +++++ + + + + + + + + + + + + + + + + + + + +
Table 3. Dead Letter Queue Metrics
Micrometer metric nameTypeDescription

kafkastreamsprocessor.dlq.sent

Counter

The number of messages sent to DLQ. This metrics differs from the kafkastreamsprocessor.processor.errors in that the deserialization errors are taken into account. If no DLQ strategy is chosen, then this metric will be 0. Messages too large for the DLQ will be counted both in this metrics and in kafkastreamsprocessor.global.dlq.sent.

kafkastreamsprocessor.global.dlq.sent

Counter

The number of messages sent to global DLQ.

+
+
+
+
+

A comparison between Reactive Messaging Kafka and Kafka Streams

+
+
+

These two technologies can be used to create streaming microservices to be used in Event-Driven architecture applications.

+
+
+

As explained in the Streaming processor introduction, a streaming microservice has some requirements:

+
+
+
    +
  • +

    An incoming message, from an input topic, can be acknowledged only when it has been processed and its result message has been produced and stored in a Kafka output topic.

    +
  • +
  • +

    If an incoming message could not be acknowledged (e.g: a microservice crash) then the incoming message will be redelivered (at-least-once guarantee).

    +
  • +
  • +

    Incoming messages are processed in the order of arrival (ordering guarantee)

    +
  • +
+
+
+

In the Kafka Streams bootstrap, the guarantee of ordering from the source topic has a direct impact on the message consumption and the scalability model. +As explained in the Kafka Streams, the number of partitions of the source topic determines how many threads can consume in parallel.

+
+
+

In other terms, for an input topic, it’s not possible to process more that x messages in parallel where x is the number of partitions of the source topic.

+
+
+ + + + + +
+ + +Starting asynchronous processing in a Kafka Streams microservice would lead to loss of messages: acknowledgement of the incoming messages will be de-synchronized from the production of messages once outgoing messages have been processed. +
+
+
+

Reactive messaging has a different architecture and threading model compared to Kafka Streams. +But by default, when processing messages it comes with the same guarantees seen above.

+
+
+

However, it’s possible to alter the behaviour of the message processing with annotations to improve, in a drastic manner, the concurrency of a microservice. +The purpose of increasing concurrency is to be able to cope with streaming microservice that need to call slow remote APIs, this is the bridging from event-driven to service-oriented architecture.

+
+
+

Concurrent processing in Reactive Messaging

+
+
+
  @Incoming("ping-events") (1)
+  @Outgoing("pong-events") (2)
+  @Blocking(ordered = false) (3)
+  public Ping process(Ping ping) {
+    return api.remoteCall();
+  }
+
+
+
+ + + + + + + + + + + + + +
1@Incoming is declaring this method as a subscriber for the channel named ping-events
2@Outgoing is declaring this method as a producer for the channel named pong-events
3@io.smallrye.reactive.messaging.annotations.Blocking Indicates that this method is running out of the processing thread, inside a worker thread and the order of the messages is not important. +Note that once the execution is finished the result is handled back to the processing thread.
+
+
+
+

Guarantee of delivery in concurrent processing

+
+

In Kafka Streams, performing asynchronous calls would lead to the possibility of messages not being redelivered. +What about the guarantee of delivery when processing concurrent messages in Reactive Messaging?

+
+
+

It’s up to the acknowledgement policy to commit incoming messages when it has been processed concurrently. +The default strategy is throttled and guarantees at-least-once delivery

+
+
+ + + + + +
+ + +throttled keeps track of received messages and commits to the next offset after the latest acked message in sequence. +This strategy guarantees at-least-once delivery even if the channel performs asynchronous processing. +
+
+
+
+

Effects of throttled.unprocessed-record-max-age.ms on the liveness probe

+
+

When using the throttled strategy, the commit of the sequence of messages will happen only when all messages have been processed (ordered or not).

+
+
+

If the processing method does not return before reaching the throttled.unprocessed-record-max-age.ms timeout, the microservice will be considered as unhealthy and the liveness probe will fail and the microservice will be restarted. +It means that, for example, if a remote API takes too long to respond for some queries, and its timeout is configured with a value above throttled.unprocessed-record-max-age.ms, then messages will be received again after the restart, acting like a poison pill.

+
+
+
+

Processors summary

+
+

Here’s a recap of the guarantees offered by the different way of processing messages.

+
+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ProcessorGuarantee of orderAt-least-once deliveryMax concurrency

Default Kafka Streams

Yes

Yes

number of partitions

Kafka Streams asynchronous

No

No

number of threads

Default Reactive Messaging

Yes

Yes

number of partitions

Reactive Messaging with @Blocking

Yes

Yes

number of partitions

Reactive Messaging with @Blocking(order=false)

No

Yes

number of threads

+
+
+
+
+

Stateful EDA

+
+
+

Introduction

+
+

To support stateful requirements, Kafka Streams' Processor need to implement a State-Store. +By default, no State-Store are linked to the io.quarkiverse.kafkastreamsprocessor.api.Processor but the application can override this configuration.

+
+
+
+

API

+
+

The SDK provides the interface io.quarkiverse.kafkastreamsprocessor.api.configuration.ConfigurationCustomizer which allows you to specify the State-Store you need. +You need to declare a bean implementing that interface.

+
+
+

It is available through the following dependency:

+
+
+
pom.xml
+
+
<dependency>
+  <groupId>io.quarkiverse.kafkastreamsprocessor</groupId>
+  <artifactId>quarkus-kafka-streams-processor-api</artifactId>
+</dependency>
+
+
+
+ + + + + +
+ + +Multiple customizers can be defined, and their execution order controlled through @Priority annotations. +
+
+
+
+

Example

+
+

In this example, we implement a processor which is using a State-Store.

+
+
+

Processor

+
+
StateStoreProcessor.java
+
+
@Slf4j
+@Processor (1)
+public class PingProcessor extends ContextualProcessor<String, Ping, String, Ping> {
+    private KeyValueStore<String, String> pingData;
+
+    @Override
+    public void init(ProcessorContext<String, Ping> context) {
+        super.init(context);
+        pingData = context.getStateStore("ping-data"); (2)
+        context.schedule(Duration.ofMillis(1L), PunctuationType.STREAM_TIME, new DuplicateValuePunctuator(pingData));
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void process(Record<String, Ping> record) {
+        log.info("Process the message: {}", record.value().getMessage());
+
+        String previousValue = pingData.get(record.key());
+        pingData.put(record.key(), record.value().getMessage());
+
+        if (previousValue == null) {
+            context().forward(
+                    record.withValue(Ping.newBuilder().setMessage("Store initialization OK for " + record.key()).build()));
+        } else {
+            context().forward(record.withValue(
+                    Ping.newBuilder().setMessage("Previous value for " + record.key() + " is " + previousValue).build()));
+        }
+    }
+}
+
+
+
+ + + + + + + + + +
1Your Processor is declared with the annotation as for a regular processor.
2The definition and initialization of your state store.
+
+
+
+

StateStore Customization

+
+
SampleConfigurationCustomizer.java
+
+
@Dependent
+public class SampleConfigurationCustomizer implements ConfigurationCustomizer {
+    @Override
+    public void fillConfiguration(Configuration configuration) {
+        List<StoreConfiguration> storeConfigurations = new ArrayList<>();
+        // Add a key value store for indexes
+        StoreBuilder<KeyValueStore<String, String>> storeBuilder = Stores.keyValueStoreBuilder(
+                Stores.persistentKeyValueStore("ping-data"),
+                Serdes.String(),
+                Serdes.String());
+        storeConfigurations.add(new StoreConfiguration(storeBuilder));
+        configuration.setStoreConfigurations(storeConfigurations);
+    }
+}
+
+
+
+

The io.quarkiverse.kafkastreamsprocessor.api.configuration.ConfigurationCustomizer implementation provided sets the required State-Store configurations into the method’s +io.quarkiverse.kafkastreamsprocessor.api.configuration.Configuration object. +In this example a ping-data key/value store has been created.

+
+
+
+
+

Punctuation

+
+

Kafka Streams allows you to define Punctuator that are sort of scheduled tasks that Kafka Streams triggers (Kafka Streams documentation). +One key issue with Punctuators is that they do not support Exceptions:

+
+
+
    +
  • +

    a checked Exception cannot be thrown as the method signature does not allow it

    +
  • +
  • +

    a RuntimeException because Kafka Streams does not catch it. +It basically crashes your whole microservice.

    +
  • +
+
+
+

To work around the latter point and increase stability, the quarkus-kafka-streams-processor extension wraps a Punctuator before it is added in Kafka Streams to catch the RuntimeException and log an error instead. +Exceptions are also counted with a dedicated metric.

+
+
+
+
+
+

Custom decorators

+
+
+

The extension proposes some capabilities to customize more finely the behaviour of the different layers of decoration in addition to the ones that this extension brings to the table.

+
+
+

Processor decorator

+
+

The following decoration layer is already extensively used in this extension’s source code and allows to use composition around the main processor class you have to define. +Example of a new decorator:

+
+
+
ProcessorDecorator.java
+
+
@Decorator (1)
+@Priority(150) (2)
+public class ProcessorDecorator<KIn, VIn, KOut, VOut> implements Processor<KIn, VIn, KOut, VOut> { (3)
+    @lombok.experimental.Delegate(excludes = Excludes.class)
+    private final Processor<KIn, VIn, KOut, VOut> delegate; (4)
+
+    private final MyBean bean;
+
+    @Inject
+    public TracingDecorator(@Delegate Processor<KIn, VIn, KOut, VOut> delegate, MyBean bean) { (5)
+        this.delegate = delegate;
+        this.bean = bean;
+    }
+
+    @Override
+    public void process(Record<KIn, VIn> record) { (6)
+      // use bean before
+      delegate.process(record);
+      // use bean after
+    }
+
+    private interface Excludes {
+        <KIn, VIn> void process(Record<KIn, VIn> record);
+    }
+}
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
1Decorator annotation to profit from the decorator feature of CDI
2Force the instantiation of the decorator with the Priority annotation. +Indeed, otherwise the decorator is not taken into account by Quarkus. +The priority is to be set based on the priorities of the existing decorators which are: +
+
ProcessorDecoratorPriorities.java
+
+
     /**
+     * Priority of the decorator in charge of tracing, creating a span around the
+     * {@link ContextualProcessor#process(Record)} method.
+     */
+    public static final int TRACING = 100;
+    /**
+     * Priority of the decorator in charge or initializing a "request context" for the duration of the processing of the
+     * ContextualProcessor#process(Record)} method. It is closed afterward.
+     */
+    public static final int CDI_REQUEST_SCOPE = 200;
+    /**
+     * Priority of the decorator that will handle exception and potentially redirect the message in a dead letter queue
+     * topic, if configured.
+     */
+    public static final int DLQ = 300;
+    /**
+     * Priority of the decorator in charge of measuring the processing time and the number of exceptions thrown.
+     */
+    public static final int METRICS = 400;
+    /**
+     * Priority of the decorator in charge of injecting all {@link DecoratedPunctuator} configured by the framework and
+     * your custom potential additions.
+     */
+    public static final int PUNCTUATOR_DECORATION = 500;
+    /**
+     * Priority of the decorator in charge of implementing a form of fault tolerance by means of calling again the
+     * {@link ContextualProcessor#process(Record)} method.
+     */
+    public static final int RETRY = 600;
+
+
3The decorator should have the same generics declaration <KIn, VIn, KOut, VOut> as the Processor<KIn, VIn, KOut, VOut> interface that it implements
4Delegate reference to use when decorating methods. +It is annotated with lombok’s Delegate annotation to generate +passthrough decorated methods that this Decorator class won’t decorate. +The selection is done through a blacklist of method signatures gathered in a private Excludes interface declared at the end of the class.
5Injection constructor which must have a delegate argument annotated with the Delegate annotation from CDI. +You can also, as a regular CDI bean, inject any another CDI bean reference to be used in this decorator.
6Example of decorated method, here the main process method of Processor API of Kafka Streams.
+
+
+

Such a decorator will automatically been taken into account by CDI through the combination of Decorator and Priority annotations. +The priority will control at which point your decorator will be called among all other decorators.

+
+
+
+

Producer interceptor

+
+

Kafka Streams already has the notion of a ProducerInterceptor. +But as the rest of Kafka Streams SPI, it is based on a class name and a default constructor for instantiation. +It does not support CDI resolution.

+
+
+

This is why this extension’s API defines a ProducerOnSendInterceptor interface that is instrumentated through CDI. +Example of usage:

+
+
+
MyProducerInterceptor.java
+
+
@ApplicationScoped (1)
+public class HeaderAddingProducerInterceptor implements ProducerOnSendInterceptor { (2)
+    @Override
+    public int priority() { (3)
+        return 200;
+    }
+
+    @Override
+    public ProducerRecord<byte[], byte[]> onSend(ProducerRecord<byte[], byte[]> producerRecord) { (4)
+        producerRecord.headers().remove("header");
+        producerRecord.headers().add("header", "headervalue".getBytes(StandardCharsets.UTF_8));
+        return producerRecord;
+    }
+}
+
+
+
+ + + + + + + + + + + + + + + + + +
1Producer interceptors are discovered by CDI by the ApplicationScoped annotation
2The interceptor class should extend ProducerOnSendInterceptor. +ProducerOnSendInterceptor extends ProducerInterceptor<byte[], byte[]> and overrides some of its methods with default implementations to exempt their forced implementations further down the line.
3This is not mandatory. +But it allows to control in which order multiple interceptor that would defined are called. +The default priority is 100.
4The intercepted method call which allow to modify the ProducerRecord before it is finally sent to Kafka. +In this example, we replace a header named header with another value headervalue.
+
+
+
+

Punctuator decorator

+
+

A Kafka Streams Punctuator is a callback to use with +ProcessorContext#schedule(…​). +It allows to schedule a periodic operation, depending on batch of incoming messages or on a timely manner.

+
+
+

We propose in the extension a way to decorate any Punctuator a microservice would create.

+
+
+ + + + + +
+ + +The extension does not give the capability to narrow the decoration on only a given instance or class of Punctuator. +
+
+
+

The decoration happens through the implementation of a DecoratedPunctuator interface with a bit the same idea as for the Processor decorator: usage of the CDI Decorator feature. +Example of decoration:

+
+
+
MyDecoratedPunctuator.java
+
+
@Decorator (1)
+@Priority(150) (2)
+public class CdiRequestContextPunctuatorDecorator implements DecoratedPunctuator { (3)
+    @lombok.experimental.Delegate(excludes = Excludes.class)
+    private final DecoratedPunctuator delegate; (4)
+
+    private final MyBean myBean;
+
+    @Inject
+    public CdiRequestContextPunctuatorDecorator(@Delegate DecoratedPunctuator delegate, MyBean myBean) { (5)
+        this.delegate = delegate;
+        this.myBean = myBean;
+    }
+
+    @Override
+    public void punctuate(long timestamp) { (6)
+        // use before punctuate the myBean reference
+        delegate.punctuate(timestamp);
+        // use after punctuate the myBean reference
+    }
+
+    private interface Excludes {
+        void punctuate(long timestamp);
+    }
+}
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
1Decorator annotation to profit from the decorator feature of CDI
2Force the instantiation of the decorator with the Priority annotation. +Indeed, otherwise the decorator is not taken into account by Quarkus. +The priority is to be set based on the priorities of the existing decorators which are: +
+
PunctuatorDecoratorPriorities.java
+
+
     /**
+     * Priority of the {@link DecoratedPunctuator} that enabled a "request context" for the duration of the
+     * {@link Punctuator#punctuate(long)} processing.
+     */
+    public static final int CDI_REQUEST_SCOPE = 100;
+    /**
+     * Priority of the {@link DecoratedPunctuator} that catches punctuation exception to avoid making the entire
+     * microservice crash and counts those exceptions in a metric.
+     */
+    public static final int METRICS = 200;
+
+
3The decorator should extend the DecoratedPunctuator interface defined by this extension. +It won’t be considered otherwise.
4Delegate reference to use when decorating methods. +It is annotated with lombok’s Delegate +annotation to generate passthrough decorated methods that this Decorator class won’t decorate. +The selection is done through a blacklist of method signatures gathered in a private Excludes interface declared at the end of the class.
5Injection constructor which must have a delegate argument annotated with the Delegate annotation from CDI. +Is showcased here also the injection of another bean to be used in this decorator.
6Example of decorated method, here the main punctuate method of the Punctuator interface.
+
+
+
+
+
+

Extension configuration reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The Kafka topics for incoming messages (comma separated if multiple topics).

+
+
+

Environment variable: KAFKASTREAMSPROCESSOR_INPUT_TOPIC

+
+
+
+

string

+
+
+
+
+

The Kafka topics for outgoing messages.

+
+
+

Environment variable: KAFKASTREAMSPROCESSOR_OUTPUT_TOPIC

+
+
+
+

string

+
+
+
+
+

The Kafka topic for outgoing messages for the given sink name.

+
+
+

Environment variable: KAFKASTREAMSPROCESSOR_OUTPUT_SINKS__sink__TOPIC

+
+
+

string

+
+
+
+

Dead letter Queue name

+
+
+

Environment variable: KAFKASTREAMSPROCESSOR_DLQ_TOPIC

+
+
+

String

+
+
+
+

Global Dead letter Queue to produce error messages note manage by the application

+
+
+

Environment variable: KAFKASTREAMSPROCESSOR_GLOBAL_DLQ_TOPIC

+
+
+

String

+
+
+
+

Global Dead letter Queue maximum request size

+
+
+

Environment variable: KAFKASTREAMSPROCESSOR_GLOBAL_DLQ_PRODUCER_MAX_MESSAGE_SIZE

+
+
+

int

java.lang.Integer.MAX_VALUE

+
+
+
+

Enable the production of the error message in the global DLQ when the application can not manage the error.

+
+
+

Environment variable: RESILIENCY_KAFKA_GLOBALDLQ_ENABLED

+
+
+

boolean

false

+
+
+
+

Kafka Streams Processor error strategy

+
+
+

Environment variable: KAFKASTREAMSPROCESSOR_ERROR_STRATEGY

+
+
+

String

continue

+
+
+
+

Max number of retries. See microprofile doc.

+
+
+

Environment variable: KAFKASTREAMSPROCESSOR_RETRY_MAX_RETRIES

+
+
+

String

-1

+
+
+
+

The delay between retries. See microprofile doc.

+
+
+

Environment variable: KAFKASTREAMSPROCESSOR_RETRY_DELAY

+
+
+

long

0

+
+
+
+

The unit for delay. Default milliseconds. See microprofile doc.

+
+
+

Environment variable: KAFKASTREAMSPROCESSOR_RETRY_DELAY_UNIT

+
+
+

ChronoUnit

MILLIS

+
+
+
+

The max duration. See microprofile doc.

+
+
+

Environment variable: KAFKASTREAMSPROCESSOR_RETRY_MAX_DURATION

+
+
+

long

180000

+
+
+
+

The unit for max duration. See microprofile doc.

+
+
+

Environment variable: KAFKASTREAMSPROCESSOR_RETRY_DURATION_UNIT

+
+
+

ChronoUnit

MILLIS

+
+
+
+

Jitter value to randomly vary retry delays for. See microprofile doc.

+
+
+

Environment variable: KAFKASTREAMSPROCESSOR_RETRY_JITTER

+
+
+

long

200

+
+
+
+

The delay unit for jitter. Default is milliseconds. See microprofile doc.

+
+
+

Environment variable: KAFKASTREAMSPROCESSOR_RETRY_JITTER_DELAY_UNIT

+
+
+

ChronoUnit

MILLIS

+
+
+
+

The list of exception types that should trigger a retry. +Default is the provided io.quarkiverse.kafkastreamsprocessor.api.exception.RetryableException. +See microprofile doc.

+
+
+

Environment variable: KAFKASTREAMSPROCESSOR_RETRY_RETRY_ON

+
+
+

Exception class names

[io.quarkiverse.kafkastreamsprocessor.api.exception.RetryableException]

+
+
+
+

The list of exception types that should <i>not</i> trigger a retry. +Default is empty list +See microprofile doc.

+
+
+

Environment variable: KAFKASTREAMSPROCESSOR_RETRY_ABORT_ON

+
+
+

Exception class names

[]

+
+
+
+

Configuration from other extension

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

A comma-separated list of topic names.

+
+
+

The micro-service will only be ready once all these topics are present in the Kafka cluster.

+
+
+

Environment variable: QUARKUS_KAFKA_STREAMS_TOPIC

+
+
+

list of string

+
+
+
+

A unique identifier for this Kafka Streams application.

+
+
+

It is used as Kafka consumer group id, so multiple replicas of micro-service balance their partition workload.

+
+
+

Environment variable: QUARKUS_KAFKA_STREAMS_APPLICATION_ID

+
+
+

string

${quarkus.application.name}

+
+
+
+

It is the number of milliseconds a producer is willing to wait before sending a batch out.

+
+
+

Environment variable: KAFKA_STREAMS_PRODUCER_LINGER_MS

+
+
+

int

0

+
+
+
+

The compression type for all data generated by the producer.

+
+
+

Environment variable: KAFKA_STREAMS_COMPRESSION_TYPE

+
+
+

Possible values:

+

none +gzip +snappy +lz4 +zstd

none

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-kerberos/dev/config-client.html b/quarkus-kerberos/dev/config-client.html new file mode 100644 index 0000000000..8bcc0ad0be --- /dev/null +++ b/quarkus-kerberos/dev/config-client.html @@ -0,0 +1,1040 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

JAAS Login context name. If it is not set then the JAAS configuration will be created automatically otherwise a JAAS configuration file must be available and contain an entry matching its value - in this case use java.security.auth.login.config system property pointing to this file.

+
+
+

string

+
+
+
+

Specifies if a JAAS configuration debug property should be enabled. This property is only effective when loginContextName is not set and the JAAS configuration is created automatically.

+
+
+

boolean

false

+
+
+
+

User principal keytab file path which will be used to set a JAAS configuration keyTab property. This property is only effective when loginContextName is not set and the JAAS configuration is created automatically.

+
+
+

string

+
+
+
+

Specifies if an Spnego authentication mechanism object identifier (OID) should be used for creating a GSSContext. A Kerberos OID will be used if this property is set to false.

+
+
+

boolean

true

+
+
+
+

Kerberos Service Principal Name.

+
+
+

string

HTTP/localhost

+
+
+
+

Kerberos User Principal Name. It is a required property.

+
+
+

string

+
+
+
+

Kerberos User Principal Realm Name. If this property is set then it will be added to the user principal name, for example, alice@SERVICE-REALM.COM. Setting the realm property is not required if it matches a default realm set in the Kerberos Key Distribution Center (KDC) configuration.

+
+
+

string

+
+
+
+

Kerberos User Principal Password. Set this property only if using the keytabPath, custom CallbackHandler or UserPrincipalSubjectFactory is not possible.

+
+
+

string

+
+
+
+
+ + + + + + + diff --git a/quarkus-kerberos/dev/config.html b/quarkus-kerberos/dev/config.html new file mode 100644 index 0000000000..cc439ecb4c --- /dev/null +++ b/quarkus-kerberos/dev/config.html @@ -0,0 +1,1040 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Determine if the Kerberos extension is enabled

+
+
+

boolean

true

+
+
+
+

JAAS Login context name. If it is not set then the JAAS configuration will be created automatically otherwise a JAAS configuration file must be available and contain an entry matching its value - in this case use java.security.auth.login.config system property pointing to this file.

+
+
+

string

+
+
+
+

Specifies if a JAAS configuration debug property should be enabled. This property is only effective when loginContextName is not set and the JAAS configuration is created automatically.

+
+
+

boolean

false

+
+
+
+

Service principal keytab file path which will be used to set a JAAS configuration keyTab property. This property is only effective when loginContextName is not set and the JAAS configuration is created automatically.

+
+
+

string

+
+
+
+

Specifies if an Spnego authentication mechanism object identifier (OID) should be used for creating a GSSContext. A Kerberos OID will be used if this property is set to false.

+
+
+

boolean

true

+
+
+
+

Kerberos Service Principal Name. If this property is not set then the service principal name will be calculated by concatenating HTTP/ and the HTTP Host header value, for example: HTTP/localhost.

+
+
+

string

+
+
+
+

Kerberos Service Principal Realm Name. If this property is set then it will be added to the service principal name, for example, HTTP/localhost@SERVICE-REALM.COM. Setting the realm property is not required if it matches a default realm set in the Kerberos Key Distribution Center (KDC) configuration.

+
+
+

string

+
+
+
+

Kerberos Service Principal Password. Set this property only if using the keytabPath, custom CallbackHandler or ServicePrincipalSubjectFactory is not possible.

+
+
+

string

+
+
+
+
+ + + + + + + diff --git a/quarkus-kerberos/dev/index.html b/quarkus-kerberos/dev/index.html new file mode 100644 index 0000000000..1dd8ae3e4d --- /dev/null +++ b/quarkus-kerberos/dev/index.html @@ -0,0 +1,1867 @@ + + + + + + Quarkus - Kerberos :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus - Kerberos

+
+

Introduction

+
+
+

Kerberos is a network authentication protocol.

+
+
+

Client acquires a service ticket from Kerberos Key Distribution Center (KDC) and submits it to an application which will verify it with its service principal against KDC and grant an access if the verification has been successful.

+
+
+

This extension supports Kerberos version 5 with the HTTP Negotiate authentication scheme which is based on the Simple And Protected Negotiate Mechanism (SPNEGO) and the Generic Security Services Application Program Interface (GSSAPI).

+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.kerberos:quarkus-kerberos extension first. +In your pom.xml file, add:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.kerberos</groupId>
+    <artifactId>quarkus-kerberos</artifactId>
+</dependency>
+
+
+
+
+
+

Getting Started

+
+
+

First you have to prepare your Kerberos environment. The description of how it should be done securely is out of scope of this document, please follow the deployment specfic policies.

+
+
+

However, here is a sequence of steps you can try for a quick test:

+
+
+
    +
  • +

    Install Kerberos:

    +
  • +
+
+
+

Fedora: [root@server ~]# yum install krb5-server krb5-libs krb5-workstation. +If you do not use Fedora then follow the OS specific instructions.

+
+
+
    +
  • +

    Edit /etc/krb5.conf - either uncomment the configuration related to EXAMPLE.COM or add a new realm, example, QUARKUS.COM. Make sure the realm’s kdc and admin_server properties point to localhost.

    +
  • +
  • +

    Create the database: kdb5_util create -s.

    +
  • +
  • +

    Start kadmin.local and add principals and keytabs in its command line:

    +
  • +
+
+
+

User principal:

+
+
+

addprinc bob +(use password bob or whatever you prefer)

+
+
+

Service principal:

+
+
+

addprinc HTTP/localhost +(use password service or whatever you prefer)

+
+
+

Add a keytab for the service principal:

+
+
+

ktadd -k /etc/service.keytab HTTP/localhost

+
+
+

and press q to exit.

+
+
+

To make it easier to test you may need to do chmod og+r /etc/*.keytab since you are creating them as a root but you’ll run Quarkus App without the root permissions.

+
+
+
    +
  • +

    start KDC: systemctl start krb5kdc.service and systemctl start kadmin.service

    +
  • +
  • +

    Prepare a service ticket for bob: kinit bob

    +
  • +
  • +

    Create your Quarkus application which will use this extension. Lets assume it has a JAX-RS method with a /api/users/me path and which returns a user name. Update its application.properties to point to the service principal key tab: quarkus.kerberos.keytab-path=/etc/service.keytab.

    +
  • +
  • +

    Build and start the application and test it:

    +
  • +
+
+ +
+

It should return bob.

+
+
+
+
+

How to configure the extension.

+
+
+

In many cases all you will need is to ensure the service principal password or its keytab is accessible. If you have created a keytab file then use quarkus.kerberos.keytab-path to point to it - using the keytab is recommended.

+
+
+

If you haven’t created a keytab just yet then you can register a custom callback handler, for example:

+
+
+
+
import jakarta.enterprise.context.ApplicationScoped;
+
+import javax.security.auth.callback.Callback;
+import javax.security.auth.callback.CallbackHandler;
+import javax.security.auth.callback.NameCallback;
+import javax.security.auth.callback.PasswordCallback;
+import javax.security.auth.callback.UnsupportedCallbackException;
+
+import io.quarkiverse.kerberos.KerberosCallbackHandler;
+
+@ApplicationScoped
+public class UsernamePasswordCallbackHandler implements KerberosCallbackHandler {
+        private final String username;
+        private final char[] password;
+
+        private UsernamePasswordCallbackHandler(final String username, final char[] password) {
+            this.username = username;
+            this.password = password;
+        }
+
+        @Override
+        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);
+                } else {
+                    throw new UnsupportedCallbackException(current);
+                }
+            }
+        }
+    }
+}
+
+
+
+

Note io.quarkiverse.kerberos.KerberosCallbackHandler extends javax.security.auth.callback.Callback - it only acts as a marker interface for this extension to avoid having unrelated CallbackHandlers injected.

+
+
+

The service principal name itself is calculated from the current HTTP Host header, for example, given Host: localhost:8080 the name will be calculated as HTTP/localhost. +If necessay it can be customized with quarkus.kerberos.service-principal-name.

+
+
+

If the KDC configuration has no default realm configured then a service principal realm can be set with quarkus.kerberos.service-principal-realm.

+
+
+
+
+

User Principal

+
+
+

You can access a user principal in the service code once the authentication has been completed, for example:

+
+
+
+
import jakarta.inject.Inject;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+
+import io.quarkiverse.kerberos.KerberosPrincipal;
+
+import io.quarkus.security.Authenticated;
+import io.quarkus.security.identity.SecurityIdentity;
+
+@Path("/api/users")
+@Authenticated
+public class UsersResource {
+
+    @Inject
+    SecurityIdentity identity;
+    @Inject
+    KerberosPrincipal kerberosPrincipal;
+
+    @GET
+    @Path("/me")
+    @Produces("text/plain")
+    public String me() {
+        return identity.getPrincipal().getName();
+    }
+}
+
+
+
+

For example, given bob@EXAMPLE.COM, a simple bob name will be returned. +You can cast Principal to io.quarkiverse.kerberos.KerberosPrincipal or inject it directly and get a full bob@EXAMPLE.COM (or bob/admin@EXAMPLE.COM) name and the realm part of the name, EXAMPLE.COM. If the principal name contains an instance qualifier such as bob/admin then KerberosPrincipal will return admin as the role name.

+
+
+
+
+

JAAS Login Configuration

+
+
+

The extension will generate a JAAS Login Configuration by default.

+
+
+

However, if you have an existing JAAS Login Configuration then set quarkus.kerberos.login-context-name to point to a JAAS Configuration entry and use a `java.security.auth.login.config' system property to point to the file containing this configuration entry.

+
+
+
+
+

Service Principal Subject Customization

+
+
+

The extension will use javax.security.auth.login.LoginContext to create a Subject representing a service principal, using the auto-generated or external JAAS Login Configuration as well as the registered callback unless a keytab is used.

+
+
+

You can customize this process by registering a custom io.quarkiverse.kerberos.ServicePrincipalSubjectFactory:

+
+
+
+
import jakarta.enterprise.context.ApplicationScoped;
+import javax.security.auth.Subject;
+import io.quarkiverse.kerberos.ServicePrincipalSubjectFactory;
+
+@ApplicationScoped
+public class CustomServicePrincipalSubjectFactory implements ServicePrincipalSubjectFactory {
+        @Override
+        public Subject getSubjectForServicePrincipal(String servicePrincipalName) {
+            ....
+        }
+    }
+}
+
+
+
+
+
+

Dev Services for Kerberos

+
+
+

Quarkus Dev Services support the automatic provisioning of unconfigured services in development and test mode.

+
+
+

This extension provides Dev Services for Kerberos which uses a Kerberos Docker image.

+
+
+

Start your application in a Dev Mode with mvn quarkus:dev.

+
+
+

You will see in the console something similar to:

+
+
+
+
$ mvn quarkus:dev
+
+2021-10-07 10:56:18,276 INFO  [🐳 [gcavalcante8808/krb5-server:latest]] (build-18) Creating container for image: gcavalcante8808/krb5-server:latest
+...
+2021-10-07 10:56:18,881 INFO  [🐳 [gcavalcante8808/krb5-server:latest]] (build-18) Container gcavalcante8808/krb5-server:latest started in PT0.621235S
+...
+Initializing database '/var/lib/krb5kdc/principal' for realm 'EXAMPLE.COM',
+...
+Principal "admin/admin@EXAMPLE.COM" created.
+
+2021-10-07 10:56:19,149 INFO  [io.qua.ker.dep.dev.KerberosDevServicesProcessor] (build-18) Kerberos configuration file path: /tmp/devservices-krb516887219905674106017.conf, mapped KDC port: 32771, mapped admin server port: 32769
+2021-10-07 10:56:19,152 INFO  [io.qua.ker.dep.dev.KerberosDevServicesProcessor] (build-18) Dev Services for Kerberos started.
+
+
+
+

HTTP/localhost service principal (with a servicepwd password) as well as alice and bob user principals (with passwords equal to their names) are created by default in a default EXAMPLE.COM realm.

+
+
+

Different users can be set with a quarkus.kerberos.devservices.users map property, for example, quarkus.kerberos.devservices.users.jduke=theduke, etc. +The service principal can be customized with quarkus.kerberos.service-principal-name, its password - with quarkus.kerberos.service-principal-password, the realm - with either quarkus.kerberos.devservices.realm or quarkus.kerberos.service-principal-realm.

+
+
+

Now you can set a KRB5_CONFIG environment property pointing to the file such as /tmp/devservices-krb516887219905674106017.conf, use kinit to prepare a ticket granting ticket for a specific user and use the browser or curl to test the endpoint. Dedicated Dev UI for Dev Services For Kerberos might be offered in the future as well.

+
+
+
+
+

Debugging

+
+
+

Please enable a trace logging level for io.quarkiverse.kerberos.runtime.KerberosIdentityProvider in order to see the log messages reported by this IdentityProvider:

+
+
+
+
quarkus.log.category."io.quarkiverse.kerberos.runtime.KerberosIdentityProvider".level=TRACE
+quarkus.log.category."io.quarkiverse.kerberos.runtime.KerberosIdentityProvider".min-level=TRACE
+
+
+
+

Also, if you would like to see the debug messages reported by the Kerberos system itself then make sure that quarkus.kerberos.debug is set to true if the JAAS context is auto-generated or debug is set to true in a custom JAAS context file.

+
+
+
+
+

Testing

+
+
+

You can test this extension with Dev Services for Kerberos or Apache Directory Service.

+
+
+

In both cases add the following dependency:

+
+
+
+
<dependency>
+   <groupId>io.quarkiverse.kerberos</groupId>
+   <artifactId>quarkus-kerberos-test-util</artifactId>
+   <version>${version.quarkus.kerberos.test.util}</version>
+   <scope>test</scope>
+</dependency>
+
+
+
+

With Dev Services

+
+

You can write the test code like this when using Dev Services:

+
+
+
+
import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import org.hamcrest.Matchers;
+import org.junit.jupiter.api.Test;
+
+import io.quarkiverse.kerberos.test.utils.KerberosTestClient;
+import io.restassured.RestAssured;
+
+public class SpnegoAuthenticationTestCase {
+    public static final String WWW_AUTHENTICATE = "WWW-Authenticate";
+    public static final String NEGOTIATE = "Negotiate";
+
+    KerberosTestClient kerberosTestClient = new KerberosTestClient();
+
+    @Test
+    public void testSpnegoSuccess() throws Exception {
+
+        var header = RestAssured.get("/identity")
+                .then().statusCode(401).extract().header(WWW_AUTHENTICATE);
+        assertEquals(NEGOTIATE, header);
+
+        var result = kerberosTestClient.get("/identity", "alice", "alice");
+        result.statusCode(200).body(Matchers.is("alice"));
+    }
+}
+
+
+
+
+

With Apache Directory Service

+
+

You can write the same test code you can do with Dev Services for Kerberos but you’ll also need to add a test resource initializing Apache DS:

+
+
+
+
import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import org.hamcrest.Matchers;
+import org.junit.jupiter.api.Test;
+
+import io.quarkiverse.kerberos.test.utils.KerberosKDCTestResource;
+import io.quarkiverse.kerberos.test.utils.KerberosTestClient;
+import io.quarkus.test.common.QuarkusTestResource;
+import io.restassured.RestAssured;
+
+@QuarkusTestResource(KerberosKDCTestResource.class)
+public class SpnegoAuthenticationTestCase {
+    public static final String WWW_AUTHENTICATE = "WWW-Authenticate";
+    public static final String NEGOTIATE = "Negotiate";
+
+    KerberosTestClient kerberosTestClient = new KerberosTestClient();
+
+    @Test
+    public void testSpnegoSuccess() throws Exception {
+
+        var header = RestAssured.get("/identity")
+                .then().statusCode(401).extract().header(WWW_AUTHENTICATE);
+        assertEquals(NEGOTIATE, header);
+
+        var result = kerberosTestClient.get("/identity", "jduke", "theduke");
+        result.statusCode(200).body(Matchers.is("jduke"));
+    }
+}
+
+
+
+

At the moment only a single jduke user is supported when testing with Apache DS and Dev Services for Kerberos have to be disabled: quarkus.kerberos.devservices.enabled=false.

+
+
+
+

With Browser

+
+

You can also configure your browser such as Firefox to use Negotiate Mechanism.

+
+
+

A good summary is provided here.

+
+
+

For example, if you run your application on the localhost then add localhost (without a port) as the only value to the Firefox about:config/network.negotiate-auth.trusted-uris property.

+
+
+

Next, use kinit to create a ticket granting ticket (TGT) for a selected user principal for the browser to use this TGT. Make sure kinit sees the same Kerberos KDC configuration which the browser will see for both kinit (and other Kerberos tools) and the browser to work with the same Kerberos KDC instance.

+
+
+

If the default Kerberos KDC configuration at /etc/krb5.conf is used then you don’t even need to restart a browser. If a custom Kerberos KDC configuration is used by kinit then point to it with KRB5_CONFIG and either update ~/.bashrc or launch the browser from the shell where KRB5_CONFIG is set.

+
+
+

Now open your browser and access the endpoint - the browser will do the negotiation using the created TGT without asking for a user name and password.

+
+
+
+
+
+

Extension Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Determine if the Kerberos extension is enabled

+
+
+

boolean

true

+
+
+
+

JAAS Login context name. If it is not set then the JAAS configuration will be created automatically otherwise a JAAS configuration file must be available and contain an entry matching its value - in this case use java.security.auth.login.config system property pointing to this file.

+
+
+

string

+
+
+
+

Specifies if a JAAS configuration debug property should be enabled. This property is only effective when loginContextName is not set and the JAAS configuration is created automatically.

+
+
+

boolean

false

+
+
+
+

Service principal keytab file path which will be used to set a JAAS configuration keyTab property. This property is only effective when loginContextName is not set and the JAAS configuration is created automatically.

+
+
+

string

+
+
+
+

Specifies if an Spnego authentication mechanism object identifier (OID) should be used for creating a GSSContext. A Kerberos OID will be used if this property is set to false.

+
+
+

boolean

true

+
+
+
+

Kerberos Service Principal Name. If this property is not set then the service principal name will be calculated by concatenating HTTP/ and the HTTP Host header value, for example: HTTP/localhost.

+
+
+

string

+
+
+
+

Kerberos Service Principal Realm Name. If this property is set then it will be added to the service principal name, for example, HTTP/localhost@SERVICE-REALM.COM. Setting the realm property is not required if it matches a default realm set in the Kerberos Key Distribution Center (KDC) configuration.

+
+
+

string

+
+
+
+

Kerberos Service Principal Password. Set this property only if using the keytabPath, custom CallbackHandler or ServicePrincipalSubjectFactory is not possible.

+
+
+

string

+
+
+
+

Client Support

+
+
+

In your pom.xml file, add:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.kerberos</groupId>
+    <artifactId>quarkus-kerberos-client</artifactId>
+</dependency>
+
+
+
+

This module provides the utility code which can be used to add Kerberos service tickets as HTTP Authorization Negotiate scheme values. It can be done with the help of the JAX-RS KerberosClientRequestFilter or directly in the application code.

+
+
+

Using this module can be useful when a Quarkus endpoint has to make an outbound call to a remote service requiring Kerberos Negotiate Authentication.

+
+
+

For example, lets assume your FrontendService application has to call to the remote IdentityService:

+
+
+
+
import jakarta.inject.Inject;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+
+import io.quarkiverse.kerberos.KerberosPrincipal;
+import io.quarkus.security.Authenticated;
+import io.quarkus.security.identity.SecurityIdentity;
+
+@Path("identity")
+@Authenticated
+public class IdentityService {
+
+    @Inject
+    SecurityIdentity securityIdentity;
+
+    @Inject
+    KerberosPrincipal kerberosPrincipal;
+
+    @GET
+    public String getIdentity() {
+        return securityIdentity.getPrincipal().getName() + " " + kerberosPrincipal.getFullName() + " "
+                + kerberosPrincipal.getRealm();
+    }
+}
+
+
+
+

Next you can implement FrontendService.

+
+
+

KerberosClientRequestFilter

+
+

First MP RestClient IdentityServiceClient interface has to be created and KerberosClientRequestFilter registered:

+
+
+
+
package io.quarkiverse.kerberos.it;
+
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+
+import org.eclipse.microprofile.rest.client.annotation.RegisterProvider;
+import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;
+
+import io.quarkiverse.kerberos.client.KerberosClientRequestFilter;
+
+@RegisterRestClient
+@RegisterProvider(KerberosClientRequestFilter.class)
+@Path("/")
+public interface IdentityServiceClientWithFilter {
+
+    @GET
+    String getIdentity();
+}
+
+
+
+

Now FrontendService will look like this

+
+
+
+
import jakarta.inject.Inject;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+
+import org.eclipse.microprofile.rest.client.inject.RestClient;
+
+@Path("frontend")
+public class FrontendResource {
+
+    @Inject
+    @RestClient
+    IdentityServiceClientWithFilter identityServiceClientWithFilter;
+
+    @GET
+    @Path("with-filter")
+    public String getIdentityWithSimpleNegotiationInFilter() {
+        return identityServiceClientWithFilter.getIdentity();
+    }
+}
+
+
+
+

Configure the application like this:

+
+
+
+
io.quarkiverse.kerberos.it.IdentityServiceClientWithFilter/mp-rest/url=http://localhost:8081/identity
+
+kerberos-client.user-principal-name=jduke
+kerberos-client.user-principal-password=theduke
+
+
+
+
+

KerberosClientSupport

+
+

If necessary you can use KerberosClientSupport directly in the application, for example:

+
+
+
+
import jakarta.inject.Inject;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+
+import org.eclipse.microprofile.rest.client.inject.RestClient;
+
+import io.quarkiverse.kerberos.client.KerberosClientSupport;
+
+@Path("frontend")
+public class FrontendResource {
+    private static final String NEGOTIATE = "Negotiate";
+
+    @Inject
+    @RestClient
+    IdentityServiceClient identityServiceClient;
+
+    @Inject
+    KerberosClientSupport kerberosClientSupport;
+
+    @GET
+    @Path("with-simple-negotiation")
+    public String getIdentityWithSimpleSimpleNegotiation() throws Exception {
+        return identityServiceClient.getIdentity(NEGOTIATE + " " + kerberosClientSupport.getServiceTicket());
+    }
+}
+
+
+
+

Note IdentityServiceClient does not have KerberosClientRequestFilter registered but instead has a HeaderParam:

+
+
+
+
import jakarta.ws.rs.GET;
+import jakarta.ws.rs.HeaderParam;
+import jakarta.ws.rs.Path;
+
+import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;
+
+@RegisterRestClient
+@Path("/")
+public interface IdentityServiceClient {
+
+    @GET
+    String getIdentity(@HeaderParam("Authorization") String serviceTicket);
+}
+
+
+
+
+

Multi Step Negotiation

+
+

Note that a single step Negotiation is shown in both KerberosClientRequestFilter and KerberosClientSupport sections.

+
+
+

Single step Negotiation should work for many practical cases however the Negotiate protocol may involve more than one exchange between the client and the server before a service ticket can be acquired. If you have to deal with such cases then you can write the application code as follows:

+
+
+
+
import java.security.PrivilegedExceptionAction;
+import java.util.Base64;
+
+import jakarta.inject.Inject;
+import javax.security.auth.Subject;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.NotAuthorizedException;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.core.HttpHeaders;
+
+import org.eclipse.microprofile.rest.client.inject.RestClient;
+import org.ietf.jgss.GSSContext;
+
+import io.quarkiverse.kerberos.client.KerberosClientSupport;
+
+@Path("frontend")
+public class FrontendResource {
+    private static final String NEGOTIATE = "Negotiate";
+
+    @Inject
+    @RestClient
+    IdentityServiceClient identityServiceClient;
+
+    @Inject
+    KerberosClientSupport kerberosClientSupport;
+
+    @GET
+    @Path("with-multi-step-negotiation")
+    public String getIdentityWithMultiStepNegotiation() throws Exception {
+        return Subject.doAs(kerberosClientSupport.getUserPrincipalSubject(), new IdentityServiceAction());
+    }
+
+    private class IdentityServiceAction implements PrivilegedExceptionAction<String> {
+
+        @Override
+        public String run() throws Exception {
+            GSSContext serviceContext = kerberosClientSupport.createServiceContext();
+
+            byte[] tokenBytes = new byte[0];
+
+            while (!serviceContext.isEstablished()) {
+                try {
+                    return identityServiceClient.getIdentity(
+                            NEGOTIATE + " " + kerberosClientSupport.getNegotiateToken(serviceContext, tokenBytes));
+                } catch (NotAuthorizedException ex) {
+                    String header = ex.getResponse().getHeaderString(HttpHeaders.WWW_AUTHENTICATE);
+                    if (header != null && header.length() > NEGOTIATE.length() + 1) {
+                        tokenBytes = Base64.getDecoder().decode(header.substring(NEGOTIATE.length() + 1));
+                        continue;
+                    }
+                    throw ex;
+                }
+            }
+            throw new RuntimeException("Kerberos ticket can not be created");
+        }
+    };
+}
+
+
+
+

Note if the remote service requires the negotiation to continue then a new token is acquired and a new request is made to the remote service.

+
+
+
+

Configuration

+
+

Configuring KerberosClientSupport is similar to the way Kerberos support is configured on the server, see the configuration reference below.

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

JAAS Login context name. If it is not set then the JAAS configuration will be created automatically otherwise a JAAS configuration file must be available and contain an entry matching its value - in this case use java.security.auth.login.config system property pointing to this file.

+
+
+

string

+
+
+
+

Specifies if a JAAS configuration debug property should be enabled. This property is only effective when loginContextName is not set and the JAAS configuration is created automatically.

+
+
+

boolean

false

+
+
+
+

User principal keytab file path which will be used to set a JAAS configuration keyTab property. This property is only effective when loginContextName is not set and the JAAS configuration is created automatically.

+
+
+

string

+
+
+
+

Specifies if an Spnego authentication mechanism object identifier (OID) should be used for creating a GSSContext. A Kerberos OID will be used if this property is set to false.

+
+
+

boolean

true

+
+
+
+

Kerberos Service Principal Name.

+
+
+

string

HTTP/localhost

+
+
+
+

Kerberos User Principal Name. It is a required property.

+
+
+

string

+
+
+
+

Kerberos User Principal Realm Name. If this property is set then it will be added to the user principal name, for example, alice@SERVICE-REALM.COM. Setting the realm property is not required if it matches a default realm set in the Kerberos Key Distribution Center (KDC) configuration.

+
+
+

string

+
+
+
+

Kerberos User Principal Password. Set this property only if using the keytabPath, custom CallbackHandler or UserPrincipalSubjectFactory is not possible.

+
+
+

string

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-kiota/dev/includes/attributes.html b/quarkus-kiota/dev/includes/attributes.html new file mode 100644 index 0000000000..356d7657e9 --- /dev/null +++ b/quarkus-kiota/dev/includes/attributes.html @@ -0,0 +1,912 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-kiota/dev/includes/authentication-support.html b/quarkus-kiota/dev/includes/authentication-support.html new file mode 100644 index 0000000000..ee125dc8c5 --- /dev/null +++ b/quarkus-kiota/dev/includes/authentication-support.html @@ -0,0 +1,937 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

With Kiota you can plug in any authentication mechanism provided by the underlying HTTP client.

+
+
+

For example, when using the VertX HTTP client you can configure a Bearer Access Token with OIDC like:

+
+
+
+
OAuth2Options options =
+        new OAuth2Options()
+                .setFlow(OAuth2FlowType.CLIENT)
+                .setClientId(CLIENT_ID)
+                .setTokenPath(keycloakUrl + "token")
+                .setClientSecret(CLIENT_SECRET);
+
+OAuth2Auth oAuth2Auth = OAuth2Auth.create(vertx, options);
+
+Oauth2Credentials oauth2Credentials = new Oauth2Credentials();
+
+OAuth2WebClient oAuth2WebClient =
+        OAuth2WebClient.create(WebClient.create(vertx), oAuth2Auth)
+                .withCredentials(oauth2Credentials);
+
+var adapter = new VertXRequestAdapter(oAuth2WebClient);
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-kiota/dev/includes/getting-started.html b/quarkus-kiota/dev/includes/getting-started.html new file mode 100644 index 0000000000..d3b95c2d33 --- /dev/null +++ b/quarkus-kiota/dev/includes/getting-started.html @@ -0,0 +1,1036 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

First of all you need to add or update the quarkus-maven-plugin configuration with the following:

+
+
+
+
<plugin>
+  <groupId>io.quarkus</groupId>
+  <artifactId>quarkus-maven-plugin</artifactId>
+  <extensions>true</extensions>
+  <executions>
+    <execution>
+      <goals>
+        <goal>build</goal>
+        <goal>generate-code</goal>
+      </goals>
+    </execution>
+  </executions>
+</plugin>
+
+
+
+

Add the extension dependency to your project’s pom.xml file:

+
+
+
+
<dependency>
+  <groupId>io.kiota</groupId>
+  <artifactId>quarkus-kiota</artifactId>
+  <version>{project.version}</version>
+</dependency>
+
+
+
+

Now, create a new folder named openapi under src/main/ and add OpenAPI spec files there. Supported file extensions are: json, yaml, yml.

+
+
+

To fine tune the configuration for each spec file, add the following entry to your properties file. In this example, our spec file is in src/main/openapi/petstore.json:

+
+
+
+
quarkus.kiota.petstore.json.package-name=com.mycompany
+
+
+
+

If a base package name is not provided, it will be used the default io.apisdk.<filename>. For example, io.apisdk.petstore.json.

+
+
+

You can customize the name of Api Client class using the following property:

+
+
+
+
quarkus.kiota.petstore.json.class-name=MyApiClient
+
+
+
+

Now add the additional dependencies to compile the project:

+
+
+
+
<dependency>
+  <groupId>com.microsoft.kiota</groupId>
+  <artifactId>microsoft-kiota-abstractions</artifactId>
+  <version>${kiota.libs.version}</version>
+</dependency>
+<dependency>
+  <groupId>io.kiota</groupId>
+  <artifactId>kiota-http-vertx</artifactId> <!-- alternatively <artifactId>kiota-http-jdk</artifactId> -->
+  <version>{version}</version>
+</dependency>
+<dependency>
+  <groupId>io.kiota</groupId>
+  <artifactId>kiota-serialization-jackson-quarkus</artifactId>
+  <version>{version}</version>
+</dependency>
+<dependency>
+  <groupId>com.microsoft.kiota</groupId>
+  <artifactId>microsoft-kiota-serialization-text</artifactId>
+  <version>${kiota.libs.version}</version>
+</dependency>
+<dependency>
+  <groupId>com.microsoft.kiota</groupId>
+  <artifactId>microsoft-kiota-serialization-form</artifactId>
+  <version>${kiota.libs.version}</version>
+</dependency>
+<dependency>
+  <groupId>com.microsoft.kiota</groupId>
+  <artifactId>microsoft-kiota-serialization-multipart</artifactId>
+  <version>${kiota.libs.version}</version>
+</dependency>
+<dependency>
+  <groupId>jakarta.annotation</groupId>
+  <artifactId>jakarta.annotation-api</artifactId>
+</dependency>
+
+
+
+

Running mvn compile generates your classes under the target/generated-sources/kiota folder. +You can reference and use the generated code in your project, for example:

+
+
+
+
import jakarta.inject.Inject;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+
+import io.apisdk.petstore.json.ApiClient;
+import io.kiota.http.vertx.VertXRequestAdapter;
+import io.vertx.core.Vertx;
+
+@Produces(MediaType.APPLICATION_JSON)
+@Path("/petstore")
+public class PetResource {
+
+  @Inject Vertx vertx;
+
+  RequestAdapter adapter = new VertXRequestAdapter(vertx);
+  ApiClient client = new ApiClient(adapter);
+}
+
+
+
+

See the integration-tests module for more information of how to use this extension. Please be advised that the extension is on experimental, early development stage.

+
+
+
+
+
+ + + + + + + diff --git a/quarkus-kiota/dev/includes/quarkus-kiota.html b/quarkus-kiota/dev/includes/quarkus-kiota.html new file mode 100644 index 0000000000..ed09ad7cc1 --- /dev/null +++ b/quarkus-kiota/dev/includes/quarkus-kiota.html @@ -0,0 +1,1138 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Overrides the detected Operating System

+
+
+

Environment variable: QUARKUS_KIOTA_OS

+
+
+

string

+
+
+
+

Overrides the detected Architecture

+
+
+

Environment variable: QUARKUS_KIOTA_ARCH

+
+
+

string

+
+
+
+

The path to a kiota executable location to be used. When set, the kiota version is not going to be checked/used.

+
+
+

Environment variable: QUARKUS_KIOTA_PROVIDED

+
+
+

string

+
+
+
+

The path to a kiota executable location to be used

+
+
+

Environment variable: QUARKUS_KIOTA_RELEASE_URL

+
+
+

string

https://github.com/microsoft/kiota/releases

+
+
+
+

The kiota version to be used. If not provided we are going to try to resolve "latest" from the GitHub API. Please, set this property in any production grade project.

+
+
+

Environment variable: QUARKUS_KIOTA_VERSION

+
+
+

string

+
+
+
+

The timeout to be used when running the kiota CLI.

+
+
+

Environment variable: QUARKUS_KIOTA_TIMEOUT

+
+
+

string

30

Configuration resolved based on the OpenAPI description file name +This configuration section is optional

Type

Default

+
+
+
+

The generated API client class name.

+
+
+

Environment variable: QUARKUS_KIOTA_SPEC_NAME_CLASS_NAME

+
+
+

string

ApiClient

+
+
+
+

The generated API client package name.

+
+
+

Environment variable: QUARKUS_KIOTA_SPEC_NAME_PACKAGE_NAME

+
+
+

string

io.apisdk

+
+
+
+

The glob expression to be used to identify the endpoints to be included in the generation.

+
+
+

Environment variable: QUARKUS_KIOTA_SPEC_NAME_INCLUDE_PATH

+
+
+

string

+
+
+
+

The glob expression to be used to identify the endpoints to be excluded from the generation.

+
+
+

Environment variable: QUARKUS_KIOTA_SPEC_NAME_EXCLUDE_PATH

+
+
+

string

+
+
+
+

ADVANCED: The serializers to be used in the generated code.

+
+
+

Environment variable: QUARKUS_KIOTA_SPEC_NAME_SERIALIZER

+
+
+

list of string

+
+
+
+

ADVANCED: The deserializers to be used in the generated code.

+
+
+

Environment variable: QUARKUS_KIOTA_SPEC_NAME_DESERIALIZER

+
+
+

list of string

+
+
+
+
+ + + + + + + diff --git a/quarkus-kiota/dev/index.html b/quarkus-kiota/dev/index.html new file mode 100644 index 0000000000..23c5a82674 --- /dev/null +++ b/quarkus-kiota/dev/index.html @@ -0,0 +1,1322 @@ + + + + + + Quarkus - Kiota :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus - Kiota

+
+
+
+

Quarkus' extension for generation of fully typed, client side SDKs based on OpenAPI specification files.

+
+
+

This extension is based on the Microsoft Kiota generator.

+
+
+

Want to contribute? Great! We try to make it easy, and all contributions, even the smaller ones, are more than welcome. This includes bug reports, fixes, documentation, examples…​ But first, read this page.

+
+
+
+
+

Getting Started

+
+
+

First of all you need to add or update the quarkus-maven-plugin configuration with the following:

+
+
+
+
<plugin>
+  <groupId>io.quarkus</groupId>
+  <artifactId>quarkus-maven-plugin</artifactId>
+  <extensions>true</extensions>
+  <executions>
+    <execution>
+      <goals>
+        <goal>build</goal>
+        <goal>generate-code</goal>
+      </goals>
+    </execution>
+  </executions>
+</plugin>
+
+
+
+

Add the extension dependency to your project’s pom.xml file:

+
+
+
+
<dependency>
+  <groupId>io.kiota</groupId>
+  <artifactId>quarkus-kiota</artifactId>
+  <version>{project.version}</version>
+</dependency>
+
+
+
+

Now, create a new folder named openapi under src/main/ and add OpenAPI spec files there. Supported file extensions are: json, yaml, yml.

+
+
+

To fine tune the configuration for each spec file, add the following entry to your properties file. In this example, our spec file is in src/main/openapi/petstore.json:

+
+
+
+
quarkus.kiota.petstore.json.package-name=com.mycompany
+
+
+
+

If a base package name is not provided, it will be used the default io.apisdk.<filename>. For example, io.apisdk.petstore.json.

+
+
+

You can customize the name of Api Client class using the following property:

+
+
+
+
quarkus.kiota.petstore.json.class-name=MyApiClient
+
+
+
+

Now add the additional dependencies to compile the project:

+
+
+
+
<dependency>
+  <groupId>com.microsoft.kiota</groupId>
+  <artifactId>microsoft-kiota-abstractions</artifactId>
+  <version>${kiota.libs.version}</version>
+</dependency>
+<dependency>
+  <groupId>io.kiota</groupId>
+  <artifactId>kiota-http-vertx</artifactId> <!-- alternatively <artifactId>kiota-http-jdk</artifactId> -->
+  <version>{version}</version>
+</dependency>
+<dependency>
+  <groupId>io.kiota</groupId>
+  <artifactId>kiota-serialization-jackson-quarkus</artifactId>
+  <version>{version}</version>
+</dependency>
+<dependency>
+  <groupId>com.microsoft.kiota</groupId>
+  <artifactId>microsoft-kiota-serialization-text</artifactId>
+  <version>${kiota.libs.version}</version>
+</dependency>
+<dependency>
+  <groupId>com.microsoft.kiota</groupId>
+  <artifactId>microsoft-kiota-serialization-form</artifactId>
+  <version>${kiota.libs.version}</version>
+</dependency>
+<dependency>
+  <groupId>com.microsoft.kiota</groupId>
+  <artifactId>microsoft-kiota-serialization-multipart</artifactId>
+  <version>${kiota.libs.version}</version>
+</dependency>
+<dependency>
+  <groupId>jakarta.annotation</groupId>
+  <artifactId>jakarta.annotation-api</artifactId>
+</dependency>
+
+
+
+

Running mvn compile generates your classes under the target/generated-sources/kiota folder. +You can reference and use the generated code in your project, for example:

+
+
+
+
import jakarta.inject.Inject;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+
+import io.apisdk.petstore.json.ApiClient;
+import io.kiota.http.vertx.VertXRequestAdapter;
+import io.vertx.core.Vertx;
+
+@Produces(MediaType.APPLICATION_JSON)
+@Path("/petstore")
+public class PetResource {
+
+  @Inject Vertx vertx;
+
+  RequestAdapter adapter = new VertXRequestAdapter(vertx);
+  ApiClient client = new ApiClient(adapter);
+}
+
+
+
+

See the integration-tests module for more information of how to use this extension. Please be advised that the extension is on experimental, early development stage.

+
+
+
+
+

Authentication Support

+
+
+

With Kiota you can plug in any authentication mechanism provided by the underlying HTTP client.

+
+
+

For example, when using the VertX HTTP client you can configure a Bearer Access Token with OIDC like:

+
+
+
+
OAuth2Options options =
+        new OAuth2Options()
+                .setFlow(OAuth2FlowType.CLIENT)
+                .setClientId(CLIENT_ID)
+                .setTokenPath(keycloakUrl + "token")
+                .setClientSecret(CLIENT_SECRET);
+
+OAuth2Auth oAuth2Auth = OAuth2Auth.create(vertx, options);
+
+Oauth2Credentials oauth2Credentials = new Oauth2Credentials();
+
+OAuth2WebClient oAuth2WebClient =
+        OAuth2WebClient.create(WebClient.create(vertx), oAuth2Auth)
+                .withCredentials(oauth2Credentials);
+
+var adapter = new VertXRequestAdapter(oAuth2WebClient);
+
+
+
+
+
+

Full configuration

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Overrides the detected Operating System

+
+
+

Environment variable: QUARKUS_KIOTA_OS

+
+
+

string

+
+
+
+

Overrides the detected Architecture

+
+
+

Environment variable: QUARKUS_KIOTA_ARCH

+
+
+

string

+
+
+
+

The path to a kiota executable location to be used. When set, the kiota version is not going to be checked/used.

+
+
+

Environment variable: QUARKUS_KIOTA_PROVIDED

+
+
+

string

+
+
+
+

The path to a kiota executable location to be used

+
+
+

Environment variable: QUARKUS_KIOTA_RELEASE_URL

+
+
+

string

https://github.com/microsoft/kiota/releases

+
+
+
+

The kiota version to be used. If not provided we are going to try to resolve "latest" from the GitHub API. Please, set this property in any production grade project.

+
+
+

Environment variable: QUARKUS_KIOTA_VERSION

+
+
+

string

+
+
+
+

The timeout to be used when running the kiota CLI.

+
+
+

Environment variable: QUARKUS_KIOTA_TIMEOUT

+
+
+

string

30

Configuration resolved based on the OpenAPI description file name +This configuration section is optional

Type

Default

+
+
+
+

The generated API client class name.

+
+
+

Environment variable: QUARKUS_KIOTA_SPEC_NAME_CLASS_NAME

+
+
+

string

ApiClient

+
+
+
+

The generated API client package name.

+
+
+

Environment variable: QUARKUS_KIOTA_SPEC_NAME_PACKAGE_NAME

+
+
+

string

io.apisdk

+
+
+
+

The glob expression to be used to identify the endpoints to be included in the generation.

+
+
+

Environment variable: QUARKUS_KIOTA_SPEC_NAME_INCLUDE_PATH

+
+
+

string

+
+
+
+

The glob expression to be used to identify the endpoints to be excluded from the generation.

+
+
+

Environment variable: QUARKUS_KIOTA_SPEC_NAME_EXCLUDE_PATH

+
+
+

string

+
+
+
+

ADVANCED: The serializers to be used in the generated code.

+
+
+

Environment variable: QUARKUS_KIOTA_SPEC_NAME_SERIALIZER

+
+
+

list of string

+
+
+
+

ADVANCED: The deserializers to be used in the generated code.

+
+
+

Environment variable: QUARKUS_KIOTA_SPEC_NAME_DESERIALIZER

+
+
+

list of string

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-langchain4j/dev/_images/chatbot-architecture.png b/quarkus-langchain4j/dev/_images/chatbot-architecture.png new file mode 100644 index 0000000000..c5f104adbc Binary files /dev/null and b/quarkus-langchain4j/dev/_images/chatbot-architecture.png differ diff --git a/quarkus-langchain4j/dev/_images/llms-big-picture.png b/quarkus-langchain4j/dev/_images/llms-big-picture.png new file mode 100644 index 0000000000..5af83eb3c8 Binary files /dev/null and b/quarkus-langchain4j/dev/_images/llms-big-picture.png differ diff --git a/quarkus-langchain4j/dev/_images/trace.png b/quarkus-langchain4j/dev/_images/trace.png new file mode 100644 index 0000000000..550111fb1a Binary files /dev/null and b/quarkus-langchain4j/dev/_images/trace.png differ diff --git a/quarkus-langchain4j/dev/agent-and-tools.html b/quarkus-langchain4j/dev/agent-and-tools.html new file mode 100644 index 0000000000..2ddb94f006 --- /dev/null +++ b/quarkus-langchain4j/dev/agent-and-tools.html @@ -0,0 +1,1936 @@ + + + + + + Agent and Tools :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Agent and Tools

+
+
+
+

The core premise of agents involves employing a language model to discern a sequence of actions. +Unlike chains, where actions are hardcoded, agents utilize a language model as a reasoning engine to determine the actions (tools) and their sequence.

+
+
+
+
+

Concepts

+
+
+

Agent

+
+

The agent is the core decision-maker responsible for determining the subsequent steps. It’s driven by a language model and a prompt. The inputs include:

+
+
+
    +
  • +

    Tools: Descriptions of available actions

    +
  • +
  • +

    User Input: The high-level objective

    +
  • +
  • +

    Intermediate Steps: Previous (action, tool output) pairs executed in the order to fulfill the user input

    +
  • +
+
+
+

The output presents the next action(s) to take or the final response to be delivered to the user. Each action specifies a tool (method name) and its corresponding input parameters.

+
+
+
+

Tools

+
+

Tools are the methods an agent can invoke. Two elements are essential when using tools:

+
+
+
    +
  • +

    Granting the agent access to the right tools.

    +
  • +
  • +

    Describing tools in a manner most beneficial to the agent.

    +
  • +
+
+
+

Failure to consider both aspects may hinder the agent’s functionality. Access to an incorrect set of tools impedes the agent from achieving objectives, while improperly described tools hamper their effective utilization.

+
+
+
+
+
+

Recommendations for Agent Construction

+
+
+

When constructing an agent, consider:

+
+
+
    +
  • +

    Setting the model temperature to 0 for the agent to consistently choose the most probable action.

    +
  • +
  • +

    Ensuring well-detailed descriptions of tools.

    +
  • +
  • +

    Listing steps in the prompt in the desired execution order.

    +
  • +
+
+
+
+
+

Declaring a Tool

+
+
+

A tool denotes a method accessible by an agent. It must be part of a CDI bean and have at least one method annotated with @Tool:

+
+
+
+
// Example of an EmailService tool method
+package io.quarkiverse.langchain4j.sample;
+
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+
+import dev.langchain4j.agent.tool.Tool;
+import io.quarkus.logging.Log;
+import io.quarkus.mailer.Mail;
+import io.quarkus.mailer.Mailer;
+
+@ApplicationScoped
+public class EmailService {
+
+    @Inject
+    Mailer mailer;
+
+    @Tool("send the provided content via email")
+    public void sendAnEmail(String content) {
+        Log.info("Sending an email: " + content);
+        mailer.send(Mail.withText("sendMeALetter@quarkus.io", "A poem for you", content));
+    }
+
+}
+
+
+
+ + + + + +
+ + +A CDI bean can host multiple methods annotated with @Tool. +However, ensure each method name is unique among all declared tools. +
+
+
+
+
+

Providing Tool Access

+
+
+

In the AI Service, you can specify the tools accessible to the agent. By default, no tools are available. Hence, ensure to define the list of tools you wish to make accessible:

+
+
+
+
@RegisterAiService(tools = EmailService.class)
+public interface MyAiService {
+    // ...
+}
+
+
+
+

When employing tools, configuring the memory provider is necessary. Since tools necessitate a sequence of messages, maintaining this conversation is essential. A minimum memory of three messages is necessary for optimal tool functionality.

+
+
+
+
+

How do tools work?

+
+
+

The question of how tools work naturally arises given the fact that no code needs to be written that wires up their usage.

+
+
+

The short answer is by providing the proper user and system messages and tool descriptions, the extension is able to craft +API requests that allow the LLM to respond back with the proper tool invocations - but it is the extension itself then proceeds to invoke the tool. +The result of the invocation is then used by the extension to make another request to the LLM which will then response with a new answer, potentially leading to another round of a tool invocation and the crafting of a new request to the LLM.

+
+
+

Detailed example

+
+

To help clarify the various interactions, let’s use the following example where we are creating a very simple calculator chatbot that responds to user requests over HTTP, leveraging the quarkus-langchain4j-openai extension. +Here is the full source code:

+
+
+
+
import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import jakarta.annotation.PreDestroy;
+import jakarta.enterprise.context.RequestScoped;
+import jakarta.inject.Singleton;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+
+import org.jboss.resteasy.reactive.RestQuery;
+
+import dev.langchain4j.agent.tool.Tool;
+import dev.langchain4j.memory.ChatMemory;
+import dev.langchain4j.memory.chat.ChatMemoryProvider;
+import io.quarkiverse.langchain4j.RegisterAiService;
+import io.quarkiverse.langchain4j.RemovableChatMemoryProvider;
+
+@Path("assistant-with-tool")
+public class AssistantWithToolsResource {
+
+    private final Assistant assistant;
+
+    public AssistantWithToolsResource(Assistant assistant) {
+        this.assistant = assistant;
+    }
+
+    @GET  (3)
+    public String get(@RestQuery String message) {
+        return assistant.chat(message);
+    }
+
+    @Singleton (1)
+    public static class Calculator {
+
+        @Tool("Calculates the length of a string")
+        int stringLength(String s) {
+            return s.length();
+        }
+
+        @Tool("Calculates the sum of two numbers")
+        int add(int a, int b) {
+            return a + b;
+        }
+
+        @Tool("Calculates the square root of a number")
+        double sqrt(int x) {
+            return Math.sqrt(x);
+        }
+    }
+
+    @RegisterAiService(tools = Calculator.class) (2)
+    public interface Assistant {
+
+        String chat(String userMessage);
+    }
+}
+
+
+
+ + + + + + + + + + + + + +
1Declare a CDI bean that provides three different tools
2Register an AiService that responds to a user’s request and has access to the calculator tools. This service is also able to keep track of the session’s messages using the CDI message store declared above.
3Declare an HTTP endpoint that retrieves the user’s question via a query parameter and simply responds with chatbot’s response
+
+
+

Now, if we ask the chatbot What is the square root of the sum of the numbers of letters in the words "hello" and "world" via:

+
+
+
+
curl 'http://localhost:8080/assistant-with-tool?message=What%20is%20the%20square%20root%20of%20the%20sum%20of%20the%20numbers%20of%20letters%20in%20the%20words%20%22hello%22%20and%20%22world%22'
+
+
+
+

The response will be The square root of the sum of the numbers of letters in the words "hello" and "world" is approximately 3.162.

+
+
+

What is interesting however in understanding how the tools were used, is seeing the requests the extension has made to OpenAI and the responses the latter provides.

+
+
+

The application makes a first REST call to OpenAI that contains the following JSON payload:

+
+
+
+
{
+  "model": "gpt-3.5-turbo",
+  "messages": [
+    {
+      "role": "user",
+      "content": "What is the square root of the sum of the numbers of letters in the words \"hello\" and \"world\""
+    }
+  ],
+  "temperature": 1.0,
+  "top_p": 1.0,
+  "presence_penalty": 0.0,
+  "frequency_penalty": 0.0,
+  "functions": [
+    {
+      "name": "stringLength",
+      "description": "Calculates the length of a string",
+      "parameters": {
+        "type": "object",
+        "properties": {
+          "s": {
+            "type": "string"
+          }
+        },
+        "required": [
+          "s"
+        ]
+      }
+    },
+    {
+      "name": "add",
+      "description": "Calculates the sum of two numbers",
+      "parameters": {
+        "type": "object",
+        "properties": {
+          "a": {
+            "type": "integer"
+          },
+          "b": {
+            "type": "integer"
+          }
+        },
+        "required": [
+          "a",
+          "b"
+        ]
+      }
+    },
+    {
+      "name": "sqrt",
+      "description": "Calculates the square root of a number",
+      "parameters": {
+        "type": "object",
+        "properties": {
+          "x": {
+            "type": "integer"
+          }
+        },
+        "required": [
+          "x"
+        ]
+      }
+    }
+  ]
+}
+
+
+
+

There are two things to notice in this JSON payload:

+
+
+
    +
  • +

    The user message which contains the user’s question (the messages part of the request)

    +
  • +
  • +

    The declaration of the three available functions (the functions part of the request) which directly map to the tools we declared in our source code.

    +
  • +
+
+
+

The response from OpenAI is the following:

+
+
+
+
{
+  "id": "chatcmpl-8L3uhmaMARLTbpGJGDvFW4pAPxM8V",
+  "object": "chat.completion",
+  "created": 1700030623,
+  "model": "gpt-3.5-turbo-0613",
+  "choices": [
+    {
+      "index": 0,
+      "message": {
+        "role": "assistant",
+        "content": null,
+        "function_call": {
+          "name": "stringLength",
+          "arguments": "{\n  \"s\": \"hello\"\n}"
+        }
+      },
+      "finish_reason": "function_call"
+    }
+  ],
+  "usage": {
+    "prompt_tokens": 118,
+    "completion_tokens": 15,
+    "total_tokens": 133
+  }
+}
+
+
+
+

This response initially looks odd as it does not look like OpenAI has responded to user’s question. +However, upon closer inspection we see that the response contains something very interesting and that is the function_call part. +In this part OpenAI is essentially telling the extension to invoke the stringLength tool with hello as the sole parameter. +This is where the power of the LLM is evident - it has essentially figured out that to answer the user’s question, it first needs to calculate the length of "hello".

+
+
+

Upon receiving this response, the extension invokes calculator.stringLength("hello") and then sends the following new request to OpenAI:

+
+
+
+
{
+  "model": "gpt-3.5-turbo",
+  "messages": [
+    {
+      "role": "user",
+      "content": "What is the square root of the sum of the numbers of letters in the words \"hello\" and \"world\""
+    },
+    {
+      "role": "assistant",
+      "content": null,
+      "function_call": {
+        "name": "stringLength",
+        "arguments": "{\n  \"s\": \"hello\"\n}"
+      }
+    },
+    {
+      "role": "function",
+      "content": "5",
+      "name": "stringLength"
+    }
+  ],
+  "temperature": 1.0,
+  "top_p": 1.0,
+  "presence_penalty": 0.0,
+  "frequency_penalty": 0.0,
+  "functions": [
+    {
+      "name": "stringLength",
+      "description": "Calculates the length of a string",
+      "parameters": {
+        "type": "object",
+        "properties": {
+          "s": {
+            "type": "string"
+          }
+        },
+        "required": [
+          "s"
+        ]
+      }
+    },
+    {
+      "name": "add",
+      "description": "Calculates the sum of two numbers",
+      "parameters": {
+        "type": "object",
+        "properties": {
+          "a": {
+            "type": "integer"
+          },
+          "b": {
+            "type": "integer"
+          }
+        },
+        "required": [
+          "a",
+          "b"
+        ]
+      }
+    },
+    {
+      "name": "sqrt",
+      "description": "Calculates the square root of a number",
+      "parameters": {
+        "type": "object",
+        "properties": {
+          "x": {
+            "type": "integer"
+          }
+        },
+        "required": [
+          "x"
+        ]
+      }
+    }
+  ]
+}
+
+
+
+

What is very important to notice here is that the extension is sending not only has the user’s question, +but also the LLM’s first response requesting a tool invocation, along with a new message containing the result of the said invocation. +Recall that LLMs are stateless, therefore the entire message history needs to be sent each time - this is the reason why the use of tools +requires a chat memory.

+
+
+

OpenAI now responds with the following:

+
+
+
+
{
+  "id": "chatcmpl-8L3ukBR1Pblqn4g5m3JocHQVzYqMy",
+  "object": "chat.completion",
+  "created": 1700030626,
+  "model": "gpt-3.5-turbo-0613",
+  "choices": [
+    {
+      "index": 0,
+      "message": {
+        "role": "assistant",
+        "content": null,
+        "function_call": {
+          "name": "stringLength",
+          "arguments": "{\n  \"s\": \"world\"\n}"
+        }
+      },
+      "finish_reason": "function_call"
+    }
+  ],
+  "usage": {
+    "prompt_tokens": 142,
+    "completion_tokens": 15,
+    "total_tokens": 157
+  }
+}
+
+
+
+

Once again we see the LLM can not yet answer the original user’s question, but instead instructs the extension to invoke a tool.

+
+
+

As you’d expect by now, the extension does just that and sends the following new request to OpenAI:

+
+
+
+
{
+  "model": "gpt-3.5-turbo",
+  "messages": [
+    {
+      "role": "user",
+      "content": "What is the square root of the sum of the numbers of letters in the words \"hello\" and \"world\""
+    },
+    {
+      "role": "assistant",
+      "content": null,
+      "function_call": {
+        "name": "stringLength",
+        "arguments": "{\n  \"s\": \"hello\"\n}"
+      }
+    },
+    {
+      "role": "function",
+      "content": "5",
+      "name": "stringLength"
+    },
+    {
+      "role": "assistant",
+      "content": null,
+      "function_call": {
+        "name": "stringLength",
+        "arguments": "{\n  \"s\": \"world\"\n}"
+      }
+    },
+    {
+      "role": "function",
+      "content": "5",
+      "name": "stringLength"
+    }
+  ],
+  "temperature": 1.0,
+  "top_p": 1.0,
+  "presence_penalty": 0.0,
+  "frequency_penalty": 0.0,
+  "functions": [
+    {
+      "name": "stringLength",
+      "description": "Calculates the length of a string",
+      "parameters": {
+        "type": "object",
+        "properties": {
+          "s": {
+            "type": "string"
+          }
+        },
+        "required": [
+          "s"
+        ]
+      }
+    },
+    {
+      "name": "add",
+      "description": "Calculates the sum of two numbers",
+      "parameters": {
+        "type": "object",
+        "properties": {
+          "a": {
+            "type": "integer"
+          },
+          "b": {
+            "type": "integer"
+          }
+        },
+        "required": [
+          "a",
+          "b"
+        ]
+      }
+    },
+    {
+      "name": "sqrt",
+      "description": "Calculates the square root of a number",
+      "parameters": {
+        "type": "object",
+        "properties": {
+          "x": {
+            "type": "integer"
+          }
+        },
+        "required": [
+          "x"
+        ]
+      }
+    }
+  ]
+}
+
+
+
+

This new request, in addition to the previous one sent to OpenAI, contains the result of the invocation of calculator.stringLength("world").

+
+
+

In turn, OpenAI responds with:

+
+
+
+
{
+  "id": "chatcmpl-8L3uopZa8wdBmGWoWBqWbCO8UdwVv",
+  "object": "chat.completion",
+  "created": 1700030630,
+  "model": "gpt-3.5-turbo-0613",
+  "choices": [
+    {
+      "index": 0,
+      "message": {
+        "role": "assistant",
+        "content": null,
+        "function_call": {
+          "name": "add",
+          "arguments": "{\n  \"a\": 5,\n  \"b\": 5\n}"
+        }
+      },
+      "finish_reason": "function_call"
+    }
+  ],
+  "usage": {
+    "prompt_tokens": 166,
+    "completion_tokens": 21,
+    "total_tokens": 187
+  }
+}
+
+
+
+

This time the LLM instructed the extension that it is time to invoke the add tool using 5 and 5 as arguments - these arguments of course are the results of the previous two stringLength invocations.

+
+
+

The extension upon receiving this response invoked calculator.add(5,5) and then crafts and sends the following message to OpenAI:

+
+
+
+
{
+  "model": "gpt-3.5-turbo",
+  "messages": [
+    {
+      "role": "user",
+      "content": "What is the square root of the sum of the numbers of letters in the words \"hello\" and \"world\""
+    },
+    {
+      "role": "assistant",
+      "content": null,
+      "function_call": {
+        "name": "stringLength",
+        "arguments": "{\n  \"s\": \"hello\"\n}"
+      }
+    },
+    {
+      "role": "function",
+      "content": "5",
+      "name": "stringLength"
+    },
+    {
+      "role": "assistant",
+      "content": null,
+      "function_call": {
+        "name": "stringLength",
+        "arguments": "{\n  \"s\": \"world\"\n}"
+      }
+    },
+    {
+      "role": "function",
+      "content": "5",
+      "name": "stringLength"
+    },
+    {
+      "role": "assistant",
+      "content": null,
+      "function_call": {
+        "name": "add",
+        "arguments": "{\n  \"a\": 5,\n  \"b\": 5\n}"
+      }
+    },
+    {
+      "role": "function",
+      "content": "10",
+      "name": "add"
+    }
+  ],
+  "temperature": 1.0,
+  "top_p": 1.0,
+  "presence_penalty": 0.0,
+  "frequency_penalty": 0.0,
+  "functions": [
+    {
+      "name": "stringLength",
+      "description": "Calculates the length of a string",
+      "parameters": {
+        "type": "object",
+        "properties": {
+          "s": {
+            "type": "string"
+          }
+        },
+        "required": [
+          "s"
+        ]
+      }
+    },
+    {
+      "name": "add",
+      "description": "Calculates the sum of two numbers",
+      "parameters": {
+        "type": "object",
+        "properties": {
+          "a": {
+            "type": "integer"
+          },
+          "b": {
+            "type": "integer"
+          }
+        },
+        "required": [
+          "a",
+          "b"
+        ]
+      }
+    },
+    {
+      "name": "sqrt",
+      "description": "Calculates the square root of a number",
+      "parameters": {
+        "type": "object",
+        "properties": {
+          "x": {
+            "type": "integer"
+          }
+        },
+        "required": [
+          "x"
+        ]
+      }
+    }
+  ]
+}
+
+
+
+

The response from OpenAI is:

+
+
+
+
{
+  "id": "chatcmpl-8L3urz1QWWjh3Dzmjqu0O3hK16NUE",
+  "object": "chat.completion",
+  "created": 1700030633,
+  "model": "gpt-3.5-turbo-0613",
+  "choices": [
+    {
+      "index": 0,
+      "message": {
+        "role": "assistant",
+        "content": null,
+        "function_call": {
+          "name": "sqrt",
+          "arguments": "{\n  \"x\": 10\n}"
+        }
+      },
+      "finish_reason": "function_call"
+    }
+  ],
+  "usage": {
+    "prompt_tokens": 195,
+    "completion_tokens": 14,
+    "total_tokens": 209
+  }
+}
+
+
+
+

The LLM this time decided that the sqrt tool needs to be invoked.

+
+
+

The extension following this instruction invokes calculator.sqrt(10) (10 being the result of the previous add invocation) then crafts and sends the following message to OpenAI:

+
+
+
+
{
+  "model": "gpt-3.5-turbo",
+  "messages": [
+    {
+      "role": "user",
+      "content": "What is the square root of the sum of the numbers of letters in the words \"hello\" and \"world\""
+    },
+    {
+      "role": "assistant",
+      "content": null,
+      "function_call": {
+        "name": "stringLength",
+        "arguments": "{\n  \"s\": \"hello\"\n}"
+      }
+    },
+    {
+      "role": "function",
+      "content": "5",
+      "name": "stringLength"
+    },
+    {
+      "role": "assistant",
+      "content": null,
+      "function_call": {
+        "name": "stringLength",
+        "arguments": "{\n  \"s\": \"world\"\n}"
+      }
+    },
+    {
+      "role": "function",
+      "content": "5",
+      "name": "stringLength"
+    },
+    {
+      "role": "assistant",
+      "content": null,
+      "function_call": {
+        "name": "add",
+        "arguments": "{\n  \"a\": 5,\n  \"b\": 5\n}"
+      }
+    },
+    {
+      "role": "function",
+      "content": "10",
+      "name": "add"
+    },
+    {
+      "role": "assistant",
+      "content": null,
+      "function_call": {
+        "name": "sqrt",
+        "arguments": "{\n  \"x\": 10\n}"
+      }
+    },
+    {
+      "role": "function",
+      "content": "3.1622776601683795",
+      "name": "sqrt"
+    }
+  ],
+  "temperature": 1.0,
+  "top_p": 1.0,
+  "presence_penalty": 0.0,
+  "frequency_penalty": 0.0,
+  "functions": [
+    {
+      "name": "stringLength",
+      "description": "Calculates the length of a string",
+      "parameters": {
+        "type": "object",
+        "properties": {
+          "s": {
+            "type": "string"
+          }
+        },
+        "required": [
+          "s"
+        ]
+      }
+    },
+    {
+      "name": "add",
+      "description": "Calculates the sum of two numbers",
+      "parameters": {
+        "type": "object",
+        "properties": {
+          "a": {
+            "type": "integer"
+          },
+          "b": {
+            "type": "integer"
+          }
+        },
+        "required": [
+          "a",
+          "b"
+        ]
+      }
+    },
+    {
+      "name": "sqrt",
+      "description": "Calculates the square root of a number",
+      "parameters": {
+        "type": "object",
+        "properties": {
+          "x": {
+            "type": "integer"
+          }
+        },
+        "required": [
+          "x"
+        ]
+      }
+    }
+  ]
+}
+
+
+
+

Once again, it’s very important to note that entire chat history has been sent by the extension to OpenAI. +Using this entire chat history, the LLM is finally able to answer the original user’s question:

+
+
+
+
{
+  "id": "chatcmpl-8L3utMpnSKtgzWcmHJVwVJd36l9fk",
+  "object": "chat.completion",
+  "created": 1700030635,
+  "model": "gpt-3.5-turbo-0613",
+  "choices": [
+    {
+      "index": 0,
+      "message": {
+        "role": "assistant",
+        "content": "The square root of the sum of the numbers of letters in the words \"hello\" and \"world\" is approximately 3.162."
+      },
+      "finish_reason": "stop"
+    }
+  ],
+  "usage": {
+    "prompt_tokens": 224,
+    "completion_tokens": 29,
+    "total_tokens": 253
+  }
+}
+
+
+
+

As seen above, the answer is The square root of the sum of the numbers of letters in the words \"hello\" and \"world\" is approximately 3.162. and that is what Quarkus will send back to the user as the HTTP response.

+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-langchain4j/dev/ai-services.html b/quarkus-langchain4j/dev/ai-services.html new file mode 100644 index 0000000000..9f06d3a37f --- /dev/null +++ b/quarkus-langchain4j/dev/ai-services.html @@ -0,0 +1,1646 @@ + + + + + + Designing AI services :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Designing AI services

+
+
+
+

An AI Service employs a declarative approach to define interactions with the LLM, serving as the pivotal interaction point between your application and the LLM. It operates as an intermediary, known as an ambassador.

+
+
+
+
+

Purpose

+
+
+

The AI Service serves as the core connection point between your application and the LLM. It abstracts the LLM specifics, encapsulating and declaring all interactions within a singular interface.

+
+
+
+
+

Leveraging @RegisterAiService

+
+
+

The @RegisterAiService annotation is pivotal for registering an AI Service, placed on an interface:

+
+
+
+
@RegisterAiService
+public interface MyAiService {
+    // methods.
+}
+
+
+
+

Once registered, you can inject the AI Service into your application:

+
+
+
+
@Inject MyAiService service;
+
+
+
+ + + + + +
+ + +
+

The beans created by @RegisterAiService are @RequestScoped by default. The reason for this is that it enables removing chat Configuring the Context (Memory) objects. +This is a good default when a service is used during when handling an HTTP request, but it’s inappropriate in CLIs or in WebSockets (WebSocket support is expected to improve in the near future). +For example when using a service in a CLI, it makes sense to have the service be @ApplicationScoped and the extension allows this simply if the service is annotated with @ApplicationScoped.

+
+
+
+
+
+
+

AI method declaration

+
+
+

Within the interface annotated with @RegisterAiService, you model interactions with the LLM using methods. These methods accept parameters and are annotated with @SystemMessage and @UserMessage to define instructions directed to the LLM:

+
+
+
+
@SystemMessage("You are a professional poet.")
+@UserMessage("""
+    Write a poem about {topic}. The poem should be {lines} lines long. Then send this poem by email.
+""")
+String writeAPoem(String topic, int lines);
+
+
+
+

System Message

+
+

The @SystemMessage annotation defines the scope and initial instructions, serving as the first message sent to the LLM. It delineates the AI service’s role in the interaction:

+
+
+
+
@SystemMessage("""
+    You are working for a bank, processing reviews about financial products. Triage reviews into positive and negative ones, responding with a JSON document.
+    """
+)
+
+
+
+
+

User Message (Prompt)

+
+

The @UserMessage annotation defines primary instructions dispatched to the LLM. It typically encompasses requests and the expected response format:

+
+
+
+
@UserMessage("""
+    Your task is to process the review delimited by ---.
+    Apply a sentiment analysis to the review to determine if it is positive or negative, considering various languages.
+
+    For example:
+    - "I love your bank, you are the best!" is a 'POSITIVE' review
+    - "J'adore votre banque" is a 'POSITIVE' review
+    - "I hate your bank, you are the worst!" is a 'NEGATIVE' review
+
+    Respond with a JSON document containing:
+    - the 'evaluation' key set to 'POSITIVE' if the review is positive, 'NEGATIVE' otherwise
+    - the 'message' key set to a message thanking or apologizing to the customer. These messages must be polite and match the review's language.
+
+    ---
+    {review}
+    ---
+""")
+TriagedReview triage(String review);
+
+
+
+
+

Parameter Passing and Referencing

+
+

AI methods can take parameters referenced in system and user messages using the {parameter} syntax:

+
+
+
+
@SystemMessage("You are a professional poet")
+@UserMessage("""
+    Write a poem about {topic}. The poem should be {lines} lines long. Then send this poem by email.
+""")
+String writeAPoem(String topic, int lines);
+
+
+
+
+

AI Method Return Type

+
+

If the prompt defines the JSON response format precisely, you can map the response directly to an object:

+
+
+
+
// ... See above for the prompt
+TriagedReview triage(String review);
+
+
+
+

In this instance, Quarkus automatically creates an instance of TriagedReview from the LLM’s JSON response.

+
+
+
+

Receiving User Message as a Parameter

+
+

For situations requiring the user message to be passed as a parameter, you can use the @UserMessage annotation on a parameter. Exercise caution with this feature, especially when the AI has access to tools:

+
+
+
+
String chat(@UserMessage String userMessage);
+
+
+
+

The annotated parameter should be of type String.

+
+
+
+

Receiving MemoryId as a Parameter

+
+

The memory encompasses the cumulative context of the interaction with the LLM. To manage statelessness in LLMs, the complete context must be exchanged between the LLM and the AI service.

+
+
+

Hence, the AI Service can store the latest messages in a memory, often termed context. The @MemoryId annotation enables referencing the memory for a specific user in the AI method:

+
+
+
+
String chat(@MemoryId int memoryId, @UserMessage String userMessage);
+
+
+
+

We’ll explore an alternative approach to avoid manual memory handling in the Configuring the Context (Memory) section.

+
+
+
+
+
+

Configuring the Chat Language Model

+
+
+

While LLMs are the base AI models, the chat language model builds upon them, enabling chat-like interactions. If you have a single chat language model, no specific configuration is required.

+
+
+

However, when multiple model providers are present in the application (such as OpenAI, Azure OpenAI, HuggingFace, etc.) +each model different model needs to be given a name, which is then referenced by the AI service like so:

+
+
+
+
@RegisterAiService(modelName="m1")
+
+
+
+

The configuration of the various models could look like so:

+
+
+
+
# ensure that the model with the name 'm1', is provided by OpenAI
+quarkus.langchain4j.m1.chat-model.provider=openai
+# ensure that the model with the name 'm1', is provided by OpenAI
+quarkus.langchain4j.m2.chat-model.provider=huggingface
+
+# configure the various aspects of each model
+quarkus.langchain4j.openai.m1.api-key=sk-...
+quarkus.langchain4j.huggingface.m2.api-key=sk-...
+
+
+
+
+
+

Configuring the Context (Memory)

+
+
+

As LLMs are stateless, the memory — comprising the interaction context — must be exchanged each time. To prevent storing excessive messages, it’s crucial to evict older messages.

+
+
+

The chatMemoryProviderSupplier attribute of the @RegisterAiService annotation enables configuring the dev.langchain4j.memory.chat.ChatMemoryProvider. The default value of this annotation is RegisterAiService.BeanIfExistsChatMemoryProviderSupplier.class +which means that the AiService will use whatever ChatMemoryProvider bean is configured by the application.

+
+
+

The extension provides a default implementation of ChatMemoryProvider which does two things:

+
+
+
    +
  • +

    It uses whatever bean dev.langchain4j.store.memory.chat.ChatMemoryStore bean is configured, as the backing store. The default implementation is dev.langchain4j.store.memory.chat.InMemoryChatMemoryStore

    +
    +
      +
    • +

      If the application provides its own ChatMemoryStore bean, that will be used instead of the default InMemoryChatMemoryStore,

      +
    • +
    +
    +
  • +
  • +

    It leverages the available configuration options under quarkus.langchain4j.chat-memory to construct the ChatMemoryProvider.

    +
    +
      +
    • +

      The default configuration values result in the usage of dev.langchain4j.memory.chat.MessageWindowChatMemory with a window size of ten.

      +
    • +
    • +

      By setting quarkus.langchain4j.chat-memory.type=token-window, a dev.langchain4j.memory.chat.TokenWindowChatMemory will be used. Note that this requires the presence of a dev.langchain4j.model.Tokenizer bean.

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

The topic of ChatMemory cleanup is of paramount importance in order to avoid having the application terminate with out of memory errors. For this reason, the extension automatically removes all the ChatMemory objects from +the underlying ChatMemoryStore when the AI Service goes out of scope (recall from our discussion about [scope] that such bean are @RequestScoped be default).

+
+
+

However, in cases where more fine-grained control is needed (which is the case when the bean is declared as @Singleton or @ApplicationScoped) then io.quarkiverse.langchain4j.ChatMemoryRemover should be used to manually remove elements.

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

When using an AiService that is expected to use to chat memory, it is very important to use @MemoryId (as mentioned in a later section). Failure to do so, can lead to unexpected and hard to debug results.

+
+
+
+
+

Advanced usage

+
+

Although the extension’s default ChatMemoryProvider is very configurable making unnecessary in most cases to resort to a custom implementation, such a capability is possible. Here is a possible example:

+
+
+
+
package io.quarkiverse.langchain4j.samples;
+
+import jakarta.inject.Singleton;
+
+import dev.langchain4j.memory.ChatMemory;
+import dev.langchain4j.memory.chat.ChatMemoryProvider;
+import dev.langchain4j.store.memory.chat.ChatMemoryStore;
+
+@Singleton
+public class CustomChatMemoryProvider implements ChatMemoryProvider {
+
+    private final ChatMemoryStore store;
+
+    public CustomChatMemoryProvider() {
+        this.store = createCustomStore();
+    }
+
+    private static ChatMemoryStore createCustomStore() {
+        // TODO: provide some kind of custom store
+        return null;
+    }
+
+    @Override
+    public ChatMemory get(Object memoryId) {
+        return createCustomMemory(memoryId);
+    }
+
+    private static ChatMemory createCustomMemory(Object memoryId) {
+        // TODO: implement using memoryId and store
+        return null;
+    }
+}
+
+
+
+

If for some reason different AI services need to have a different ChatMemoryProvider (i.e. not use the globally available bean), this is possible by configuring the chatMemoryProviderSupplier attribute of the @RegisterAiService annotation and implementing as custom provider. +Here is a possible example:

+
+
+
+
package io.quarkiverse.langchain4j.samples;
+
+import java.util.function.Supplier;
+
+import dev.langchain4j.memory.ChatMemory;
+import dev.langchain4j.memory.chat.ChatMemoryProvider;
+import dev.langchain4j.memory.chat.MessageWindowChatMemory;
+import dev.langchain4j.store.memory.chat.InMemoryChatMemoryStore;
+
+public class CustomProvider implements Supplier<ChatMemoryProvider> {
+
+    private final InMemoryChatMemoryStore store = new InMemoryChatMemoryStore();
+
+    @Override
+    public ChatMemoryProvider get() {
+        return new ChatMemoryProvider() {
+
+            @Override
+            public ChatMemory get(Object memoryId) {
+                return MessageWindowChatMemory.builder()
+                        .maxMessages(20)
+                        .id(memoryId)
+                        .chatMemoryStore(store)
+                        .build();
+            }
+        };
+    }
+}
+
+
+
+

and configuring the AiService as so:

+
+
+
+
@RegisterAiService(
+    chatMemoryProviderSupplier = MySmallMemoryProvider.class)
+
+
+
+ + + + + +
+ + +For non-memory-reliant LLM interactions, you may skip memory configuration. +
+
+
+
+

@MemoryId

+
+

In cases involving multiple users, ensure each user has a unique memory ID and pass this ID to the AI method:

+
+
+
+
String chat(@MemoryId int memoryId, @UserMessage String userMessage);
+
+
+
+

Also, remember to clear out users to prevent memory issues.

+
+
+
+
+
+

Configuring Tools

+
+
+

Tools are methods that LLMs can invoke to access additional data. These methods, declared using the @Tool annotation, should be part of a bean:

+
+
+
+
@ApplicationScoped
+public class CustomerRepository implements PanacheRepository<Customer> {
+
+    @Tool("get the customer name for the given customerId")
+    public String getCustomerName(long id) {
+        return find("id", id).firstResult().name;
+    }
+
+}
+
+
+
+

The @Tool annotation can provide a description of the action, aiding the LLM in tool selection. The @RegisterAiService annotation allows configuring the tool provider:

+
+
+
+
@RegisterAiService(tools = {TransactionRepository.class, CustomerRepository.class })
+
+
+
+ + + + + +
+ + +Ensure you configure the memory provider when using tools. +
+
+
+ + + + + +
+ + +Be cautious to avoid exposing destructive operations via tools. +
+
+
+

More information about tools is available in the Agent and Tools page.

+
+
+
+
+

Configuring a Document Retriever

+
+
+

A document retriever fetches data from an external source and provides it to the LLM. It helps by sending only the relevant data, considering the LLM’s context limitations.

+
+
+

This guidance aims to cover all crucial aspects of designing AI services with Quarkus, ensuring robust and efficient interactions with LLMs.

+
+
+
+
+

Moderation

+
+
+

By default, @RegisterAiService annotated interfaces don’t moderate content. However, users can opt in to having the LLM moderate +content by annotating the method with @Moderate.

+
+
+

For moderation to work, the following criteria need to be met:

+
+
+
    +
  • +

    A CDI bean for dev.langchain4j.model.moderation.ModerationModel must be configured (the quarkus-langchain4j-openai and quarkus-langchain4j-azure-openai provide one out of the box)

    +
  • +
  • +

    The interface must be configured with @RegisterAiService(moderationModelSupplier = RegisterAiService.BeanModerationModelSupplier.class)

    +
  • +
+
+
+

Advanced usage

+
+

An alternative to providing a CDI bean is to configure the interface with @RegisterAiService(moderationModelSupplier = MyCustomSupplier.class) +and implement MyCustomModerationSupplier like so:

+
+
+
+
import dev.langchain4j.model.moderation.ModerationModel;
+
+public class MyCustomModerationSupplier implements Supplier<ModerationModel> {
+
+    @Override
+    public ModerationModel get(){
+        // TODO: implement
+    }
+
+}
+
+
+
+
+
+
+

Observability

+
+
+

Observability is built into services created via @RegisterAiService and is provided in the following form:

+
+
+
    +
  • +

    Metrics are enabled when quarkus-micrometer is part of the application

    +
  • +
  • +

    Traces are enabled when quarkus-opentelemetry is part of the application

    +
  • +
+
+
+

Metrics

+
+

Each AI method is automatically timed and the timer data is available using the langchain4j.aiservices.$interface_name.$method_name template for the name.

+
+
+

For example, if the AI service looks like:

+
+
+
+
@RegisterAiService
+public interface PoemAiService {
+
+    @SystemMessage("You are a professional poet")
+    @UserMessage("Write a poem about {topic}. The poem should be {lines} lines long")
+    String writeAPoem(String topic, int lines);
+}
+
+
+
+

and one chooses to use quarkus-micrometer-registry-prometheus, then the metrics could be:

+
+
+
+
# TYPE langchain4j_aiservices counter
+# HELP langchain4j_aiservices
+langchain4j_aiservices_total{aiservice="MyAiService",exception="none",method="writeAPoem",result="success"} 5.0
+
+# TYPE langchain4j_aiservices_seconds_max gauge
+# HELP langchain4j_aiservices_seconds_max
+langchain4j_aiservices_seconds_max{aiservice="MyAiService",method="writeAPoem"} 7.725769221
+# TYPE langchain4j_aiservices_seconds summary
+# HELP langchain4j_aiservices_seconds
+langchain4j_aiservices_seconds_count{aiservice="MyAiService",method="writeAPoem"} 5.0
+langchain4j_aiservices_seconds_sum{aiservice="MyAiService",method="writeAPoem"} 30.229575906
+
+
+
+
+

Tracing

+
+

Each AI method creates its own span using the langchain4j.aiservices.$interface_name.$method_name template for the name. +Furthermore, tool invocations also create a span using langchain4j.tools.$tool_name template for the name.

+
+
+

For example, if the AI service looks like:

+
+
+
+
@RegisterAiService(tools = EmailService.class)
+public interface PoemAiService {
+
+    @SystemMessage("You are a professional poet")
+    @UserMessage("Write a poem about {topic}. The poem should be {lines} lines long. Then send this poem by email.")
+    String writeAPoem(String topic, int lines);
+
+}
+
+
+
+

a tool that looks like:

+
+
+
+
@ApplicationScoped
+public class EmailService {
+
+    @Inject
+    Mailer mailer;
+
+    @Tool("send the given content by email")
+    public void sendAnEmail(String content) {
+        Log.info("Sending an email: " + content);
+        mailer.send(Mail.withText("sendMeALetter@quarkus.io", "A poem for you", content));
+    }
+
+}
+
+
+
+

and invocation of the AI service that looks like:

+
+
+
+
@Path("/email-me-a-poem")
+public class EmailMeAPoemResource {
+
+    private final MyAiService service;
+
+    public EmailMeAPoemResource(MyAiService service) {
+        this.service = service;
+    }
+
+    @GET
+    public String emailMeAPoem() {
+        return service.writeAPoem("Quarkus", 4);
+    }
+
+}
+
+
+
+

then an example trace is:

+
+
+
+trace +
+
+
+

In the trace above we can see the parent span which corresponds to the handling the GET HTTP request, but the real +interesting thing is the langchain4j.aiservices.MyAiService.writeAPoem span which corresponds to the invocation of the AI service. +The child spans of this span correspond (from to right) to calling the OpenAI API, invoking the sendEmail tool and finally invoking calling the OpenAI API again.

+
+
+
+

Auditing

+
+

The extension allows users to audit the process of implementing an AiService by introducing io.quarkiverse.langchain4j.audit.AuditService and io.quarkiverse.langchain4j.audit.Audit. +By default, if a bean of type AuditService is present in the application, it will be used in order to create an Audit, which received various callbacks pertaining to the implementation +of the AiService method. More information can be found on the javadoc of these two classes.

+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-langchain4j/dev/chroma-store.html b/quarkus-langchain4j/dev/chroma-store.html new file mode 100644 index 0000000000..a9dfd786a7 --- /dev/null +++ b/quarkus-langchain4j/dev/chroma-store.html @@ -0,0 +1,1312 @@ + + + + + + Chroma Document Store for Retrieval Augmented Generation (RAG) :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Chroma Document Store for Retrieval Augmented Generation (RAG)

+
+
+
+

When implementing Retrieval Augmented Generation (RAG), a robust document store is crucial. This guide demonstrates how to leverage a Chroma database as the document store.

+
+
+
+
+

Leveraging the Chroma Document Store

+
+
+

To make use of the Chroma document store, you’ll need to include the following dependency:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.langchain4j</groupId>
+    <artifactId>quarkus-langchain4j-chroma</artifactId>
+    <version>0.9.0</version>
+</dependency>
+
+
+
+

This extension includes a dev service. Therefore, if you’re operating in a container environment, a Chroma instance will automatically start in dev and test mode.

+
+
+

Upon installing the extension, you can use the Chroma document store with the following code:

+
+
+
+
package io.quarkiverse.langchain4j.samples;
+
+import static dev.langchain4j.data.document.splitter.DocumentSplitters.recursive;
+
+import java.util.List;
+
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+
+import dev.langchain4j.data.document.Document;
+import dev.langchain4j.model.embedding.EmbeddingModel;
+import dev.langchain4j.store.embedding.EmbeddingStoreIngestor;
+import io.quarkiverse.langchain4j.chroma.ChromaEmbeddingStore;
+
+@ApplicationScoped
+public class IngestorExampleWithChroma {
+
+    /**
+     * The embedding store (the database).
+     * The bean is provided by the quarkus-langchain4j-chroma extension.
+     */
+    @Inject
+    ChromaEmbeddingStore store;
+
+    /**
+     * The embedding model (how is computed the vector of a document).
+     * The bean is provided by the LLM (like openai) extension.
+     */
+    @Inject
+    EmbeddingModel embeddingModel;
+
+    public void ingest(List<Document> documents) {
+        EmbeddingStoreIngestor ingestor = EmbeddingStoreIngestor.builder()
+                .embeddingStore(store)
+                .embeddingModel(embeddingModel)
+                .documentSplitter(recursive(500, 0))
+                .build();
+        // Warning - this can take a long time...
+        ingestor.ingest(documents);
+    }
+}
+
+
+
+
+
+

Configuration Settings

+
+
+

Customize the behavior of the extension by exploring various configuration options:

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

If DevServices has been explicitly enabled or disabled. DevServices is generally enabled by default, unless there is an existing configuration present.

+
+
+

When DevServices is enabled Quarkus will attempt to automatically configure and start a database when running in Dev or Test mode and when Docker is running.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_CHROMA_DEVSERVICES_ENABLED

+
+
+

boolean

true

+
+
+
+

The container image name to use, for container based DevServices providers. If you want to use Redis Stack modules (bloom, graph, search…​), use: redis/redis-stack:latest.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_CHROMA_DEVSERVICES_IMAGE_NAME

+
+
+

string

ghcr.io/chroma-core/chroma:0.4.15

+
+
+
+

Optional fixed port the dev service will listen to.

+
+
+

If not defined, the port will be chosen randomly.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_CHROMA_DEVSERVICES_PORT

+
+
+

int

+
+
+
+

Indicates if the Redis server managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for Redis starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-chroma label. The value is configured using the service-name property.

+
+
+

Container sharing is only used in dev mode.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_CHROMA_DEVSERVICES_SHARED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-chroma label attached to the started container. This property is used when shared is set to true. In this case, before starting a container, Dev Services for Redis looks for a container with the quarkus-dev-service-chroma label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise, it starts a new container with the quarkus-dev-service-chroma label set to the specified value.

+
+
+

This property is used when you need multiple shared Chroma servers.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_CHROMA_DEVSERVICES_SERVICE_NAME

+
+
+

string

chroma

+
+
+
+

URL where the Chroma database is listening for requests

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_CHROMA_URL

+
+
+

string

required

+
+
+
+

The collection name.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_CHROMA_COLLECTION_NAME

+
+
+

string

default

+
+
+
+

The timeout duration for the Chroma client. If not specified, 5 seconds will be used.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_CHROMA_TIMEOUT

+
+
+

Duration +

+
+
+
+

Environment variables that are passed to the container.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_CHROMA_DEVSERVICES_CONTAINER_ENV

+
+
+

Map<String,String>

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-langchain4j/dev/csv.html b/quarkus-langchain4j/dev/csv.html new file mode 100644 index 0000000000..f25f0b1a8e --- /dev/null +++ b/quarkus-langchain4j/dev/csv.html @@ -0,0 +1,1156 @@ + + + + + + Loading CSV files :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Loading CSV files

+
+
+
+

When working with the Retrieval Augmented Generation (RAG) model, it is often necessary to load tabular data, such as a CSV file. This guide provides recommendations for loading CSV files in a way that is compatible with the RAG model.

+
+
+

When loading a CSV file, the process involves:

+
+
+
    +
  1. +

    Transforming each row into a document.

    +
  2. +
  3. +

    Ingesting the set of documents using an appropriate document splitter.

    +
  4. +
  5. +

    Storing the documents in the database.

    +
  6. +
+
+
+

You can find a complete example in the GitHub Repository.

+
+
+
+
+

From CSV to Documents

+
+
+

There are multiple ways to load CSV files in Java. In this example, we use the following dependencies:

+
+
+
+
<dependency>
+    <groupId>org.apache.commons</groupId>
+    <artifactId>commons-csv</artifactId>
+    <version>1.10.0</version>
+</dependency>
+
+
+
+

You can choose a different library; the APIs are similar enough.

+
+
+

Once you have the dependency, load the CSV and process the rows:

+
+
+
+
/**
+ * The CSV file to load.
+ */
+@ConfigProperty(name = "csv.file")
+File file;
+
+/**
+ * The CSV file headers.
+ * Some libraries provide an API to extract them.
+ */
+@ConfigProperty(name = "csv.headers")
+List<String> headers;
+
+/**
+ * Ingest the CSV file.
+ * This method is executed when the application starts.
+ */
+public void ingest(@Observes StartupEvent event) throws IOException {
+    // Configure the CSV format.
+    CSVFormat csvFormat = CSVFormat.DEFAULT.builder()
+            .setHeader(headers.toArray(new String[0]))
+            .setSkipHeaderRecord(true)
+            .build();
+    // This will be the resulting list of documents:
+    List<Document> documents = new ArrayList<>();
+
+    try (Reader reader = new FileReader(file)) {
+        // Generate one document per row, using the specified syntax.
+        Iterable<CSVRecord> records = csvFormat.parse(reader);
+        int i = 1;
+        for (CSVRecord record : records) {
+            Map<String, String> metadata = new HashMap<>();
+            metadata.put("source", file.getAbsolutePath());
+            metadata.put("row", String.valueOf(i++));
+
+            StringBuilder content = new StringBuilder();
+            for (String header : headers) {
+                // Include all headers in the metadata.
+                metadata.put(header, record.get(header));
+                content.append(header).append(": ").append(record.get(header)).append("\n");
+            }
+            documents.add(new Document(content.toString(), Metadata.from(metadata)));
+        }
+        // ...
+}
+
+
+
+
+
+

Ingesting the Documents

+
+
+

Once you have the list of documents, they need to be ingested. For this, use a document splitter. We recommend the recurve splitter, a simple splitter that divides the document into chunks of a given size. While it may not be the most suitable splitter for your use case, it serves as a good starting point.

+
+
+
+
var ingestor = EmbeddingStoreIngestor.builder()
+        .embeddingStore(store) // Injected
+        .embeddingModel(embeddingModel) // Injected
+        .documentSplitter(recursive(500, 0))
+        .build();
+ingestor.ingest(documents);
+
+
+
+
+
+

Implementing the Retriever

+
+
+

With the documents ingested, you can now implement the retriever:

+
+
+
+
package io.quarkiverse.langchain4j.sample.chatbot;
+
+import java.util.List;
+
+import jakarta.enterprise.context.ApplicationScoped;
+
+import dev.langchain4j.data.segment.TextSegment;
+import dev.langchain4j.model.embedding.EmbeddingModel;
+import dev.langchain4j.retriever.EmbeddingStoreRetriever;
+import dev.langchain4j.retriever.Retriever;
+import io.quarkiverse.langchain4j.redis.RedisEmbeddingStore;
+
+@ApplicationScoped
+public class RetrieverExample implements Retriever<TextSegment> {
+
+    private final EmbeddingStoreRetriever retriever;
+
+    RetrieverExample(RedisEmbeddingStore store, EmbeddingModel model) {
+        // Limit the number of documents to avoid exceeding the context size.
+        retriever = EmbeddingStoreRetriever.from(store, model, 10);
+    }
+
+    @Override
+    public List<TextSegment> findRelevant(String s) {
+        return retriever.findRelevant(s);
+    }
+}
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-langchain4j/dev/dev-ui.html b/quarkus-langchain4j/dev/dev-ui.html new file mode 100644 index 0000000000..b484b0d9c5 --- /dev/null +++ b/quarkus-langchain4j/dev/dev-ui.html @@ -0,0 +1,1032 @@ + + + + + + Dev UI :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Dev UI

+
+

If you use the Dev mode, the quarkus-langchain4j project provides several pages +in the Dev UI to facilitate development:

+
+
+
    +
  • +

    AI Services page: provides a table of all AI Services detected in the application along +with a list of tools that they are declared to use.

    +
  • +
  • +

    Tools page: provides a list of tools detected in the application.

    +
  • +
  • +

    Chat page: allows you to manually hold a conversation with a chat model. This +page is only available if the application contains a chat model.

    +
  • +
  • +

    Images page: allows you to test the outputs of image models and tune its parameters. +This page is provided specifically by the openai-vanilla extension and is currently specific +to OpenAI’s image models. It appears if the application uses the openai-vanilla extension +and doesn’t have image models explicitly disabled.

    +
  • +
  • +

    Moderation page: allows you to test the outputs of moderation models - you submit a prompt +and receive a list of scores for each appropriateness category (violence, sexual, hate,…​). +This page is currently only available with the openai-vanilla extension, and it +appears if the application doesn’t explicitly disable moderation models.

    +
  • +
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-langchain4j/dev/enable-disable-integrations.html b/quarkus-langchain4j/dev/enable-disable-integrations.html new file mode 100644 index 0000000000..b6b6098010 --- /dev/null +++ b/quarkus-langchain4j/dev/enable-disable-integrations.html @@ -0,0 +1,1070 @@ + + + + + + Enabling and Disabling Integrations :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Enabling and Disabling Integrations

+
+

By default, all integrations with AI providers (OpenAI, HuggingFace, Azure OpenAI, etc) are enabled. This means that live calls are made to the configured AI provider.

+
+
+

Each provider has an enable-integration property (i.e. quarkus.langchain4j.openai.enable-integration, quarkus.langchain4j.huggingface.enable-integration, etc) that can be set to false to disable the integration. This property is read at runtime.

+
+
+

When disabled, any call made to the AI provider will end up in an dev.langchain4j.model.ModelDisabledException runtime exception being thrown.

+
+
+

In this case your AI Service could use fault tolerance to handle this and serve a fallback response without making a live call to the AI provider. Below are a few examples of how it could be used:

+
+
+
Handling disabled integration separately from other error conditions
+
+
package io.quarkiverse.langchain4j.samples;
+
+import org.eclipse.microprofile.faulttolerance.Fallback;
+
+import dev.langchain4j.model.ModelDisabledException;
+import dev.langchain4j.service.SystemMessage;
+import dev.langchain4j.service.UserMessage;
+import io.quarkiverse.langchain4j.RegisterAiService;
+
+@RegisterAiService
+public interface AiServiceWithFaultToleranceAndOnDisabledIntegration {
+    @SystemMessage("You are a professional poet")
+    @UserMessage("Write a poem about {topic}. The poem should be {lines} lines long.")
+    @Fallback(fallbackMethod = "fallback")
+    String writeAPoem(String topic, int lines);
+
+    // This fallback is only called when a ModelDisabledException is thrown due to disabled integration
+    default String fallback(String topic, int lines, ModelDisabledException mde) {
+        return "I'm sorry, but the integration with the AI provider because " + mde.getMessage();
+    }
+
+    // This fallback is called for any other exception, except for ModelDisabledException
+    default String fallback(String topic, int lines) {
+        return "I'm sorry, I can't write a poem about " + topic;
+    }
+}
+
+
+
+
Handling only disabled integration
+
+
package io.quarkiverse.langchain4j.samples;
+
+import org.eclipse.microprofile.faulttolerance.Fallback;
+
+import dev.langchain4j.model.ModelDisabledException;
+import dev.langchain4j.service.SystemMessage;
+import dev.langchain4j.service.UserMessage;
+import io.quarkiverse.langchain4j.RegisterAiService;
+
+@RegisterAiService
+public interface AiServiceWithFaultToleranceOnlyOnDisabledIntegration {
+    @SystemMessage("You are a professional poet")
+    @UserMessage("Write a poem about {topic}. The poem should be {lines} lines long.")
+    @Fallback(fallbackMethod = "fallback", applyOn = ModelDisabledException.class)
+    String writeAPoem(String topic, int lines);
+
+    // In this case, the fallback is only applied if a ModelDisabledException is thrown
+    default String fallback(String topic, int lines) {
+        return "I'm sorry, I can't write a poem about " + topic;
+    }
+}
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-langchain4j/dev/fault-tolerance.html b/quarkus-langchain4j/dev/fault-tolerance.html new file mode 100644 index 0000000000..d4a11b1532 --- /dev/null +++ b/quarkus-langchain4j/dev/fault-tolerance.html @@ -0,0 +1,1067 @@ + + + + + + Making AI interactions more robust :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Making AI interactions more robust

+
+
+
+

When implementing an AI service, leveraging Quarkus fault tolerance annotations can enhance the reliability of your interactions. +To integrate fault tolerance, follow these steps:

+
+
+
    +
  • +

    1. Start by adding the quarkus-smallrye-fault-tolerance dependency to your pom.xml file:

    +
  • +
+
+
+
+
<dependency>
+    <groupId>io.quarkus</groupId>
+    <artifactId>quarkus-smallrye-fault-tolerance</artifactId>
+</dependency>
+
+
+
+
    +
  • +

    2. Utilize the @Fallback or @Timeout annotation within the AIService class. These annotations help manage exceptional scenarios:

    +
  • +
+
+
+
+
package io.quarkiverse.langchain4j.samples;
+
+import java.util.concurrent.TimeUnit;
+
+import org.eclipse.microprofile.faulttolerance.Fallback;
+import org.junit.jupiter.api.Timeout;
+
+import dev.langchain4j.service.SystemMessage;
+import dev.langchain4j.service.UserMessage;
+import io.quarkiverse.langchain4j.RegisterAiService;
+
+@RegisterAiService
+public interface AiServiceWithFaultTolerance {
+
+    @SystemMessage("You are a professional poet")
+    @UserMessage("Write a poem about {topic}. The poem should be {lines} lines long.")
+    @Timeout(value = 60, unit = TimeUnit.SECONDS)
+    @Fallback(fallbackMethod = "fallback")
+    String writeAPoem(String topic, int lines);
+
+    default String fallback(String topic, int lines) {
+        return "I'm sorry, I can't write a poem about " + topic;
+    }
+}
+
+
+
+
+
+

A Note on Utilizing Tools

+
+
+

When employing tools in your interactions, multiple requests and responses occur in the background, potentially extending the time required to obtain a response from the AI service. It’s essential to consider this while configuring a timeout to ensure robustness in your system’s interactions.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-langchain4j/dev/huggingface.html b/quarkus-langchain4j/dev/huggingface.html new file mode 100644 index 0000000000..9c34dcc393 --- /dev/null +++ b/quarkus-langchain4j/dev/huggingface.html @@ -0,0 +1,1926 @@ + + + + + + Hugging Face :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Hugging Face

+
+
+
+

Hugging Face is a leading platform in the field of natural language processing (NLP) that provides a comprehensive collection of pre-trained language models. Hugging Face facilitates easy access to a wide range of state-of-the-art models for various NLP tasks. +Its focus on democratizing access to cutting-edge NLP capabilities has made Hugging Face a pivotal player in the advancement of language technology.

+
+
+
+
+

Using Hugging Face models

+
+
+

To employ Hugging Face LLMs, integrate the following dependency into your project:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.langchain4j</groupId>
+    <artifactId>quarkus-langchain4j-hugging-face</artifactId>
+    <version>0.9.0</version>
+</dependency>
+
+
+
+

If no other LLM extension is installed, AI Services will automatically utilize the configured Hugging Face model.

+
+
+ + + + + +
+ + +Hugging Face provides multiple kind of models. We only support text-to-text models, which are models that take a text as input and return a text as output. +
+
+
+

By default, the extension uses:

+
+ +
+

Configuration

+
+

Configuring Hugging Face models mandates an API key, obtainable by creating an account on the Hugging Face platform.

+
+
+

The API key can be set in the application.properties file:

+
+
+
+
quarkus.langchain4j.huggingface.api-key=hf-...
+
+
+
+ + + + + +
+ + +Alternatively, leverage the QUARKUS_LANGCHAIN4J_HUGGINGFACE_API_KEY environment variable. +
+
+
+

Several configuration properties are available:

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Whether the model should be enabled

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE_CHAT_MODEL_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the model should be enabled

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE_EMBEDDING_MODEL_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the model should be enabled

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE_MODERATION_MODEL_ENABLED

+
+
+

boolean

true

+
+
+
+

HuggingFace API key

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE_API_KEY

+
+
+

string

dummy

+
+
+
+

Timeout for HuggingFace calls

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The URL of the inference endpoint for the chat model.

+
+
+

When using Hugging Face with the inference API, the URL is https://api-inference.huggingface.co/models/<model-id>;, for example https://api-inference.huggingface.co/models/google/flan-t5-small.

+
+
+

When using a deployed inference endpoint, the URL is the URL of the endpoint. When using a local hugging face model, the URL is the URL of the local model.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE_CHAT_MODEL_INFERENCE_ENDPOINT_URL

+
+
+

URL

https://api-inference.huggingface.co/models/tiiuae/falcon-7b-instruct

+
+
+
+

Float (0.0-100.0). The temperature of the sampling operation. 1 means regular sampling, 0 means always take the highest score, 100.0 is getting closer to uniform probability

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE_CHAT_MODEL_TEMPERATURE

+
+
+

double

1.0

+
+
+
+

Int (0-250). The amount of new tokens to be generated, this does not include the input length it is a estimate of the size of generated text you want. Each new tokens slows down the request, so look for balance between response times and length of text generated

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE_CHAT_MODEL_MAX_NEW_TOKENS

+
+
+

int

+
+
+
+

If set to false, the return results will not contain the original query making it easier for prompting

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE_CHAT_MODEL_RETURN_FULL_TEXT

+
+
+

boolean

+
+
+
+

If the model is not ready, wait for it instead of receiving 503. It limits the number of requests required to get your inference done. It is advised to only set this flag to true after receiving a 503 error as it will limit hanging in your application to known places

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE_CHAT_MODEL_WAIT_FOR_MODEL

+
+
+

boolean

true

+
+
+
+

Whether or not to use sampling ; use greedy decoding otherwise.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE_CHAT_MODEL_DO_SAMPLE

+
+
+

boolean

+
+
+
+

The number of highest probability vocabulary tokens to keep for top-k-filtering.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE_CHAT_MODEL_TOP_K

+
+
+

int

+
+
+
+

If set to less than 1, only the most probable tokens with probabilities that add up to top_p or higher are kept for generation.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE_CHAT_MODEL_TOP_P

+
+
+

double

+
+
+
+

The parameter for repetition penalty. 1.0 means no penalty. See this paper for more details.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE_CHAT_MODEL_REPETITION_PENALTY

+
+
+

double

+
+
+
+

Whether chat model requests should be logged

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE_CHAT_MODEL_LOG_REQUESTS

+
+
+

boolean

false

+
+
+
+

Whether chat model responses should be logged

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE_CHAT_MODEL_LOG_RESPONSES

+
+
+

boolean

false

+
+
+
+

The URL of the inference endpoint for the embedding.

+
+ +
+

When using a deployed inference endpoint, the URL is the URL of the endpoint. When using a local hugging face model, the URL is the URL of the local model.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE_EMBEDDING_MODEL_INFERENCE_ENDPOINT_URL

+
+
+

URL

https://api-inference.huggingface.co/pipeline/feature-extraction/sentence-transformers/all-MiniLM-L6-v2

+
+
+
+

If the model is not ready, wait for it instead of receiving 503. It limits the number of requests required to get your inference done. It is advised to only set this flag to true after receiving a 503 error as it will limit hanging in your application to known places

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE_EMBEDDING_MODEL_WAIT_FOR_MODEL

+
+
+

boolean

true

+
+
+
+

Whether the HuggingFace client should log requests

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE_LOG_REQUESTS

+
+
+

boolean

false

+
+
+
+

Whether the HuggingFace client should log responses

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE_LOG_RESPONSES

+
+
+

boolean

false

+
+
+
+

Whether or not to enable the integration. Defaults to true, which means requests are made to the OpenAI provider. Set to false to disable all requests.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE_ENABLE_INTEGRATION

+
+
+

boolean

true

Named model config

Type

Default

+
+
+
+

HuggingFace API key

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE__MODEL_NAME__API_KEY

+
+
+

string

dummy

+
+
+
+

Timeout for HuggingFace calls

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE__MODEL_NAME__TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The URL of the inference endpoint for the chat model.

+
+
+

When using Hugging Face with the inference API, the URL is https://api-inference.huggingface.co/models/<model-id>;, for example https://api-inference.huggingface.co/models/google/flan-t5-small.

+
+
+

When using a deployed inference endpoint, the URL is the URL of the endpoint. When using a local hugging face model, the URL is the URL of the local model.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE__MODEL_NAME__CHAT_MODEL_INFERENCE_ENDPOINT_URL

+
+
+

URL

https://api-inference.huggingface.co/models/tiiuae/falcon-7b-instruct

+
+
+
+

Float (0.0-100.0). The temperature of the sampling operation. 1 means regular sampling, 0 means always take the highest score, 100.0 is getting closer to uniform probability

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE__MODEL_NAME__CHAT_MODEL_TEMPERATURE

+
+
+

double

1.0

+
+
+
+

Int (0-250). The amount of new tokens to be generated, this does not include the input length it is a estimate of the size of generated text you want. Each new tokens slows down the request, so look for balance between response times and length of text generated

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE__MODEL_NAME__CHAT_MODEL_MAX_NEW_TOKENS

+
+
+

int

+
+
+
+

If set to false, the return results will not contain the original query making it easier for prompting

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE__MODEL_NAME__CHAT_MODEL_RETURN_FULL_TEXT

+
+
+

boolean

+
+
+
+

If the model is not ready, wait for it instead of receiving 503. It limits the number of requests required to get your inference done. It is advised to only set this flag to true after receiving a 503 error as it will limit hanging in your application to known places

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE__MODEL_NAME__CHAT_MODEL_WAIT_FOR_MODEL

+
+
+

boolean

true

+
+
+
+

Whether or not to use sampling ; use greedy decoding otherwise.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE__MODEL_NAME__CHAT_MODEL_DO_SAMPLE

+
+
+

boolean

+
+
+
+

The number of highest probability vocabulary tokens to keep for top-k-filtering.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE__MODEL_NAME__CHAT_MODEL_TOP_K

+
+
+

int

+
+
+
+

If set to less than 1, only the most probable tokens with probabilities that add up to top_p or higher are kept for generation.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE__MODEL_NAME__CHAT_MODEL_TOP_P

+
+
+

double

+
+
+
+

The parameter for repetition penalty. 1.0 means no penalty. See this paper for more details.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE__MODEL_NAME__CHAT_MODEL_REPETITION_PENALTY

+
+
+

double

+
+
+
+

Whether chat model requests should be logged

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE__MODEL_NAME__CHAT_MODEL_LOG_REQUESTS

+
+
+

boolean

false

+
+
+
+

Whether chat model responses should be logged

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE__MODEL_NAME__CHAT_MODEL_LOG_RESPONSES

+
+
+

boolean

false

+
+
+
+

The URL of the inference endpoint for the embedding.

+
+ +
+

When using a deployed inference endpoint, the URL is the URL of the endpoint. When using a local hugging face model, the URL is the URL of the local model.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE__MODEL_NAME__EMBEDDING_MODEL_INFERENCE_ENDPOINT_URL

+
+
+

URL

https://api-inference.huggingface.co/pipeline/feature-extraction/sentence-transformers/all-MiniLM-L6-v2

+
+
+
+

If the model is not ready, wait for it instead of receiving 503. It limits the number of requests required to get your inference done. It is advised to only set this flag to true after receiving a 503 error as it will limit hanging in your application to known places

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE__MODEL_NAME__EMBEDDING_MODEL_WAIT_FOR_MODEL

+
+
+

boolean

true

+
+
+
+

Whether the HuggingFace client should log requests

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE__MODEL_NAME__LOG_REQUESTS

+
+
+

boolean

false

+
+
+
+

Whether the HuggingFace client should log responses

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE__MODEL_NAME__LOG_RESPONSES

+
+
+

boolean

false

+
+
+
+

Whether or not to enable the integration. Defaults to true, which means requests are made to the OpenAI provider. Set to false to disable all requests.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE__MODEL_NAME__ENABLE_INTEGRATION

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+
+
+
+

Configuring the chat model

+
+
+

You can change the chat model by setting the quarkus.langchain4j.huggingface.chat-model.inference-endpoint-url property. +When using a model hosted on Hugging Face, the property should be set to: https://api-inference.huggingface.co/models/<model-id>;.

+
+
+

For example, to use the google/flan-t5-small model, set:

+
+
+
+
quarkus.langchain4j.huggingface.chat-model.inference-endpoint-url=https://api-inference.huggingface.co/models/google/flan-t5-small
+
+
+
+

Remember that only text to text models are supported.

+
+
+
+
+

Using inference endpoints and local models

+
+
+

Hugging Face models can be deployed to provide inference endpoints. +In this case, configure the quarkus.langchain4j.huggingface.inference-endpoint-url property to point to the endpoint URL:

+
+
+
+
quarkus.langchain4j.huggingface.chat-model.inference-endpoint-url=https://j9dkyuliy170f3ia.us-east-1.aws.endpoints.huggingface.cloud
+
+
+
+

If you run a model locally, adapt the URL accordingly:

+
+
+
+
quarkus.langchain4j.huggingface.chat-model.inference-endpoint-url=http://localhost:8085
+
+
+
+
+
+

Document Retriever and Embedding

+
+
+

When utilizing Hugging Face models, the recommended practice involves leveraging the EmbeddingModel provided by Hugging Face.

+
+
+
    +
  1. +

    If no other LLM extension is installed, retrieve the embedding model as follows:

    +
  2. +
+
+
+
+
@Inject EmbeddingModel model; // Injects the embedding model
+
+
+
+

You can configure the model using:

+
+
+
+
quarkus.langchain4j.huggingface.embedding-model.inference-endpoint-url=https://api-inference.huggingface.co/pipeline/feature-extraction/sentence-transformers/all-MiniLM-L6-v2
+
+
+
+ + + + + +
+ + +Not every sentence transformers are supported by the embedding model. If you want to use a custom sentence transformers, you need to create your own embedding model. +
+
+
+
+
+

Tools

+
+
+

The Hugging Face LLMs do not support tools.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-langchain4j/dev/in-process-embedding.html b/quarkus-langchain4j/dev/in-process-embedding.html new file mode 100644 index 0000000000..d439c1609e --- /dev/null +++ b/quarkus-langchain4j/dev/in-process-embedding.html @@ -0,0 +1,1120 @@ + + + + + + In-Process Embedding Models :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

In-Process Embedding Models

+
+
+
+

When ingesting document or implementing the RAG pattern, you need an embedding model. +This is a model that takes a document and returns a vector representation of that document. +The vector representation is stored in a vector database, and is used to find similar documents.

+
+
+

When using LLMs like OpenAI or HuggingFace, it provides remote embedding models. +To compute the embedding of a document, you need to send the document to the remote model.

+
+
+

In-process models avoids this overhead by running the model in the same process as the application. +This is generally faster, but requires more memory.

+
+
+
+
+

Supported in-process models

+
+
+

The Quarkus LangChain4j extension provides supports for a set of in-process embedding models. +They are not included by default, and you need to add the explicit dependency to your project.

+
+
+

The following table lists the supported models, and the corresponding dependency to add to your project.

+
+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Model NameDependencyVector DimensionInjected type

all-minlm-l6-v2-q

dev.langchain4j:langchain4j-embeddings-all-minilm-l6-v2-q:0.27.1

384

dev.langchain4j.model.embedding.AllMiniLmL6V2QuantizedEmbeddingModel

all-minlm-l6-v2

dev.langchain4j:langchain4j-embeddings-all-minilm-l6-v2:0.27.1

384

dev.langchain4j.model.embedding.AllMiniLmL6V2EmbeddingModel

bge-small-en-q

dev.langchain4j:langchain4j-embeddings-bge-small-en-q:0.27.1

384

dev.langchain4j.model.embedding.BgeSmallEnQuantizedEmbeddingModel

bge-small-en

dev.langchain4j:langchain4j-embeddings-bge-small-en:0.27.1

384

dev.langchain4j.model.embedding.BgeSmallEnEmbeddingModel

bge-small-zh-q

dev.langchain4j:langchain4j-embeddings-bge-small-zh-q:0.27.1

384

dev.langchain4j.model.embedding.BgeSmallZhQuantizedEmbeddingModel

bge-small-zh

dev.langchain4j:langchain4j-embeddings-bge-small-zh:0.27.1

384

dev.langchain4j.model.embedding.BgeSmallZhEmbeddingModel

e5-small-v2-q

dev.langchain4j:langchain4j-embeddings-e5-small-v2-q:0.27.1

384

dev.langchain4j.model.embedding.E5SmallV2QuantizedEmbeddingModel

e5-small-v2-q

dev.langchain4j:langchain4j-embeddings-e5-small-v2-q:0.27.1

384

dev.langchain4j.model.embedding.E5SmallV2EmbeddingModel

+
+
+
+

Injecting an embedding model

+
+
+

You can inject the model in your application using:

+
+
+
+
@Inject E5SmallV2QuantizedEmbeddingModel model;
+
+
+
+

Use the corresponding model type for the model you want to use, and make sure you have added the corresponding dependency to your project.

+
+
+

Note that if you do not have any other embedding model in your project, you can inject the EmbeddingModel interface, and it will be automatically injected with the available model:

+
+
+
+
@Inject EmbeddingModel model;
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-langchain4j/dev/includes/attributes.html b/quarkus-langchain4j/dev/includes/attributes.html new file mode 100644 index 0000000000..19857d6b0e --- /dev/null +++ b/quarkus-langchain4j/dev/includes/attributes.html @@ -0,0 +1,996 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-langchain4j/dev/includes/quarkus-langchain4j-chroma.html b/quarkus-langchain4j/dev/includes/quarkus-langchain4j-chroma.html new file mode 100644 index 0000000000..067208ae95 --- /dev/null +++ b/quarkus-langchain4j/dev/includes/quarkus-langchain4j-chroma.html @@ -0,0 +1,1223 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

If DevServices has been explicitly enabled or disabled. DevServices is generally enabled by default, unless there is an existing configuration present.

+
+
+

When DevServices is enabled Quarkus will attempt to automatically configure and start a database when running in Dev or Test mode and when Docker is running.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_CHROMA_DEVSERVICES_ENABLED

+
+
+

boolean

true

+
+
+
+

The container image name to use, for container based DevServices providers. If you want to use Redis Stack modules (bloom, graph, search…​), use: redis/redis-stack:latest.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_CHROMA_DEVSERVICES_IMAGE_NAME

+
+
+

string

ghcr.io/chroma-core/chroma:0.4.15

+
+
+
+

Optional fixed port the dev service will listen to.

+
+
+

If not defined, the port will be chosen randomly.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_CHROMA_DEVSERVICES_PORT

+
+
+

int

+
+
+
+

Indicates if the Redis server managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for Redis starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-chroma label. The value is configured using the service-name property.

+
+
+

Container sharing is only used in dev mode.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_CHROMA_DEVSERVICES_SHARED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-chroma label attached to the started container. This property is used when shared is set to true. In this case, before starting a container, Dev Services for Redis looks for a container with the quarkus-dev-service-chroma label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise, it starts a new container with the quarkus-dev-service-chroma label set to the specified value.

+
+
+

This property is used when you need multiple shared Chroma servers.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_CHROMA_DEVSERVICES_SERVICE_NAME

+
+
+

string

chroma

+
+
+
+

URL where the Chroma database is listening for requests

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_CHROMA_URL

+
+
+

string

required

+
+
+
+

The collection name.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_CHROMA_COLLECTION_NAME

+
+
+

string

default

+
+
+
+

The timeout duration for the Chroma client. If not specified, 5 seconds will be used.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_CHROMA_TIMEOUT

+
+
+

Duration +

+
+
+
+

Environment variables that are passed to the container.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_CHROMA_DEVSERVICES_CONTAINER_ENV

+
+
+

Map<String,String>

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-langchain4j/dev/includes/quarkus-langchain4j-huggingface.html b/quarkus-langchain4j/dev/includes/quarkus-langchain4j-huggingface.html new file mode 100644 index 0000000000..c1b8b27aed --- /dev/null +++ b/quarkus-langchain4j/dev/includes/quarkus-langchain4j-huggingface.html @@ -0,0 +1,1748 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Whether the model should be enabled

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE_CHAT_MODEL_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the model should be enabled

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE_EMBEDDING_MODEL_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the model should be enabled

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE_MODERATION_MODEL_ENABLED

+
+
+

boolean

true

+
+
+
+

HuggingFace API key

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE_API_KEY

+
+
+

string

dummy

+
+
+
+

Timeout for HuggingFace calls

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The URL of the inference endpoint for the chat model.

+
+
+

When using Hugging Face with the inference API, the URL is https://api-inference.huggingface.co/models/<model-id>;, for example https://api-inference.huggingface.co/models/google/flan-t5-small.

+
+
+

When using a deployed inference endpoint, the URL is the URL of the endpoint. When using a local hugging face model, the URL is the URL of the local model.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE_CHAT_MODEL_INFERENCE_ENDPOINT_URL

+
+
+

URL

https://api-inference.huggingface.co/models/tiiuae/falcon-7b-instruct

+
+
+
+

Float (0.0-100.0). The temperature of the sampling operation. 1 means regular sampling, 0 means always take the highest score, 100.0 is getting closer to uniform probability

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE_CHAT_MODEL_TEMPERATURE

+
+
+

double

1.0

+
+
+
+

Int (0-250). The amount of new tokens to be generated, this does not include the input length it is a estimate of the size of generated text you want. Each new tokens slows down the request, so look for balance between response times and length of text generated

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE_CHAT_MODEL_MAX_NEW_TOKENS

+
+
+

int

+
+
+
+

If set to false, the return results will not contain the original query making it easier for prompting

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE_CHAT_MODEL_RETURN_FULL_TEXT

+
+
+

boolean

+
+
+
+

If the model is not ready, wait for it instead of receiving 503. It limits the number of requests required to get your inference done. It is advised to only set this flag to true after receiving a 503 error as it will limit hanging in your application to known places

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE_CHAT_MODEL_WAIT_FOR_MODEL

+
+
+

boolean

true

+
+
+
+

Whether or not to use sampling ; use greedy decoding otherwise.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE_CHAT_MODEL_DO_SAMPLE

+
+
+

boolean

+
+
+
+

The number of highest probability vocabulary tokens to keep for top-k-filtering.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE_CHAT_MODEL_TOP_K

+
+
+

int

+
+
+
+

If set to less than 1, only the most probable tokens with probabilities that add up to top_p or higher are kept for generation.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE_CHAT_MODEL_TOP_P

+
+
+

double

+
+
+
+

The parameter for repetition penalty. 1.0 means no penalty. See this paper for more details.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE_CHAT_MODEL_REPETITION_PENALTY

+
+
+

double

+
+
+
+

Whether chat model requests should be logged

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE_CHAT_MODEL_LOG_REQUESTS

+
+
+

boolean

false

+
+
+
+

Whether chat model responses should be logged

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE_CHAT_MODEL_LOG_RESPONSES

+
+
+

boolean

false

+
+
+
+

The URL of the inference endpoint for the embedding.

+
+ +
+

When using a deployed inference endpoint, the URL is the URL of the endpoint. When using a local hugging face model, the URL is the URL of the local model.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE_EMBEDDING_MODEL_INFERENCE_ENDPOINT_URL

+
+
+

URL

https://api-inference.huggingface.co/pipeline/feature-extraction/sentence-transformers/all-MiniLM-L6-v2

+
+
+
+

If the model is not ready, wait for it instead of receiving 503. It limits the number of requests required to get your inference done. It is advised to only set this flag to true after receiving a 503 error as it will limit hanging in your application to known places

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE_EMBEDDING_MODEL_WAIT_FOR_MODEL

+
+
+

boolean

true

+
+
+
+

Whether the HuggingFace client should log requests

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE_LOG_REQUESTS

+
+
+

boolean

false

+
+
+
+

Whether the HuggingFace client should log responses

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE_LOG_RESPONSES

+
+
+

boolean

false

+
+
+
+

Whether or not to enable the integration. Defaults to true, which means requests are made to the OpenAI provider. Set to false to disable all requests.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE_ENABLE_INTEGRATION

+
+
+

boolean

true

Named model config

Type

Default

+
+
+
+

HuggingFace API key

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE__MODEL_NAME__API_KEY

+
+
+

string

dummy

+
+
+
+

Timeout for HuggingFace calls

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE__MODEL_NAME__TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The URL of the inference endpoint for the chat model.

+
+
+

When using Hugging Face with the inference API, the URL is https://api-inference.huggingface.co/models/<model-id>;, for example https://api-inference.huggingface.co/models/google/flan-t5-small.

+
+
+

When using a deployed inference endpoint, the URL is the URL of the endpoint. When using a local hugging face model, the URL is the URL of the local model.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE__MODEL_NAME__CHAT_MODEL_INFERENCE_ENDPOINT_URL

+
+
+

URL

https://api-inference.huggingface.co/models/tiiuae/falcon-7b-instruct

+
+
+
+

Float (0.0-100.0). The temperature of the sampling operation. 1 means regular sampling, 0 means always take the highest score, 100.0 is getting closer to uniform probability

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE__MODEL_NAME__CHAT_MODEL_TEMPERATURE

+
+
+

double

1.0

+
+
+
+

Int (0-250). The amount of new tokens to be generated, this does not include the input length it is a estimate of the size of generated text you want. Each new tokens slows down the request, so look for balance between response times and length of text generated

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE__MODEL_NAME__CHAT_MODEL_MAX_NEW_TOKENS

+
+
+

int

+
+
+
+

If set to false, the return results will not contain the original query making it easier for prompting

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE__MODEL_NAME__CHAT_MODEL_RETURN_FULL_TEXT

+
+
+

boolean

+
+
+
+

If the model is not ready, wait for it instead of receiving 503. It limits the number of requests required to get your inference done. It is advised to only set this flag to true after receiving a 503 error as it will limit hanging in your application to known places

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE__MODEL_NAME__CHAT_MODEL_WAIT_FOR_MODEL

+
+
+

boolean

true

+
+
+
+

Whether or not to use sampling ; use greedy decoding otherwise.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE__MODEL_NAME__CHAT_MODEL_DO_SAMPLE

+
+
+

boolean

+
+
+
+

The number of highest probability vocabulary tokens to keep for top-k-filtering.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE__MODEL_NAME__CHAT_MODEL_TOP_K

+
+
+

int

+
+
+
+

If set to less than 1, only the most probable tokens with probabilities that add up to top_p or higher are kept for generation.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE__MODEL_NAME__CHAT_MODEL_TOP_P

+
+
+

double

+
+
+
+

The parameter for repetition penalty. 1.0 means no penalty. See this paper for more details.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE__MODEL_NAME__CHAT_MODEL_REPETITION_PENALTY

+
+
+

double

+
+
+
+

Whether chat model requests should be logged

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE__MODEL_NAME__CHAT_MODEL_LOG_REQUESTS

+
+
+

boolean

false

+
+
+
+

Whether chat model responses should be logged

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE__MODEL_NAME__CHAT_MODEL_LOG_RESPONSES

+
+
+

boolean

false

+
+
+
+

The URL of the inference endpoint for the embedding.

+
+ +
+

When using a deployed inference endpoint, the URL is the URL of the endpoint. When using a local hugging face model, the URL is the URL of the local model.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE__MODEL_NAME__EMBEDDING_MODEL_INFERENCE_ENDPOINT_URL

+
+
+

URL

https://api-inference.huggingface.co/pipeline/feature-extraction/sentence-transformers/all-MiniLM-L6-v2

+
+
+
+

If the model is not ready, wait for it instead of receiving 503. It limits the number of requests required to get your inference done. It is advised to only set this flag to true after receiving a 503 error as it will limit hanging in your application to known places

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE__MODEL_NAME__EMBEDDING_MODEL_WAIT_FOR_MODEL

+
+
+

boolean

true

+
+
+
+

Whether the HuggingFace client should log requests

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE__MODEL_NAME__LOG_REQUESTS

+
+
+

boolean

false

+
+
+
+

Whether the HuggingFace client should log responses

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE__MODEL_NAME__LOG_RESPONSES

+
+
+

boolean

false

+
+
+
+

Whether or not to enable the integration. Defaults to true, which means requests are made to the OpenAI provider. Set to false to disable all requests.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_HUGGINGFACE__MODEL_NAME__ENABLE_INTEGRATION

+
+
+

boolean

true

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-langchain4j/dev/includes/quarkus-langchain4j-infinispan.html b/quarkus-langchain4j/dev/includes/quarkus-langchain4j-infinispan.html new file mode 100644 index 0000000000..ed72e602f7 --- /dev/null +++ b/quarkus-langchain4j/dev/includes/quarkus-langchain4j-infinispan.html @@ -0,0 +1,1080 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The name of the Infinispan client to use. These clients are configured by means of the infinispan-client extension. If unspecified, it will use the default Infinispan client.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_INFINISPAN_CLIENT_NAME

+
+
+

string

+
+
+
+

The dimension of the embedding vectors. This has to be the same as the dimension of vectors produced by the embedding model that you use. For example, AllMiniLmL6V2QuantizedEmbeddingModel produces vectors of dimension 384. OpenAI’s text-embedding-ada-002 produces vectors of dimension 1536.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_INFINISPAN_DIMENSION

+
+
+

long

required

+
+
+
+

Name of the cache that will be used in Infinispan when searching for related embeddings. If this cache doesn’t exist, it will be created.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_INFINISPAN_CACHE_NAME

+
+
+

string

embeddings-cache

+
+
+
+

The maximum distance. The most distance between vectors is how close or far apart two embeddings are.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_INFINISPAN_DISTANCE

+
+
+

int

3

+
+
+
+
+ + + + + + + diff --git a/quarkus-langchain4j/dev/includes/quarkus-langchain4j-ollama.html b/quarkus-langchain4j/dev/includes/quarkus-langchain4j-ollama.html new file mode 100644 index 0000000000..bf1766e14a --- /dev/null +++ b/quarkus-langchain4j/dev/includes/quarkus-langchain4j-ollama.html @@ -0,0 +1,1707 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Whether the model should be enabled

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA_CHAT_MODEL_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the model should be enabled

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA_EMBEDDING_MODEL_ENABLED

+
+
+

boolean

true

+
+
+
+

Base URL where the Ollama serving is running

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA_BASE_URL

+
+
+

string

http://localhost:11434

+
+
+
+

Timeout for Ollama calls

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

Whether the Ollama client should log requests

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA_LOG_REQUESTS

+
+
+

boolean

false

+
+
+
+

Whether the Ollama client should log responses

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA_LOG_RESPONSES

+
+
+

boolean

false

+
+
+
+

Whether or not to enable the integration. Defaults to true, which means requests are made to the OpenAI provider. Set to false to disable all requests.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA_ENABLE_INTEGRATION

+
+
+

boolean

true

+
+
+
+

Model to use. According to Ollama docs, the default value is llama2

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA_CHAT_MODEL_MODEL_ID

+
+
+

string

llama2

+
+
+
+

The temperature of the model. Increasing the temperature will make the model answer with more variability. A lower temperature will make the model answer more conservatively.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA_CHAT_MODEL_TEMPERATURE

+
+
+

double

0.8

+
+
+
+

Maximum number of tokens to predict when generating text

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA_CHAT_MODEL_NUM_PREDICT

+
+
+

int

128

+
+
+
+

Sets the stop sequences to use. When this pattern is encountered the LLM will stop generating text and return

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA_CHAT_MODEL_STOP

+
+
+

string

+
+
+
+

Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA_CHAT_MODEL_TOP_P

+
+
+

double

0.9

+
+
+
+

Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA_CHAT_MODEL_TOP_K

+
+
+

int

40

+
+
+
+

With a static number the result is always the same. With a random number the result varies Example: Random random = new Random(); int x = random.nextInt(Integer.MAX_VALUE);

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA_CHAT_MODEL_SEED

+
+
+

int

+
+
+
+

Model to use. According to Ollama docs, the default value is nomic-embed-text

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA_EMBEDDING_MODEL_MODEL_ID

+
+
+

string

nomic-embed-text

+
+
+
+

The temperature of the model. Increasing the temperature will make the model answer with more variability. A lower temperature will make the model answer more conservatively.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA_EMBEDDING_MODEL_TEMPERATURE

+
+
+

double

0.8

+
+
+
+

Maximum number of tokens to predict when generating text

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA_EMBEDDING_MODEL_NUM_PREDICT

+
+
+

int

128

+
+
+
+

Sets the stop sequences to use. When this pattern is encountered the LLM will stop generating text and return

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA_EMBEDDING_MODEL_STOP

+
+
+

string

+
+
+
+

Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA_EMBEDDING_MODEL_TOP_P

+
+
+

double

0.9

+
+
+
+

Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA_EMBEDDING_MODEL_TOP_K

+
+
+

int

40

Named model config

Type

Default

+
+
+
+

Base URL where the Ollama serving is running

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA__MODEL_NAME__BASE_URL

+
+
+

string

http://localhost:11434

+
+
+
+

Timeout for Ollama calls

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA__MODEL_NAME__TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

Whether the Ollama client should log requests

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA__MODEL_NAME__LOG_REQUESTS

+
+
+

boolean

false

+
+
+
+

Whether the Ollama client should log responses

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA__MODEL_NAME__LOG_RESPONSES

+
+
+

boolean

false

+
+
+
+

Whether or not to enable the integration. Defaults to true, which means requests are made to the OpenAI provider. Set to false to disable all requests.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA__MODEL_NAME__ENABLE_INTEGRATION

+
+
+

boolean

true

+
+
+
+

Model to use. According to Ollama docs, the default value is llama2

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA__MODEL_NAME__CHAT_MODEL_MODEL_ID

+
+
+

string

llama2

+
+
+
+

The temperature of the model. Increasing the temperature will make the model answer with more variability. A lower temperature will make the model answer more conservatively.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA__MODEL_NAME__CHAT_MODEL_TEMPERATURE

+
+
+

double

0.8

+
+
+
+

Maximum number of tokens to predict when generating text

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA__MODEL_NAME__CHAT_MODEL_NUM_PREDICT

+
+
+

int

128

+
+
+
+

Sets the stop sequences to use. When this pattern is encountered the LLM will stop generating text and return

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA__MODEL_NAME__CHAT_MODEL_STOP

+
+
+

string

+
+
+
+

Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA__MODEL_NAME__CHAT_MODEL_TOP_P

+
+
+

double

0.9

+
+
+
+

Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA__MODEL_NAME__CHAT_MODEL_TOP_K

+
+
+

int

40

+
+
+
+

With a static number the result is always the same. With a random number the result varies Example: Random random = new Random(); int x = random.nextInt(Integer.MAX_VALUE);

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA__MODEL_NAME__CHAT_MODEL_SEED

+
+
+

int

+
+
+
+

Model to use. According to Ollama docs, the default value is nomic-embed-text

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA__MODEL_NAME__EMBEDDING_MODEL_MODEL_ID

+
+
+

string

nomic-embed-text

+
+
+
+

The temperature of the model. Increasing the temperature will make the model answer with more variability. A lower temperature will make the model answer more conservatively.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA__MODEL_NAME__EMBEDDING_MODEL_TEMPERATURE

+
+
+

double

0.8

+
+
+
+

Maximum number of tokens to predict when generating text

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA__MODEL_NAME__EMBEDDING_MODEL_NUM_PREDICT

+
+
+

int

128

+
+
+
+

Sets the stop sequences to use. When this pattern is encountered the LLM will stop generating text and return

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA__MODEL_NAME__EMBEDDING_MODEL_STOP

+
+
+

string

+
+
+
+

Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA__MODEL_NAME__EMBEDDING_MODEL_TOP_P

+
+
+

double

0.9

+
+
+
+

Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA__MODEL_NAME__EMBEDDING_MODEL_TOP_K

+
+
+

int

40

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-langchain4j/dev/includes/quarkus-langchain4j-openai.html b/quarkus-langchain4j/dev/includes/quarkus-langchain4j-openai.html new file mode 100644 index 0000000000..ed283f5293 --- /dev/null +++ b/quarkus-langchain4j/dev/includes/quarkus-langchain4j-openai.html @@ -0,0 +1,2373 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Whether the model should be enabled

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_CHAT_MODEL_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the model should be enabled

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_EMBEDDING_MODEL_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the model should be enabled

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_MODERATION_MODEL_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the model should be enabled

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_IMAGE_MODEL_ENABLED

+
+
+

boolean

true

+
+
+
+

Base URL of OpenAI API

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_BASE_URL

+
+
+

string

https://api.openai.com/v1/

+
+
+
+

OpenAI API key

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_API_KEY

+
+
+

string

dummy

+
+
+ +
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_ORGANIZATION_ID

+
+
+

string

+
+
+
+

Timeout for OpenAI calls

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum number of times to retry

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_MAX_RETRIES

+
+
+

int

3

+
+
+
+

Whether the OpenAI client should log requests

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_LOG_REQUESTS

+
+
+

boolean

false

+
+
+
+

Whether the OpenAI client should log responses

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_LOG_RESPONSES

+
+
+

boolean

false

+
+
+
+

Whether or not to enable the integration. Defaults to true, which means requests are made to the OpenAI provider. Set to false to disable all requests.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_ENABLE_INTEGRATION

+
+
+

boolean

true

+
+
+
+

Model name to use

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_CHAT_MODEL_MODEL_NAME

+
+
+

string

gpt-3.5-turbo

+
+
+
+

What sampling temperature to use, with values between 0 and 2. Higher values means the model will take more risks. A value of 0.9 is good for more creative applications, while 0 (argmax sampling) is good for ones with a well-defined answer. It is recommended to alter this or topP, but not both.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_CHAT_MODEL_TEMPERATURE

+
+
+

double

1.0

+
+
+
+

An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with topP probability mass. 0.1 means only the tokens comprising the top 10% probability mass are considered. It is recommended to alter this or topP, but not both.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_CHAT_MODEL_TOP_P

+
+
+

double

1.0

+
+
+
+

The maximum number of tokens to generate in the completion. The token count of your prompt plus max_tokens can’t exceed the model’s context length. Most models have a context length of 2048 tokens (except for the newest models, which support 4096).

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_CHAT_MODEL_MAX_TOKENS

+
+
+

int

+
+
+
+

Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far, increasing the model’s likelihood to talk about new topics.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_CHAT_MODEL_PRESENCE_PENALTY

+
+
+

double

0

+
+
+
+

Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model’s likelihood to repeat the same line verbatim.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_CHAT_MODEL_FREQUENCY_PENALTY

+
+
+

double

0

+
+
+
+

Whether chat model requests should be logged

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_CHAT_MODEL_LOG_REQUESTS

+
+
+

boolean

false

+
+
+
+

Whether chat model responses should be logged

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_CHAT_MODEL_LOG_RESPONSES

+
+
+

boolean

false

+
+
+
+

The response format the model should use. Some models are not compatible with some response formats, make sure to review OpenAI documentation.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_CHAT_MODEL_RESPONSE_FORMAT

+
+
+

string

+
+
+
+

Model name to use

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_EMBEDDING_MODEL_MODEL_NAME

+
+
+

string

text-embedding-ada-002

+
+
+
+

Whether embedding model requests should be logged

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_EMBEDDING_MODEL_LOG_REQUESTS

+
+
+

boolean

false

+
+
+
+

Whether embedding model responses should be logged

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_EMBEDDING_MODEL_LOG_RESPONSES

+
+
+

boolean

false

+
+
+
+

A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_EMBEDDING_MODEL_USER

+
+
+

string

+
+
+
+

Model name to use

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_MODERATION_MODEL_MODEL_NAME

+
+
+

string

text-moderation-latest

+
+
+
+

Whether moderation model requests should be logged

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_MODERATION_MODEL_LOG_REQUESTS

+
+
+

boolean

false

+
+
+
+

Whether moderation model responses should be logged

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_MODERATION_MODEL_LOG_RESPONSES

+
+
+

boolean

false

+
+
+
+

Model name to use

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_IMAGE_MODEL_MODEL_NAME

+
+
+

string

dall-e-3

+
+
+
+

Configure whether the generated images will be saved to disk. By default, persisting is disabled, but it is implicitly enabled when quarkus.langchain4j.openai.image-mode.directory is set and this property is not to false

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_IMAGE_MODEL_PERSIST

+
+
+

boolean

false

+
+
+
+

The path where the generated images will be persisted to disk. This only applies of quarkus.langchain4j.openai.image-mode.persist is not set to false.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_IMAGE_MODEL_PERSIST_DIRECTORY

+
+
+

path

${java.io.tmpdir}/dall-e-images

+
+
+
+

The format in which the generated images are returned.

+
+
+

Must be one of url or b64_json

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_IMAGE_MODEL_RESPONSE_FORMAT

+
+
+

string

url

+
+
+
+

The size of the generated images.

+
+
+

Must be one of 1024x1024, 1792x1024, or 1024x1792 when the model is dall-e-3.

+
+
+

Must be one of 256x256, 512x512, or 1024x1024 when the model is dall-e-2.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_IMAGE_MODEL_SIZE

+
+
+

string

1024x1024

+
+
+
+

The quality of the image that will be generated.

+
+
+

hd creates images with finer details and greater consistency across the image.

+
+
+

This param is only supported for when the model is dall-e-3.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_IMAGE_MODEL_QUALITY

+
+
+

string

standard

+
+
+
+

The number of images to generate.

+
+
+

Must be between 1 and 10.

+
+
+

When the model is dall-e-3, only n=1 is supported.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_IMAGE_MODEL_NUMBER

+
+
+

int

1

+
+
+
+

The style of the generated images.

+
+
+

Must be one of vivid or natural. Vivid causes the model to lean towards generating hyper-real and dramatic images. Natural causes the model to produce more natural, less hyper-real looking images.

+
+
+

This param is only supported for when the model is dall-e-3.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_IMAGE_MODEL_STYLE

+
+
+

string

vivid

+
+
+
+

A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_IMAGE_MODEL_USER

+
+
+

string

+
+
+
+

Whether image model requests should be logged

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_IMAGE_MODEL_LOG_REQUESTS

+
+
+

boolean

false

+
+
+
+

Whether image model responses should be logged

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_IMAGE_MODEL_LOG_RESPONSES

+
+
+

boolean

false

Named model config

Type

Default

+
+
+
+

Base URL of OpenAI API

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__BASE_URL

+
+
+

string

https://api.openai.com/v1/

+
+
+
+

OpenAI API key

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__API_KEY

+
+
+

string

dummy

+
+
+ +
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__ORGANIZATION_ID

+
+
+

string

+
+
+
+

Timeout for OpenAI calls

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum number of times to retry

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__MAX_RETRIES

+
+
+

int

3

+
+
+
+

Whether the OpenAI client should log requests

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__LOG_REQUESTS

+
+
+

boolean

false

+
+
+
+

Whether the OpenAI client should log responses

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__LOG_RESPONSES

+
+
+

boolean

false

+
+
+
+

Whether or not to enable the integration. Defaults to true, which means requests are made to the OpenAI provider. Set to false to disable all requests.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__ENABLE_INTEGRATION

+
+
+

boolean

true

+
+
+
+

Model name to use

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__CHAT_MODEL_MODEL_NAME

+
+
+

string

gpt-3.5-turbo

+
+
+
+

What sampling temperature to use, with values between 0 and 2. Higher values means the model will take more risks. A value of 0.9 is good for more creative applications, while 0 (argmax sampling) is good for ones with a well-defined answer. It is recommended to alter this or topP, but not both.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__CHAT_MODEL_TEMPERATURE

+
+
+

double

1.0

+
+
+
+

An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with topP probability mass. 0.1 means only the tokens comprising the top 10% probability mass are considered. It is recommended to alter this or topP, but not both.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__CHAT_MODEL_TOP_P

+
+
+

double

1.0

+
+
+
+

The maximum number of tokens to generate in the completion. The token count of your prompt plus max_tokens can’t exceed the model’s context length. Most models have a context length of 2048 tokens (except for the newest models, which support 4096).

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__CHAT_MODEL_MAX_TOKENS

+
+
+

int

+
+
+
+

Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far, increasing the model’s likelihood to talk about new topics.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__CHAT_MODEL_PRESENCE_PENALTY

+
+
+

double

0

+
+
+
+

Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model’s likelihood to repeat the same line verbatim.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__CHAT_MODEL_FREQUENCY_PENALTY

+
+
+

double

0

+
+
+
+

Whether chat model requests should be logged

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__CHAT_MODEL_LOG_REQUESTS

+
+
+

boolean

false

+
+
+
+

Whether chat model responses should be logged

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__CHAT_MODEL_LOG_RESPONSES

+
+
+

boolean

false

+
+
+
+

The response format the model should use. Some models are not compatible with some response formats, make sure to review OpenAI documentation.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__CHAT_MODEL_RESPONSE_FORMAT

+
+
+

string

+
+
+
+

Model name to use

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__EMBEDDING_MODEL_MODEL_NAME

+
+
+

string

text-embedding-ada-002

+
+
+
+

Whether embedding model requests should be logged

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__EMBEDDING_MODEL_LOG_REQUESTS

+
+
+

boolean

false

+
+
+
+

Whether embedding model responses should be logged

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__EMBEDDING_MODEL_LOG_RESPONSES

+
+
+

boolean

false

+
+
+
+

A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__EMBEDDING_MODEL_USER

+
+
+

string

+
+
+
+

Model name to use

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__MODERATION_MODEL_MODEL_NAME

+
+
+

string

text-moderation-latest

+
+
+
+

Whether moderation model requests should be logged

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__MODERATION_MODEL_LOG_REQUESTS

+
+
+

boolean

false

+
+
+
+

Whether moderation model responses should be logged

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__MODERATION_MODEL_LOG_RESPONSES

+
+
+

boolean

false

+
+
+
+

Model name to use

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__IMAGE_MODEL_MODEL_NAME

+
+
+

string

dall-e-3

+
+
+
+

Configure whether the generated images will be saved to disk. By default, persisting is disabled, but it is implicitly enabled when quarkus.langchain4j.openai.image-mode.directory is set and this property is not to false

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__IMAGE_MODEL_PERSIST

+
+
+

boolean

false

+
+
+
+

The path where the generated images will be persisted to disk. This only applies of quarkus.langchain4j.openai.image-mode.persist is not set to false.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__IMAGE_MODEL_PERSIST_DIRECTORY

+
+
+

path

${java.io.tmpdir}/dall-e-images

+
+
+
+

The format in which the generated images are returned.

+
+
+

Must be one of url or b64_json

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__IMAGE_MODEL_RESPONSE_FORMAT

+
+
+

string

url

+
+
+
+

The size of the generated images.

+
+
+

Must be one of 1024x1024, 1792x1024, or 1024x1792 when the model is dall-e-3.

+
+
+

Must be one of 256x256, 512x512, or 1024x1024 when the model is dall-e-2.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__IMAGE_MODEL_SIZE

+
+
+

string

1024x1024

+
+
+
+

The quality of the image that will be generated.

+
+
+

hd creates images with finer details and greater consistency across the image.

+
+
+

This param is only supported for when the model is dall-e-3.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__IMAGE_MODEL_QUALITY

+
+
+

string

standard

+
+
+
+

The number of images to generate.

+
+
+

Must be between 1 and 10.

+
+
+

When the model is dall-e-3, only n=1 is supported.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__IMAGE_MODEL_NUMBER

+
+
+

int

1

+
+
+
+

The style of the generated images.

+
+
+

Must be one of vivid or natural. Vivid causes the model to lean towards generating hyper-real and dramatic images. Natural causes the model to produce more natural, less hyper-real looking images.

+
+
+

This param is only supported for when the model is dall-e-3.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__IMAGE_MODEL_STYLE

+
+
+

string

vivid

+
+
+
+

A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__IMAGE_MODEL_USER

+
+
+

string

+
+
+
+

Whether image model requests should be logged

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__IMAGE_MODEL_LOG_REQUESTS

+
+
+

boolean

false

+
+
+
+

Whether image model responses should be logged

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__IMAGE_MODEL_LOG_RESPONSES

+
+
+

boolean

false

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-langchain4j/dev/includes/quarkus-langchain4j-pgvector.html b/quarkus-langchain4j/dev/includes/quarkus-langchain4j-pgvector.html new file mode 100644 index 0000000000..9ec9dd7573 --- /dev/null +++ b/quarkus-langchain4j/dev/includes/quarkus-langchain4j-pgvector.html @@ -0,0 +1,1131 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The name of the configured Postgres datasource to use for this store. If not set, the default datasource from the Agroal extension will be used.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_PGVECTOR_DATASOURCE

+
+
+

string

+
+
+
+

The table name for storing embeddings

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_PGVECTOR_TABLE

+
+
+

string

embeddings

+
+
+
+

The dimension of the embedding vectors. This has to be the same as the dimension of vectors produced by the embedding model that you use. For example, AllMiniLmL6V2QuantizedEmbeddingModel produces vectors of dimension 384. OpenAI’s text-embedding-ada-002 produces vectors of dimension 1536.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_PGVECTOR_DIMENSION

+
+
+

int

required

+
+
+
+

Use index or not

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_PGVECTOR_USE_INDEX

+
+
+

boolean

false

+
+
+
+

index size

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_PGVECTOR_INDEX_LIST_SIZE

+
+
+

int

0

+
+
+
+

Create table or not

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_PGVECTOR_CREATE_TABLE

+
+
+

boolean

true

+
+
+
+

Drop table or not

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_PGVECTOR_DROP_TABLE_FIRST

+
+
+

boolean

false

+
+
+
+
+ + + + + + + diff --git a/quarkus-langchain4j/dev/includes/quarkus-langchain4j-pinecone.html b/quarkus-langchain4j/dev/includes/quarkus-langchain4j-pinecone.html new file mode 100644 index 0000000000..d1f53c7480 --- /dev/null +++ b/quarkus-langchain4j/dev/includes/quarkus-langchain4j-pinecone.html @@ -0,0 +1,1226 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The API key to Pinecone.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_PINECONE_API_KEY

+
+
+

string

required

+
+
+
+

Environment name, e.g. gcp-starter or northamerica-northeast1-gcp.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_PINECONE_ENVIRONMENT

+
+
+

string

required

+
+
+
+

ID of the project.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_PINECONE_PROJECT_ID

+
+
+

string

required

+
+
+
+

Name of the index within the project. If the index doesn’t exist, it will be created.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_PINECONE_INDEX_NAME

+
+
+

string

required

+
+
+
+

Dimension of the embeddings in the index. This is required only in case that the index doesn’t exist yet and needs to be created.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_PINECONE_DIMENSION

+
+
+

int

+
+
+
+

The type of the pod to use. This is only used if the index doesn’t exist yet and needs to be created. The format: One of s1, p1, or p2 appended with . and one of x1, x2, x4, or x8.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_PINECONE_POD_TYPE

+
+
+

string

s1.x1

+
+
+
+

The timeout duration for the index to become ready. Only relevant if the index doesn’t exist yet and needs to be created. If not specified, 1 minute will be used.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_PINECONE_INDEX_READINESS_TIMEOUT

+
+
+

Duration +

+
+
+
+

The namespace.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_PINECONE_NAMESPACE

+
+
+

string

+
+
+
+

The name of the field that contains the text segment.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_PINECONE_TEXT_FIELD_NAME

+
+
+

string

text

+
+
+
+

The timeout duration for the Pinecone client. If not specified, 5 seconds will be used.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_PINECONE_TIMEOUT

+
+
+

Duration +

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-langchain4j/dev/includes/quarkus-langchain4j-redis.html b/quarkus-langchain4j/dev/includes/quarkus-langchain4j-redis.html new file mode 100644 index 0000000000..f9058e06ec --- /dev/null +++ b/quarkus-langchain4j/dev/includes/quarkus-langchain4j-redis.html @@ -0,0 +1,1172 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The name of the Redis client to use. These clients are configured by means of the redis-client extension. If unspecified, it will use the default Redis client.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_REDIS_CLIENT_NAME

+
+
+

string

+
+
+
+

The dimension of the embedding vectors. This has to be the same as the dimension of vectors produced by the embedding model that you use. For example, AllMiniLmL6V2QuantizedEmbeddingModel produces vectors of dimension 384. OpenAI’s text-embedding-ada-002 produces vectors of dimension 1536.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_REDIS_DIMENSION

+
+
+

long

required

+
+
+
+

Name of the index that will be used in Redis when searching for related embeddings. If this index doesn’t exist, it will be created.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_REDIS_INDEX_NAME

+
+
+

string

embedding-index

+
+
+
+

Names of extra fields that will be stored in Redis along with the embedding vectors. This corresponds to keys in the dev.langchain4j.data.document.Metadata map. Storing embeddings with metadata fields unlisted here is possible, but these fields will then not be present in the returned EmbeddingMatch objects.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_REDIS_METADATA_FIELDS

+
+
+

list of string

+
+
+
+

Metric used to compute the distance between two vectors.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_REDIS_DISTANCE_METRIC

+
+
+
+

l2, ip, cosine

+

cosine

+
+
+
+

Name of the key that will be used to store the embedding vector.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_REDIS_VECTOR_FIELD_NAME

+
+
+

string

vector

+
+
+
+

Name of the key that will be used to store the embedded text.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_REDIS_SCALAR_FIELD_NAME

+
+
+

string

scalar

+
+
+
+

Prefix to be applied to all keys by the embedding store. Embeddings are stored in Redis under a key that is the concatenation of this prefix and the embedding ID.

+
+
+

If the configured prefix does not ends with :, it will be added automatically to follow the Redis convention.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_REDIS_PREFIX

+
+
+

string

embedding:

+
+
+
+

Algorithm used to index the embedding vectors.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_REDIS_VECTOR_ALGORITHM

+
+
+
+

flat, hnsw

+

hnsw

+
+
+
+
+ + + + + + + diff --git a/quarkus-langchain4j/dev/includes/quarkus-langchain4j.html b/quarkus-langchain4j/dev/includes/quarkus-langchain4j.html new file mode 100644 index 0000000000..6a80df6433 --- /dev/null +++ b/quarkus-langchain4j/dev/includes/quarkus-langchain4j.html @@ -0,0 +1,1153 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Default model config

Type

Default

+
+
+
+

The model provider to use

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_CHAT_MODEL_PROVIDER

+
+
+

string

+
+
+
+

The model provider to use

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_EMBEDDING_MODEL_PROVIDER

+
+
+

string

+
+
+
+

The model provider to use

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_MODERATION_MODEL_PROVIDER

+
+
+

string

+
+
+
+

The model provider to use

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_IMAGE_MODEL_PROVIDER

+
+
+

string

Named model config

Type

Default

+
+
+
+

The model provider to use

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J__MODEL_NAME__CHAT_MODEL_PROVIDER

+
+
+

string

+
+
+
+

The model provider to use

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J__MODEL_NAME__EMBEDDING_MODEL_PROVIDER

+
+
+

string

+
+
+
+

The model provider to use

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J__MODEL_NAME__MODERATION_MODEL_PROVIDER

+
+
+

string

+
+
+
+

The model provider to use

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J__MODEL_NAME__IMAGE_MODEL_PROVIDER

+
+
+

string

+
+
+
+
+ + + + + + + diff --git a/quarkus-langchain4j/dev/index.html b/quarkus-langchain4j/dev/index.html new file mode 100644 index 0000000000..dee09c7986 --- /dev/null +++ b/quarkus-langchain4j/dev/index.html @@ -0,0 +1,1228 @@ + + + + + + Quarkus LangChain4j :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus LangChain4j

+
+
+
+

Large Language Models (LLMs) are AI-based systems designed to understand, generate, and manipulate human language, showcasing advanced natural language processing capabilities. +The dynamic LLM landscape is reshaping our interactions with applications and the very construction of these applications. +The Quarkus LangChain4j extension seamlessly integrates LLMs into Quarkus applications, enabling the harnessing of LLM capabilities for the development of more intelligent applications.

+
+
+

For instance, an application utilizing this extension can:

+
+
+
    +
  • +

    Automatically triage or classify documents

    +
  • +
  • +

    Extract structured and unstructured information from various data sources

    +
  • +
  • +

    Construct chatbots for system interaction

    +
  • +
  • +

    Generate personalized text such as emails or reports

    +
  • +
+
+
+

This extension is built upon the LangChain4j library. +It offers a declarative approach to interact with diverse LLMs like OpenAI, Hugging Face, or Ollama. It facilitates LLM-invoked functions within Quarkus applications and allows document loading within the LLM "context".

+
+
+
+llms big picture +
+
+
+
+
+

Quick Overview

+
+
+

To incorporate Quarkus LangChain4j into your Quarkus project, add the following Maven dependency:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.langchain4j</groupId>
+    <artifactId>quarkus-langchain4j-openai</artifactId>
+    <version>0.9.0</version>
+</dependency>
+
+
+
+

or, to use hugging face:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.langchain4j</groupId>
+    <artifactId>quarkus-langchain4j-huggingface</artifactId>
+    <version>0.9.0</version>
+</dependency>
+
+
+
+

Then, include your OpenAI API key in your application.properties file (or any other mandatory configuration):

+
+
+
+
quarkus.langchain4j.openai.api-key=sk-...
+
+
+
+ + + + + +
+ + +Alternatively, utilize the QUARKUS_LANGCHAIN4J_OPENAI_API_KEY environment variable. +
+
+
+

Once you’ve added the dependency and configuration, the next step involves creating an AI service, serving as the integration point. This service is the interface your application code will utilize to interact with the LLM. A basic example is demonstrated below:

+
+
+
+
package io.quarkiverse.langchain4j.samples;
+
+import dev.langchain4j.service.SystemMessage;
+import dev.langchain4j.service.UserMessage;
+import io.quarkiverse.langchain4j.RegisterAiService;
+
+@RegisterAiService( (1)
+        tools = EmailService.class (2)
+)
+public interface MyAiService {
+
+    @SystemMessage("You are a professional poet") (3)
+    @UserMessage("""
+                Write a poem about {topic}. The poem should be {lines} lines long. Then send this poem by email. (4)
+            """)
+    String writeAPoem(String topic, int lines); (5)
+}
+
+
+
+ + + + + + + + + + + + + + + + + + + + + +
1The @RegisterAiService annotation registers the AI service.
2The tools attribute defines the tools the LLM can employ. +During interaction, the LLM can invoke these tools and reflect on their output.
3The @SystemMessage annotation registers a system message, setting the initial context or "scope".
4The @UserMessage annotation serves as the prompt.
5The method invokes the LLM, initiating an exchange between the LLM and the application, beginning with the system message and then the user message. Your application triggers this method and receives the response.
+
+
+
+
+

Advantages over vanilla LangChain4j

+
+
+

The extension offers the following advantages over using the vanilla LangChain4j library in Quarkus:

+
+
+
    +
  • +

    Seamless integration with the Quarkus programming model

    +
    +
      +
    • +

      CDI beans for the LangChain4j models

      +
    • +
    • +

      Standard configuration properties for configuring said models

      +
    • +
    +
    +
  • +
  • +

    Declarative AI Services

    +
  • +
  • +

    Built-in observability

    +
    +
      +
    • +

      Metrics

      +
    • +
    • +

      Tracing

      +
    • +
    • +

      Auditing

      +
    • +
    +
    +
  • +
  • +

    Build time wiring

    +
    +
      +
    • +

      Reduced footprint of the library

      +
    • +
    • +

      Feedback about misuse at build time

      +
    • +
    +
    +
  • +
  • +

    Leverage runtime Quarkus components

    +
    +
      +
    • +

      REST calls and JSON handling are performed using the libraries used throughout Quarkus

      +
      +
        +
      • +

        Results in reduces library footprint

        +
      • +
      • +

        Enables GraalVM native image compilation

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

    Dev UI features

    +
    +
      +
    • +

      View table with information about AI services and tools

      +
    • +
    • +

      Add embeddings into the embedding store

      +
    • +
    • +

      Search for relevant embeddings in the embedding store

      +
    • +
    +
    +
  • +
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-langchain4j/dev/infinispan-store.html b/quarkus-langchain4j/dev/infinispan-store.html new file mode 100644 index 0000000000..11122fae88 --- /dev/null +++ b/quarkus-langchain4j/dev/infinispan-store.html @@ -0,0 +1,1254 @@ + + + + + + Infinispan Embedding Store for Retrieval Augmented Generation (RAG) :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Infinispan Embedding Store for Retrieval Augmented Generation (RAG)

+
+
+
+

When implementing Retrieval Augmented Generation (RAG), a capable document store is necessary. This guide will explain how to leverage Infinispan Server as the embeddings store.

+
+
+
+
+

Leveraging the Infinispan Embeddings Store

+
+
+

To utilize the Infinispan as embedding store, you’ll need to include the following dependency:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.langchain4j</groupId>
+    <artifactId>quarkus-langchain4j-infinispan</artifactId>
+    <version>0.9.0</version>
+</dependency>
+
+
+
+

This extension relies on the Quarkus Infinispan client. Ensure the default Infinispan client is configured appropriately. For detailed guidance, refer to the Quarkus Infinispan Client Quickstart and the Quarkus Infinispan Client Reference.

+
+
+ + + + + +
+ + +The Infinispan document store requires the dimension of the vector to be set. Add the quarkus.langchain4j.infinispan.dimension property to your application.properties file and set it to the dimension of the vector. The dimension depends on the embedding model you use. +For example, AllMiniLmL6V2QuantizedEmbeddingModel produces vectors of dimension 384. OpenAI’s text-embedding-ada-002 produces vectors of dimension 1536. +
+
+
+

Upon installing the extension, you can utilize the Infinispan document store using the following code:

+
+
+
+
package io.quarkiverse.langchain4j.samples;
+
+import static dev.langchain4j.data.document.splitter.DocumentSplitters.recursive;
+
+import java.util.List;
+
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+
+import dev.langchain4j.data.document.Document;
+import dev.langchain4j.model.embedding.EmbeddingModel;
+import dev.langchain4j.store.embedding.EmbeddingStoreIngestor;
+import io.quarkiverse.langchain4j.infinispan.InfinispanEmbeddingStore;
+
+@ApplicationScoped
+public class IngestorExampleWithInfinispan {
+
+    /**
+     * The embedding store (Infinispan).
+     * The bean is provided by the quarkus-langchain4j-infinispan extension.
+     */
+    @Inject
+    InfinispanEmbeddingStore store;
+
+    /**
+     * The embedding model (how is computed the vector of a document).
+     * The bean is provided by the LLM (like openai) extension.
+     */
+    @Inject
+    EmbeddingModel embeddingModel;
+
+    public void ingest(List<Document> documents) {
+        EmbeddingStoreIngestor ingestor = EmbeddingStoreIngestor.builder()
+                .embeddingStore(store)
+                .embeddingModel(embeddingModel)
+                .documentSplitter(recursive(500, 0))
+                .build();
+        // Warning - this can take a long time...
+        ingestor.ingest(documents);
+    }
+}
+
+
+
+
+
+

Configuration Settings

+
+
+

By default, the extension utilizes the default Infinispan client for storing and indexing the documents. Customize the behavior of the extension by exploring various configuration options:

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The name of the Infinispan client to use. These clients are configured by means of the infinispan-client extension. If unspecified, it will use the default Infinispan client.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_INFINISPAN_CLIENT_NAME

+
+
+

string

+
+
+
+

The dimension of the embedding vectors. This has to be the same as the dimension of vectors produced by the embedding model that you use. For example, AllMiniLmL6V2QuantizedEmbeddingModel produces vectors of dimension 384. OpenAI’s text-embedding-ada-002 produces vectors of dimension 1536.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_INFINISPAN_DIMENSION

+
+
+

long

required

+
+
+
+

Name of the cache that will be used in Infinispan when searching for related embeddings. If this cache doesn’t exist, it will be created.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_INFINISPAN_CACHE_NAME

+
+
+

string

embeddings-cache

+
+
+
+

The maximum distance. The most distance between vectors is how close or far apart two embeddings are.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_INFINISPAN_DISTANCE

+
+
+

int

3

+
+
+
+

Under the Hood

+
+
+

The extension will create and register, both in the client and the server, the protobuf schema needed to serialize and store the indexable embeddings in Infinispan. +For example, for a dimension 384, the schema will register the following entity:

+
+
+
+
/**
+ * @Indexed
+ */
+message LangchainItem384 {
+
+   /**
+    * @Keyword
+    */
+   optional string id = 1;
+
+   /**
+    * @Vector(dimension=384, similarity=COSINE)
+    */
+   repeated float floatVector = 2;
+
+   optional string text = 3;
+
+   repeated string metadataKeys = 4;
+
+   repeated string metadataValues = 5;
+}
+
+
+
+
+
+

Infinispan Cache

+
+
+

The cache in Infinispan must be an indexed cache. +If the cache does not exist, the following cache will be created. +Note that the cache configuration points to the schema containing the right size of the dimension depending on the use case.

+
+
+
+
{
+  "embeddings-cache": {
+    "distributed-cache": {
+      "mode": "SYNC",
+      "remote-timeout": "17500",
+      "statistics": true,
+      "locking": {
+        "concurrency-level": "1000",
+        "acquire-timeout": "15000",
+        "striping": false
+      },
+      "indexing": {
+        "enabled": true,
+        "storage": "local-heap",
+        "indexed-entities": [
+          "LangchainItem384"
+        ]
+      },
+      "state-transfer": {
+        "timeout": "60000"
+      }
+    }
+  }
+}
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-langchain4j/dev/llms.html b/quarkus-langchain4j/dev/llms.html new file mode 100644 index 0000000000..ef50a1610a --- /dev/null +++ b/quarkus-langchain4j/dev/llms.html @@ -0,0 +1,1037 @@ + + + + + + Large Language Models :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Large Language Models

+
+

Large Language Models (LLMs) are advanced AI systems designed to comprehend, generate, and manipulate human language, enabling a wide array of natural language processing tasks. +These models utilize vast amounts of data to learn complex patterns and nuances within human language, enabling tasks like text generation, translation, and sentiment analysis. +LLMs, such as GPT-3 by OpenAI and BERT by Google, have substantially improved the understanding and generation of human language. +They serve as the backbone for chatbots, content generation, language translation, and even personalized content recommendation systems. +LLMs can be trained on colossal datasets, allowing them to understand context, grammar, and semantics, delivering responses that mimic human-like language. +They’re revolutionizing various industries, from customer service (with chatbots) to content creation and summarization for journalism or data analysis. +With their ability to understand the context and nuances of language, LLMs enable the automation of tasks that previously required human understanding.

+
+
+

The size and complexity of these models demand significant computational resources for both training and deployment. +Ethical concerns and biases within LLMs are topics of ongoing discussion and research within the AI community. +Continued research and development in LLMs are constantly pushing the boundaries of what AI can achieve in language understanding and generation.

+
+
+

LLMs are a core component of the Quarkus LangChain4j extension. +The extension does not serve its own LLMs, but rather provides a standard interface for interacting with many different LLMs such as OpenAI GPT-3/4, Hugging Face, and Ollama. +This interface is designed to be simple and intuitive, allowing developers to quickly integrate LLMs into their applications.

+
+
+

Note that each LLM has a different feature set. +Please check the specific documentation for the LLM you are using to see what features are available:

+
+
+ +
+
+
+
+
+ + + + + + + diff --git a/quarkus-langchain4j/dev/ollama.html b/quarkus-langchain4j/dev/ollama.html new file mode 100644 index 0000000000..7b346fb54a --- /dev/null +++ b/quarkus-langchain4j/dev/ollama.html @@ -0,0 +1,1870 @@ + + + + + + Ollama :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Ollama

+
+
+
+

Ollama proposes a way to run large language models (LLMs) locally. +You can run many models such as LLama2, Mistral, or CodeLlama on your local machine.

+
+
+
+
+

Prerequisites

+
+
+

To use Ollama, you need to have a running Ollama server. +Go to the Ollama download page and download the server for your platform.

+
+
+

Once installed, check that Ollama is running using:

+
+
+
+
> ollama list
+
+
+
+

It may not display any model, which is fine, let’s pull the llama2 model:

+
+
+
+
> ollama pull llama2
+
+
+
+ + + + + +
+ + +Models are huge. For example Llama2 is 3.8Gb. Make sure you have enough disk space. +
+
+
+

Let’s also pull the default embedding model:

+
+
+
+
> ollama pull nomic-embed-text
+
+
+
+ + + + + +
+ + +
Dev Service
+
+

If you have Ollama running locally, you do not need a dev service. +However, if you want to use the Ollama dev service, add the following dependency to your project:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.langchain4j</groupId>
+    <artifactId>quarkus-langchain4j-ollama-devservices</artifactId>
+    <version>0.9.0</version>
+</dependency>
+
+
+
+

Then, in your application.properties file add:

+
+
+
+
quarkus.langchain4j.ollama.devservices.model=mistral # It uses orca-mini by default
+
+
+
+

The dev service will start an Ollama server for you, using a docker container. Note that the provisioning can take some time.

+
+
+
+
+
+
+

Using Ollama

+
+
+

To integrate with models running on Ollama, add the following dependency into your project:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.langchain4j</groupId>
+    <artifactId>quarkus-langchain4j-ollama</artifactId>
+    <version>0.9.0</version>
+</dependency>
+
+
+
+

If no other LLM extension is installed, AI Services will automatically utilize the configured Ollama model.

+
+
+

By default, the extension uses llama2, the model we pulled in the previous section. +You can change it by setting the quarkus.langchain4j.ollama.chat-model.model-id property in the application.properties file:

+
+
+
+
# Do not forget to pull the model before using it using `ollama pull <model-id>`
+quarkus.langchain4j.ollama.chat-model.model-id=mistral
+
+
+
+

Configuration

+
+

Several configuration properties are available:

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Whether the model should be enabled

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA_CHAT_MODEL_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the model should be enabled

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA_EMBEDDING_MODEL_ENABLED

+
+
+

boolean

true

+
+
+
+

Base URL where the Ollama serving is running

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA_BASE_URL

+
+
+

string

http://localhost:11434

+
+
+
+

Timeout for Ollama calls

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

Whether the Ollama client should log requests

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA_LOG_REQUESTS

+
+
+

boolean

false

+
+
+
+

Whether the Ollama client should log responses

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA_LOG_RESPONSES

+
+
+

boolean

false

+
+
+
+

Whether or not to enable the integration. Defaults to true, which means requests are made to the OpenAI provider. Set to false to disable all requests.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA_ENABLE_INTEGRATION

+
+
+

boolean

true

+
+
+
+

Model to use. According to Ollama docs, the default value is llama2

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA_CHAT_MODEL_MODEL_ID

+
+
+

string

llama2

+
+
+
+

The temperature of the model. Increasing the temperature will make the model answer with more variability. A lower temperature will make the model answer more conservatively.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA_CHAT_MODEL_TEMPERATURE

+
+
+

double

0.8

+
+
+
+

Maximum number of tokens to predict when generating text

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA_CHAT_MODEL_NUM_PREDICT

+
+
+

int

128

+
+
+
+

Sets the stop sequences to use. When this pattern is encountered the LLM will stop generating text and return

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA_CHAT_MODEL_STOP

+
+
+

string

+
+
+
+

Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA_CHAT_MODEL_TOP_P

+
+
+

double

0.9

+
+
+
+

Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA_CHAT_MODEL_TOP_K

+
+
+

int

40

+
+
+
+

With a static number the result is always the same. With a random number the result varies Example: Random random = new Random(); int x = random.nextInt(Integer.MAX_VALUE);

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA_CHAT_MODEL_SEED

+
+
+

int

+
+
+
+

Model to use. According to Ollama docs, the default value is nomic-embed-text

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA_EMBEDDING_MODEL_MODEL_ID

+
+
+

string

nomic-embed-text

+
+
+
+

The temperature of the model. Increasing the temperature will make the model answer with more variability. A lower temperature will make the model answer more conservatively.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA_EMBEDDING_MODEL_TEMPERATURE

+
+
+

double

0.8

+
+
+
+

Maximum number of tokens to predict when generating text

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA_EMBEDDING_MODEL_NUM_PREDICT

+
+
+

int

128

+
+
+
+

Sets the stop sequences to use. When this pattern is encountered the LLM will stop generating text and return

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA_EMBEDDING_MODEL_STOP

+
+
+

string

+
+
+
+

Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA_EMBEDDING_MODEL_TOP_P

+
+
+

double

0.9

+
+
+
+

Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA_EMBEDDING_MODEL_TOP_K

+
+
+

int

40

Named model config

Type

Default

+
+
+
+

Base URL where the Ollama serving is running

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA__MODEL_NAME__BASE_URL

+
+
+

string

http://localhost:11434

+
+
+
+

Timeout for Ollama calls

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA__MODEL_NAME__TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

Whether the Ollama client should log requests

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA__MODEL_NAME__LOG_REQUESTS

+
+
+

boolean

false

+
+
+
+

Whether the Ollama client should log responses

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA__MODEL_NAME__LOG_RESPONSES

+
+
+

boolean

false

+
+
+
+

Whether or not to enable the integration. Defaults to true, which means requests are made to the OpenAI provider. Set to false to disable all requests.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA__MODEL_NAME__ENABLE_INTEGRATION

+
+
+

boolean

true

+
+
+
+

Model to use. According to Ollama docs, the default value is llama2

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA__MODEL_NAME__CHAT_MODEL_MODEL_ID

+
+
+

string

llama2

+
+
+
+

The temperature of the model. Increasing the temperature will make the model answer with more variability. A lower temperature will make the model answer more conservatively.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA__MODEL_NAME__CHAT_MODEL_TEMPERATURE

+
+
+

double

0.8

+
+
+
+

Maximum number of tokens to predict when generating text

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA__MODEL_NAME__CHAT_MODEL_NUM_PREDICT

+
+
+

int

128

+
+
+
+

Sets the stop sequences to use. When this pattern is encountered the LLM will stop generating text and return

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA__MODEL_NAME__CHAT_MODEL_STOP

+
+
+

string

+
+
+
+

Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA__MODEL_NAME__CHAT_MODEL_TOP_P

+
+
+

double

0.9

+
+
+
+

Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA__MODEL_NAME__CHAT_MODEL_TOP_K

+
+
+

int

40

+
+
+
+

With a static number the result is always the same. With a random number the result varies Example: Random random = new Random(); int x = random.nextInt(Integer.MAX_VALUE);

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA__MODEL_NAME__CHAT_MODEL_SEED

+
+
+

int

+
+
+
+

Model to use. According to Ollama docs, the default value is nomic-embed-text

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA__MODEL_NAME__EMBEDDING_MODEL_MODEL_ID

+
+
+

string

nomic-embed-text

+
+
+
+

The temperature of the model. Increasing the temperature will make the model answer with more variability. A lower temperature will make the model answer more conservatively.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA__MODEL_NAME__EMBEDDING_MODEL_TEMPERATURE

+
+
+

double

0.8

+
+
+
+

Maximum number of tokens to predict when generating text

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA__MODEL_NAME__EMBEDDING_MODEL_NUM_PREDICT

+
+
+

int

128

+
+
+
+

Sets the stop sequences to use. When this pattern is encountered the LLM will stop generating text and return

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA__MODEL_NAME__EMBEDDING_MODEL_STOP

+
+
+

string

+
+
+
+

Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA__MODEL_NAME__EMBEDDING_MODEL_TOP_P

+
+
+

double

0.9

+
+
+
+

Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OLLAMA__MODEL_NAME__EMBEDDING_MODEL_TOP_K

+
+
+

int

40

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+
+
+
+

Document Retriever and Embedding

+
+
+

Ollama also provides embedding models. +By default, it uses nomic-embed-text (make sure you pulled that model as indicated in the prerequisites section).

+
+
+

You can change the default embedding model by setting the quarkus.langchain4j.ollama.embedding-model.model-id property in the application.properties file:

+
+
+
+
quarkus.langchain4j.ollama.log-requests=true
+quarkus.langchain4j.ollama.log-responses=true
+
+quarkus.langchain4j.ollama.chat-model.model-id=mistral
+quarkus.langchain4j.ollama.embedding-model.model-id=mistral
+
+
+
+

If no other LLM extension is installed, retrieve the embedding model as follows:

+
+
+
+
@Inject EmbeddingModel model; // Injects the embedding model
+
+
+
+

However, in general, we recommend using local embedding models, as Ollama embeddings are rather slow.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-langchain4j/dev/openai.html b/quarkus-langchain4j/dev/openai.html new file mode 100644 index 0000000000..3ff11abb7b --- /dev/null +++ b/quarkus-langchain4j/dev/openai.html @@ -0,0 +1,2579 @@ + + + + + + OpenAI :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

OpenAI

+
+
+
+

OpenAI stands as a pioneering AI research organization, famous for its groundbreaking Large Language Models (LLMs) like GPT-3 and GPT-4, setting new benchmarks in natural language understanding and generation.

+
+
+

OpenAI’s LLMs offer extensive support for:

+
+
+
    +
  • +

    Tools facilitating seamless interaction between the LLM and applications.

    +
  • +
  • +

    Document retrievers enabling the transmission of pertinent content to the LLM.

    +
  • +
+
+
+
+
+

Using OpenAI Models

+
+
+

To employ OpenAI LLMs, integrate the following dependency into your project:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.langchain4j</groupId>
+    <artifactId>quarkus-langchain4j-openai</artifactId>
+    <version>0.9.0</version>
+</dependency>
+
+
+
+

If no other LLM extension is installed, AI Services will automatically utilize the configured OpenAI model.

+
+
+

Configuration

+
+

Configuring OpenAI models mandates an API key, obtainable by creating an account on the OpenAI platform.

+
+
+

The API key can be set in the application.properties file:

+
+
+
+
quarkus.langchain4j.openai.api-key=sk-...
+
+
+
+ + + + + +
+ + +Alternatively, leverage the QUARKUS_LANGCHAIN4J_OPENAI_API_KEY environment variable. +
+
+
+

Several configuration properties are available:

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Whether the model should be enabled

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_CHAT_MODEL_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the model should be enabled

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_EMBEDDING_MODEL_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the model should be enabled

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_MODERATION_MODEL_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether the model should be enabled

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_IMAGE_MODEL_ENABLED

+
+
+

boolean

true

+
+
+
+

Base URL of OpenAI API

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_BASE_URL

+
+
+

string

https://api.openai.com/v1/

+
+
+
+

OpenAI API key

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_API_KEY

+
+
+

string

dummy

+
+
+ +
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_ORGANIZATION_ID

+
+
+

string

+
+
+
+

Timeout for OpenAI calls

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum number of times to retry

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_MAX_RETRIES

+
+
+

int

3

+
+
+
+

Whether the OpenAI client should log requests

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_LOG_REQUESTS

+
+
+

boolean

false

+
+
+
+

Whether the OpenAI client should log responses

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_LOG_RESPONSES

+
+
+

boolean

false

+
+
+
+

Whether or not to enable the integration. Defaults to true, which means requests are made to the OpenAI provider. Set to false to disable all requests.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_ENABLE_INTEGRATION

+
+
+

boolean

true

+
+
+
+

Model name to use

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_CHAT_MODEL_MODEL_NAME

+
+
+

string

gpt-3.5-turbo

+
+
+
+

What sampling temperature to use, with values between 0 and 2. Higher values means the model will take more risks. A value of 0.9 is good for more creative applications, while 0 (argmax sampling) is good for ones with a well-defined answer. It is recommended to alter this or topP, but not both.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_CHAT_MODEL_TEMPERATURE

+
+
+

double

1.0

+
+
+
+

An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with topP probability mass. 0.1 means only the tokens comprising the top 10% probability mass are considered. It is recommended to alter this or topP, but not both.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_CHAT_MODEL_TOP_P

+
+
+

double

1.0

+
+
+
+

The maximum number of tokens to generate in the completion. The token count of your prompt plus max_tokens can’t exceed the model’s context length. Most models have a context length of 2048 tokens (except for the newest models, which support 4096).

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_CHAT_MODEL_MAX_TOKENS

+
+
+

int

+
+
+
+

Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far, increasing the model’s likelihood to talk about new topics.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_CHAT_MODEL_PRESENCE_PENALTY

+
+
+

double

0

+
+
+
+

Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model’s likelihood to repeat the same line verbatim.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_CHAT_MODEL_FREQUENCY_PENALTY

+
+
+

double

0

+
+
+
+

Whether chat model requests should be logged

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_CHAT_MODEL_LOG_REQUESTS

+
+
+

boolean

false

+
+
+
+

Whether chat model responses should be logged

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_CHAT_MODEL_LOG_RESPONSES

+
+
+

boolean

false

+
+
+
+

The response format the model should use. Some models are not compatible with some response formats, make sure to review OpenAI documentation.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_CHAT_MODEL_RESPONSE_FORMAT

+
+
+

string

+
+
+
+

Model name to use

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_EMBEDDING_MODEL_MODEL_NAME

+
+
+

string

text-embedding-ada-002

+
+
+
+

Whether embedding model requests should be logged

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_EMBEDDING_MODEL_LOG_REQUESTS

+
+
+

boolean

false

+
+
+
+

Whether embedding model responses should be logged

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_EMBEDDING_MODEL_LOG_RESPONSES

+
+
+

boolean

false

+
+
+
+

A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_EMBEDDING_MODEL_USER

+
+
+

string

+
+
+
+

Model name to use

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_MODERATION_MODEL_MODEL_NAME

+
+
+

string

text-moderation-latest

+
+
+
+

Whether moderation model requests should be logged

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_MODERATION_MODEL_LOG_REQUESTS

+
+
+

boolean

false

+
+
+
+

Whether moderation model responses should be logged

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_MODERATION_MODEL_LOG_RESPONSES

+
+
+

boolean

false

+
+
+
+

Model name to use

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_IMAGE_MODEL_MODEL_NAME

+
+
+

string

dall-e-3

+
+
+
+

Configure whether the generated images will be saved to disk. By default, persisting is disabled, but it is implicitly enabled when quarkus.langchain4j.openai.image-mode.directory is set and this property is not to false

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_IMAGE_MODEL_PERSIST

+
+
+

boolean

false

+
+
+
+

The path where the generated images will be persisted to disk. This only applies of quarkus.langchain4j.openai.image-mode.persist is not set to false.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_IMAGE_MODEL_PERSIST_DIRECTORY

+
+
+

path

${java.io.tmpdir}/dall-e-images

+
+
+
+

The format in which the generated images are returned.

+
+
+

Must be one of url or b64_json

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_IMAGE_MODEL_RESPONSE_FORMAT

+
+
+

string

url

+
+
+
+

The size of the generated images.

+
+
+

Must be one of 1024x1024, 1792x1024, or 1024x1792 when the model is dall-e-3.

+
+
+

Must be one of 256x256, 512x512, or 1024x1024 when the model is dall-e-2.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_IMAGE_MODEL_SIZE

+
+
+

string

1024x1024

+
+
+
+

The quality of the image that will be generated.

+
+
+

hd creates images with finer details and greater consistency across the image.

+
+
+

This param is only supported for when the model is dall-e-3.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_IMAGE_MODEL_QUALITY

+
+
+

string

standard

+
+
+
+

The number of images to generate.

+
+
+

Must be between 1 and 10.

+
+
+

When the model is dall-e-3, only n=1 is supported.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_IMAGE_MODEL_NUMBER

+
+
+

int

1

+
+
+
+

The style of the generated images.

+
+
+

Must be one of vivid or natural. Vivid causes the model to lean towards generating hyper-real and dramatic images. Natural causes the model to produce more natural, less hyper-real looking images.

+
+
+

This param is only supported for when the model is dall-e-3.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_IMAGE_MODEL_STYLE

+
+
+

string

vivid

+
+
+
+

A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_IMAGE_MODEL_USER

+
+
+

string

+
+
+
+

Whether image model requests should be logged

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_IMAGE_MODEL_LOG_REQUESTS

+
+
+

boolean

false

+
+
+
+

Whether image model responses should be logged

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI_IMAGE_MODEL_LOG_RESPONSES

+
+
+

boolean

false

Named model config

Type

Default

+
+
+
+

Base URL of OpenAI API

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__BASE_URL

+
+
+

string

https://api.openai.com/v1/

+
+
+
+

OpenAI API key

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__API_KEY

+
+
+

string

dummy

+
+
+ +
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__ORGANIZATION_ID

+
+
+

string

+
+
+
+

Timeout for OpenAI calls

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__TIMEOUT

+
+
+

Duration +

10S

+
+
+
+

The maximum number of times to retry

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__MAX_RETRIES

+
+
+

int

3

+
+
+
+

Whether the OpenAI client should log requests

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__LOG_REQUESTS

+
+
+

boolean

false

+
+
+
+

Whether the OpenAI client should log responses

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__LOG_RESPONSES

+
+
+

boolean

false

+
+
+
+

Whether or not to enable the integration. Defaults to true, which means requests are made to the OpenAI provider. Set to false to disable all requests.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__ENABLE_INTEGRATION

+
+
+

boolean

true

+
+
+
+

Model name to use

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__CHAT_MODEL_MODEL_NAME

+
+
+

string

gpt-3.5-turbo

+
+
+
+

What sampling temperature to use, with values between 0 and 2. Higher values means the model will take more risks. A value of 0.9 is good for more creative applications, while 0 (argmax sampling) is good for ones with a well-defined answer. It is recommended to alter this or topP, but not both.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__CHAT_MODEL_TEMPERATURE

+
+
+

double

1.0

+
+
+
+

An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with topP probability mass. 0.1 means only the tokens comprising the top 10% probability mass are considered. It is recommended to alter this or topP, but not both.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__CHAT_MODEL_TOP_P

+
+
+

double

1.0

+
+
+
+

The maximum number of tokens to generate in the completion. The token count of your prompt plus max_tokens can’t exceed the model’s context length. Most models have a context length of 2048 tokens (except for the newest models, which support 4096).

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__CHAT_MODEL_MAX_TOKENS

+
+
+

int

+
+
+
+

Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far, increasing the model’s likelihood to talk about new topics.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__CHAT_MODEL_PRESENCE_PENALTY

+
+
+

double

0

+
+
+
+

Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model’s likelihood to repeat the same line verbatim.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__CHAT_MODEL_FREQUENCY_PENALTY

+
+
+

double

0

+
+
+
+

Whether chat model requests should be logged

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__CHAT_MODEL_LOG_REQUESTS

+
+
+

boolean

false

+
+
+
+

Whether chat model responses should be logged

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__CHAT_MODEL_LOG_RESPONSES

+
+
+

boolean

false

+
+
+
+

The response format the model should use. Some models are not compatible with some response formats, make sure to review OpenAI documentation.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__CHAT_MODEL_RESPONSE_FORMAT

+
+
+

string

+
+
+
+

Model name to use

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__EMBEDDING_MODEL_MODEL_NAME

+
+
+

string

text-embedding-ada-002

+
+
+
+

Whether embedding model requests should be logged

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__EMBEDDING_MODEL_LOG_REQUESTS

+
+
+

boolean

false

+
+
+
+

Whether embedding model responses should be logged

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__EMBEDDING_MODEL_LOG_RESPONSES

+
+
+

boolean

false

+
+
+
+

A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__EMBEDDING_MODEL_USER

+
+
+

string

+
+
+
+

Model name to use

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__MODERATION_MODEL_MODEL_NAME

+
+
+

string

text-moderation-latest

+
+
+
+

Whether moderation model requests should be logged

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__MODERATION_MODEL_LOG_REQUESTS

+
+
+

boolean

false

+
+
+
+

Whether moderation model responses should be logged

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__MODERATION_MODEL_LOG_RESPONSES

+
+
+

boolean

false

+
+
+
+

Model name to use

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__IMAGE_MODEL_MODEL_NAME

+
+
+

string

dall-e-3

+
+
+
+

Configure whether the generated images will be saved to disk. By default, persisting is disabled, but it is implicitly enabled when quarkus.langchain4j.openai.image-mode.directory is set and this property is not to false

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__IMAGE_MODEL_PERSIST

+
+
+

boolean

false

+
+
+
+

The path where the generated images will be persisted to disk. This only applies of quarkus.langchain4j.openai.image-mode.persist is not set to false.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__IMAGE_MODEL_PERSIST_DIRECTORY

+
+
+

path

${java.io.tmpdir}/dall-e-images

+
+
+
+

The format in which the generated images are returned.

+
+
+

Must be one of url or b64_json

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__IMAGE_MODEL_RESPONSE_FORMAT

+
+
+

string

url

+
+
+
+

The size of the generated images.

+
+
+

Must be one of 1024x1024, 1792x1024, or 1024x1792 when the model is dall-e-3.

+
+
+

Must be one of 256x256, 512x512, or 1024x1024 when the model is dall-e-2.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__IMAGE_MODEL_SIZE

+
+
+

string

1024x1024

+
+
+
+

The quality of the image that will be generated.

+
+
+

hd creates images with finer details and greater consistency across the image.

+
+
+

This param is only supported for when the model is dall-e-3.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__IMAGE_MODEL_QUALITY

+
+
+

string

standard

+
+
+
+

The number of images to generate.

+
+
+

Must be between 1 and 10.

+
+
+

When the model is dall-e-3, only n=1 is supported.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__IMAGE_MODEL_NUMBER

+
+
+

int

1

+
+
+
+

The style of the generated images.

+
+
+

Must be one of vivid or natural. Vivid causes the model to lean towards generating hyper-real and dramatic images. Natural causes the model to produce more natural, less hyper-real looking images.

+
+
+

This param is only supported for when the model is dall-e-3.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__IMAGE_MODEL_STYLE

+
+
+

string

vivid

+
+
+
+

A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__IMAGE_MODEL_USER

+
+
+

string

+
+
+
+

Whether image model requests should be logged

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__IMAGE_MODEL_LOG_REQUESTS

+
+
+

boolean

false

+
+
+
+

Whether image model responses should be logged

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_OPENAI__MODEL_NAME__IMAGE_MODEL_LOG_RESPONSES

+
+
+

boolean

false

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+
+
+
+

Document Retriever

+
+
+

When utilizing OpenAI models, the recommended practice involves leveraging the OpenAiEmbeddingModel. If no other LLM extension is installed, retrieve the embedding model as follows:

+
+
+
+
@Inject EmbeddingModel model; // Injects the OpenAIEmbeddingModel
+
+
+
+ + + + + +
+ + +The OpenAIEmbeddingModel transmits the document to OpenAI for embedding computation. +
+
+
+
+
+

Azure OpenAI

+
+
+

Applications can leverage the Azure’s version of OpenAI services simply by using the quarkus-langchain4j-azure-openai extension instead of the quarkus-langchain4j-openai extension.

+
+
+

When this extension is used, the following configuration properties are required:

+
+
+
+
quarkus.langchain4j.azure-openai.api-key=
+quarkus.langchain4j.azure-openai.resource-name=
+quarkus.langchain4j.azure-openai.deployment-name=
+
+
+
+
+
+

Advanced usage

+
+
+

quarkus-langchain4j-openai and quarkus-langchain4j-azure-openai extensions use a REST Client under the hood to make the REST calls required by LangChain4j. +This client is however available for use in a Quarkus application in the same way as any other REST client.

+
+
+

An example usage is the following:

+
+
+
+
import java.net.URI;
+import java.net.URISyntaxException;
+
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+
+import org.jboss.resteasy.reactive.RestStreamElementType;
+
+import dev.ai4j.openai4j.chat.ChatCompletionChoice;
+import dev.ai4j.openai4j.chat.ChatCompletionResponse;
+import dev.ai4j.openai4j.chat.Delta;
+import dev.ai4j.openai4j.chat.Message;
+import dev.ai4j.openai4j.completion.CompletionChoice;
+import dev.ai4j.openai4j.completion.CompletionResponse;
+import io.quarkiverse.langchain4j.openai.OpenAiRestApi;
+import io.quarkus.rest.client.reactive.QuarkusRestClientBuilder;
+import io.smallrye.mutiny.Multi;
+
+
+@Path("restApi")
+@ApplicationScoped
+public class QuarkusRestApiResource {
+
+    private final OpenAiRestApi restApi;
+    private final String token;
+
+    public QuarkusRestApiResource() throws URISyntaxException {
+        this.restApi = QuarkusRestClientBuilder.newBuilder()
+                .baseUri(new URI("https://api.openai.com/v1/"))
+                .build(OpenAiRestApi.class);
+        this.token = "sometoken";
+
+    }
+
+    @GET
+    @Path("language/streaming")
+    @RestStreamElementType(MediaType.TEXT_PLAIN)
+    public Multi<String> languageStreaming() {
+        return restApi.streamingCompletion(
+                createCompletionRequest("Write a short 1 paragraph funny poem about Enterprise Java"), token, null)
+                .map(r -> {
+                    if (r.choices() != null) {
+                        if (r.choices().size() == 1) {
+                            CompletionChoice choice = r.choices().get(0);
+                            var text = choice.text();
+                            if (text != null) {
+                                return text;
+                            }
+                        }
+                    }
+                    return "";
+                });
+    }
+}
+
+
+
+

This example allows for streaming OpenAIs response back to the user’s browser as Server Sent Events.

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

We used null as the apiVersion parameter in the call to streamingCompletion as this parameter is optional when using the vanilla OpenAI APIs. +This parameter is only required when using Azure OpenAI.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-langchain4j/dev/pgvector-store.html b/quarkus-langchain4j/dev/pgvector-store.html new file mode 100644 index 0000000000..59b9fc7d07 --- /dev/null +++ b/quarkus-langchain4j/dev/pgvector-store.html @@ -0,0 +1,1253 @@ + + + + + + Pgvector Document Store for Retrieval Augmented Generation (RAG) :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Pgvector Document Store for Retrieval Augmented Generation (RAG)

+
+
+
+

When implementing Retrieval Augmented Generation (RAG), a capable document store is necessary. This guide will explain how to leverage a pgvector database as the document store.

+
+
+
+
+

Leveraging the pgvector Document Store

+
+
+

To utilize the Redis document store, you’ll need to include the following dependency:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.langchain4j</groupId>
+    <artifactId>quarkus-langchain4j-pgvector</artifactId>
+    <version>0.9.0</version>
+</dependency>
+
+
+
+

This extension will check for a default datasource, ensure you have defined at least one datasource. For detailed guidance, refer to the CONFIGURE DATA SOURCES IN QUARKUS.

+
+
+ + + + + +
+ + +If you plan to use devservices be sure to use this property : quarkus.datasource.devservices.image-name=ankane/pgvector:v0.5.1. +
+
+
+ + + + + +
+ + +The pgvector store requires the dimension of the vector to be set. Add the quarkus.langchain4j.pgvector.dimension property to your application.properties file and set it to the dimension of the vector. The dimension depends on the embedding model you use. +For example, AllMiniLmL6V2QuantizedEmbeddingModel produces vectors of dimension 384. OpenAI’s text-embedding-ada-002 produces vectors of dimension 1536. +
+
+
+

Upon installing the extension, you can utilize the pgvector store using the following code:

+
+
+
+
package io.quarkiverse.langchain4j.samples;
+
+import static dev.langchain4j.data.document.splitter.DocumentSplitters.recursive;
+
+import java.util.List;
+
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+
+import dev.langchain4j.data.document.Document;
+import dev.langchain4j.model.embedding.EmbeddingModel;
+import dev.langchain4j.store.embedding.EmbeddingStoreIngestor;
+import io.quarkiverse.langchain4j.pgvector.PgVectorEmbeddingStore;
+
+@ApplicationScoped
+public class IngestorExampleWithPgvector {
+
+    /**
+     * The embedding store (the database).
+     * The bean is provided by the quarkus-langchain4j-pgvector extension.
+     */
+    @Inject
+    PgVectorEmbeddingStore store;
+
+    /**
+     * The embedding model (how is computed the vector of a document).
+     * The bean is provided by the LLM (like openai) extension.
+     */
+    @Inject
+    EmbeddingModel embeddingModel;
+
+    public void ingest(List<Document> documents) {
+        EmbeddingStoreIngestor ingestor = EmbeddingStoreIngestor.builder()
+                .embeddingStore(store)
+                .embeddingModel(embeddingModel)
+                .documentSplitter(recursive(500, 0))
+                .build();
+        // Warning - this can take a long time...
+        ingestor.ingest(documents);
+    }
+}
+
+
+
+
+
+

Configuration Settings

+
+
+

Customize the behavior of the extension by exploring various configuration options:

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The name of the configured Postgres datasource to use for this store. If not set, the default datasource from the Agroal extension will be used.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_PGVECTOR_DATASOURCE

+
+
+

string

+
+
+
+

The table name for storing embeddings

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_PGVECTOR_TABLE

+
+
+

string

embeddings

+
+
+
+

The dimension of the embedding vectors. This has to be the same as the dimension of vectors produced by the embedding model that you use. For example, AllMiniLmL6V2QuantizedEmbeddingModel produces vectors of dimension 384. OpenAI’s text-embedding-ada-002 produces vectors of dimension 1536.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_PGVECTOR_DIMENSION

+
+
+

int

required

+
+
+
+

Use index or not

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_PGVECTOR_USE_INDEX

+
+
+

boolean

false

+
+
+
+

index size

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_PGVECTOR_INDEX_LIST_SIZE

+
+
+

int

0

+
+
+
+

Create table or not

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_PGVECTOR_CREATE_TABLE

+
+
+

boolean

true

+
+
+
+

Drop table or not

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_PGVECTOR_DROP_TABLE_FIRST

+
+
+

boolean

false

+
+
+
+

Under the Hood

+
+
+

Each ingested document is saved as a row in a Postgres table, containing the embedding column stored as a vector.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-langchain4j/dev/pinecone-store.html b/quarkus-langchain4j/dev/pinecone-store.html new file mode 100644 index 0000000000..f58fe71816 --- /dev/null +++ b/quarkus-langchain4j/dev/pinecone-store.html @@ -0,0 +1,1263 @@ + + + + + + Pinecone Store for Retrieval Augmented Generation (RAG) :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Pinecone Store for Retrieval Augmented Generation (RAG)

+
+
+
+

When implementing Retrieval Augmented Generation (RAG), a robust document store is crucial. This guide demonstrates how to leverage a Pinecone database as the document store.

+
+
+
+
+

Leveraging the Pinecone Document Store

+
+
+

To make use of the Pinecone document store, you’ll need to include the following dependency:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.langchain4j</groupId>
+    <artifactId>quarkus-langchain4j-pinecone</artifactId>
+</dependency>
+
+
+
+
+
+

Configuration Settings

+
+
+

Customize the behavior of the extension by exploring various configuration options:

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The API key to Pinecone.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_PINECONE_API_KEY

+
+
+

string

required

+
+
+
+

Environment name, e.g. gcp-starter or northamerica-northeast1-gcp.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_PINECONE_ENVIRONMENT

+
+
+

string

required

+
+
+
+

ID of the project.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_PINECONE_PROJECT_ID

+
+
+

string

required

+
+
+
+

Name of the index within the project. If the index doesn’t exist, it will be created.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_PINECONE_INDEX_NAME

+
+
+

string

required

+
+
+
+

Dimension of the embeddings in the index. This is required only in case that the index doesn’t exist yet and needs to be created.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_PINECONE_DIMENSION

+
+
+

int

+
+
+
+

The type of the pod to use. This is only used if the index doesn’t exist yet and needs to be created. The format: One of s1, p1, or p2 appended with . and one of x1, x2, x4, or x8.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_PINECONE_POD_TYPE

+
+
+

string

s1.x1

+
+
+
+

The timeout duration for the index to become ready. Only relevant if the index doesn’t exist yet and needs to be created. If not specified, 1 minute will be used.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_PINECONE_INDEX_READINESS_TIMEOUT

+
+
+

Duration +

+
+
+
+

The namespace.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_PINECONE_NAMESPACE

+
+
+

string

+
+
+
+

The name of the field that contains the text segment.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_PINECONE_TEXT_FIELD_NAME

+
+
+

string

text

+
+
+
+

The timeout duration for the Pinecone client. If not specified, 5 seconds will be used.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_PINECONE_TIMEOUT

+
+
+

Duration +

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-langchain4j/dev/prompt-engineering.html b/quarkus-langchain4j/dev/prompt-engineering.html new file mode 100644 index 0000000000..f1ce54189f --- /dev/null +++ b/quarkus-langchain4j/dev/prompt-engineering.html @@ -0,0 +1,1202 @@ + + + + + + Prompt engineering techniques :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Prompt engineering techniques

+
+
+
+

Prompt engineering involves crafting inputs for language models to elicit specific behaviors or responses. +It plays a pivotal role in directing the sequence of actions and outcomes generated by the model.

+
+
+

This page lists a few techniques that can be used to guide the model in performing specific tasks or sequences of actions.

+
+
+
+
+

Input delimiters

+
+
+

Input delimiters play a vital role in structuring the instructions for the language model. They mark the boundaries between different sections or segments of the prompt, guiding the model in processing distinct pieces of information.

+
+
+

For instance, hyphens (---) or similar markers delineate various components within the prompt, aiding the model in discerning user input, intermediate steps, and the final actions to be executed.

+
+
+
+
Objective: Write a summary of the text delimited by ---
+
+---
+{text}
+---
+
+
+
+

Text is the user text (method parameter in an AI Service). +Input delimiters also avoids prompt injections.

+
+
+
+
+

Few-Shot techniques

+
+
+

Few-shot learning techniques are instrumental in training models to comprehend and generate output based on a limited number of examples or demonstrations. +This approach involves presenting the model with a handful of examples, allowing it to generalize and adapt to similar scenarios.

+
+
+

By strategically crafting a few-shot prompt that includes diverse yet concise samples of the desired actions, one can guide the model to understand and execute tasks based on the provided exemplars.

+
+
+

Using a few-shot technique guides a model to understand sentiment analysis based on minimal examples:

+
+
+
+
Provide sentiment labels for the statements delimited by ---
+The response must be either 'Positive', 'Neutral', or 'Negative'.
+
+Here are a few examples:
+- 'I love this product' - Positive
+- 'Not bad, but could be better' - Neutral
+- 'I'm thoroughly disappointed' - Negative
+
+---
+{text}
+---
+
+
+
+

In this example, the model is presented with a few labeled statements to learn sentiment analysis, followed by a new {text} to analyze.

+
+
+
+
+

Passing a list of actions

+
+
+

To instruct a language model to perform a sequence of actions, a carefully structured prompt containing a list of actions is essential. This involves delineating each action along with its associated tool and parameters within the prompt.

+
+
+

For example, a structured list could entail a set of instructions such as:

+
+
+
+
Action 1: Tool A with parameters X, Y
+Action 2: Tool B with parameters Z
+Action 3: Tool C with parameter W
+
+
+
+

Guiding the model through a well-defined sequence of actions within the prompt facilitates the execution of a chain of tasks or tools.

+
+
+

For example:

+
+
+
+
Objective: Perform a series of data processing tasks:
+
+Task 1: CleanData with parameters {method: 'standard', missing_values: 'drop'}
+Task 2: ScaleData with parameters {method: 'min-max', feature_range: (0, 1)}
+Task 3: ApplyModel with parameters {model: 'random-forest', features: 'all'}"
+
+
+
+

Here, the prompt instructs the model to execute a sequence of data processing task involving data cleaning, scaling, and model application. +Each task is defined by a tool and its associated parameters.

+
+
+
+
+

Asking for a specific JSON format

+
+
+

Prompt engineering can also involve requesting specific structured data formats, such as JSON, from the language model. +In this scenario, specifying the expected JSON keys aids the model in generating the desired output structure:

+
+
+
+
Objective: Generate a JSON response with specific keys:
+
+JSON Structure:
+{
+    'name': 'String',
+    'age': 'Number',
+    'email': 'String',
+    'address': {
+        'street': 'String',
+        'city': 'String',
+        'zip_code': 'String'
+    }
+}
+
+Provided Data: John Doe, 30, john@example.com, 123 Main St, New York, 10001
+
+
+
+

In this example, the prompt specifies the expected structure for the JSON response, comprising keys like name, age, email, and address, with their respective value types. The Provided Data segment serves as the input to be formatted into the requested JSON structure.

+
+
+

Being able to describe the JSON output is essential when an AI method returns an object.

+
+
+

Even if a JSON format is not directly provided by the developer in the prompt, the LangChain4j will automatically add it, and the Quarkus LangChain4j extension will use the JSON structure to create an instance of the return type.

+
+
+

In this case, when working with JSON formats, it’s good to specify this fact in a prompt and always ask for a valid and unwrapped JSON, for example:

+
+
+
+
You must respond in a valid JSON format.
+You must not wrap JSON response in backticks, markdown, or in any other way, but return it as plain text.
+
+
+
+
+
+

Control tokens and prefixes

+
+
+

Control tokens or prefixes within prompts guide the model’s behavior. For example:

+
+
+
+
Answer: What is the capital of France?
+
+
+
+

Here, the prefix Answer: directs the model to provide the solution to the question that follows.

+
+
+
+
+

Domain-specific language and vocabulary

+
+
+

Using domain-specific language or vocabulary in prompts enhances the model’s understanding within a specific domain. +For instance:

+
+
+
+
Medicine: List the symptoms and treatment for strep throat.
+
+
+
+

Employing domain-specific terms like Medicine ensures the model addresses medical-related queries specifically. +These techniques offer additional methods to direct language models effectively, providing further insight and control over their output.

+
+
+
+
+

Giving a role to the AI

+
+
+

In relation to the previous technique, giving a role to the AI is a technique that involves assigning a specific role to the language model, such as a teacher, student, or assistant. +This is generally done in the system message to guide the model’s behavior:

+
+
+
+
@SystemMessage("""
+    You are a bank account fraud detection AI. You have to detect frauds in transactions.
+""")
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-langchain4j/dev/redis-store.html b/quarkus-langchain4j/dev/redis-store.html new file mode 100644 index 0000000000..68368719bf --- /dev/null +++ b/quarkus-langchain4j/dev/redis-store.html @@ -0,0 +1,1294 @@ + + + + + + Redis Document Store for Retrieval Augmented Generation (RAG) :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Redis Document Store for Retrieval Augmented Generation (RAG)

+
+
+
+

When implementing Retrieval Augmented Generation (RAG), a capable document store is necessary. This guide will explain how to leverage a Redis database as the document store.

+
+
+
+
+

Leveraging the Redis Document Store

+
+
+

To utilize the Redis document store, you’ll need to include the following dependency:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.langchain4j</groupId>
+    <artifactId>quarkus-langchain4j-redis</artifactId>
+    <version>0.9.0</version>
+</dependency>
+
+
+
+

This extension relies on the Quarkus Redis client. Ensure the default Redis datasource is configured appropriately. For detailed guidance, refer to the Quarkus Redis Quickstart and the Quarkus Redis Reference.

+
+
+ + + + + +
+ + +The Redis document store’s functionality is built on the Redis JSON and Redis Search modules. Ensure these modules are installed, or consider using the Redis Stack. When the quarkus-langchain4j-redis extension is present, the default image used for Redis is redis-stack:latest but this can be changed by setting quarkus.redis.devservices.image-name=someotherimage in your application.properties file. +
+
+
+ + + + + +
+ + +The Redis document store requires the dimension of the vector to be set. Add the quarkus.langchain4j.redis.dimension property to your application.properties file and set it to the dimension of the vector. The dimension depends on the embedding model you use. +For example, AllMiniLmL6V2QuantizedEmbeddingModel produces vectors of dimension 384. OpenAI’s text-embedding-ada-002 produces vectors of dimension 1536. +
+
+
+

Upon installing the extension, you can utilize the Redis document store using the following code:

+
+
+
+
package io.quarkiverse.langchain4j.samples;
+
+import static dev.langchain4j.data.document.splitter.DocumentSplitters.recursive;
+
+import java.util.List;
+
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+
+import dev.langchain4j.data.document.Document;
+import dev.langchain4j.model.embedding.EmbeddingModel;
+import dev.langchain4j.store.embedding.EmbeddingStoreIngestor;
+import io.quarkiverse.langchain4j.redis.RedisEmbeddingStore;
+
+@ApplicationScoped
+public class IngestorExampleWithRedis {
+
+    /**
+     * The embedding store (the database).
+     * The bean is provided by the quarkus-langchain4j-redis extension.
+     */
+    @Inject
+    RedisEmbeddingStore store;
+
+    /**
+     * The embedding model (how is computed the vector of a document).
+     * The bean is provided by the LLM (like openai) extension.
+     */
+    @Inject
+    EmbeddingModel embeddingModel;
+
+    public void ingest(List<Document> documents) {
+        EmbeddingStoreIngestor ingestor = EmbeddingStoreIngestor.builder()
+                .embeddingStore(store)
+                .embeddingModel(embeddingModel)
+                .documentSplitter(recursive(500, 0))
+                .build();
+        // Warning - this can take a long time...
+        ingestor.ingest(documents);
+    }
+}
+
+
+
+
+
+

Configuration Settings

+
+
+

By default, the extension utilizes the default Redis datasource for storing and indexing the documents. Customize the behavior of the extension by exploring various configuration options:

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The name of the Redis client to use. These clients are configured by means of the redis-client extension. If unspecified, it will use the default Redis client.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_REDIS_CLIENT_NAME

+
+
+

string

+
+
+
+

The dimension of the embedding vectors. This has to be the same as the dimension of vectors produced by the embedding model that you use. For example, AllMiniLmL6V2QuantizedEmbeddingModel produces vectors of dimension 384. OpenAI’s text-embedding-ada-002 produces vectors of dimension 1536.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_REDIS_DIMENSION

+
+
+

long

required

+
+
+
+

Name of the index that will be used in Redis when searching for related embeddings. If this index doesn’t exist, it will be created.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_REDIS_INDEX_NAME

+
+
+

string

embedding-index

+
+
+
+

Names of extra fields that will be stored in Redis along with the embedding vectors. This corresponds to keys in the dev.langchain4j.data.document.Metadata map. Storing embeddings with metadata fields unlisted here is possible, but these fields will then not be present in the returned EmbeddingMatch objects.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_REDIS_METADATA_FIELDS

+
+
+

list of string

+
+
+
+

Metric used to compute the distance between two vectors.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_REDIS_DISTANCE_METRIC

+
+
+
+

l2, ip, cosine

+

cosine

+
+
+
+

Name of the key that will be used to store the embedding vector.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_REDIS_VECTOR_FIELD_NAME

+
+
+

string

vector

+
+
+
+

Name of the key that will be used to store the embedded text.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_REDIS_SCALAR_FIELD_NAME

+
+
+

string

scalar

+
+
+
+

Prefix to be applied to all keys by the embedding store. Embeddings are stored in Redis under a key that is the concatenation of this prefix and the embedding ID.

+
+
+

If the configured prefix does not ends with :, it will be added automatically to follow the Redis convention.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_REDIS_PREFIX

+
+
+

string

embedding:

+
+
+
+

Algorithm used to index the embedding vectors.

+
+
+

Environment variable: QUARKUS_LANGCHAIN4J_REDIS_VECTOR_ALGORITHM

+
+
+
+

flat, hnsw

+

hnsw

+
+
+
+

Under the Hood

+
+
+

Each ingested document is saved as a JSON document in Redis, containing the embedding stored as a vector. The document store also generates an index for each ingested document. To retrieve relevant documents, the extension employs the Redis search command.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-langchain4j/dev/retrievers.html b/quarkus-langchain4j/dev/retrievers.html new file mode 100644 index 0000000000..1d0c62b479 --- /dev/null +++ b/quarkus-langchain4j/dev/retrievers.html @@ -0,0 +1,1269 @@ + + + + + + Document Retrieval for Language Models :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Document Retrieval for Language Models

+
+
+
+

Many applications involving Large Language Models (LLMs) often require user-specific data beyond their training set, such as CSV files, data from various sources, or reports. To achieve this, the process of Retrieval Augmented Generation (RAG) is commonly employed.

+
+
+
+
+

Understanding the Data Ingestion Journey

+
+
+

Before delving into the RAG process, it’s crucial to delineate two distinct phases:

+
+
+
+
The Data Ingestion Process
+
+

Involves data collection, cleaning, transformation, and adding metadata, resulting in a set of vectorized documents stored in a database.

+
+
The RAG Process
+
+

Before engaging with the LLM, it seeks relevant documents in the database and passes them for model augmentation.

+
+
+
+
+
+chatbot architecture +
+
+
+
+
+

Unveiling Embeddings

+
+
+

Embeddings denote data representations, typically in a lower-dimensional space (arrays of floats), preserving essential characteristics of the original data. In the realm of language or text, word embeddings represent words as numerical vectors in a continuous space.

+
+
+ + + + + +
+ + +
Why Use Vectors/Embeddings?
+Efficiently comparing documents to user queries during the RAG process, a crucial step in finding relevant documents, relies on computing similarity (or distance) between documents and queries. Vectorizing documents significantly speeds up this process. +
+
+
+
+
+

The Ingestion Process

+
+
+

The ingestion process varies based on the data source, operating as a one-shot or continuous process, possibly within a data streaming architecture where each message is treated as a document.

+
+
+

To illustrate document creation, the following code exemplifies creating a Document from a text file:

+
+
+
+
package io.quarkiverse.langchain4j.samples;
+
+import static dev.langchain4j.data.document.loader.FileSystemDocumentLoader.loadDocument;
+
+import java.io.File;
+
+import dev.langchain4j.data.document.Document;
+import dev.langchain4j.data.document.parser.TextDocumentParser;
+
+public class DocumentFromTextCreationExample {
+
+    Document createDocument(File file) {
+        return loadDocument(file.toPath(), new TextDocumentParser());
+    }
+}
+
+
+
+

A more complex scenario involves creating a Document from a CSV line:

+
+
+
+
package io.quarkiverse.langchain4j.samples;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import dev.langchain4j.data.document.Document;
+import dev.langchain4j.data.document.Metadata;
+
+public class DocumentCreationExample {
+
+    Document createFromCSVLine(List<String> headers, List<String> line,
+            List<String> columnsToIncludeInMetadata) {
+        Map<String, String> metadata = new HashMap<>();
+        var content = new StringBuilder();
+        for (int i = 0; i < headers.size(); i++) {
+            var columnName = headers.get(i);
+            var value = line.get(i).trim();
+
+            if (columnName.trim().isEmpty()) {
+                continue;
+            }
+
+            if (columnsToIncludeInMetadata.contains(columnName)) {
+                metadata.put(columnName, value);
+            }
+            // We compute a Text format for the CSV line: key: value, key: value, ...
+            content.append(columnName).append(": ").append(value).append(", ");
+        }
+        // The \n is added to the end of the content
+        return new Document(content.append("\n").toString(), Metadata.from(metadata));
+    }
+
+}
+
+
+
+

Following document creation, the documents need to be ingested. The Quarkus LangChain4j extension offers ingestor components for database storage. +For instance, quarkus-langchain4j-redis stores data in a Redis database, while quarkus-langchain4j-chroma uses a Chroma database.

+
+
+

The following code demonstrates document ingestion in a Redis database:

+
+
+
+
package io.quarkiverse.langchain4j.samples;
+
+import static dev.langchain4j.data.document.splitter.DocumentSplitters.recursive;
+
+import java.util.List;
+
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+
+import dev.langchain4j.data.document.Document;
+import dev.langchain4j.model.embedding.EmbeddingModel;
+import dev.langchain4j.store.embedding.EmbeddingStoreIngestor;
+import io.quarkiverse.langchain4j.redis.RedisEmbeddingStore;
+
+@ApplicationScoped
+public class IngestorExampleWithRedis {
+
+    /**
+     * The embedding store (the database).
+     * The bean is provided by the quarkus-langchain4j-redis extension.
+     */
+    @Inject
+    RedisEmbeddingStore store;
+
+    /**
+     * The embedding model (how is computed the vector of a document).
+     * The bean is provided by the LLM (like openai) extension.
+     */
+    @Inject
+    EmbeddingModel embeddingModel;
+
+    public void ingest(List<Document> documents) {
+        EmbeddingStoreIngestor ingestor = EmbeddingStoreIngestor.builder()
+                .embeddingStore(store)
+                .embeddingModel(embeddingModel)
+                .documentSplitter(recursive(500, 0))
+                .build();
+        // Warning - this can take a long time...
+        ingestor.ingest(documents);
+    }
+}
+
+
+
+

Adjust the documentSplitter parameter based on the data structure. +For instance, for CSV files with document representation separated by \n, new DocumentByLineSplitter(500, 0) is a recommended starting point.

+
+
+
+
+

Retrieval Augmented Generation (RAG)

+
+
+

Once documents are ingested, they can augment the LLM’s capabilities. The following code illustrates the creation of a RetrievalAugmentor:

+
+
+
+
package io.quarkiverse.langchain4j.samples;
+
+import java.util.function.Supplier;
+
+import jakarta.inject.Singleton;
+
+import dev.langchain4j.model.embedding.EmbeddingModel;
+import dev.langchain4j.rag.DefaultRetrievalAugmentor;
+import dev.langchain4j.rag.RetrievalAugmentor;
+import dev.langchain4j.rag.content.retriever.EmbeddingStoreContentRetriever;
+import io.quarkiverse.langchain4j.redis.RedisEmbeddingStore;
+
+@Singleton
+public class RetrievalAugmentorExample implements Supplier<RetrievalAugmentor> {
+
+    private final RetrievalAugmentor augmentor;
+
+    RetrievalAugmentorExample(RedisEmbeddingStore store, EmbeddingModel model) {
+        EmbeddingStoreContentRetriever contentRetriever = EmbeddingStoreContentRetriever.builder()
+                .embeddingModel(model)
+                .embeddingStore(store)
+                .maxResults(3)
+                .build();
+        augmentor = DefaultRetrievalAugmentor
+                .builder()
+                .contentRetriever(contentRetriever)
+                .build();
+    }
+
+    @Override
+    public RetrievalAugmentor get() {
+        return augmentor;
+    }
+
+}
+
+
+
+ + + + + +
+ + +This is the simplest example of retrieval augmentor, which only uses a +EmbeddingStoreContentRetriever to retrieve documents from an embedding +store to pass them directly to the LLM. A retrieval augmentor can use more +sophisticated strategies to process queries, such as query compression, +splitting a query into multiple queries and then routing them via different +content retrievers (which may or may not be based on vector storage, but for +example on a full-text search engine), using a scoring model to further +filter the retrieved results, etc. For more information about advanced RAG +strategies, refer to https://docs.langchain4j.dev/tutorials/rag/. +
+
+
+

The example above is a CDI bean that implements +Supplier<RetrievalAugmentor>. An alternative way to wire things up is to +create a CDI bean that directly implements RetrievalAugmentor, for example +via a CDI producer, and letting Quarkus auto-discover it (by not specifying +the retrievalAugmentor parameter of the @RegisterAiService annotation).

+
+
+

The EmbeddingStoreContentRetriever necessitates a configured embedding store +(Redis, Chroma, etc.) and an embedding model. Configure the maximum number +of documents to retrieve (e.g., 3 in the example) and set the minimum +relevance score if required.

+
+
+

Make sure that the number of documents is not too high (or document too large). +More document you have, more data you are adding to the LLM context, and you may exceed the limit.

+
+
+

An AI service does not use a retrieval augmentor by default, one needs to be configured explicitly via the retrievalAugmentor property of @RegisterAiService and the configured +Supplier<RetrievalAugmentor> is expected to be a CDI bean.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-logging-json/dev/includes/attributes.html b/quarkus-logging-json/dev/includes/attributes.html new file mode 100644 index 0000000000..b2c9d7a181 --- /dev/null +++ b/quarkus-logging-json/dev/includes/attributes.html @@ -0,0 +1,912 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-logging-json/dev/includes/quarkus-log-json.html b/quarkus-logging-json/dev/includes/quarkus-log-json.html new file mode 100644 index 0000000000..f0d6c4070f --- /dev/null +++ b/quarkus-logging-json/dev/includes/quarkus-log-json.html @@ -0,0 +1,1720 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Determine whether to enable the JSON console formatting extension, which disables "normal" console formatting.

+
+
+

Environment variable: QUARKUS_LOG_JSON_CONSOLE_ENABLE

+
+
+

boolean

true

+
+
+
+

Determine whether to enable the JSON file formatting extension, which disables "normal" file formatting.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FILE_ENABLE

+
+
+

boolean

false

+
+
+
+

Used to wrap arguments in an json object, with this fieldName on root json.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_ARGUMENTS_FIELD_NAME

+
+
+

string

+
+
+
+

Enable output of structured logging arguments StructuredArgument, default is true.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_ARGUMENTS_INCLUDE_STRUCTURED_ARGUMENTS

+
+
+

boolean

true

+
+
+
+

Enable output of non structured logging arguments, default is false.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_ARGUMENTS_INCLUDE_NON_STRUCTURED_ARGUMENTS

+
+
+

boolean

false

+
+
+
+

What prefix to use, when outputting non structured arguments. Default is arg, example key for first argument will be arg0.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_ARGUMENTS_NON_STRUCTURED_ARGUMENTS_FIELD_PREFIX

+
+
+

string

arg

+
+
+
+

Used to change the json key for the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_TIMESTAMP_FIELD_NAME

+
+
+

string

+
+
+
+

The date format to use. The special string "default" indicates that the default format should be used.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_TIMESTAMP_DATE_FORMAT

+
+
+

string

default

+
+
+
+

The zone to use when formatting the timestamp.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_TIMESTAMP_ZONE_ID

+
+
+

string

default

+
+
+
+

Enable or disable the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_TIMESTAMP_ENABLED

+
+
+

boolean

+
+
+
+

Used to change the json key for the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_HOSTNAME_FIELD_NAME

+
+
+

string

+
+
+
+

Enable or disable the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_HOSTNAME_ENABLED

+
+
+

boolean

+
+
+
+

Used to change the json key for the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_SEQUENCE_FIELD_NAME

+
+
+

string

+
+
+
+

Enable or disable the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_SEQUENCE_ENABLED

+
+
+

boolean

+
+
+
+

Used to change the json key for the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_LOGGER_CLASS_NAME_FIELD_NAME

+
+
+

string

+
+
+
+

Enable or disable the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_LOGGER_CLASS_NAME_ENABLED

+
+
+

boolean

+
+
+
+

Used to change the json key for the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_LOGGER_NAME_FIELD_NAME

+
+
+

string

+
+
+
+

Enable or disable the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_LOGGER_NAME_ENABLED

+
+
+

boolean

+
+
+
+

Used to change the json key for the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_LEVEL_FIELD_NAME

+
+
+

string

+
+
+
+

Enable or disable the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_LEVEL_ENABLED

+
+
+

boolean

+
+
+
+

Used to change the json key for the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_MESSAGE_FIELD_NAME

+
+
+

string

+
+
+
+

Enable or disable the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_MESSAGE_ENABLED

+
+
+

boolean

+
+
+
+

Used to change the json key for the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_THREAD_NAME_FIELD_NAME

+
+
+

string

+
+
+
+

Enable or disable the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_THREAD_NAME_ENABLED

+
+
+

boolean

+
+
+
+

Used to change the json key for the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_THREAD_ID_FIELD_NAME

+
+
+

string

+
+
+
+

Enable or disable the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_THREAD_ID_ENABLED

+
+
+

boolean

+
+
+
+

Used to change the json key for the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_MDC_FIELD_NAME

+
+
+

string

+
+
+
+

Enable or disable the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_MDC_ENABLED

+
+
+

boolean

+
+
+
+

Will write the values at the top level of the JSON log object.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_MDC_FLAT_FIELDS

+
+
+

boolean

false

+
+
+
+

Used to change the json key for the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_NDC_FIELD_NAME

+
+
+

string

+
+
+
+

Enable or disable the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_NDC_ENABLED

+
+
+

boolean

+
+
+
+

Used to change the json key for the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_PROCESS_NAME_FIELD_NAME

+
+
+

string

+
+
+
+

Enable or disable the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_PROCESS_NAME_ENABLED

+
+
+

boolean

+
+
+
+

Used to change the json key for the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_PROCESS_ID_FIELD_NAME

+
+
+

string

+
+
+
+

Enable or disable the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_PROCESS_ID_ENABLED

+
+
+

boolean

+
+
+
+

Used to change the json key for the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_STACK_TRACE_FIELD_NAME

+
+
+

string

+
+
+
+

Enable or disable the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_STACK_TRACE_ENABLED

+
+
+

boolean

+
+
+
+

Used to change the json key for the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_ERROR_TYPE_FIELD_NAME

+
+
+

string

+
+
+
+

Enable or disable the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_ERROR_TYPE_ENABLED

+
+
+

boolean

+
+
+
+

Used to change the json key for the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_ERROR_MESSAGE_FIELD_NAME

+
+
+

string

+
+
+
+

Enable or disable the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_ERROR_MESSAGE_ENABLED

+
+
+

boolean

+
+
+
+

Enable "pretty printing" of the JSON record. Note that some JSON parsers will fail to read pretty printed output.

+
+
+

Environment variable: QUARKUS_LOG_JSON_PRETTY_PRINT

+
+
+

boolean

false

+
+
+
+

The special end-of-record delimiter to be used. By default, newline delimiter is used.

+
+
+

Environment variable: QUARKUS_LOG_JSON_RECORD_DELIMITER

+
+
+

string

` +`

+
+
+
+

Support changing logging format.

+
+
+

Environment variable: QUARKUS_LOG_JSON_LOG_FORMAT

+
+
+
+

default, ecs

+

default

For adding fields to the json output directly from the config

Type

Default

+
+
+
+

Additional field value.

+
+
+

Environment variable: QUARKUS_LOG_JSON_ADDITIONAL_FIELD__FIELD_NAME__VALUE

+
+
+

string

required

+
+
+
+

Type of the field, default is STRING. Supported types: STRING, INT, LONG, FLOAT, DOUBLE.

+
+
+

Environment variable: QUARKUS_LOG_JSON_ADDITIONAL_FIELD__FIELD_NAME__TYPE

+
+
+
+

string, int, long, float, double

+

string

+
+
+
+
+ + + + + + + diff --git a/quarkus-logging-json/dev/index.html b/quarkus-logging-json/dev/index.html new file mode 100644 index 0000000000..97f20a6414 --- /dev/null +++ b/quarkus-logging-json/dev/index.html @@ -0,0 +1,1755 @@ + + + + + + Quarkus Logging JSON :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Logging JSON

+
+
+
+

Quarkus logging extension outputting the logging in JSON.

+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the quarkus-logging-json extension first. +In your pom.xml file, add:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.loggingjson</groupId>
+    <artifactId>quarkus-logging-json</artifactId>
+    <version>3.0.0</version>
+</dependency>
+
+
+
+
+
+

Extension Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Determine whether to enable the JSON console formatting extension, which disables "normal" console formatting.

+
+
+

Environment variable: QUARKUS_LOG_JSON_CONSOLE_ENABLE

+
+
+

boolean

true

+
+
+
+

Determine whether to enable the JSON file formatting extension, which disables "normal" file formatting.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FILE_ENABLE

+
+
+

boolean

false

+
+
+
+

Used to wrap arguments in an json object, with this fieldName on root json.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_ARGUMENTS_FIELD_NAME

+
+
+

string

+
+
+
+

Enable output of structured logging arguments StructuredArgument, default is true.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_ARGUMENTS_INCLUDE_STRUCTURED_ARGUMENTS

+
+
+

boolean

true

+
+
+
+

Enable output of non structured logging arguments, default is false.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_ARGUMENTS_INCLUDE_NON_STRUCTURED_ARGUMENTS

+
+
+

boolean

false

+
+
+
+

What prefix to use, when outputting non structured arguments. Default is arg, example key for first argument will be arg0.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_ARGUMENTS_NON_STRUCTURED_ARGUMENTS_FIELD_PREFIX

+
+
+

string

arg

+
+
+
+

Used to change the json key for the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_TIMESTAMP_FIELD_NAME

+
+
+

string

+
+
+
+

The date format to use. The special string "default" indicates that the default format should be used.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_TIMESTAMP_DATE_FORMAT

+
+
+

string

default

+
+
+
+

The zone to use when formatting the timestamp.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_TIMESTAMP_ZONE_ID

+
+
+

string

default

+
+
+
+

Enable or disable the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_TIMESTAMP_ENABLED

+
+
+

boolean

+
+
+
+

Used to change the json key for the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_HOSTNAME_FIELD_NAME

+
+
+

string

+
+
+
+

Enable or disable the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_HOSTNAME_ENABLED

+
+
+

boolean

+
+
+
+

Used to change the json key for the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_SEQUENCE_FIELD_NAME

+
+
+

string

+
+
+
+

Enable or disable the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_SEQUENCE_ENABLED

+
+
+

boolean

+
+
+
+

Used to change the json key for the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_LOGGER_CLASS_NAME_FIELD_NAME

+
+
+

string

+
+
+
+

Enable or disable the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_LOGGER_CLASS_NAME_ENABLED

+
+
+

boolean

+
+
+
+

Used to change the json key for the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_LOGGER_NAME_FIELD_NAME

+
+
+

string

+
+
+
+

Enable or disable the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_LOGGER_NAME_ENABLED

+
+
+

boolean

+
+
+
+

Used to change the json key for the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_LEVEL_FIELD_NAME

+
+
+

string

+
+
+
+

Enable or disable the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_LEVEL_ENABLED

+
+
+

boolean

+
+
+
+

Used to change the json key for the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_MESSAGE_FIELD_NAME

+
+
+

string

+
+
+
+

Enable or disable the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_MESSAGE_ENABLED

+
+
+

boolean

+
+
+
+

Used to change the json key for the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_THREAD_NAME_FIELD_NAME

+
+
+

string

+
+
+
+

Enable or disable the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_THREAD_NAME_ENABLED

+
+
+

boolean

+
+
+
+

Used to change the json key for the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_THREAD_ID_FIELD_NAME

+
+
+

string

+
+
+
+

Enable or disable the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_THREAD_ID_ENABLED

+
+
+

boolean

+
+
+
+

Used to change the json key for the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_MDC_FIELD_NAME

+
+
+

string

+
+
+
+

Enable or disable the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_MDC_ENABLED

+
+
+

boolean

+
+
+
+

Will write the values at the top level of the JSON log object.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_MDC_FLAT_FIELDS

+
+
+

boolean

false

+
+
+
+

Used to change the json key for the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_NDC_FIELD_NAME

+
+
+

string

+
+
+
+

Enable or disable the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_NDC_ENABLED

+
+
+

boolean

+
+
+
+

Used to change the json key for the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_PROCESS_NAME_FIELD_NAME

+
+
+

string

+
+
+
+

Enable or disable the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_PROCESS_NAME_ENABLED

+
+
+

boolean

+
+
+
+

Used to change the json key for the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_PROCESS_ID_FIELD_NAME

+
+
+

string

+
+
+
+

Enable or disable the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_PROCESS_ID_ENABLED

+
+
+

boolean

+
+
+
+

Used to change the json key for the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_STACK_TRACE_FIELD_NAME

+
+
+

string

+
+
+
+

Enable or disable the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_STACK_TRACE_ENABLED

+
+
+

boolean

+
+
+
+

Used to change the json key for the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_ERROR_TYPE_FIELD_NAME

+
+
+

string

+
+
+
+

Enable or disable the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_ERROR_TYPE_ENABLED

+
+
+

boolean

+
+
+
+

Used to change the json key for the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_ERROR_MESSAGE_FIELD_NAME

+
+
+

string

+
+
+
+

Enable or disable the field.

+
+
+

Environment variable: QUARKUS_LOG_JSON_FIELDS_ERROR_MESSAGE_ENABLED

+
+
+

boolean

+
+
+
+

Enable "pretty printing" of the JSON record. Note that some JSON parsers will fail to read pretty printed output.

+
+
+

Environment variable: QUARKUS_LOG_JSON_PRETTY_PRINT

+
+
+

boolean

false

+
+
+
+

The special end-of-record delimiter to be used. By default, newline delimiter is used.

+
+
+

Environment variable: QUARKUS_LOG_JSON_RECORD_DELIMITER

+
+
+

string

` +`

+
+
+
+

Support changing logging format.

+
+
+

Environment variable: QUARKUS_LOG_JSON_LOG_FORMAT

+
+
+
+

default, ecs

+

default

For adding fields to the json output directly from the config

Type

Default

+
+
+
+

Additional field value.

+
+
+

Environment variable: QUARKUS_LOG_JSON_ADDITIONAL_FIELD__FIELD_NAME__VALUE

+
+
+

string

required

+
+
+
+

Type of the field, default is STRING. Supported types: STRING, INT, LONG, FLOAT, DOUBLE.

+
+
+

Environment variable: QUARKUS_LOG_JSON_ADDITIONAL_FIELD__FIELD_NAME__TYPE

+
+
+
+

string, int, long, float, double

+

string

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-logging-logback/dev/config.html b/quarkus-logging-logback/dev/config.html new file mode 100644 index 0000000000..64566610ff --- /dev/null +++ b/quarkus-logging-logback/dev/config.html @@ -0,0 +1,1082 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Comma-separated list of absolute resource paths to scan recursively for templates. All tree folder from 'resource-paths' will be added as a resource. Unprefixed locations or locations starting with classpath will be processed in the same way.

+
+
+

list of string

freemarker/templates

+
+
+
+

Comma-separated of file system paths where freemarker templates are located

+
+
+

list of string

+
+
+
+

Set the preferred charset template files are stored in.

+
+
+

string

+
+
+
+

Sets how errors will appear. rethrow, debug, html-debug, ignore.

+
+
+

string

+
+
+
+

If false, don’t log exceptions inside FreeMarker that it will be thrown at you anyway.

+
+
+

boolean

+
+
+
+

Wrap unchecked exceptions thrown during template processing into TemplateException-s.

+
+
+

boolean

+
+
+
+

If false, do not fall back to higher scopes when reading a null loop variable.

+
+
+

boolean

+
+
+
+

The string value for the boolean true and false values, usually intended for human consumption (not for a computer language), separated with comma.

+
+
+

string

+
+
+
+

Sets the default number format used to convert numbers to strings.

+
+
+

string

+
+
+
+

If true, the object wrapper will be configured to expose fields.

+
+
+

boolean

+
+
+
+

List of directives to register with format name=classname

+
+
+

Map<String,String>

+
+
+
+
+ + + + + + + diff --git a/quarkus-logging-logback/dev/index.html b/quarkus-logging-logback/dev/index.html new file mode 100644 index 0000000000..d925e0d6e5 --- /dev/null +++ b/quarkus-logging-logback/dev/index.html @@ -0,0 +1,985 @@ + + + + + + Quarkus - Logging Logback :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus - Logging Logback

+
+
+
+

This extension allows you to use Logback to configure Quarkus logging via logback.xml. This extension parses the config +file at build time, and then bridges the resulting config with jboss-logmanager.

+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.logging.logback:quarkus-logging-logback extension first. +In your pom.xml file, add:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.logging.logback</groupId>
+    <artifactId>quarkus-logging-logback</artifactId>
+</dependency>
+
+
+
+
+
+

Technical Details

+
+
+

This extension does not actually replace jboss-logmanager as the default logging engine, instead it bridges to the two, +to allow them to co-exist. JBoss Logging is still the core logmanager for Quarkus, however any logging events it receives +are also sent to the logback and will be sent through any logback appenders.

+
+
+

Log levels for loggers are also parsed, and are used to set the default log level for the corresponding jboss-logmanager +loggers. These defaults can still be overriden however, so if you set a log level in application.properties it will take +precidence.

+
+
+

If a console appender is detected in logback.xml then the standard Quarkus console logging is disabled, to prevent double +logging of messages, otherwise it is left enabled and will work as normal.

+
+
+
+
+

Common Problems

+
+
+

Duplicate SLF4J bindings

+
+

You may see an error similar to below:

+
+
+
+
SLF4J: Class path contains multiple SLF4J bindings.
+SLF4J: Found binding in [jar:file:/home/stuart/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
+SLF4J: Found binding in [jar:file:/home/stuart/.m2/repository/org/jboss/slf4j/slf4j-jboss-logmanager/1.1.0.Final/slf4j-jboss-logmanager-1.1.0.Final.jar!/org/slf4j/impl/StaticLoggerBinder.class]
+SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
+SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]
+
+
+
+

To get around this you need to exclude the ch.qos.logback:logback-classic artifact from your project. Quarkus will automatically +bring in a modified version at runtime that has had the SLF4J binding removed. Run mvn dependency:tree to figure out what is +bringing in the artifact, and then exclude it from the pom.xml.

+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-logging-sentry/dev/includes/attributes.html b/quarkus-logging-sentry/dev/includes/attributes.html new file mode 100644 index 0000000000..9b22e39cd5 --- /dev/null +++ b/quarkus-logging-sentry/dev/includes/attributes.html @@ -0,0 +1,912 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-logging-sentry/dev/includes/quarkus-logging-sentry.html b/quarkus-logging-sentry/dev/includes/quarkus-logging-sentry.html new file mode 100644 index 0000000000..9b276a39a6 --- /dev/null +++ b/quarkus-logging-sentry/dev/includes/quarkus-logging-sentry.html @@ -0,0 +1,1217 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Determine whether to enable the Sentry logging extension.

+
+
+

Environment variable: QUARKUS_LOG_SENTRY

+
+
+

boolean

false

+
+
+
+

Sentry DSN The DSN is the first and most important thing to configure because it tells the SDK where to send events. You can find your project’s DSN in the “Client Keys” section of your “Project Settings” in Sentry.

+
+
+

Environment variable: QUARKUS_LOG_SENTRY_DSN

+
+
+

string

+
+
+
+

The sentry log level.

+
+
+

Environment variable: QUARKUS_LOG_SENTRY_LEVEL

+
+
+

Level

WARN

+
+
+
+

The minimum event level. Every log statement that is greater than minimum event level is turned into Sentry event.

+
+
+

Environment variable: QUARKUS_LOG_SENTRY_MINIMUM_EVENT_LEVEL

+
+
+

Level

WARN

+
+
+
+

The minimum breadcrumb level. Every log statement that is greater than minimum breadcrumb level is added to Sentry scope as a breadcrumb, which can be later attached to SentryEvent if one is triggered.

+
+
+

Environment variable: QUARKUS_LOG_SENTRY_MINIMUM_BREADCRUMB_LEVEL

+
+
+

Level

INFO

+
+
+
+

Sentry differentiates stack frames that are directly related to your application (“in application”) from stack frames that come from other packages such as the standard library, frameworks, or other dependencies. The difference is visible in the Sentry web interface where only the “in application” frames are displayed by default. You can configure which package prefixes your application uses with this option. This option is highly recommended as it affects stacktrace grouping and display on Sentry. See documentation: https://quarkus.io/guides/logging-sentry#in-app-packages

+
+
+

Environment variable: QUARKUS_LOG_SENTRY_IN_APP_PACKAGES

+
+
+

list of string

+
+
+
+

Environment With Sentry you can easily filter issues, releases, and user feedback by environment. The environment filter on sentry affects all issue-related metrics like count of users affected, times series graphs, and event count. By setting the environment option, an environment tag will be added to each new issue sent to Sentry. There are a few restrictions: → the environment name cannot contain newlines or spaces, cannot be the string “None” or exceed 64 characters.

+
+
+

Environment variable: QUARKUS_LOG_SENTRY_ENVIRONMENT

+
+
+

string

+
+
+
+

Release A release is a version of your code that is deployed to an environment. When you give Sentry information about your releases, you unlock a number of new features: - Determine the issues and regressions introduced in a new release - Predict which commit caused an issue and who is likely responsible - Resolve issues by including the issue number in your commit message - Receive email notifications when your code gets deployed

+
+
+

Environment variable: QUARKUS_LOG_SENTRY_RELEASE

+
+
+

string

+
+
+
+

Server name Sets the server name that will be sent with each event.

+
+
+

Environment variable: QUARKUS_LOG_SENTRY_SERVER_NAME

+
+
+

string

+
+
+
+

Debug Enables Sentry debug mode.

+
+
+

Environment variable: QUARKUS_LOG_SENTRY_DEBUG

+
+
+

boolean

false

+
+
+
+

This should be a float/double between 0.0 and 1.0 (inclusive) and represents the percentage chance that any given transaction will be sent to Sentry. So, barring outside influence, 0.0 is a 0% chance (none will be sent) and 1.0 is a 100% chance (all will be sent). This rate applies equally to all transactions.

+
+
+

Environment variable: QUARKUS_LOG_SENTRY_TRACES_SAMPLE_RATE

+
+
+

double

+
+
+
+

Context Tags Specifics the MDC tags that are used as Sentry tags

+
+
+

Environment variable: QUARKUS_LOG_SENTRY_CONTEXT_TAGS

+
+
+

list of string

+
+
+
+

Determine whether to enable a Proxy for all Sentry outbound requests. This is also used for HTTPS requests.

+
+
+

Environment variable: QUARKUS_LOG_SENTRY_PROXY

+
+
+

boolean

false

+
+
+
+

Sets the host name of the proxy server.

+
+
+

Environment variable: QUARKUS_LOG_SENTRY_PROXY_HOST

+
+
+

string

+
+
+
+

Sets the port number of the proxy server

+
+
+

Environment variable: QUARKUS_LOG_SENTRY_PROXY_PORT

+
+
+

int

+
+
+
+

Sets the username to authenticate on the proxy server

+
+
+

Environment variable: QUARKUS_LOG_SENTRY_PROXY_USERNAME

+
+
+

string

+
+
+
+

Sets the password to authenticate on the proxy server

+
+
+

Environment variable: QUARKUS_LOG_SENTRY_PROXY_PASSWORD

+
+
+

string

+
+
+
+
+ + + + + + + diff --git a/quarkus-logging-sentry/dev/index.html b/quarkus-logging-sentry/dev/index.html new file mode 100644 index 0000000000..66c1bef461 --- /dev/null +++ b/quarkus-logging-sentry/dev/index.html @@ -0,0 +1,1358 @@ + + + + + + Quarkus Logging Sentry :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Logging Sentry

+
+
+
+

This guide explains how to configure Quarkus to log to Sentry.

+
+
+
+
+

Description

+
+
+

Sentry is a really easy way to be notified of errors happening in your Quarkus application.

+
+
+

It is a self-hosted and cloud-based error monitoring that helps software teams discover, triage, and prioritize errors in real-time.

+
+
+

They offer a free starter price for cloud-based or you can self host it for free.

+
+
+ + + + + +
+ + +Sentry’s Java SDK is open source, but recently sentry.io changed the license for their backend to the non-open source BSL license. This might or might not be an issue for your project and product. +
+
+
+
+
+

Configuration

+
+
+

To start with, you need to get a Sentry DSN either by creating a Sentry account or installing your own self-hosted Sentry.

+
+
+

In order to configure Sentry logging, add the logging-sentry extension +to your project by running the following command in your project base directory:

+
+
+
+
./mvnw quarkus:add-extension -Dextensions="logging-sentry"
+
+
+
+

This will add the following to your pom.xml:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.loggingsentry</groupId>
+    <artifactId>quarkus-logging-sentry</artifactId>
+    <version>2.0.4</version>
+</dependency>
+
+
+
+

“In Application” Stack Frames

+
+

Sentry differentiates stack frames that are directly related to your application (“in application”) from stack frames that come from other packages such as the standard library, frameworks, or other dependencies. The difference is visible in the Sentry web interface where only the “in application” frames are displayed by default.

+
+
+

You can configure which package prefixes your application uses with the in-app-packages option, which takes a comma separated list of packages:

+
+
+
+
quarkus.log.sentry.in-app-packages=com.mycompany,com.other.name
+
+
+
+

If you don’t want to use this feature but want to disable the warning, simply set it to *:

+
+
+
+
quarkus.log.sentry.in-app-packages=*
+
+
+
+
+
+
+

Example

+
+
+
All errors and warnings occurring in any of the packages will be sent to Sentry with DSN https://abcd@sentry.io/1234
+
+
quarkus.log.sentry=true
+quarkus.log.sentry.dsn=https://abcd@sentry.io/1234
+quarkus.log.sentry.in-app-packages=*
+
+
+
+
All errors occurring in the package org.example will be sent to Sentry with DSN https://abcd@sentry.io/1234
+
+
quarkus.log.sentry=true
+quarkus.log.sentry.dsn=https://abcd@sentry.io/1234
+quarkus.log.sentry.level=ERROR
+quarkus.log.sentry.in-app-packages=org.example
+
+
+
+
+
+

BeforeSend callbacks

+
+
+

Sentry events can be customised before transmission using Sentry’s builtin BeforeSendCallback interface. +Any application-scoped bean marked with the interface will be called. This can be used to add data to the event as well as completely suppressing the event. +Make sure to mark beans as unremovable.

+
+
+
+
@ApplicationScoped
+@Unremovable
+public class SentryCallbackHandler implements SentryOptions.BeforeSendCallback {
+    @Override
+    public SentryEvent execute(SentryEvent sentryEvent, Hint hint) {
+        return sentryEvent; // event unchanged
+    }
+}
+
+
+
+
+
+

Configuration Reference

+
+
+

This extension is configured through the standard application.properties file.

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Determine whether to enable the Sentry logging extension.

+
+
+

Environment variable: QUARKUS_LOG_SENTRY

+
+
+

boolean

false

+
+
+
+

Sentry DSN The DSN is the first and most important thing to configure because it tells the SDK where to send events. You can find your project’s DSN in the “Client Keys” section of your “Project Settings” in Sentry.

+
+
+

Environment variable: QUARKUS_LOG_SENTRY_DSN

+
+
+

string

+
+
+
+

The sentry log level.

+
+
+

Environment variable: QUARKUS_LOG_SENTRY_LEVEL

+
+
+

Level

WARN

+
+
+
+

The minimum event level. Every log statement that is greater than minimum event level is turned into Sentry event.

+
+
+

Environment variable: QUARKUS_LOG_SENTRY_MINIMUM_EVENT_LEVEL

+
+
+

Level

WARN

+
+
+
+

The minimum breadcrumb level. Every log statement that is greater than minimum breadcrumb level is added to Sentry scope as a breadcrumb, which can be later attached to SentryEvent if one is triggered.

+
+
+

Environment variable: QUARKUS_LOG_SENTRY_MINIMUM_BREADCRUMB_LEVEL

+
+
+

Level

INFO

+
+
+
+

Sentry differentiates stack frames that are directly related to your application (“in application”) from stack frames that come from other packages such as the standard library, frameworks, or other dependencies. The difference is visible in the Sentry web interface where only the “in application” frames are displayed by default. You can configure which package prefixes your application uses with this option. This option is highly recommended as it affects stacktrace grouping and display on Sentry. See documentation: https://quarkus.io/guides/logging-sentry#in-app-packages

+
+
+

Environment variable: QUARKUS_LOG_SENTRY_IN_APP_PACKAGES

+
+
+

list of string

+
+
+
+

Environment With Sentry you can easily filter issues, releases, and user feedback by environment. The environment filter on sentry affects all issue-related metrics like count of users affected, times series graphs, and event count. By setting the environment option, an environment tag will be added to each new issue sent to Sentry. There are a few restrictions: → the environment name cannot contain newlines or spaces, cannot be the string “None” or exceed 64 characters.

+
+
+

Environment variable: QUARKUS_LOG_SENTRY_ENVIRONMENT

+
+
+

string

+
+
+
+

Release A release is a version of your code that is deployed to an environment. When you give Sentry information about your releases, you unlock a number of new features: - Determine the issues and regressions introduced in a new release - Predict which commit caused an issue and who is likely responsible - Resolve issues by including the issue number in your commit message - Receive email notifications when your code gets deployed

+
+
+

Environment variable: QUARKUS_LOG_SENTRY_RELEASE

+
+
+

string

+
+
+
+

Server name Sets the server name that will be sent with each event.

+
+
+

Environment variable: QUARKUS_LOG_SENTRY_SERVER_NAME

+
+
+

string

+
+
+
+

Debug Enables Sentry debug mode.

+
+
+

Environment variable: QUARKUS_LOG_SENTRY_DEBUG

+
+
+

boolean

false

+
+
+
+

This should be a float/double between 0.0 and 1.0 (inclusive) and represents the percentage chance that any given transaction will be sent to Sentry. So, barring outside influence, 0.0 is a 0% chance (none will be sent) and 1.0 is a 100% chance (all will be sent). This rate applies equally to all transactions.

+
+
+

Environment variable: QUARKUS_LOG_SENTRY_TRACES_SAMPLE_RATE

+
+
+

double

+
+
+
+

Context Tags Specifics the MDC tags that are used as Sentry tags

+
+
+

Environment variable: QUARKUS_LOG_SENTRY_CONTEXT_TAGS

+
+
+

list of string

+
+
+
+

Determine whether to enable a Proxy for all Sentry outbound requests. This is also used for HTTPS requests.

+
+
+

Environment variable: QUARKUS_LOG_SENTRY_PROXY

+
+
+

boolean

false

+
+
+
+

Sets the host name of the proxy server.

+
+
+

Environment variable: QUARKUS_LOG_SENTRY_PROXY_HOST

+
+
+

string

+
+
+
+

Sets the port number of the proxy server

+
+
+

Environment variable: QUARKUS_LOG_SENTRY_PROXY_PORT

+
+
+

int

+
+
+
+

Sets the username to authenticate on the proxy server

+
+
+

Environment variable: QUARKUS_LOG_SENTRY_PROXY_USERNAME

+
+
+

string

+
+
+
+

Sets the password to authenticate on the proxy server

+
+
+

Environment variable: QUARKUS_LOG_SENTRY_PROXY_PASSWORD

+
+
+

string

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-logging-splunk/dev/_images/sync-dc008dd890cf6f4d6e9052f660ce15120da7d6ed.svg b/quarkus-logging-splunk/dev/_images/sync-dc008dd890cf6f4d6e9052f660ce15120da7d6ed.svg new file mode 100644 index 0000000000..d7de5709b1 --- /dev/null +++ b/quarkus-logging-splunk/dev/_images/sync-dc008dd890cf6f4d6e9052f660ce15120da7d6ed.svg @@ -0,0 +1 @@ +ApplicationApplicationSlf4jSlf4jSplunkLogHandlerSplunkLogHandlerSplunk librarySplunk libraryHTTP clientHTTP clientSplunk HECSplunk HECApplication threadinfo(message)doPublish(record)send(record)synchronizedAdd event to batchalt[batch is full]enqueue(HTTP request)HTTP client - multiple connections in parallel mode.Peek from queueHTTP POST /services/collector/event/1.0200alt[status code != 200]handle errorsstderr.println \ No newline at end of file diff --git a/quarkus-logging-splunk/dev/includes/attributes.html b/quarkus-logging-splunk/dev/includes/attributes.html new file mode 100644 index 0000000000..37c07288b6 --- /dev/null +++ b/quarkus-logging-splunk/dev/includes/attributes.html @@ -0,0 +1,912 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-logging-splunk/dev/includes/quarkus-log-handler-splunk.html b/quarkus-logging-splunk/dev/includes/quarkus-log-handler-splunk.html new file mode 100644 index 0000000000..913247a8af --- /dev/null +++ b/quarkus-logging-splunk/dev/includes/quarkus-log-handler-splunk.html @@ -0,0 +1,1863 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Determine whether to enable the handler

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_ENABLED

+
+
+

boolean

true

+
+
+
+

The splunk handler log level. By default, it is no more strict than the root handler level.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_LEVEL

+
+
+

Level

ALL

+
+
+
+

Splunk HEC endpoint base url.

+
+
+

With raw events, the endpoint targeted is /services/collector/raw. With flat or nested JSON events, the endpoint targeted is /services/collector/event/1.0.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_URL

+
+
+

string

https://localhost:8088/

+
+
+
+

Disable TLS certificate validation with HEC endpoint

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_DISABLE_CERTIFICATE_VALIDATION

+
+
+

boolean

false

+
+
+
+

The application token to authenticate with HEC, the token is mandatory if the extension is enabled https://docs.splunk.com/Documentation/Splunk/latest/Data/FormateventsforHTTPEventCollector#HEC_token

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_TOKEN

+
+
+

string

+
+
+
+

The strategy to send events to HEC.

+
+
+

In sequential mode, there is only one HTTP connection to HEC and the order of events is preserved, but performance is lower. In parallel mode, event batches are sent asynchronously over multiple HTTP connections, and events with the same timestamp (that has 1 millisecond resolution) may be indexed out of order by Splunk.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_SEND_MODE

+
+
+
+

sequential, parallel

+

sequential

+
+
+
+

A GUID to identify an HEC client and guarantee isolation at HEC level in case of slow clients. https://docs.splunk.com/Documentation/Splunk/latest/Data/AboutHECIDXAck#About_channels_and_sending_data

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_CHANNEL

+
+
+

string

+
+
+
+

Batching delay before sending a group of events. If 0, the events are sent immediately.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_BATCH_INTERVAL

+
+
+

Duration +

10S

+
+
+
+

Maximum number of events in a batch. By default 10, if 0 no batching.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_BATCH_SIZE_COUNT

+
+
+

long

10

+
+
+
+

Maximum total size in bytes of events in a batch. By default 10KB, if 0 no batching.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_BATCH_SIZE_BYTES

+
+
+

long

10240

+
+
+
+

Maximum number of retries in case of I/O exceptions with HEC connection.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_MAX_RETRIES

+
+
+

long

0

+
+
+
+

The log format, defining which metadata are inlined inside the log main payload.

+
+
+

Specific metadata (hostname, category, thread name, …​), as well as MDC key/value map, can also be sent in a structured way.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_FORMAT

+
+
+

string

%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c{3.}] (%t) %s%e%n

+
+
+
+

Whether to send the thrown exception message as a structured metadata of the log event (as opposed to %e in a formatted message, it does not include the exception name or stacktrace). Only applicable to 'nested' serialization.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_INCLUDE_EXCEPTION

+
+
+

boolean

false

+
+
+
+

Whether to send the logger name as a structured metadata of the log event (equivalent of %c in a formatted message). Only applicable to 'nested' serialization.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_INCLUDE_LOGGER_NAME

+
+
+

boolean

false

+
+
+
+

Whether to send the thread name as a structured metadata of the log event (equivalent of %t in a formatted message). Only applicable to 'nested' serialization.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_INCLUDE_THREAD_NAME

+
+
+

boolean

false

+
+
+
+

Overrides the host name metadata value.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_METADATA_HOST

+
+
+

string

The equivalent of %h in a formatted message

+
+
+
+

The source value to assign to the event data. For example, if you’re sending data from an app you’re developing, you could set this key to the name of the app. https://docs.splunk.com/Documentation/Splunk/latest/Data/FormateventsforHTTPEventCollector#Event_metadata

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_METADATA_SOURCE

+
+
+

string

+
+
+
+

The optional format of the events, to enable some parsing on Splunk side. https://docs.splunk.com/Documentation/Splunk/latest/Data/FormateventsforHTTPEventCollector#Event_metadata

+
+
+

A given source type may have indexed fields extraction enabled, which is the case of the built-in _json used for nested serialization.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_METADATA_SOURCE_TYPE

+
+
+

string

_json for nested serialization, not set otherwise

+
+
+
+

The optional name of the index by which the event data is to be stored. If set, it must be within the list of allowed indexes of the token (if it has the indexes parameter set). https://docs.splunk.com/Documentation/Splunk/latest/Data/FormateventsforHTTPEventCollector#Event_metadata

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_METADATA_INDEX

+
+
+

string

+
+
+
+

The name of the key used to convey the severity / log level in the metadata fields. Only applicable to 'flat' serialization. With 'nested' serialization, there is already a 'severity' field.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_METADATA_SEVERITY_FIELD_NAME

+
+
+

string

severity

+
+
+
+

The format of the payload.

+
+
+
    +
  • +

    With raw serialization, the log message is sent 'as is' in the HTTP body. Metadata can only be common to a whole batch and are sent via HTTP parameters.

    +
  • +
  • +

    With nested serialization, the log message is sent into a 'message' field of a JSON structure which also contains dynamic metadata.

    +
  • +
  • +

    With flat serialization, the log message is sent into the root 'event' field. Dynamic metadata is sent via the 'fields' root object.

    +
  • +
+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_SERIALIZATION

+
+
+
+

raw, nested, flat

+

nested

+
+
+
+

Indicates whether to log asynchronously

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_ASYNC

+
+
+

boolean

false

+
+
+
+

The queue length to use before flushing writing

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_ASYNC_QUEUE_LENGTH

+
+
+

int

512

+
+
+
+

Determine whether to block the publisher (rather than drop the message) when the queue is full

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_ASYNC_OVERFLOW

+
+
+
+

block, discard

+

block

+
+
+
+

Optional static key/value pairs to populate the "fields" key of event metadata. This isn’t applicable to raw serialization. https://docs.splunk.com/Documentation/Splunk/latest/Data/FormateventsforHTTPEventCollector#Event_metadata

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_METADATA_FIELDS

+
+
+

Map<String,String>

+
+
+
+

Determine whether to enable the handler

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__ENABLED

+
+
+

boolean

true

+
+
+
+

The splunk handler log level. By default, it is no more strict than the root handler level.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__LEVEL

+
+
+

Level

ALL

+
+
+
+

Splunk HEC endpoint base url.

+
+
+

With raw events, the endpoint targeted is /services/collector/raw. With flat or nested JSON events, the endpoint targeted is /services/collector/event/1.0.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__URL

+
+
+

string

https://localhost:8088/

+
+
+
+

Disable TLS certificate validation with HEC endpoint

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__DISABLE_CERTIFICATE_VALIDATION

+
+
+

boolean

false

+
+
+
+

The application token to authenticate with HEC, the token is mandatory if the extension is enabled https://docs.splunk.com/Documentation/Splunk/latest/Data/FormateventsforHTTPEventCollector#HEC_token

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__TOKEN

+
+
+

string

+
+
+
+

The strategy to send events to HEC.

+
+
+

In sequential mode, there is only one HTTP connection to HEC and the order of events is preserved, but performance is lower. In parallel mode, event batches are sent asynchronously over multiple HTTP connections, and events with the same timestamp (that has 1 millisecond resolution) may be indexed out of order by Splunk.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__SEND_MODE

+
+
+
+

sequential, parallel

+

sequential

+
+
+
+

A GUID to identify an HEC client and guarantee isolation at HEC level in case of slow clients. https://docs.splunk.com/Documentation/Splunk/latest/Data/AboutHECIDXAck#About_channels_and_sending_data

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__CHANNEL

+
+
+

string

+
+
+
+

Batching delay before sending a group of events. If 0, the events are sent immediately.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__BATCH_INTERVAL

+
+
+

Duration +

10S

+
+
+
+

Maximum number of events in a batch. By default 10, if 0 no batching.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__BATCH_SIZE_COUNT

+
+
+

long

10

+
+
+
+

Maximum total size in bytes of events in a batch. By default 10KB, if 0 no batching.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__BATCH_SIZE_BYTES

+
+
+

long

10240

+
+
+
+

Maximum number of retries in case of I/O exceptions with HEC connection.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__MAX_RETRIES

+
+
+

long

0

+
+
+
+

The log format, defining which metadata are inlined inside the log main payload.

+
+
+

Specific metadata (hostname, category, thread name, …​), as well as MDC key/value map, can also be sent in a structured way.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__FORMAT

+
+
+

string

%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c{3.}] (%t) %s%e%n

+
+
+
+

Whether to send the thrown exception message as a structured metadata of the log event (as opposed to %e in a formatted message, it does not include the exception name or stacktrace). Only applicable to 'nested' serialization.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__INCLUDE_EXCEPTION

+
+
+

boolean

false

+
+
+
+

Whether to send the logger name as a structured metadata of the log event (equivalent of %c in a formatted message). Only applicable to 'nested' serialization.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__INCLUDE_LOGGER_NAME

+
+
+

boolean

false

+
+
+
+

Whether to send the thread name as a structured metadata of the log event (equivalent of %t in a formatted message). Only applicable to 'nested' serialization.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__INCLUDE_THREAD_NAME

+
+
+

boolean

false

+
+
+
+

Overrides the host name metadata value.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__METADATA_HOST

+
+
+

string

The equivalent of %h in a formatted message

+
+
+
+

The source value to assign to the event data. For example, if you’re sending data from an app you’re developing, you could set this key to the name of the app. https://docs.splunk.com/Documentation/Splunk/latest/Data/FormateventsforHTTPEventCollector#Event_metadata

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__METADATA_SOURCE

+
+
+

string

+
+
+
+

The optional format of the events, to enable some parsing on Splunk side. https://docs.splunk.com/Documentation/Splunk/latest/Data/FormateventsforHTTPEventCollector#Event_metadata

+
+
+

A given source type may have indexed fields extraction enabled, which is the case of the built-in _json used for nested serialization.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__METADATA_SOURCE_TYPE

+
+
+

string

_json for nested serialization, not set otherwise

+
+
+
+

The optional name of the index by which the event data is to be stored. If set, it must be within the list of allowed indexes of the token (if it has the indexes parameter set). https://docs.splunk.com/Documentation/Splunk/latest/Data/FormateventsforHTTPEventCollector#Event_metadata

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__METADATA_INDEX

+
+
+

string

+
+
+
+

Optional static key/value pairs to populate the "fields" key of event metadata. This isn’t applicable to raw serialization. https://docs.splunk.com/Documentation/Splunk/latest/Data/FormateventsforHTTPEventCollector#Event_metadata

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__METADATA_FIELDS

+
+
+

Map<String,String>

+
+
+
+

The name of the key used to convey the severity / log level in the metadata fields. Only applicable to 'flat' serialization. With 'nested' serialization, there is already a 'severity' field.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__METADATA_SEVERITY_FIELD_NAME

+
+
+

string

severity

+
+
+
+

The format of the payload.

+
+
+
    +
  • +

    With raw serialization, the log message is sent 'as is' in the HTTP body. Metadata can only be common to a whole batch and are sent via HTTP parameters.

    +
  • +
  • +

    With nested serialization, the log message is sent into a 'message' field of a JSON structure which also contains dynamic metadata.

    +
  • +
  • +

    With flat serialization, the log message is sent into the root 'event' field. Dynamic metadata is sent via the 'fields' root object.

    +
  • +
+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__SERIALIZATION

+
+
+
+

raw, nested, flat

+

nested

+
+
+
+

Indicates whether to log asynchronously

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__ASYNC

+
+
+

boolean

false

+
+
+
+

The queue length to use before flushing writing

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__ASYNC_QUEUE_LENGTH

+
+
+

int

512

+
+
+
+

Determine whether to block the publisher (rather than drop the message) when the queue is full

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__ASYNC_OVERFLOW

+
+
+
+

block, discard

+

block

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-logging-splunk/dev/index.html b/quarkus-logging-splunk/dev/index.html new file mode 100644 index 0000000000..097f603d4e --- /dev/null +++ b/quarkus-logging-splunk/dev/index.html @@ -0,0 +1,2269 @@ + + + + + + Quarkus logging splunk :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus logging splunk

+
+

Introduction

+
+
+

Splunk is a middleware +solution that receives, stores, indexes and finally allows to exploit the logs of an application.

+
+
+

This Quarkus extension provides the support of the official Splunk client library to index log events through the HTTP Event collection, provided by Splunk enterprise solution.

+
+
+
    +
  • +

    The official client is an opensource library available here.

    +
  • +
  • +

    The documentation of HTTP Event collection can be found here.

    +
  • +
+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the quarkus-logging-splunk extension first. +In your pom.xml file, add:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.logging.splunk</groupId>
+    <artifactId>quarkus-logging-splunk</artifactId>
+    <version>{project-version}</version>
+</dependency>
+
+
+
+
+
+

Features

+
+
+

The extension can be used transparently with any log frontend used by Quarkus (Log4j, SLF4J, …​ ).

+
+
+

Log message formatting

+
+

In all cases the log message formatter is aligned by default with the one of Quarkus console handler:

+
+
+
+
quarkus.log.handler.splunk.format="%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c{3.}] (%t) %s%e%n"
+
+
+
+

This can be adapted in order to avoid duplication with metadata that are passed in a structured way.

+
+
+
+

Log event metadata

+
+

The type of metadata depends on the serialization format.

+
+
+

If quarkus.log.handler.splunk.raw is enabled or quarkus.log.handler.splunk.serialization is raw, there are no per-event metadata. +Only few global metadata shared between all events of a batch are sent via HTTP headers and query parameters.

+
+
+

In other cases, the extension uses structured logging, via JSON serialization. +There are two supported structured formats:

+
+
+
    +
  • +

    The nested serialization is the default format of Splunk HEC Java client and defines the name of some pre-defined metadata. Combined with quarkus.log.handler.splunk.format=%s%e it also support log messages that are themselves JSON.

    +
  • +
  • +

    The flat serialization is a simpler and more generic format, also used by the OpenTelemetry Splunk HEC exporter.

    +
  • +
+
+
+

Some metadata can be indexed by Splunk, see indexed fields. +The default _json source type indexes metadata passed in the fields object.

+
+
+

The extension provides the support of the resolution of MDC scoped properties, as defined in JBoss supported formatters.

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Serialization formatnestedflat

HEC metadata

+

time and host are always sent. +source, sourcetype, index are sent if not empty.

+

Pre-defined metadata

+

Only event.severity is sent by default. +Other metadata can be added:

+
+
+
    +
  • +

    event.thread via quarkus.log.handler.splunk.include-thread-name

    +
  • +
  • +

    event.exception via quarkus.log.handler.splunk.include-exception

    +
  • +
  • +

    event.logger via quarkus.log.handler.splunk.include-logger-name

    +
  • +
+
+

Only fields.severity is sent by default. +The metadata name can be customized via quarkus.log.handler.splunk.metadataSeverityFieldName +Other metadata can be added:

+
+
+
    +
  • +

    fields.thread via quarkus.log.handler.splunk.include-thread-name

    +
  • +
  • +

    fields.exception via quarkus.log.handler.splunk.include-exception

    +
  • +
  • +

    fields.logger via quarkus.log.handler.splunk.include-logger-name

    +
  • +
+

MDC properties

+

Passed via event.properties

+
+

Passed via fields

+

Static metadata

+

Passed via fields

+
+
+

A structured query to Splunk HEC looks like:

+
+
+

curl -k -v -X POST https://localhost:8080/services/collector/event/1.0 -H "Content-type: application/json; profile=\"urn:splunk:event:1.0\"; charset=utf-8" -H "Authorization: Splunk 29fe2838-cab6-4d17-a392-37b7b8f41f75" -d@events.json

+
+
+
Nested serialization example
+
+
{
+  "time": "1673001538.042",
+  "host": "hostname",
+  "source": "mysource",
+  "sourcetype": "_json",
+  "index": "main",
+  "event": {
+    "message": "2023-01-06 ERROR The log message",
+    "logger": "com.acme.MyClass",
+    "severity": "ERROR",
+    "exception": "java.lang.NullPointerException",
+    "properties": {
+      "mdc-key": "mdc-value"
+    }
+  },
+  "fields": {
+    "key": "static-value"
+  }
+}
+
+
+
+
Flat serialization example
+
+
{
+  "time": "1673001538.042",
+  "host": "hostname",
+  "source": "mysource",
+  "index": "main",
+  "event": "2023-01-06 ERROR The log message",
+  "fields": {
+    "severity": "ERROR",
+    "mdc-key": "mdc-value",
+    "key": "static-value"
+  }
+}
+
+
+
+
+

Connectivity failures

+
+

Batched events that cannot be sent to the Splunk indexer will be logged to stdout:

+
+
+
    +
  • +

    Formatted using console handler settings if the console handler is enabled

    +
  • +
  • +

    Formatted using splunk handler settings otherwise

    +
  • +
+
+
+

In any case, the root cause of the failure is always logged to stderr.

+
+
+
+

Asynchronous handler

+
+

By default, the log handler is synchronous and only the HTTP requests to HEC endpoint are done asynchronously:

+
+
+
+sync +
+
+
+

This can be an issue because the Splunk library #send is synchronized, so any preprocessing of the batch HTTP request itself happens on the application thread of the log event that triggered the batch to be full (either by reaching quarkus.log.handler.splunk.batch-size-count or quarkus.log.handler.splunk.batch-size-bytes)

+
+
+

By enabling quarkus.log.handler.splunk.async=true, an intermediate event queue is used, which decouples the flushing of the batch from any application thread:

+
+
+
+
participant "Application" as App
+participant Slf4j
+participant AsyncHandler
+participant SplunkLogHandler
+participant "Splunk library" as Lib
+participant "HTTP client" as OkHttp
+participant "Splunk HEC" as HEC
+
+group Application thread
+App -> Slf4j: info(message)
+Slf4j -> AsyncHandler: doPublish(record)
+AsyncHandler -> AsyncHandler: Capture MDC
+AsyncHandler -> AsyncHandler: Add to queue
+AsyncHandler --> App
+end
+
+group AsyncHandler single (daemon) thread
+AsyncHandler -> AsyncHandler: Peek from queue
+AsyncHandler -> SplunkLogHandler: doPublish(record)
+SplunkLogHandler -> Lib: send(record)
+note left
+  synchronized
+end note
+Lib -> Lib: Add event to batch
+alt batch is full
+Lib -> OkHttp: enqueue(HTTP request)
+OkHttp --> Lib
+end
+Lib --> SplunkLogHandler
+SplunkLogHandler --> AsyncHandler
+
+end
+group HTTP client - multiple connections in parallel mode.
+OkHttp -> OkHttp: Peek from queue
+OkHttp -> HEC: HTTP POST /services/collector/event/1.0
+HEC --> OkHttp: 200
+alt status code != 200
+OkHttp --> Lib: handle errors
+Lib -> Lib: stderr.println
+end
+end
+
+
+
+

By default quarkus.log.handler.splunk.async.queue-length=block, so applicative threads will block once the queue limit has reached quarkus.log.handler.splunk.async.queue-length.

+
+
+

There’s no link between quarkus.log.handler.splunk.async.queue-length and quarkus.log.handler.splunk.batch-size-count.

+
+
+
+

Sequential and parallel modes

+
+

The number of events kept in memory for batching purposes is not limited. +After tuning quarkus.log.handler.splunk.batch-size-count and quarkus.log.handler.splunk.batch-size-bytes, in case the HEC endpoint cannot keep up with the batch throughput, using multiple HTTP connections might help to reduce memory usage on the client.

+
+
+

By setting quarkus.log.handler.splunk.send-mode=parallel multiple batches will be sent over the wire in parallel, potentially increasing throughput with the HEC endpoint.

+
+
+
+

Named Splunk log handlers

+
+

A named log handler can be configured to manage multiple Splunk configurations for particular log emissions. Like for core Quarkus handlers (console, file or syslog), +Splunk named handlers follow the same configuration:

+
+
+
+
# Global configuration
+quarkus.log.handler.splunk.token=12345678-1234-1234-1234-1234567890AB
+quarkus.log.handler.splunk.metadata-index=mylogindex
+
+# Splunk named handler configuration, named here MONITORING
+quarkus.log.handler.splunk."MONITORING".token=12345678-0000-0000-0000-1234567890AB
+quarkus.log.handler.splunk."MONITORING".metadata-index=mystatsindex
+
+# Registration of the custom handler through Quarkus core category management, here monitoring as the logging category
+quarkus.log.category."monitoring".handlers=MONITORING
+quarkus.log.category."monitoring".use-parent-handlers=false
+
+
+
+

Next to use such logger in actual code, you can rely on annotation or factory:

+
+
+
    +
  • +

    With annotation:

    +
  • +
+
+
+
+
@LoggerName("monitoring")
+Logger monitoringLogger;
+
+
+
+
    +
  • +

    With factory:

    +
  • +
+
+
+
+
static final Logger monitoringLogger = Logger.getLogger("monitoring");
+
+
+
+

Some important considerations

+
+
    +
  • +

    Every handler is isolated and uses a separate Splunk client and connection pool, which means it has a cost.

    +
  • +
  • +

    The configuration from the root handler are not inherited by named handlers.

    +
  • +
  • +

    Use quarkus.log.category."named-handler".use-parent-handlers=false is required if you do not want the root handler to also receive log events already sent to named handlers.

    +
  • +
+
+
+
+
+
+
+

Extension Configuration Reference

+
+
+

This extension follows the log handlers configuration domain that is defined by Quarkus, every configuration property of this extension will belong to the following configuration root : quarkus.log.handler.splunk

+
+
+

When present this extension is enabled by default, meaning the client would expect a valid connection to a Splunk indexer and would print an error message for every log created by the application.

+
+
+

So in local environment, the log handler can be disabled with the following property :

+
+
+
+
quarkus.log.handler.splunk.enabled=false
+
+
+
+

Every configuration property of the extension is overridable at runtime.

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Determine whether to enable the handler

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_ENABLED

+
+
+

boolean

true

+
+
+
+

The splunk handler log level. By default, it is no more strict than the root handler level.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_LEVEL

+
+
+

Level

ALL

+
+
+
+

Splunk HEC endpoint base url.

+
+
+

With raw events, the endpoint targeted is /services/collector/raw. With flat or nested JSON events, the endpoint targeted is /services/collector/event/1.0.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_URL

+
+
+

string

https://localhost:8088/

+
+
+
+

Disable TLS certificate validation with HEC endpoint

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_DISABLE_CERTIFICATE_VALIDATION

+
+
+

boolean

false

+
+
+
+

The application token to authenticate with HEC, the token is mandatory if the extension is enabled https://docs.splunk.com/Documentation/Splunk/latest/Data/FormateventsforHTTPEventCollector#HEC_token

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_TOKEN

+
+
+

string

+
+
+
+

The strategy to send events to HEC.

+
+
+

In sequential mode, there is only one HTTP connection to HEC and the order of events is preserved, but performance is lower. In parallel mode, event batches are sent asynchronously over multiple HTTP connections, and events with the same timestamp (that has 1 millisecond resolution) may be indexed out of order by Splunk.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_SEND_MODE

+
+
+
+

sequential, parallel

+

sequential

+
+
+
+

A GUID to identify an HEC client and guarantee isolation at HEC level in case of slow clients. https://docs.splunk.com/Documentation/Splunk/latest/Data/AboutHECIDXAck#About_channels_and_sending_data

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_CHANNEL

+
+
+

string

+
+
+
+

Batching delay before sending a group of events. If 0, the events are sent immediately.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_BATCH_INTERVAL

+
+
+

Duration +

10S

+
+
+
+

Maximum number of events in a batch. By default 10, if 0 no batching.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_BATCH_SIZE_COUNT

+
+
+

long

10

+
+
+
+

Maximum total size in bytes of events in a batch. By default 10KB, if 0 no batching.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_BATCH_SIZE_BYTES

+
+
+

long

10240

+
+
+
+

Maximum number of retries in case of I/O exceptions with HEC connection.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_MAX_RETRIES

+
+
+

long

0

+
+
+
+

The log format, defining which metadata are inlined inside the log main payload.

+
+
+

Specific metadata (hostname, category, thread name, …​), as well as MDC key/value map, can also be sent in a structured way.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_FORMAT

+
+
+

string

%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c{3.}] (%t) %s%e%n

+
+
+
+

Whether to send the thrown exception message as a structured metadata of the log event (as opposed to %e in a formatted message, it does not include the exception name or stacktrace). Only applicable to 'nested' serialization.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_INCLUDE_EXCEPTION

+
+
+

boolean

false

+
+
+
+

Whether to send the logger name as a structured metadata of the log event (equivalent of %c in a formatted message). Only applicable to 'nested' serialization.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_INCLUDE_LOGGER_NAME

+
+
+

boolean

false

+
+
+
+

Whether to send the thread name as a structured metadata of the log event (equivalent of %t in a formatted message). Only applicable to 'nested' serialization.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_INCLUDE_THREAD_NAME

+
+
+

boolean

false

+
+
+
+

Overrides the host name metadata value.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_METADATA_HOST

+
+
+

string

The equivalent of %h in a formatted message

+
+
+
+

The source value to assign to the event data. For example, if you’re sending data from an app you’re developing, you could set this key to the name of the app. https://docs.splunk.com/Documentation/Splunk/latest/Data/FormateventsforHTTPEventCollector#Event_metadata

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_METADATA_SOURCE

+
+
+

string

+
+
+
+

The optional format of the events, to enable some parsing on Splunk side. https://docs.splunk.com/Documentation/Splunk/latest/Data/FormateventsforHTTPEventCollector#Event_metadata

+
+
+

A given source type may have indexed fields extraction enabled, which is the case of the built-in _json used for nested serialization.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_METADATA_SOURCE_TYPE

+
+
+

string

_json for nested serialization, not set otherwise

+
+
+
+

The optional name of the index by which the event data is to be stored. If set, it must be within the list of allowed indexes of the token (if it has the indexes parameter set). https://docs.splunk.com/Documentation/Splunk/latest/Data/FormateventsforHTTPEventCollector#Event_metadata

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_METADATA_INDEX

+
+
+

string

+
+
+
+

The name of the key used to convey the severity / log level in the metadata fields. Only applicable to 'flat' serialization. With 'nested' serialization, there is already a 'severity' field.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_METADATA_SEVERITY_FIELD_NAME

+
+
+

string

severity

+
+
+
+

The format of the payload.

+
+
+
    +
  • +

    With raw serialization, the log message is sent 'as is' in the HTTP body. Metadata can only be common to a whole batch and are sent via HTTP parameters.

    +
  • +
  • +

    With nested serialization, the log message is sent into a 'message' field of a JSON structure which also contains dynamic metadata.

    +
  • +
  • +

    With flat serialization, the log message is sent into the root 'event' field. Dynamic metadata is sent via the 'fields' root object.

    +
  • +
+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_SERIALIZATION

+
+
+
+

raw, nested, flat

+

nested

+
+
+
+

Indicates whether to log asynchronously

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_ASYNC

+
+
+

boolean

false

+
+
+
+

The queue length to use before flushing writing

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_ASYNC_QUEUE_LENGTH

+
+
+

int

512

+
+
+
+

Determine whether to block the publisher (rather than drop the message) when the queue is full

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_ASYNC_OVERFLOW

+
+
+
+

block, discard

+

block

+
+
+
+

Optional static key/value pairs to populate the "fields" key of event metadata. This isn’t applicable to raw serialization. https://docs.splunk.com/Documentation/Splunk/latest/Data/FormateventsforHTTPEventCollector#Event_metadata

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK_METADATA_FIELDS

+
+
+

Map<String,String>

+
+
+
+

Determine whether to enable the handler

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__ENABLED

+
+
+

boolean

true

+
+
+
+

The splunk handler log level. By default, it is no more strict than the root handler level.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__LEVEL

+
+
+

Level

ALL

+
+
+
+

Splunk HEC endpoint base url.

+
+
+

With raw events, the endpoint targeted is /services/collector/raw. With flat or nested JSON events, the endpoint targeted is /services/collector/event/1.0.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__URL

+
+
+

string

https://localhost:8088/

+
+
+
+

Disable TLS certificate validation with HEC endpoint

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__DISABLE_CERTIFICATE_VALIDATION

+
+
+

boolean

false

+
+
+
+

The application token to authenticate with HEC, the token is mandatory if the extension is enabled https://docs.splunk.com/Documentation/Splunk/latest/Data/FormateventsforHTTPEventCollector#HEC_token

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__TOKEN

+
+
+

string

+
+
+
+

The strategy to send events to HEC.

+
+
+

In sequential mode, there is only one HTTP connection to HEC and the order of events is preserved, but performance is lower. In parallel mode, event batches are sent asynchronously over multiple HTTP connections, and events with the same timestamp (that has 1 millisecond resolution) may be indexed out of order by Splunk.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__SEND_MODE

+
+
+
+

sequential, parallel

+

sequential

+
+
+
+

A GUID to identify an HEC client and guarantee isolation at HEC level in case of slow clients. https://docs.splunk.com/Documentation/Splunk/latest/Data/AboutHECIDXAck#About_channels_and_sending_data

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__CHANNEL

+
+
+

string

+
+
+
+

Batching delay before sending a group of events. If 0, the events are sent immediately.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__BATCH_INTERVAL

+
+
+

Duration +

10S

+
+
+
+

Maximum number of events in a batch. By default 10, if 0 no batching.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__BATCH_SIZE_COUNT

+
+
+

long

10

+
+
+
+

Maximum total size in bytes of events in a batch. By default 10KB, if 0 no batching.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__BATCH_SIZE_BYTES

+
+
+

long

10240

+
+
+
+

Maximum number of retries in case of I/O exceptions with HEC connection.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__MAX_RETRIES

+
+
+

long

0

+
+
+
+

The log format, defining which metadata are inlined inside the log main payload.

+
+
+

Specific metadata (hostname, category, thread name, …​), as well as MDC key/value map, can also be sent in a structured way.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__FORMAT

+
+
+

string

%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c{3.}] (%t) %s%e%n

+
+
+
+

Whether to send the thrown exception message as a structured metadata of the log event (as opposed to %e in a formatted message, it does not include the exception name or stacktrace). Only applicable to 'nested' serialization.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__INCLUDE_EXCEPTION

+
+
+

boolean

false

+
+
+
+

Whether to send the logger name as a structured metadata of the log event (equivalent of %c in a formatted message). Only applicable to 'nested' serialization.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__INCLUDE_LOGGER_NAME

+
+
+

boolean

false

+
+
+
+

Whether to send the thread name as a structured metadata of the log event (equivalent of %t in a formatted message). Only applicable to 'nested' serialization.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__INCLUDE_THREAD_NAME

+
+
+

boolean

false

+
+
+
+

Overrides the host name metadata value.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__METADATA_HOST

+
+
+

string

The equivalent of %h in a formatted message

+
+
+
+

The source value to assign to the event data. For example, if you’re sending data from an app you’re developing, you could set this key to the name of the app. https://docs.splunk.com/Documentation/Splunk/latest/Data/FormateventsforHTTPEventCollector#Event_metadata

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__METADATA_SOURCE

+
+
+

string

+
+
+
+

The optional format of the events, to enable some parsing on Splunk side. https://docs.splunk.com/Documentation/Splunk/latest/Data/FormateventsforHTTPEventCollector#Event_metadata

+
+
+

A given source type may have indexed fields extraction enabled, which is the case of the built-in _json used for nested serialization.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__METADATA_SOURCE_TYPE

+
+
+

string

_json for nested serialization, not set otherwise

+
+
+
+

The optional name of the index by which the event data is to be stored. If set, it must be within the list of allowed indexes of the token (if it has the indexes parameter set). https://docs.splunk.com/Documentation/Splunk/latest/Data/FormateventsforHTTPEventCollector#Event_metadata

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__METADATA_INDEX

+
+
+

string

+
+
+
+

Optional static key/value pairs to populate the "fields" key of event metadata. This isn’t applicable to raw serialization. https://docs.splunk.com/Documentation/Splunk/latest/Data/FormateventsforHTTPEventCollector#Event_metadata

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__METADATA_FIELDS

+
+
+

Map<String,String>

+
+
+
+

The name of the key used to convey the severity / log level in the metadata fields. Only applicable to 'flat' serialization. With 'nested' serialization, there is already a 'severity' field.

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__METADATA_SEVERITY_FIELD_NAME

+
+
+

string

severity

+
+
+
+

The format of the payload.

+
+
+
    +
  • +

    With raw serialization, the log message is sent 'as is' in the HTTP body. Metadata can only be common to a whole batch and are sent via HTTP parameters.

    +
  • +
  • +

    With nested serialization, the log message is sent into a 'message' field of a JSON structure which also contains dynamic metadata.

    +
  • +
  • +

    With flat serialization, the log message is sent into the root 'event' field. Dynamic metadata is sent via the 'fields' root object.

    +
  • +
+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__SERIALIZATION

+
+
+
+

raw, nested, flat

+

nested

+
+
+
+

Indicates whether to log asynchronously

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__ASYNC

+
+
+

boolean

false

+
+
+
+

The queue length to use before flushing writing

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__ASYNC_QUEUE_LENGTH

+
+
+

int

512

+
+
+
+

Determine whether to block the publisher (rather than drop the message) when the queue is full

+
+
+

Environment variable: QUARKUS_LOG_HANDLER_SPLUNK__NAMED_HANDLERS__ASYNC_OVERFLOW

+
+
+
+

block, discard

+

block

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-mailpit/dev/_images/mailpit-card.png b/quarkus-mailpit/dev/_images/mailpit-card.png new file mode 100644 index 0000000000..6cd6b43337 Binary files /dev/null and b/quarkus-mailpit/dev/_images/mailpit-card.png differ diff --git a/quarkus-mailpit/dev/_images/mailpit-devservice.png b/quarkus-mailpit/dev/_images/mailpit-devservice.png new file mode 100644 index 0000000000..d74f09d107 Binary files /dev/null and b/quarkus-mailpit/dev/_images/mailpit-devservice.png differ diff --git a/quarkus-mailpit/dev/_images/mailpit-logs.png b/quarkus-mailpit/dev/_images/mailpit-logs.png new file mode 100644 index 0000000000..f45b7f79a4 Binary files /dev/null and b/quarkus-mailpit/dev/_images/mailpit-logs.png differ diff --git a/quarkus-mailpit/dev/_images/mailpit-ui.png b/quarkus-mailpit/dev/_images/mailpit-ui.png new file mode 100644 index 0000000000..a93aa2e428 Binary files /dev/null and b/quarkus-mailpit/dev/_images/mailpit-ui.png differ diff --git a/quarkus-mailpit/dev/_images/mailpit.svg b/quarkus-mailpit/dev/_images/mailpit.svg new file mode 100644 index 0000000000..0900bf570b --- /dev/null +++ b/quarkus-mailpit/dev/_images/mailpit.svg @@ -0,0 +1,22 @@ + + + + + + diff --git a/quarkus-mailpit/dev/_images/plus-sign.svg b/quarkus-mailpit/dev/_images/plus-sign.svg new file mode 100644 index 0000000000..ea94fe7b0c --- /dev/null +++ b/quarkus-mailpit/dev/_images/plus-sign.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + image/svg+xml + + + + + + + + diff --git a/quarkus-mailpit/dev/_images/quarkus.svg b/quarkus-mailpit/dev/_images/quarkus.svg new file mode 100644 index 0000000000..1969e1e886 --- /dev/null +++ b/quarkus-mailpit/dev/_images/quarkus.svg @@ -0,0 +1 @@ +quarkus_icon_rgb_1024px_reverse \ No newline at end of file diff --git a/quarkus-mailpit/dev/includes/attributes.html b/quarkus-mailpit/dev/includes/attributes.html new file mode 100644 index 0000000000..aead8dfbf3 --- /dev/null +++ b/quarkus-mailpit/dev/includes/attributes.html @@ -0,0 +1,912 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-mailpit/dev/includes/quarkus-mailpit.html b/quarkus-mailpit/dev/includes/quarkus-mailpit.html new file mode 100644 index 0000000000..e995744a0c --- /dev/null +++ b/quarkus-mailpit/dev/includes/quarkus-mailpit.html @@ -0,0 +1,979 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

If Dev Services for Mailpit has been explicitly enabled or disabled. Dev Services are generally enabled by default, unless there is an existing configuration present.

+
+
+

Environment variable: QUARKUS_MAILPIT_ENABLED

+
+
+

boolean

true

+
+
+
+

The Mailpit container image to use.

+
+
+

Environment variable: QUARKUS_MAILPIT_IMAGE_NAME

+
+
+

string

axllent/mailpit

+
+
+
+

Flag to control if verbose logging of Mailpit container is requested.

+
+
+

Environment variable: QUARKUS_MAILPIT_VERBOSE

+
+
+

boolean

true

+
+
+
+
+ + + + + + + diff --git a/quarkus-mailpit/dev/index.html b/quarkus-mailpit/dev/index.html new file mode 100644 index 0000000000..7f0315ac5e --- /dev/null +++ b/quarkus-mailpit/dev/index.html @@ -0,0 +1,1163 @@ + + + + + + Quarkus Mailpit :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Mailpit

+
+
+
+

A Quarkus extension that lets you utilize Mailpit as a Dev Service for the Quarkus Mailer enabling zero-config SMTP for testing or running in dev mode. Mailpit acts as an SMTP server, provides a modern web interface to view & test captured emails, and contains an API for automated integration testing.

+
+
+

Using this service has some obvious advantages when running in dev mode including but not limited to:

+
+
+
    +
  • +

    Verify e-mail and their content without a real mail server

    +
  • +
  • +

    Prevent accidentally sending a customer an email while developing

    +
  • +
  • +

    Use the REST API to verify contents of real send emails and not mocked mail

    +
  • +
  • +

    12 Factor App: Backing services Treat backing services as attached resources

    +
  • +
  • +

    12 Factor App: Dev/Prod Parity Keep development, staging, and production as similar as possible

    +
  • +
+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.mailpit:quarkus-mailpit extension first to your build file.

+
+
+

For instance, with Maven, add the following dependency to your POM file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.mailpit</groupId>
+    <artifactId>quarkus-mailpit</artifactId>
+    <version>0.0.9</version>
+</dependency>
+
+<!-- If you want to use test framework to verify emails also -->
+<dependency>
+   <groupId>io.quarkiverse.mailpit</groupId>
+   <artifactId>quarkus-mailpit-testing</artifactId>
+   <version>0.0.9</version>
+   <scope>test</scope>
+</dependency>
+
+
+
+
+
+

Usage

+
+
+

Now that you configured your POM to use the service, now you need to tell your dev mode to send emails to Mailpit by modifying the following properties in your application.properties:

+
+
+
+
%dev.quarkus.mailer.host=localhost
+%dev.quarkus.mailer.port=1025
+%dev.quarkus.mailer.mock=false
+
+
+
+

This will enable the Mailer to send real e-mails that will be intercepted by Mailpit. Next, add some code that sends an e-mail…​

+
+
+
+
@Path("/superheroes")
+@ApplicationScoped
+public class SuperheroResource {
+    @Inject
+    Mailer mailer;
+
+    @GET
+    public String villainAlert() {
+        Mail m = new Mail();
+        m.setFrom("admin@hallofjustice.net");
+        m.setTo(List.of("superheroes@quarkus.io"));
+        m.setText("Lex Luthor has been seen in Gotham City!");
+        m.setSubject("WARNING: Super Villain Alert");
+        mailer.send(m);
+
+        return "Superheroes alerted!";
+    }
+}
+
+
+
+

Simply run your application with mvn quarkus:dev and execute your code. Browse to the Dev UI to see this Mailpit card under Extensions:

+
+
+
+Mailpit DevUI Card +
+
+
+

You can also inspect the container image that was started under Dev Services:

+
+
+
+Mailpit Dev Service +
+
+
+

Click on the "Mailpit UI" link to then see the UI with all your captured e-mails.

+
+
+
+Mailpit User Interface +
+
+
+
+
+

Logging

+
+
+

You can view all of Mailpit’s container logs right in the DevUI log area to debug all messages and errors from Mailpit.

+
+
+
+Mailpit Logs +
+
+
+
+
+

Testing

+
+
+

Mailpit ships with REST APIs that allow you to query, inspect, mark read, or delete e-mails from the running instance. This extension has wrapped up the API nicely and allows you to query Mailpit to check the emails were sent.

+
+
+
+
@QuarkusTest
+@WithMailbox
+public class MailpitResourceTest {
+
+    @InjectMailbox
+    Mailer mailbox;
+
+    @AfterEach
+    public void afterEach() throws ApiException {
+        // clear the mailbox after each test run if you prefer
+        mailbox.clear();
+    }
+
+    @Test
+    public void testAlert() throws ApiException {
+        given()
+                .when().get("/mailpit/alert")
+                .then()
+                .statusCode(200)
+                .body(is("Superheroes alerted!!"));
+
+        // look up the mail and assert it
+        Message message = mailbox.findFirst("admin@hallofjustice.net");
+        assertThat(message, notNullValue());
+        assertThat(message.getTo().get(0).getAddress(), is("superheroes@quarkus.io"));
+        assertThat(message.getSubject(), is("WARNING: Super Villain Alert"));
+        assertThat(message.getText(), is("Lex Luthor has been seen in Gotham City!\r\n"));
+    }
+}
+
+
+
+
+
+

Extension Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

If Dev Services for Mailpit has been explicitly enabled or disabled. Dev Services are generally enabled by default, unless there is an existing configuration present.

+
+
+

Environment variable: QUARKUS_MAILPIT_ENABLED

+
+
+

boolean

true

+
+
+
+

The Mailpit container image to use.

+
+
+

Environment variable: QUARKUS_MAILPIT_IMAGE_NAME

+
+
+

string

axllent/mailpit

+
+
+
+

Flag to control if verbose logging of Mailpit container is requested.

+
+
+

Environment variable: QUARKUS_MAILPIT_VERBOSE

+
+
+

boolean

true

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-micrometer-registry/1.x/includes/attributes.html b/quarkus-micrometer-registry/1.x/includes/attributes.html new file mode 100644 index 0000000000..672cdf4581 --- /dev/null +++ b/quarkus-micrometer-registry/1.x/includes/attributes.html @@ -0,0 +1,940 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-micrometer-registry/1.x/includes/quarkus-micrometer-export-azuremonitor.html b/quarkus-micrometer-registry/1.x/includes/quarkus-micrometer-export-azuremonitor.html new file mode 100644 index 0000000000..fd3d48cd6d --- /dev/null +++ b/quarkus-micrometer-registry/1.x/includes/quarkus-micrometer-export-azuremonitor.html @@ -0,0 +1,1010 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Support for export to AzureMonitor. + Support for AzureMonitor will be enabled if Micrometer support is enabled, the Azure Monitor registry extension is enabled and either this value is true, or this value is unset and quarkus.micrometer.registry-enabled-default is true.

+
+
+

boolean

+
+
+
+

Azure Monitor registry configuration properties.

+
+
+

A property source for configuration of the AzureMonitor MeterRegistry.

+
+
+

Available values:

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

Property=Default

Description

instrumentation-key

Define the instrumentation key used to push data to Azure Insights Monitor

+
+

Other Micrometer configuration attributes can also be specified.

+
+
+

Map<String,String>

+
+
+
+
+ + + + + + + diff --git a/quarkus-micrometer-registry/1.x/includes/quarkus-micrometer-export-datadog.html b/quarkus-micrometer-registry/1.x/includes/quarkus-micrometer-export-datadog.html new file mode 100644 index 0000000000..628df00011 --- /dev/null +++ b/quarkus-micrometer-registry/1.x/includes/quarkus-micrometer-export-datadog.html @@ -0,0 +1,1020 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Support for export to Datadog + Support for Datadog will be enabled if Micrometer support is enabled, the Datadog registry extension is enabled and either this value is true, or this value is unset and quarkus.micrometer.registry-enabled-default is true.

+
+
+

boolean

+
+
+
+

Datadog MeterRegistry configuration properties.

+
+
+

A property source for configuration of the Datadog MeterRegistry to push +metrics using the Datadog API, see https://micrometer.io/docs/registry/datadog.

+
+
+

Available values:

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

Property=Default

Description

apiKey=YOUR_KEY

Define the key used to push data using the Datadog API

publish=true

By default, gathered metrics will be published to Datadog when the MeterRegistry is enabled. +Use this attribute to selectively disable publication of metrics in some environments.

step=1m

The interval at which metrics are sent to Datadog. The default is 1 minute.

+
+

Other Micrometer configuration attributes can also be specified.

+
+
+

Map<String,String>

+
+
+
+
+ + + + + + + diff --git a/quarkus-micrometer-registry/1.x/includes/quarkus-micrometer-export-jmx.html b/quarkus-micrometer-registry/1.x/includes/quarkus-micrometer-export-jmx.html new file mode 100644 index 0000000000..9059f001d6 --- /dev/null +++ b/quarkus-micrometer-registry/1.x/includes/quarkus-micrometer-export-jmx.html @@ -0,0 +1,989 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Support for export to JMX + Support for JMX will be enabled if Micrometer support is enabled, the JMX registry extension is enabled and either this value is true, or this value is unset and quarkus.micrometer.registry-enabled-default is true.

+
+
+

boolean

+
+
+
+

JMX registry configuration properties.

+
+
+

A property source for configuration of the JMX MeterRegistry, +see https://micrometer.io/docs/registry/jmx.

+
+
+

Map<String,String>

+
+
+
+
+ + + + + + + diff --git a/quarkus-micrometer-registry/1.x/includes/quarkus-micrometer-export-newrelic.html b/quarkus-micrometer-registry/1.x/includes/quarkus-micrometer-export-newrelic.html new file mode 100644 index 0000000000..33ec883d6c --- /dev/null +++ b/quarkus-micrometer-registry/1.x/includes/quarkus-micrometer-export-newrelic.html @@ -0,0 +1,1024 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Support for export to New Relic + Support for New Relic will be enabled if Micrometer support is enabled, the New Relic registry extension is enabled and either this value is true, or this value is unset and quarkus.micrometer.registry-enabled-default is true.

+
+
+

boolean

+
+
+
+

New Relic MeterRegistry configuration properties.

+
+
+

A property source for configuration of the New Relic MeterRegistry to push +metrics using the New Relic API, see https://micrometer.io/docs/registry/new-relic.

+
+
+

Available values:

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

Property=Default

Description

apiKey=YOUR_KEY

Define the key used to push data using the New Relic API

accountId=YOUR_ACCOUNT_ID

Define the account ID used to push data using the New Relic API

publish=true

By default, gathered metrics will be published to New Relic when the MeterRegistry is enabled. +Use this attribute to selectively disable publication of metrics in some environments.

step=1m

The interval at which metrics are sent to New Relic. The default is 1 minute.

+
+

Other Micrometer configuration attributes can also be specified.

+
+
+

Map<String,String>

+
+
+
+
+ + + + + + + diff --git a/quarkus-micrometer-registry/1.x/includes/quarkus-micrometer-export-signalfx.html b/quarkus-micrometer-registry/1.x/includes/quarkus-micrometer-export-signalfx.html new file mode 100644 index 0000000000..e12c28a122 --- /dev/null +++ b/quarkus-micrometer-registry/1.x/includes/quarkus-micrometer-export-signalfx.html @@ -0,0 +1,1025 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Support for export to SignalFx. + Support for SignalFx will be enabled if Micrometer support is enabled, the SignalFx registry extension is enabled and either this value is true, or this value is unset and quarkus.micrometer.registry-enabled-default is true.

+
+
+

boolean

+
+
+
+

SignalFx registry configuration properties.

+
+
+

A property source for configuration of the SignalFx MeterRegistry, +see https://micrometer.io/docs/registry/signalFx.

+
+
+

Available values:

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

Property=Default

Description

access-token=MY_ACCESS_TOKEN

Define the access token required to push data to SignalFx

source=identifier

Unique identifier for the app instance that is publishing metrics to SignalFx. +Defaults to the local host name.

uri=https://ingest.signalfx.com

Define the the URI to ship metrics to. Use this attribute to specify +the location of an internal proxy, if necessary.

step=1m

The interval at which metrics are sent to SignalFx Monitoring. The default is 1 minute.

+
+

Other Micrometer configuration attributes can also be specified.

+
+
+

Map<String,String>

+
+
+
+
+ + + + + + + diff --git a/quarkus-micrometer-registry/1.x/includes/quarkus-micrometer-export-stackdriver.html b/quarkus-micrometer-registry/1.x/includes/quarkus-micrometer-export-stackdriver.html new file mode 100644 index 0000000000..79a6006919 --- /dev/null +++ b/quarkus-micrometer-registry/1.x/includes/quarkus-micrometer-export-stackdriver.html @@ -0,0 +1,1043 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Support for export to Stackdriver. +<p> +Support for Stackdriver will be enabled if Micrometer +support is enabled, the Stackdriver registry extension is enabled +and either this value is true, or this value is unset and +quarkus.micrometer.registry-enabled-default is true. +<p>

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

Stackdriver libraries do not yet support running in native mode. +The Stackdriver MeterRegistry will be automatically disabled +for native builds. +<p> +See https://github.com/grpc/grpc-java/issues/5460

+
+
+
+
+

boolean

+
+
+
+

Stackdriver registry configuration properties.

+
+
+

A property source for configuration of the Stackdriver MeterRegistry, +see https://micrometer.io/docs/registry/stackdriver.

+
+
+

Available values:

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

Property=Default

Description

project-id=MY_PROJECT_ID

Define the project id used to push data to Stackdriver Monitoring

publish=true

By default, gathered metrics will be published to Stackdriver when the MeterRegistry is enabled. +Use this attribute to selectively disable publication of metrics in some environments.

step=1m

The interval at which metrics are sent to Stackdriver Monitoring. The default is 1 minute.

+
+

Other Micrometer configuration attributes can also be specified.

+
+
+

Map<String,String>

+
+
+
+
+ + + + + + + diff --git a/quarkus-micrometer-registry/1.x/includes/quarkus-micrometer-export-statsd.html b/quarkus-micrometer-registry/1.x/includes/quarkus-micrometer-export-statsd.html new file mode 100644 index 0000000000..40987eb63e --- /dev/null +++ b/quarkus-micrometer-registry/1.x/includes/quarkus-micrometer-export-statsd.html @@ -0,0 +1,1042 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Support for export to StatsD. + Support for StatsD will be enabled if Micrometer support is enabled, the Statsd registry extension is enabled and either this value is true, or this value is unset and quarkus.micrometer.registry-enabled-default is true.

+
+
+

boolean

+
+
+
+

StatsD registry configuration properties.

+
+
+

A property source for configuration of the StatsD MeterRegistry, +see https://micrometer.io/docs/registry/statsD.

+
+
+

Available values:

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

Property=Default

Description

flavor=datadog

Specify the flavor of the StatsD line protocol. The original StatsD line protocol +specification is etsy. The default value is datadog.

host=localhost

The host name of the StatsD agent.

maxPacketLength=1400

Adjust the packet length to keep the payload within your network’s MTU.

port=8125

The port of the StatsD agent`.

protocol=UDP

The protocol of the connection to the agent (UDP or TCP).

publish=true

By default, gathered metrics will be published to StatsD when the MeterRegistry is enabled. +Use this attribute to selectively disable publication of metrics in some environments.

step=1m

The interval at which metrics are sent to StatsD Monitoring. The default is 1 minute.

+
+

Other Micrometer configuration attributes can also be specified.

+
+
+

As mentioned in the Micrometer StatsD documentation, if you want to customize the metrics +sink, do so by providing your own StatsDMeterRegistry instance using a CDI @Produces +method.

+
+
+

Map<String,String>

+
+
+
+
+ + + + + + + diff --git a/quarkus-micrometer-registry/1.x/index.html b/quarkus-micrometer-registry/1.x/index.html new file mode 100644 index 0000000000..a336a53833 --- /dev/null +++ b/quarkus-micrometer-registry/1.x/index.html @@ -0,0 +1,960 @@ + + + + + + Quarkus - Micrometer Meter Registry Extensions :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus - Micrometer Meter Registry Extensions

+
+

This is where the core Quarkus Micrometer extension meets the larger ecosystem of supported registries.

+
+ +
+

Please ask questions on stackoverflow (using quarkus and micrometer tags, or join us in the Quarkus Zulip chatroom, or in the #quarkus channel in the Micrometer Slack workspace.

+
+
+
+
+
+ + + + + + + diff --git a/quarkus-micrometer-registry/1.x/micrometer-registry-azure-monitor.html b/quarkus-micrometer-registry/1.x/micrometer-registry-azure-monitor.html new file mode 100644 index 0000000000..e8e806e01d --- /dev/null +++ b/quarkus-micrometer-registry/1.x/micrometer-registry-azure-monitor.html @@ -0,0 +1,1020 @@ + + + + + + Quarkus - Micrometer: Azure Monitor :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus - Micrometer: Azure Monitor

+
+

Configuration

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Support for export to AzureMonitor. + Support for AzureMonitor will be enabled if Micrometer support is enabled, the Azure Monitor registry extension is enabled and either this value is true, or this value is unset and quarkus.micrometer.registry-enabled-default is true.

+
+
+

boolean

+
+
+
+

Azure Monitor registry configuration properties.

+
+
+

A property source for configuration of the AzureMonitor MeterRegistry.

+
+
+

Available values:

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

Property=Default

Description

instrumentation-key

Define the instrumentation key used to push data to Azure Insights Monitor

+
+

Other Micrometer configuration attributes can also be specified.

+
+
+

Map<String,String>

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-micrometer-registry/1.x/micrometer-registry-datadog.html b/quarkus-micrometer-registry/1.x/micrometer-registry-datadog.html new file mode 100644 index 0000000000..c696938318 --- /dev/null +++ b/quarkus-micrometer-registry/1.x/micrometer-registry-datadog.html @@ -0,0 +1,1030 @@ + + + + + + Quarkus - Micrometer: Datadog :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus - Micrometer: Datadog

+
+

Configuration

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Support for export to Datadog + Support for Datadog will be enabled if Micrometer support is enabled, the Datadog registry extension is enabled and either this value is true, or this value is unset and quarkus.micrometer.registry-enabled-default is true.

+
+
+

boolean

+
+
+
+

Datadog MeterRegistry configuration properties.

+
+
+

A property source for configuration of the Datadog MeterRegistry to push +metrics using the Datadog API, see https://micrometer.io/docs/registry/datadog.

+
+
+

Available values:

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

Property=Default

Description

apiKey=YOUR_KEY

Define the key used to push data using the Datadog API

publish=true

By default, gathered metrics will be published to Datadog when the MeterRegistry is enabled. +Use this attribute to selectively disable publication of metrics in some environments.

step=1m

The interval at which metrics are sent to Datadog. The default is 1 minute.

+
+

Other Micrometer configuration attributes can also be specified.

+
+
+

Map<String,String>

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-micrometer-registry/1.x/micrometer-registry-jmx.html b/quarkus-micrometer-registry/1.x/micrometer-registry-jmx.html new file mode 100644 index 0000000000..0f38ad781c --- /dev/null +++ b/quarkus-micrometer-registry/1.x/micrometer-registry-jmx.html @@ -0,0 +1,999 @@ + + + + + + Quarkus - Micrometer: JMX :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus - Micrometer: JMX

+
+

Configuration

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Support for export to JMX + Support for JMX will be enabled if Micrometer support is enabled, the JMX registry extension is enabled and either this value is true, or this value is unset and quarkus.micrometer.registry-enabled-default is true.

+
+
+

boolean

+
+
+
+

JMX registry configuration properties.

+
+
+

A property source for configuration of the JMX MeterRegistry, +see https://micrometer.io/docs/registry/jmx.

+
+
+

Map<String,String>

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-micrometer-registry/1.x/micrometer-registry-newrelic.html b/quarkus-micrometer-registry/1.x/micrometer-registry-newrelic.html new file mode 100644 index 0000000000..d5d51355d7 --- /dev/null +++ b/quarkus-micrometer-registry/1.x/micrometer-registry-newrelic.html @@ -0,0 +1,1034 @@ + + + + + + Quarkus - Micrometer: New Relic :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus - Micrometer: New Relic

+
+

Configuration

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Support for export to New Relic + Support for New Relic will be enabled if Micrometer support is enabled, the New Relic registry extension is enabled and either this value is true, or this value is unset and quarkus.micrometer.registry-enabled-default is true.

+
+
+

boolean

+
+
+
+

New Relic MeterRegistry configuration properties.

+
+
+

A property source for configuration of the New Relic MeterRegistry to push +metrics using the New Relic API, see https://micrometer.io/docs/registry/new-relic.

+
+
+

Available values:

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

Property=Default

Description

apiKey=YOUR_KEY

Define the key used to push data using the New Relic API

accountId=YOUR_ACCOUNT_ID

Define the account ID used to push data using the New Relic API

publish=true

By default, gathered metrics will be published to New Relic when the MeterRegistry is enabled. +Use this attribute to selectively disable publication of metrics in some environments.

step=1m

The interval at which metrics are sent to New Relic. The default is 1 minute.

+
+

Other Micrometer configuration attributes can also be specified.

+
+
+

Map<String,String>

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-micrometer-registry/1.x/micrometer-registry-signalfx.html b/quarkus-micrometer-registry/1.x/micrometer-registry-signalfx.html new file mode 100644 index 0000000000..23e3570142 --- /dev/null +++ b/quarkus-micrometer-registry/1.x/micrometer-registry-signalfx.html @@ -0,0 +1,1035 @@ + + + + + + Quarkus - Micrometer: SignalFx :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus - Micrometer: SignalFx

+
+

Configuration

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Support for export to SignalFx. + Support for SignalFx will be enabled if Micrometer support is enabled, the SignalFx registry extension is enabled and either this value is true, or this value is unset and quarkus.micrometer.registry-enabled-default is true.

+
+
+

boolean

+
+
+
+

SignalFx registry configuration properties.

+
+
+

A property source for configuration of the SignalFx MeterRegistry, +see https://micrometer.io/docs/registry/signalFx.

+
+
+

Available values:

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

Property=Default

Description

access-token=MY_ACCESS_TOKEN

Define the access token required to push data to SignalFx

source=identifier

Unique identifier for the app instance that is publishing metrics to SignalFx. +Defaults to the local host name.

uri=https://ingest.signalfx.com

Define the the URI to ship metrics to. Use this attribute to specify +the location of an internal proxy, if necessary.

step=1m

The interval at which metrics are sent to SignalFx Monitoring. The default is 1 minute.

+
+

Other Micrometer configuration attributes can also be specified.

+
+
+

Map<String,String>

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-micrometer-registry/1.x/micrometer-registry-stackdriver.html b/quarkus-micrometer-registry/1.x/micrometer-registry-stackdriver.html new file mode 100644 index 0000000000..0130988428 --- /dev/null +++ b/quarkus-micrometer-registry/1.x/micrometer-registry-stackdriver.html @@ -0,0 +1,1053 @@ + + + + + + Quarkus - Micrometer: Stackdriver :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus - Micrometer: Stackdriver

+
+

Configuration

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Support for export to Stackdriver. +<p> +Support for Stackdriver will be enabled if Micrometer +support is enabled, the Stackdriver registry extension is enabled +and either this value is true, or this value is unset and +quarkus.micrometer.registry-enabled-default is true. +<p>

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

Stackdriver libraries do not yet support running in native mode. +The Stackdriver MeterRegistry will be automatically disabled +for native builds. +<p> +See https://github.com/grpc/grpc-java/issues/5460

+
+
+
+
+

boolean

+
+
+
+

Stackdriver registry configuration properties.

+
+
+

A property source for configuration of the Stackdriver MeterRegistry, +see https://micrometer.io/docs/registry/stackdriver.

+
+
+

Available values:

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

Property=Default

Description

project-id=MY_PROJECT_ID

Define the project id used to push data to Stackdriver Monitoring

publish=true

By default, gathered metrics will be published to Stackdriver when the MeterRegistry is enabled. +Use this attribute to selectively disable publication of metrics in some environments.

step=1m

The interval at which metrics are sent to Stackdriver Monitoring. The default is 1 minute.

+
+

Other Micrometer configuration attributes can also be specified.

+
+
+

Map<String,String>

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-micrometer-registry/1.x/micrometer-registry-statsd.html b/quarkus-micrometer-registry/1.x/micrometer-registry-statsd.html new file mode 100644 index 0000000000..9d707af9ad --- /dev/null +++ b/quarkus-micrometer-registry/1.x/micrometer-registry-statsd.html @@ -0,0 +1,1052 @@ + + + + + + Quarkus - Micrometer: StatsD :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus - Micrometer: StatsD

+
+

Configuration

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Support for export to StatsD. + Support for StatsD will be enabled if Micrometer support is enabled, the Statsd registry extension is enabled and either this value is true, or this value is unset and quarkus.micrometer.registry-enabled-default is true.

+
+
+

boolean

+
+
+
+

StatsD registry configuration properties.

+
+
+

A property source for configuration of the StatsD MeterRegistry, +see https://micrometer.io/docs/registry/statsD.

+
+
+

Available values:

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

Property=Default

Description

flavor=datadog

Specify the flavor of the StatsD line protocol. The original StatsD line protocol +specification is etsy. The default value is datadog.

host=localhost

The host name of the StatsD agent.

maxPacketLength=1400

Adjust the packet length to keep the payload within your network’s MTU.

port=8125

The port of the StatsD agent`.

protocol=UDP

The protocol of the connection to the agent (UDP or TCP).

publish=true

By default, gathered metrics will be published to StatsD when the MeterRegistry is enabled. +Use this attribute to selectively disable publication of metrics in some environments.

step=1m

The interval at which metrics are sent to StatsD Monitoring. The default is 1 minute.

+
+

Other Micrometer configuration attributes can also be specified.

+
+
+

As mentioned in the Micrometer StatsD documentation, if you want to customize the metrics +sink, do so by providing your own StatsDMeterRegistry instance using a CDI @Produces +method.

+
+
+

Map<String,String>

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-micrometer-registry/dev/includes/attributes.html b/quarkus-micrometer-registry/dev/includes/attributes.html new file mode 100644 index 0000000000..d07206f678 --- /dev/null +++ b/quarkus-micrometer-registry/dev/includes/attributes.html @@ -0,0 +1,949 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-micrometer-registry/dev/includes/quarkus-micrometer-export-azuremonitor.html b/quarkus-micrometer-registry/dev/includes/quarkus-micrometer-export-azuremonitor.html new file mode 100644 index 0000000000..57e4ebf904 --- /dev/null +++ b/quarkus-micrometer-registry/dev/includes/quarkus-micrometer-export-azuremonitor.html @@ -0,0 +1,1052 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Support for export to AzureMonitor.

+
+
+

Support for AzureMonitor will be enabled if Micrometer support is enabled, the Azure Monitor registry extension is enabled and either this value is true, or this value is unset and quarkus.micrometer.registry-enabled-default is true.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_AZUREMONITOR_ENABLED

+
+
+

boolean

+
+
+
+

By default, this extension will create a AzureMonitor MeterRegistry instance.

+
+
+

Use this attribute to veto the creation of the default AzureMonitor MeterRegistry.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_AZUREMONITOR_DEFAULT_REGISTRY

+
+
+

boolean

true

+
+
+
+

Azure Monitor registry configuration properties.

+
+
+

A property source for configuration of the AzureMonitor MeterRegistry.

+
+
+

Available values:

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

Property=Default

Description

instrumentation-key

Define the instrumentation key used to push data to Azure Insights Monitor

publish=true

By default, gathered metrics will be published to Azure Monitor when the MeterRegistry is enabled. +Use this attribute to selectively disable publication of metrics in some environments.

+
+

Other Micrometer configuration attributes can also be specified.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_AZUREMONITOR

+
+
+

Map<String,String>

+
+
+
+
+ + + + + + + diff --git a/quarkus-micrometer-registry/dev/includes/quarkus-micrometer-export-datadog.html b/quarkus-micrometer-registry/dev/includes/quarkus-micrometer-export-datadog.html new file mode 100644 index 0000000000..c3be9566a0 --- /dev/null +++ b/quarkus-micrometer-registry/dev/includes/quarkus-micrometer-export-datadog.html @@ -0,0 +1,1057 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Support for export to Datadog

+
+
+

Support for Datadog will be enabled if Micrometer support is enabled, the Datadog registry extension is enabled and either this value is true, or this value is unset and quarkus.micrometer.registry-enabled-default is true.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_DATADOG_ENABLED

+
+
+

boolean

+
+
+
+

By default, this extension will create a Datadog MeterRegistry instance.

+
+
+

Use this attribute to veto the creation of the default Datadog MeterRegistry.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_DATADOG_DEFAULT_REGISTRY

+
+
+

boolean

true

+
+
+
+

Datadog MeterRegistry configuration properties.

+
+
+

A property source for configuration of the Datadog MeterRegistry to push +metrics using the Datadog API, see https://micrometer.io/docs/registry/datadog.

+
+
+

Available values:

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

Property=Default

Description

apiKey=YOUR_KEY

Define the key used to push data using the Datadog API

publish=true

By default, gathered metrics will be published to Datadog when the MeterRegistry is enabled. +Use this attribute to selectively disable publication of metrics in some environments.

step=1m

The interval at which metrics are sent to Datadog. The default is 1 minute.

+
+

Other Micrometer configuration attributes can also be specified.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_DATADOG

+
+
+

Map<String,String>

+
+
+
+
+ + + + + + + diff --git a/quarkus-micrometer-registry/dev/includes/quarkus-micrometer-export-graphite.html b/quarkus-micrometer-registry/dev/includes/quarkus-micrometer-export-graphite.html new file mode 100644 index 0000000000..a78da12ab9 --- /dev/null +++ b/quarkus-micrometer-registry/dev/includes/quarkus-micrometer-export-graphite.html @@ -0,0 +1,1085 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Support for export to Graphite.

+
+
+

Support for Graphite will be enabled if Micrometer support is enabled, the Graphite registry extension is enabled and either this value is true, or this value is unset and quarkus.micrometer.registry-enabled-default is true.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_GRAPHITE_ENABLED

+
+
+

boolean

+
+
+
+

By default, this extension will create a Graphite MeterRegistry instance.

+
+
+

Use this attribute to veto the creation of the default Graphite MeterRegistry.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_GRAPHITE_DEFAULT_REGISTRY

+
+
+

boolean

true

+
+
+
+

Graphite registry configuration properties.

+
+
+

A property source for configuration of the Graphite MeterRegistry, +see https://micrometer.io/docs/registry/graphite.

+
+
+

Available values:

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

Property=Default

Description

graphiteTagsEnabled=boolean

Whether Graphite tags should be used, as opposed to a hierarchical naming convention. +Defaults to true if no values are present for tagsAsPrefix

rateUnits=SECONDS

Base time unit used to report rates. +Defaults to SECONDS.

durationUnits=MILLISECONDS

Base time unit used to report durations. +Defaults to MILLISECONDS

host=localhost

Host of the Graphite server to receive exported metrics. +The default to localhost.

port=2004

Port of the Graphite server to receive exported metrics. +The default to 2004.

protocol=PICKLED

Protocol to use while shipping data to Graphite +(valid values are PLAINTEXT, UDP and PICKLED). +The default to PICKLED.

publish=true

By default, gathered metrics will be published to Graphite when the MeterRegistry is enabled. +Use this attribute to selectively disable publication of metrics in some environments.

step=1m

The interval at which metrics are sent to Graphite. +Defaults to 1 minute.

+
+

Other Micrometer configuration attributes can also be specified.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_GRAPHITE

+
+
+

Map<String,String>

+
+
+
+
+ + + + + + + diff --git a/quarkus-micrometer-registry/dev/includes/quarkus-micrometer-export-influx.html b/quarkus-micrometer-registry/dev/includes/quarkus-micrometer-export-influx.html new file mode 100644 index 0000000000..b6eddd96a3 --- /dev/null +++ b/quarkus-micrometer-registry/dev/includes/quarkus-micrometer-export-influx.html @@ -0,0 +1,1081 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Support for export to InfluxDB.

+
+
+

Support for InfluxDB will be enabled if Micrometer support is enabled, the InfluxDB registry extension is enabled and either this value is true, or this value is unset and quarkus.micrometer.registry-enabled-default is true.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_INFLUX_ENABLED

+
+
+

boolean

+
+
+
+

By default, this extension will create a InfluxDB MeterRegistry instance.

+
+
+

Use this attribute to veto the creation of the default InfluxDB MeterRegistry.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_INFLUX_DEFAULT_REGISTRY

+
+
+

boolean

true

+
+
+
+

InfluxDB registry configuration properties.

+
+
+

A property source for configuration of the InfluxDB MeterRegistry, +see https://micrometer.io/docs/registry/influx.

+
+
+

Available values:

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

Property=Default

Description

uri=http://localhost:8086

The url of the InfluxDB Endpoint.

apiVersion=V1|V2

The API Version of the InfluxDB Endpoint.

org=ORGNAME

The Organization of the InfluxDB Endpoint.

userName=USERNAME

The userName of the InfluxDB Endpoint.

token=TOKEN

The authentication token of the InfluxDB Endpoint.

bucket=BUCKET

The bucket of the InfluxDB Endpoint.

db=DATABASE

The database name of the InfluxDB Endpoint.

step=1m

The interval at which metrics are sent to InfluxDB Monitoring. The default is 1 minute.

+
+

Other Micrometer configuration attributes can also be specified.

+
+
+

As mentioned in the Micrometer InfluxDB documentation, if you want to customize the metrics +sink, do so by providing your own InfluxDBMeterRegistry instance using a CDI @Produces +method.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_INFLUX

+
+
+

Map<String,String>

+
+
+
+
+ + + + + + + diff --git a/quarkus-micrometer-registry/dev/includes/quarkus-micrometer-export-jmx.html b/quarkus-micrometer-registry/dev/includes/quarkus-micrometer-export-jmx.html new file mode 100644 index 0000000000..faf26f95f5 --- /dev/null +++ b/quarkus-micrometer-registry/dev/includes/quarkus-micrometer-export-jmx.html @@ -0,0 +1,1026 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Support for export to JMX

+
+
+

Support for JMX will be enabled if Micrometer support is enabled, the JMX registry extension is enabled and either this value is true, or this value is unset and quarkus.micrometer.registry-enabled-default is true.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_JMX_ENABLED

+
+
+

boolean

+
+
+
+

By default, this extension will create a JMX MeterRegistry instance.

+
+
+

Use this attribute to veto the creation of the default JMX MeterRegistry.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_JMX_DEFAULT_REGISTRY

+
+
+

boolean

true

+
+
+
+

JMX registry configuration properties.

+
+
+

A property source for configuration of the JMX MeterRegistry, +see https://micrometer.io/docs/registry/jmx.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_JMX

+
+
+

Map<String,String>

+
+
+
+
+ + + + + + + diff --git a/quarkus-micrometer-registry/dev/includes/quarkus-micrometer-export-newrelic-telemetry.html b/quarkus-micrometer-registry/dev/includes/quarkus-micrometer-export-newrelic-telemetry.html new file mode 100644 index 0000000000..9063fddee5 --- /dev/null +++ b/quarkus-micrometer-registry/dev/includes/quarkus-micrometer-export-newrelic-telemetry.html @@ -0,0 +1,1059 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Support for export to New Relic

+
+
+

Support for New Relic will be enabled if Micrometer support is enabled, the New Relic registry extension is enabled and either this value is true, or this value is unset and quarkus.micrometer.registry-enabled-default is true.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_NEWRELIC_TELEMETRY_ENABLED

+
+
+

boolean

+
+
+
+

By default, this extension will create a New Relic MeterRegistry instance.

+
+
+

Use this attribute to veto the creation of the default New Relic MeterRegistry.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_NEWRELIC_TELEMETRY_DEFAULT_REGISTRY

+
+
+

boolean

true

+
+
+
+

New Relic MeterRegistry configuration properties.

+
+
+

A property source for configuration of the New Relic MeterRegistry to push +metrics using the New Relic library, see https://github.com/newrelic/micrometer-registry-newrelic.

+
+
+

Available values:

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

Property=Default

Description

apiKey=YOUR_KEY

Define the key used to push data using the New Relic API

uri=DESTINATION_URI

The URI for the New Relic metric API. Only necessary if you need to override the default URI.

publish=true

By default, gathered metrics will be published to New Relic when the MeterRegistry is enabled. +Use this attribute to selectively disable publication of metrics in some environments.

+

Other Micrometer configuration attributes can also be specified. See the +configuration class.

+
+

Other Micrometer configuration attributes can also be specified.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_NEWRELIC_TELEMETRY

+
+
+

Map<String,String>

+
+
+
+
+ + + + + + + diff --git a/quarkus-micrometer-registry/dev/includes/quarkus-micrometer-export-newrelic.html b/quarkus-micrometer-registry/dev/includes/quarkus-micrometer-export-newrelic.html new file mode 100644 index 0000000000..ab4e709282 --- /dev/null +++ b/quarkus-micrometer-registry/dev/includes/quarkus-micrometer-export-newrelic.html @@ -0,0 +1,1061 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Support for export to New Relic

+
+
+

Support for New Relic will be enabled if Micrometer support is enabled, the New Relic registry extension is enabled and either this value is true, or this value is unset and quarkus.micrometer.registry-enabled-default is true.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_NEWRELIC_ENABLED

+
+
+

boolean

+
+
+
+

By default, this extension will create a New Relic MeterRegistry instance.

+
+
+

Use this attribute to veto the creation of the default New Relic MeterRegistry.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_NEWRELIC_DEFAULT_REGISTRY

+
+
+

boolean

true

+
+
+
+

New Relic MeterRegistry configuration properties.

+
+
+

A property source for configuration of the New Relic MeterRegistry to push +metrics using the New Relic API, see https://micrometer.io/docs/registry/new-relic.

+
+
+

Available values:

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

Property=Default

Description

apiKey=YOUR_KEY

Define the key used to push data using the New Relic API

accountId=YOUR_ACCOUNT_ID

Define the account ID used to push data using the New Relic API

publish=true

By default, gathered metrics will be published to New Relic when the MeterRegistry is enabled. +Use this attribute to selectively disable publication of metrics in some environments.

step=1m

The interval at which metrics are sent to New Relic. The default is 1 minute.

+
+

Other Micrometer configuration attributes can also be specified.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_NEWRELIC

+
+
+

Map<String,String>

+
+
+
+
+ + + + + + + diff --git a/quarkus-micrometer-registry/dev/includes/quarkus-micrometer-export-otlp.html b/quarkus-micrometer-registry/dev/includes/quarkus-micrometer-export-otlp.html new file mode 100644 index 0000000000..610270d3c9 --- /dev/null +++ b/quarkus-micrometer-registry/dev/includes/quarkus-micrometer-export-otlp.html @@ -0,0 +1,1055 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Support for export to OTLP.

+
+
+

Support for OTLP will be enabled if Micrometer support is enabled, the OTLP registry extension is enabled and either this value is true, or this value is unset and quarkus.micrometer.registry-enabled-default is true.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_OTLP_ENABLED

+
+
+

boolean

+
+
+
+

By default, this extension will create a OTLP MeterRegistry instance.

+
+
+

Use this attribute to veto the creation of the default OTLP MeterRegistry.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_OTLP_DEFAULT_REGISTRY

+
+
+

boolean

true

+
+
+
+

OTLP registry configuration properties.

+
+
+

A property source for configuration of the OTLP MeterRegistry, +see https://micrometer.io/docs/registry/otlp.

+
+
+

Available values:

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

Property=Default

Description

url=string

Address to where metrics will be published. +Defaults to http://localhost:4318/v1/metrics

resourceAttributes=list

A comma-separated list of attributes describing to be used as resource attributes, e.g. "key1=val1,key2=val2". +Defaults to empty. If not set it tries to use OTEL_RESOURCE_ATTRIBUTES and OTEL_SERVICE_NAME to automatically +build the resource attributes.

+
+

Other Micrometer configuration attributes can also be specified.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_OTLP

+
+
+

Map<String,String>

+
+
+
+
+ + + + + + + diff --git a/quarkus-micrometer-registry/dev/includes/quarkus-micrometer-export-signalfx.html b/quarkus-micrometer-registry/dev/includes/quarkus-micrometer-export-signalfx.html new file mode 100644 index 0000000000..63494873a1 --- /dev/null +++ b/quarkus-micrometer-registry/dev/includes/quarkus-micrometer-export-signalfx.html @@ -0,0 +1,1067 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Support for export to SignalFx.

+
+
+

Support for SignalFx will be enabled if Micrometer support is enabled, the SignalFx registry extension is enabled and either this value is true, or this value is unset and quarkus.micrometer.registry-enabled-default is true.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_SIGNALFX_ENABLED

+
+
+

boolean

+
+
+
+

By default, this extension will create a SignalFx MeterRegistry instance.

+
+
+

Use this attribute to veto the creation of the default SignalFx MeterRegistry.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_SIGNALFX_DEFAULT_REGISTRY

+
+
+

boolean

true

+
+
+
+

SignalFx registry configuration properties.

+
+
+

A property source for configuration of the SignalFx MeterRegistry, +see https://micrometer.io/docs/registry/signalFx.

+
+
+

Available values:

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

Property=Default

Description

access-token=MY_ACCESS_TOKEN

Define the access token required to push data to SignalFx

source=identifier

Unique identifier for the app instance that is publishing metrics to SignalFx. +Defaults to the local host name.

uri=https://ingest.signalfx.com

Define the the URI to ship metrics to. Use this attribute to specify +the location of an internal proxy, if necessary.

publish=true

By default, gathered metrics will be published to SignalFx when the MeterRegistry is enabled. +Use this attribute to selectively disable publication of metrics in some environments.

step=1m

The interval at which metrics are sent to SignalFx Monitoring. The default is 1 minute.

+
+

Other Micrometer configuration attributes can also be specified.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_SIGNALFX

+
+
+

Map<String,String>

+
+
+
+
+ + + + + + + diff --git a/quarkus-micrometer-registry/dev/includes/quarkus-micrometer-export-stackdriver.html b/quarkus-micrometer-registry/dev/includes/quarkus-micrometer-export-stackdriver.html new file mode 100644 index 0000000000..c4428fb4c9 --- /dev/null +++ b/quarkus-micrometer-registry/dev/includes/quarkus-micrometer-export-stackdriver.html @@ -0,0 +1,1078 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Support for export to Stackdriver. +<p> +Support for Stackdriver will be enabled if Micrometer +support is enabled, the Stackdriver registry extension is enabled +and either this value is true, or this value is unset and +quarkus.micrometer.registry-enabled-default is true. +<p>

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

Stackdriver libraries do not yet support running in native mode. +The Stackdriver MeterRegistry will be automatically disabled +for native builds. +<p> +See https://github.com/grpc/grpc-java/issues/5460

+
+
+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_STACKDRIVER_ENABLED

+
+
+

boolean

+
+
+
+

By default, this extension will create a Stackdriver MeterRegistry instance.

+
+
+

Use this attribute to veto the creation of the default Stackdriver MeterRegistry.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_STACKDRIVER_DEFAULT_REGISTRY

+
+
+

boolean

true

+
+
+
+

Stackdriver registry configuration properties.

+
+
+

A property source for configuration of the Stackdriver MeterRegistry, +see https://micrometer.io/docs/registry/stackdriver.

+
+
+

Available values:

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

Property=Default

Description

project-id=MY_PROJECT_ID

Define the project id used to push data to Stackdriver Monitoring

publish=true

By default, gathered metrics will be published to Stackdriver when the MeterRegistry is enabled. +Use this attribute to selectively disable publication of metrics in some environments.

step=1m

The interval at which metrics are sent to Stackdriver Monitoring. The default is 1 minute.

+
+

Other Micrometer configuration attributes can also be specified.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_STACKDRIVER

+
+
+

Map<String,String>

+
+
+
+
+ + + + + + + diff --git a/quarkus-micrometer-registry/dev/includes/quarkus-micrometer-export-statsd.html b/quarkus-micrometer-registry/dev/includes/quarkus-micrometer-export-statsd.html new file mode 100644 index 0000000000..6f72080cf9 --- /dev/null +++ b/quarkus-micrometer-registry/dev/includes/quarkus-micrometer-export-statsd.html @@ -0,0 +1,1079 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Support for export to StatsD.

+
+
+

Support for StatsD will be enabled if Micrometer support is enabled, the Statsd registry extension is enabled and either this value is true, or this value is unset and quarkus.micrometer.registry-enabled-default is true.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_STATSD_ENABLED

+
+
+

boolean

+
+
+
+

By default, this extension will create a StatsD MeterRegistry instance.

+
+
+

Use this attribute to veto the creation of the default StatsD MeterRegistry.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_STATSD_DEFAULT_REGISTRY

+
+
+

boolean

true

+
+
+
+

StatsD registry configuration properties.

+
+
+

A property source for configuration of the StatsD MeterRegistry, +see https://micrometer.io/docs/registry/statsD.

+
+
+

Available values:

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

Property=Default

Description

flavor=datadog

Specify the flavor of the StatsD line protocol. The original StatsD line protocol +specification is etsy. The default value is datadog.

host=localhost

The host name of the StatsD agent.

maxPacketLength=1400

Adjust the packet length to keep the payload within your network’s MTU.

port=8125

The port of the StatsD agent`.

protocol=UDP

The protocol of the connection to the agent (UDP or TCP).

publish=true

By default, gathered metrics will be published to StatsD when the MeterRegistry is enabled. +Use this attribute to selectively disable publication of metrics in some environments.

step=1m

The interval at which metrics are sent to StatsD Monitoring. The default is 1 minute.

+
+

Other Micrometer configuration attributes can also be specified.

+
+
+

As mentioned in the Micrometer StatsD documentation, if you want to customize the metrics +sink, do so by providing your own StatsDMeterRegistry instance using a CDI @Produces +method.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_STATSD

+
+
+

Map<String,String>

+
+
+
+
+ + + + + + + diff --git a/quarkus-micrometer-registry/dev/index.html b/quarkus-micrometer-registry/dev/index.html new file mode 100644 index 0000000000..bcbc3e735e --- /dev/null +++ b/quarkus-micrometer-registry/dev/index.html @@ -0,0 +1,969 @@ + + + + + + Micrometer Meter Registry Extensions :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Micrometer Meter Registry Extensions

+
+

This is where the core Quarkus Micrometer extension meets the larger ecosystem of supported registries.

+
+ +
+

Please ask questions on stackoverflow (using quarkus and micrometer tags, or join us in the Quarkus Zulip chatroom, or in the #quarkus channel in the Micrometer Slack workspace.

+
+
+
+
+
+ + + + + + + diff --git a/quarkus-micrometer-registry/dev/micrometer-registry-azure-monitor.html b/quarkus-micrometer-registry/dev/micrometer-registry-azure-monitor.html new file mode 100644 index 0000000000..8e82ba04ff --- /dev/null +++ b/quarkus-micrometer-registry/dev/micrometer-registry-azure-monitor.html @@ -0,0 +1,1074 @@ + + + + + + Azure Monitor :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Azure Monitor

+
+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.micrometer.registry</groupId>
+    <artifactId>quarkus-micrometer-registry-azure-monitor</artifactId>
+</dependency>
+
+
+
+
+
+

Configuration

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Support for export to AzureMonitor.

+
+
+

Support for AzureMonitor will be enabled if Micrometer support is enabled, the Azure Monitor registry extension is enabled and either this value is true, or this value is unset and quarkus.micrometer.registry-enabled-default is true.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_AZUREMONITOR_ENABLED

+
+
+

boolean

+
+
+
+

By default, this extension will create a AzureMonitor MeterRegistry instance.

+
+
+

Use this attribute to veto the creation of the default AzureMonitor MeterRegistry.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_AZUREMONITOR_DEFAULT_REGISTRY

+
+
+

boolean

true

+
+
+
+

Azure Monitor registry configuration properties.

+
+
+

A property source for configuration of the AzureMonitor MeterRegistry.

+
+
+

Available values:

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

Property=Default

Description

instrumentation-key

Define the instrumentation key used to push data to Azure Insights Monitor

publish=true

By default, gathered metrics will be published to Azure Monitor when the MeterRegistry is enabled. +Use this attribute to selectively disable publication of metrics in some environments.

+
+

Other Micrometer configuration attributes can also be specified.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_AZUREMONITOR

+
+
+

Map<String,String>

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-micrometer-registry/dev/micrometer-registry-datadog.html b/quarkus-micrometer-registry/dev/micrometer-registry-datadog.html new file mode 100644 index 0000000000..58ee867587 --- /dev/null +++ b/quarkus-micrometer-registry/dev/micrometer-registry-datadog.html @@ -0,0 +1,1079 @@ + + + + + + Datadog :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Datadog

+
+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.micrometer.registry</groupId>
+    <artifactId>quarkus-micrometer-registry-datadog</artifactId>
+</dependency>
+
+
+
+
+
+

Configuration

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Support for export to Datadog

+
+
+

Support for Datadog will be enabled if Micrometer support is enabled, the Datadog registry extension is enabled and either this value is true, or this value is unset and quarkus.micrometer.registry-enabled-default is true.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_DATADOG_ENABLED

+
+
+

boolean

+
+
+
+

By default, this extension will create a Datadog MeterRegistry instance.

+
+
+

Use this attribute to veto the creation of the default Datadog MeterRegistry.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_DATADOG_DEFAULT_REGISTRY

+
+
+

boolean

true

+
+
+
+

Datadog MeterRegistry configuration properties.

+
+
+

A property source for configuration of the Datadog MeterRegistry to push +metrics using the Datadog API, see https://micrometer.io/docs/registry/datadog.

+
+
+

Available values:

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

Property=Default

Description

apiKey=YOUR_KEY

Define the key used to push data using the Datadog API

publish=true

By default, gathered metrics will be published to Datadog when the MeterRegistry is enabled. +Use this attribute to selectively disable publication of metrics in some environments.

step=1m

The interval at which metrics are sent to Datadog. The default is 1 minute.

+
+

Other Micrometer configuration attributes can also be specified.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_DATADOG

+
+
+

Map<String,String>

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-micrometer-registry/dev/micrometer-registry-graphite.html b/quarkus-micrometer-registry/dev/micrometer-registry-graphite.html new file mode 100644 index 0000000000..05fa975540 --- /dev/null +++ b/quarkus-micrometer-registry/dev/micrometer-registry-graphite.html @@ -0,0 +1,1107 @@ + + + + + + Graphite :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Graphite

+
+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.micrometer.registry</groupId>
+    <artifactId>quarkus-micrometer-registry-graphite</artifactId>
+</dependency>
+
+
+
+
+
+

Configuration

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Support for export to Graphite.

+
+
+

Support for Graphite will be enabled if Micrometer support is enabled, the Graphite registry extension is enabled and either this value is true, or this value is unset and quarkus.micrometer.registry-enabled-default is true.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_GRAPHITE_ENABLED

+
+
+

boolean

+
+
+
+

By default, this extension will create a Graphite MeterRegistry instance.

+
+
+

Use this attribute to veto the creation of the default Graphite MeterRegistry.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_GRAPHITE_DEFAULT_REGISTRY

+
+
+

boolean

true

+
+
+
+

Graphite registry configuration properties.

+
+
+

A property source for configuration of the Graphite MeterRegistry, +see https://micrometer.io/docs/registry/graphite.

+
+
+

Available values:

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

Property=Default

Description

graphiteTagsEnabled=boolean

Whether Graphite tags should be used, as opposed to a hierarchical naming convention. +Defaults to true if no values are present for tagsAsPrefix

rateUnits=SECONDS

Base time unit used to report rates. +Defaults to SECONDS.

durationUnits=MILLISECONDS

Base time unit used to report durations. +Defaults to MILLISECONDS

host=localhost

Host of the Graphite server to receive exported metrics. +The default to localhost.

port=2004

Port of the Graphite server to receive exported metrics. +The default to 2004.

protocol=PICKLED

Protocol to use while shipping data to Graphite +(valid values are PLAINTEXT, UDP and PICKLED). +The default to PICKLED.

publish=true

By default, gathered metrics will be published to Graphite when the MeterRegistry is enabled. +Use this attribute to selectively disable publication of metrics in some environments.

step=1m

The interval at which metrics are sent to Graphite. +Defaults to 1 minute.

+
+

Other Micrometer configuration attributes can also be specified.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_GRAPHITE

+
+
+

Map<String,String>

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-micrometer-registry/dev/micrometer-registry-influx.html b/quarkus-micrometer-registry/dev/micrometer-registry-influx.html new file mode 100644 index 0000000000..e3945dfd1a --- /dev/null +++ b/quarkus-micrometer-registry/dev/micrometer-registry-influx.html @@ -0,0 +1,1103 @@ + + + + + + InfluxDB :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

InfluxDB

+
+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.micrometer.registry</groupId>
+    <artifactId>quarkus-micrometer-registry-influx</artifactId>
+</dependency>
+
+
+
+
+
+

Configuration

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Support for export to InfluxDB.

+
+
+

Support for InfluxDB will be enabled if Micrometer support is enabled, the InfluxDB registry extension is enabled and either this value is true, or this value is unset and quarkus.micrometer.registry-enabled-default is true.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_INFLUX_ENABLED

+
+
+

boolean

+
+
+
+

By default, this extension will create a InfluxDB MeterRegistry instance.

+
+
+

Use this attribute to veto the creation of the default InfluxDB MeterRegistry.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_INFLUX_DEFAULT_REGISTRY

+
+
+

boolean

true

+
+
+
+

InfluxDB registry configuration properties.

+
+
+

A property source for configuration of the InfluxDB MeterRegistry, +see https://micrometer.io/docs/registry/influx.

+
+
+

Available values:

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

Property=Default

Description

uri=http://localhost:8086

The url of the InfluxDB Endpoint.

apiVersion=V1|V2

The API Version of the InfluxDB Endpoint.

org=ORGNAME

The Organization of the InfluxDB Endpoint.

userName=USERNAME

The userName of the InfluxDB Endpoint.

token=TOKEN

The authentication token of the InfluxDB Endpoint.

bucket=BUCKET

The bucket of the InfluxDB Endpoint.

db=DATABASE

The database name of the InfluxDB Endpoint.

step=1m

The interval at which metrics are sent to InfluxDB Monitoring. The default is 1 minute.

+
+

Other Micrometer configuration attributes can also be specified.

+
+
+

As mentioned in the Micrometer InfluxDB documentation, if you want to customize the metrics +sink, do so by providing your own InfluxDBMeterRegistry instance using a CDI @Produces +method.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_INFLUX

+
+
+

Map<String,String>

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-micrometer-registry/dev/micrometer-registry-jmx.html b/quarkus-micrometer-registry/dev/micrometer-registry-jmx.html new file mode 100644 index 0000000000..6402bf7575 --- /dev/null +++ b/quarkus-micrometer-registry/dev/micrometer-registry-jmx.html @@ -0,0 +1,1048 @@ + + + + + + JMX :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

JMX

+
+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.micrometer.registry</groupId>
+    <artifactId>quarkus-micrometer-registry-jmx</artifactId>
+</dependency>
+
+
+
+
+
+

Configuration

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Support for export to JMX

+
+
+

Support for JMX will be enabled if Micrometer support is enabled, the JMX registry extension is enabled and either this value is true, or this value is unset and quarkus.micrometer.registry-enabled-default is true.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_JMX_ENABLED

+
+
+

boolean

+
+
+
+

By default, this extension will create a JMX MeterRegistry instance.

+
+
+

Use this attribute to veto the creation of the default JMX MeterRegistry.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_JMX_DEFAULT_REGISTRY

+
+
+

boolean

true

+
+
+
+

JMX registry configuration properties.

+
+
+

A property source for configuration of the JMX MeterRegistry, +see https://micrometer.io/docs/registry/jmx.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_JMX

+
+
+

Map<String,String>

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-micrometer-registry/dev/micrometer-registry-newrelic-telemetry.html b/quarkus-micrometer-registry/dev/micrometer-registry-newrelic-telemetry.html new file mode 100644 index 0000000000..2a8e4d9654 --- /dev/null +++ b/quarkus-micrometer-registry/dev/micrometer-registry-newrelic-telemetry.html @@ -0,0 +1,1081 @@ + + + + + + New Relic :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

New Relic

+
+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.micrometer.registry</groupId>
+    <artifactId>quarkus-micrometer-registry-newrelic-telemetry</artifactId>
+</dependency>
+
+
+
+
+
+

Configuration

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Support for export to New Relic

+
+
+

Support for New Relic will be enabled if Micrometer support is enabled, the New Relic registry extension is enabled and either this value is true, or this value is unset and quarkus.micrometer.registry-enabled-default is true.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_NEWRELIC_TELEMETRY_ENABLED

+
+
+

boolean

+
+
+
+

By default, this extension will create a New Relic MeterRegistry instance.

+
+
+

Use this attribute to veto the creation of the default New Relic MeterRegistry.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_NEWRELIC_TELEMETRY_DEFAULT_REGISTRY

+
+
+

boolean

true

+
+
+
+

New Relic MeterRegistry configuration properties.

+
+
+

A property source for configuration of the New Relic MeterRegistry to push +metrics using the New Relic library, see https://github.com/newrelic/micrometer-registry-newrelic.

+
+
+

Available values:

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

Property=Default

Description

apiKey=YOUR_KEY

Define the key used to push data using the New Relic API

uri=DESTINATION_URI

The URI for the New Relic metric API. Only necessary if you need to override the default URI.

publish=true

By default, gathered metrics will be published to New Relic when the MeterRegistry is enabled. +Use this attribute to selectively disable publication of metrics in some environments.

+

Other Micrometer configuration attributes can also be specified. See the +configuration class.

+
+

Other Micrometer configuration attributes can also be specified.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_NEWRELIC_TELEMETRY

+
+
+

Map<String,String>

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-micrometer-registry/dev/micrometer-registry-newrelic.html b/quarkus-micrometer-registry/dev/micrometer-registry-newrelic.html new file mode 100644 index 0000000000..fa64a39797 --- /dev/null +++ b/quarkus-micrometer-registry/dev/micrometer-registry-newrelic.html @@ -0,0 +1,1087 @@ + + + + + + New Relic (Deprecated) :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

New Relic (Deprecated)

+
+
+
+

There is a new library for the New Relic micrometer registry here: +micrometer-registry-newrelic-telemetry

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.micrometer.registry</groupId>
+    <artifactId>quarkus-micrometer-registry-newrelic</artifactId>
+</dependency>
+
+
+
+
+
+

Configuration

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Support for export to New Relic

+
+
+

Support for New Relic will be enabled if Micrometer support is enabled, the New Relic registry extension is enabled and either this value is true, or this value is unset and quarkus.micrometer.registry-enabled-default is true.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_NEWRELIC_ENABLED

+
+
+

boolean

+
+
+
+

By default, this extension will create a New Relic MeterRegistry instance.

+
+
+

Use this attribute to veto the creation of the default New Relic MeterRegistry.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_NEWRELIC_DEFAULT_REGISTRY

+
+
+

boolean

true

+
+
+
+

New Relic MeterRegistry configuration properties.

+
+
+

A property source for configuration of the New Relic MeterRegistry to push +metrics using the New Relic API, see https://micrometer.io/docs/registry/new-relic.

+
+
+

Available values:

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

Property=Default

Description

apiKey=YOUR_KEY

Define the key used to push data using the New Relic API

accountId=YOUR_ACCOUNT_ID

Define the account ID used to push data using the New Relic API

publish=true

By default, gathered metrics will be published to New Relic when the MeterRegistry is enabled. +Use this attribute to selectively disable publication of metrics in some environments.

step=1m

The interval at which metrics are sent to New Relic. The default is 1 minute.

+
+

Other Micrometer configuration attributes can also be specified.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_NEWRELIC

+
+
+

Map<String,String>

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-micrometer-registry/dev/micrometer-registry-otlp.html b/quarkus-micrometer-registry/dev/micrometer-registry-otlp.html new file mode 100644 index 0000000000..f4c070a34f --- /dev/null +++ b/quarkus-micrometer-registry/dev/micrometer-registry-otlp.html @@ -0,0 +1,1077 @@ + + + + + + OTLP :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

OTLP

+
+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.micrometer.registry</groupId>
+    <artifactId>quarkus-micrometer-registry-otlp</artifactId>
+</dependency>
+
+
+
+
+
+

Configuration

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Support for export to OTLP.

+
+
+

Support for OTLP will be enabled if Micrometer support is enabled, the OTLP registry extension is enabled and either this value is true, or this value is unset and quarkus.micrometer.registry-enabled-default is true.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_OTLP_ENABLED

+
+
+

boolean

+
+
+
+

By default, this extension will create a OTLP MeterRegistry instance.

+
+
+

Use this attribute to veto the creation of the default OTLP MeterRegistry.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_OTLP_DEFAULT_REGISTRY

+
+
+

boolean

true

+
+
+
+

OTLP registry configuration properties.

+
+
+

A property source for configuration of the OTLP MeterRegistry, +see https://micrometer.io/docs/registry/otlp.

+
+
+

Available values:

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

Property=Default

Description

url=string

Address to where metrics will be published. +Defaults to http://localhost:4318/v1/metrics

resourceAttributes=list

A comma-separated list of attributes describing to be used as resource attributes, e.g. "key1=val1,key2=val2". +Defaults to empty. If not set it tries to use OTEL_RESOURCE_ATTRIBUTES and OTEL_SERVICE_NAME to automatically +build the resource attributes.

+
+

Other Micrometer configuration attributes can also be specified.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_OTLP

+
+
+

Map<String,String>

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-micrometer-registry/dev/micrometer-registry-signalfx.html b/quarkus-micrometer-registry/dev/micrometer-registry-signalfx.html new file mode 100644 index 0000000000..caeb16fac2 --- /dev/null +++ b/quarkus-micrometer-registry/dev/micrometer-registry-signalfx.html @@ -0,0 +1,1089 @@ + + + + + + SignalFx :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

SignalFx

+
+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.micrometer.registry</groupId>
+    <artifactId>quarkus-micrometer-registry-signalfx</artifactId>
+</dependency>
+
+
+
+
+
+

Configuration

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Support for export to SignalFx.

+
+
+

Support for SignalFx will be enabled if Micrometer support is enabled, the SignalFx registry extension is enabled and either this value is true, or this value is unset and quarkus.micrometer.registry-enabled-default is true.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_SIGNALFX_ENABLED

+
+
+

boolean

+
+
+
+

By default, this extension will create a SignalFx MeterRegistry instance.

+
+
+

Use this attribute to veto the creation of the default SignalFx MeterRegistry.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_SIGNALFX_DEFAULT_REGISTRY

+
+
+

boolean

true

+
+
+
+

SignalFx registry configuration properties.

+
+
+

A property source for configuration of the SignalFx MeterRegistry, +see https://micrometer.io/docs/registry/signalFx.

+
+
+

Available values:

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

Property=Default

Description

access-token=MY_ACCESS_TOKEN

Define the access token required to push data to SignalFx

source=identifier

Unique identifier for the app instance that is publishing metrics to SignalFx. +Defaults to the local host name.

uri=https://ingest.signalfx.com

Define the the URI to ship metrics to. Use this attribute to specify +the location of an internal proxy, if necessary.

publish=true

By default, gathered metrics will be published to SignalFx when the MeterRegistry is enabled. +Use this attribute to selectively disable publication of metrics in some environments.

step=1m

The interval at which metrics are sent to SignalFx Monitoring. The default is 1 minute.

+
+

Other Micrometer configuration attributes can also be specified.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_SIGNALFX

+
+
+

Map<String,String>

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-micrometer-registry/dev/micrometer-registry-stackdriver.html b/quarkus-micrometer-registry/dev/micrometer-registry-stackdriver.html new file mode 100644 index 0000000000..4e0d9b06e1 --- /dev/null +++ b/quarkus-micrometer-registry/dev/micrometer-registry-stackdriver.html @@ -0,0 +1,1100 @@ + + + + + + Stackdriver :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Stackdriver

+
+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.micrometer.registry</groupId>
+    <artifactId>quarkus-micrometer-registry-stackdriver</artifactId>
+</dependency>
+
+
+
+
+
+

Configuration

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Support for export to Stackdriver. +<p> +Support for Stackdriver will be enabled if Micrometer +support is enabled, the Stackdriver registry extension is enabled +and either this value is true, or this value is unset and +quarkus.micrometer.registry-enabled-default is true. +<p>

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

Stackdriver libraries do not yet support running in native mode. +The Stackdriver MeterRegistry will be automatically disabled +for native builds. +<p> +See https://github.com/grpc/grpc-java/issues/5460

+
+
+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_STACKDRIVER_ENABLED

+
+
+

boolean

+
+
+
+

By default, this extension will create a Stackdriver MeterRegistry instance.

+
+
+

Use this attribute to veto the creation of the default Stackdriver MeterRegistry.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_STACKDRIVER_DEFAULT_REGISTRY

+
+
+

boolean

true

+
+
+
+

Stackdriver registry configuration properties.

+
+
+

A property source for configuration of the Stackdriver MeterRegistry, +see https://micrometer.io/docs/registry/stackdriver.

+
+
+

Available values:

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

Property=Default

Description

project-id=MY_PROJECT_ID

Define the project id used to push data to Stackdriver Monitoring

publish=true

By default, gathered metrics will be published to Stackdriver when the MeterRegistry is enabled. +Use this attribute to selectively disable publication of metrics in some environments.

step=1m

The interval at which metrics are sent to Stackdriver Monitoring. The default is 1 minute.

+
+

Other Micrometer configuration attributes can also be specified.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_STACKDRIVER

+
+
+

Map<String,String>

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-micrometer-registry/dev/micrometer-registry-statsd.html b/quarkus-micrometer-registry/dev/micrometer-registry-statsd.html new file mode 100644 index 0000000000..925f85d411 --- /dev/null +++ b/quarkus-micrometer-registry/dev/micrometer-registry-statsd.html @@ -0,0 +1,1101 @@ + + + + + + StatsD :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

StatsD

+
+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.micrometer.registry</groupId>
+    <artifactId>quarkus-micrometer-registry-statsd</artifactId>
+</dependency>
+
+
+
+
+
+

Configuration

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Support for export to StatsD.

+
+
+

Support for StatsD will be enabled if Micrometer support is enabled, the Statsd registry extension is enabled and either this value is true, or this value is unset and quarkus.micrometer.registry-enabled-default is true.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_STATSD_ENABLED

+
+
+

boolean

+
+
+
+

By default, this extension will create a StatsD MeterRegistry instance.

+
+
+

Use this attribute to veto the creation of the default StatsD MeterRegistry.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_STATSD_DEFAULT_REGISTRY

+
+
+

boolean

true

+
+
+
+

StatsD registry configuration properties.

+
+
+

A property source for configuration of the StatsD MeterRegistry, +see https://micrometer.io/docs/registry/statsD.

+
+
+

Available values:

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

Property=Default

Description

flavor=datadog

Specify the flavor of the StatsD line protocol. The original StatsD line protocol +specification is etsy. The default value is datadog.

host=localhost

The host name of the StatsD agent.

maxPacketLength=1400

Adjust the packet length to keep the payload within your network’s MTU.

port=8125

The port of the StatsD agent`.

protocol=UDP

The protocol of the connection to the agent (UDP or TCP).

publish=true

By default, gathered metrics will be published to StatsD when the MeterRegistry is enabled. +Use this attribute to selectively disable publication of metrics in some environments.

step=1m

The interval at which metrics are sent to StatsD Monitoring. The default is 1 minute.

+
+

Other Micrometer configuration attributes can also be specified.

+
+
+

As mentioned in the Micrometer StatsD documentation, if you want to customize the metrics +sink, do so by providing your own StatsDMeterRegistry instance using a CDI @Produces +method.

+
+
+

Environment variable: QUARKUS_MICROMETER_EXPORT_STATSD

+
+
+

Map<String,String>

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-minio/dev/includes/attributes.html b/quarkus-minio/dev/includes/attributes.html new file mode 100644 index 0000000000..d088f621df --- /dev/null +++ b/quarkus-minio/dev/includes/attributes.html @@ -0,0 +1,919 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-minio/dev/includes/quarkus-minio.html b/quarkus-minio/dev/includes/quarkus-minio.html new file mode 100644 index 0000000000..7fd5cc029c --- /dev/null +++ b/quarkus-minio/dev/includes/quarkus-minio.html @@ -0,0 +1,1302 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Enable or disable Dev Services explicitly. Dev Services are automatically enabled unless quarkus.minio.url is set.

+
+
+

Environment variable: QUARKUS_MINIO_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Optional fixed port the dev service will listen to.

+
+
+

If not defined, the port will be chosen randomly.

+
+
+

Environment variable: QUARKUS_MINIO_DEVSERVICES_PORT

+
+
+

int

+
+
+
+

The Minio container image to use.

+
+
+

Environment variable: QUARKUS_MINIO_DEVSERVICES_IMAGE_NAME

+
+
+

string

minio/minio:RELEASE.2022-10-08T20-11-00Z

+
+
+
+

Indicates if the Minio server managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for Minio starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-minio label. The value is configured using the service-name property.

+
+
+

Container sharing is only used in dev mode.

+
+
+

Environment variable: QUARKUS_MINIO_DEVSERVICES_SHARED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-minio label attached to the started container. This property is used when shared is set to true. In this case, before starting a container, Dev Services for Minio looks for a container with the quarkus-dev-service-minio label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise, it starts a new container with the quarkus-dev-service-minio label set to the specified value.

+
+
+

This property is used when you need multiple shared Minio servers.

+
+
+

Environment variable: QUARKUS_MINIO_DEVSERVICES_SERVICE_NAME

+
+
+

string

minio

+
+
+
+

Minio root username access key.

+
+
+

Environment variable: QUARKUS_MINIO_DEVSERVICES_ACCESS_KEY

+
+
+

string

minioaccess

+
+
+
+

Minio root username secret key.

+
+
+

Environment variable: QUARKUS_MINIO_DEVSERVICES_SECRET_KEY

+
+
+

string

miniosecret

+
+
+
+

Should the extension provide a MinioClient. If set to false, you will have to create the clients yourself, but will still benefit the native compatibility work.

+
+
+

Environment variable: QUARKUS_MINIO_ENABLED

+
+
+

boolean

true

+
+
+
+

If value is true (default) and the io.quarkus.quarkus-micrometer is present in the class path, +then the minio client will produce metrics.

+
+
+

Only true for clients produced by the extension

+
+
+

Environment variable: QUARKUS_MINIO_PRODUCE_METRICS

+
+
+

boolean

true

+
+
+
+

If minio clients are to produce metrics, then the uri tag will have a max of 100 values

+
+
+

Environment variable: QUARKUS_MINIO_MAXIMUM_ALLOWED_TAG

+
+
+

int

100

+
+
+
+

The minio server URL.

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

Value must start with http:// or https://

+
+
+
+
+

Environment variable: QUARKUS_MINIO_URL

+
+
+

string

+
+
+
+

The minio server access key

+
+
+

Environment variable: QUARKUS_MINIO_ACCESS_KEY

+
+
+

string

+
+
+
+

The minio server secret key

+
+
+

Environment variable: QUARKUS_MINIO_SECRET_KEY

+
+
+

string

+
+
+
+

An optional bucket region

+
+
+

Environment variable: QUARKUS_MINIO_REGION

+
+
+

string

+
+
+
+

Should the extension provide a MinioClient. If set to false, you will have to create the clients yourself, but will still benefit the native compatibility work.

+
+
+

Environment variable: QUARKUS_MINIO__NAMED_MINIO_CLIENTS__ENABLED

+
+
+

boolean

true

+
+
+
+

The minio server URL.

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

Value must start with http:// or https://

+
+
+
+
+

Environment variable: QUARKUS_MINIO__NAMED_MINIO_CLIENTS__URL

+
+
+

string

+
+
+
+

The minio server access key

+
+
+

Environment variable: QUARKUS_MINIO__NAMED_MINIO_CLIENTS__ACCESS_KEY

+
+
+

string

+
+
+
+

The minio server secret key

+
+
+

Environment variable: QUARKUS_MINIO__NAMED_MINIO_CLIENTS__SECRET_KEY

+
+
+

string

+
+
+
+

An optional bucket region

+
+
+

Environment variable: QUARKUS_MINIO__NAMED_MINIO_CLIENTS__REGION

+
+
+

string

+
+
+
+
+ + + + + + + diff --git a/quarkus-minio/dev/index.html b/quarkus-minio/dev/index.html new file mode 100644 index 0000000000..7174e26082 --- /dev/null +++ b/quarkus-minio/dev/index.html @@ -0,0 +1,1540 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Integrate Min.io sdk compatible with all S3 Api compliant vendors. Available for jdk and native runtime.

+
+
+

Project configuration

+
+
+

Once you have your Quarkus project configured you can add the minio extension +to your project by running the following command in your project base directory:

+
+
+
+
./mvnw quarkus:add-extension -Dextensions="minio"
+
+
+
+

This will add the following to your pom.xml:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.minio</groupId>
+    <artifactId>quarkus-minio</artifactId>
+    <version>3.7.1</version>
+</dependency>
+
+
+
+
+
+

Native support only

+
+
+

If you need configless programmatic only creation of MinioClient, then your project should be configured as followed :

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.minio</groupId>
+    <artifactId>quarkus-minio-native</artifactId>
+    <version>3.7.1</version>
+</dependency>
+
+
+
+
+
+

Usage

+
+
+

An io.minio.MinioClient is made available to your application as a CDI bean if configuration is found.

+
+
+
+
package com.acme.minio;
+
+import io.minio.MinioClient;
+
+import jakarta.enterprise.context.ApplicationScoped;
+
+import jakarta.inject.Inject;
+
+@ApplicationScoped
+public class SampleService {
+
+    @Inject
+    MinioClient minioClient;
+
+    @ConfigProperty(name = "minio.bucket-name")
+    String bucketName;
+
+    public String getObject(String name) {
+        try (InputStream is = minio.getObject(
+                GetObjectArgs.builder()
+                        .bucket(bucketName)
+                        .object(objectName)
+                        .build());
+        ) {
+           // Do whatever you want...
+        } catch (MinioException e) {
+            throw new IllegalStateException(e);
+        }
+    }
+
+}
+
+
+
+
+
+

Multiple Minio clients

+
+
+

Configuring Multiple MinioClients

+
+

Defining multiple minio clients works exactly the same way as defining a single minio client, with one important change: +you define a name.

+
+
+

In the following example, you have 3 different minio clients:

+
+
+
    +
  • +

    The default one,

    +
  • +
  • +

    A minio client named other,

    +
  • +
  • +

    A minio client named public,

    +
  • +
+
+
+

each with its own configuration.

+
+
+
+
quarkus.minio.url=http://localhost:9000
+quarkus.minio.access-key=minioaccess
+quarkus.minio.secret-key=miniosecret
+
+quarkus.minio.other.enabled=true
+quarkus.minio.other.url=http://acme:9000
+quarkus.minio.other.access-key=minioaccess
+quarkus.minio.other.secret-key=miniosecret
+
+quarkus.minio.public.enabled=true
+quarkus.minio.public.url=http://public:9000
+quarkus.minio.public.access-key=minioaccess
+quarkus.minio.public.secret-key=miniosecret
+
+
+
+

Notice there is an extra bit in the key. +The syntax is as follows: quarkus.minio.[optional name.][bucket property].

+
+
+
+
Named minio clients need to specify at least one build time property so that Quarkus knows they exist.
+Generally this will be the `enabled` property.
+
+
+
+
+

Named MinioClient injection

+
+

When using multiple minio clients, each MinioClient also has the io.quarkiverse.minio.client.MinioQualifier qualifier with the name of the minio client as the value. +Using the above properties to configure three different minio clients, you can also inject each one as follows:

+
+
+
+
@Inject
+MinioClient defaultMinioClient;
+
+@Inject
+@MinioQualifier("public")
+MinioClient publicMinioClient;
+
+@Inject
+@MinioQualifier("other")
+MinioClient otherMinioClient;
+
+
+
+
+
+
+

Dev Services

+
+
+

Quarkus supports a feature called Dev Services that allows you to create various containers without any config. +What that means in practice is that if you have Docker running and have not configured quarkus.minio.url, +Quarkus will automatically start a Minio container when running tests or in dev mode, and automatically +configure the connection.

+
+
+

When running the production version of the application, the Minio connection needs to be configured as normal.

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

If using multiple minio client, all will target the same container. At the moment it’s also not possible to configure devservices individually for each minio client.

+
+
+
+
+

Shared server

+
+

Most of the time you need to share the server between applications. +Dev Services for Minio implements a service discovery mechanism for your multiple Quarkus applications running in dev mode to share a single server.

+
+
+ + + + + +
+ + +Dev Services for Minio starts the container with the quarkus-dev-service-minio label which is used to identify the container. +
+
+
+

If you need multiple (shared) servers, you can configure the quarkus.minio.devservices.service-name attribute and indicate the server name. +It looks for a container with the same value, or starts a new one if none can be found. +The default service name is minio.

+
+
+

Containers are started using Testcontainers and support reusable instances. If you add the property testcontainers.reuse.enable=true in your +Testcontainers configuration file, then the container will not be stopped after each run, and can be reused. See https://www.testcontainers.org/features/reuse/#how-to-use-it +for more information.

+
+
+

Sharing is enabled by default in dev mode, but disabled in test mode. +You can disable the sharing with quarkus.minio.devservices.shared=false.

+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Enable or disable Dev Services explicitly. Dev Services are automatically enabled unless quarkus.minio.url is set.

+
+
+

Environment variable: QUARKUS_MINIO_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

Optional fixed port the dev service will listen to.

+
+
+

If not defined, the port will be chosen randomly.

+
+
+

Environment variable: QUARKUS_MINIO_DEVSERVICES_PORT

+
+
+

int

+
+
+
+

The Minio container image to use.

+
+
+

Environment variable: QUARKUS_MINIO_DEVSERVICES_IMAGE_NAME

+
+
+

string

minio/minio:RELEASE.2022-10-08T20-11-00Z

+
+
+
+

Indicates if the Minio server managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for Minio starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-minio label. The value is configured using the service-name property.

+
+
+

Container sharing is only used in dev mode.

+
+
+

Environment variable: QUARKUS_MINIO_DEVSERVICES_SHARED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-minio label attached to the started container. This property is used when shared is set to true. In this case, before starting a container, Dev Services for Minio looks for a container with the quarkus-dev-service-minio label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise, it starts a new container with the quarkus-dev-service-minio label set to the specified value.

+
+
+

This property is used when you need multiple shared Minio servers.

+
+
+

Environment variable: QUARKUS_MINIO_DEVSERVICES_SERVICE_NAME

+
+
+

string

minio

+
+
+
+

Minio root username access key.

+
+
+

Environment variable: QUARKUS_MINIO_DEVSERVICES_ACCESS_KEY

+
+
+

string

minioaccess

+
+
+
+

Minio root username secret key.

+
+
+

Environment variable: QUARKUS_MINIO_DEVSERVICES_SECRET_KEY

+
+
+

string

miniosecret

+
+
+
+

Should the extension provide a MinioClient. If set to false, you will have to create the clients yourself, but will still benefit the native compatibility work.

+
+
+

Environment variable: QUARKUS_MINIO_ENABLED

+
+
+

boolean

true

+
+
+
+

If value is true (default) and the io.quarkus.quarkus-micrometer is present in the class path, +then the minio client will produce metrics.

+
+
+

Only true for clients produced by the extension

+
+
+

Environment variable: QUARKUS_MINIO_PRODUCE_METRICS

+
+
+

boolean

true

+
+
+
+

If minio clients are to produce metrics, then the uri tag will have a max of 100 values

+
+
+

Environment variable: QUARKUS_MINIO_MAXIMUM_ALLOWED_TAG

+
+
+

int

100

+
+
+
+

The minio server URL.

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

Value must start with http:// or https://

+
+
+
+
+

Environment variable: QUARKUS_MINIO_URL

+
+
+

string

+
+
+
+

The minio server access key

+
+
+

Environment variable: QUARKUS_MINIO_ACCESS_KEY

+
+
+

string

+
+
+
+

The minio server secret key

+
+
+

Environment variable: QUARKUS_MINIO_SECRET_KEY

+
+
+

string

+
+
+
+

An optional bucket region

+
+
+

Environment variable: QUARKUS_MINIO_REGION

+
+
+

string

+
+
+
+

Should the extension provide a MinioClient. If set to false, you will have to create the clients yourself, but will still benefit the native compatibility work.

+
+
+

Environment variable: QUARKUS_MINIO__NAMED_MINIO_CLIENTS__ENABLED

+
+
+

boolean

true

+
+
+
+

The minio server URL.

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

Value must start with http:// or https://

+
+
+
+
+

Environment variable: QUARKUS_MINIO__NAMED_MINIO_CLIENTS__URL

+
+
+

string

+
+
+
+

The minio server access key

+
+
+

Environment variable: QUARKUS_MINIO__NAMED_MINIO_CLIENTS__ACCESS_KEY

+
+
+

string

+
+
+
+

The minio server secret key

+
+
+

Environment variable: QUARKUS_MINIO__NAMED_MINIO_CLIENTS__SECRET_KEY

+
+
+

string

+
+
+
+

An optional bucket region

+
+
+

Environment variable: QUARKUS_MINIO__NAMED_MINIO_CLIENTS__REGION

+
+
+

string

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-minio/v2.9.x/includes/attributes.html b/quarkus-minio/v2.9.x/includes/attributes.html new file mode 100644 index 0000000000..de6fb1012b --- /dev/null +++ b/quarkus-minio/v2.9.x/includes/attributes.html @@ -0,0 +1,919 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-minio/v2.9.x/index.html b/quarkus-minio/v2.9.x/index.html new file mode 100644 index 0000000000..7b63738249 --- /dev/null +++ b/quarkus-minio/v2.9.x/index.html @@ -0,0 +1,1262 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Integrate Min.io sdk compatible with all S3 Api complient vendors. Available for jdk and native runtime.

+
+
+

Configuration

+
+
+

Once you have your Quarkus project configured you can add the minio extension +to your project by running the following command in your project base directory:

+
+
+
+
./mvnw quarkus:add-extension -Dextensions="minio"
+
+
+
+

This will add the following to your pom.xml:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.minio</groupId>
+    <artifactId>quarkus-minio</artifactId>
+    <version>2.9.3</version>
+</dependency>
+
+
+
+
+
+

Usage

+
+
+

An io.minio.MinioClient is made available to your application as a CDI bean if configuration is found.

+
+
+
+
package com.acme.minio;
+
+import io.minio.MinioClient;
+
+import javax.enterprise.context.ApplicationScoped;
+
+import javax.inject.Inject;
+
+@ApplicationScoped
+public class SampleService {
+
+    @Inject
+    MinioClient minioClient;
+
+    @ConfigProperty(name = "minio.bucket-name")
+    String bucketName;
+
+    public String getObject(String objectName) {
+        try (InputStream is = minioClient.getObject(
+                GetObjectArgs.builder()
+                        .bucket(bucketName)
+                        .object(objectName)
+                        .build());
+        ) {
+           // Do whatever you want...
+        } catch (MinioException e) {
+            throw new IllegalStateException(e);
+        }
+    }
+
+}
+
+
+
+
+
+

Configuration Reference

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

Configuration property

Type

Default

+

quarkus.minio.url

+
+
+
+
+

The minio server URL.

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

Value must start with http:// or https://

+
+
+
+
+

string

+

quarkus.minio.access-key

+
+
+
+
+

The minio server access key

+
+
+

string

+

quarkus.minio.secret-key

+
+
+
+
+

The minio server secret key

+
+
+

string

+

quarkus.minio.region

+
+
+
+
+

An optional bucket region

+
+
+

string

+

quarkus.minio.allow-empty

+
+
+
+
+

If allow-empty is set to true and all other configuration options are empty, null is produced instead of the minio client.

+
+
+

string

+

quarkus.minio.produceMetrics

+
+
+
+
+

If true and the <code>io.quarkus.quarkus-micrometer</code> is present in the class path, then the minio client will produce metrics.

+
+
+

boolean

+

true

+
+
+
+
+

Dev Services

+
+
+

Quarkus supports a feature called Dev Services that allows you to create various containers without any config. +What that means in practice is that if you have Docker running and have not configured quarkus.minio.url, +Quarkus will automatically start a Minio container when running tests or in dev mode, and automatically +configure the connection.

+
+
+

When running the production version of the application, the Minio connection needs to be configured as normal.

+
+
+

Shared server

+
+

Most of the time you need to share the server between applications. +Dev Services for Minio implements a service discovery mechanism for your multiple Quarkus applications running in dev mode to share a single server.

+
+
+ + + + + +
+ + +Dev Services for Minio starts the container with the quarkus-dev-service-minio label which is used to identify the container. +
+
+
+

If you need multiple (shared) servers, you can configure the quarkus.minio.devservices.service-name attribute and indicate the server name. +It looks for a container with the same value, or starts a new one if none can be found. +The default service name is minio.

+
+
+

Sharing is enabled by default in dev mode, but disabled in test mode. +You can disable the sharing with quarkus.minio.devservices.shared=false.

+
+
+
+

Configuration

+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+

quarkus.minio.devservices.enabled

+
+
+
+
+

If DevServices has been explicitly enabled or disabled. DevServices is generally enabled by default, unless there is an existing configuration present. When DevServices is enabled Quarkus will attempt to automatically configure and start a Minio container when running in Dev or Test mode.

+
+
+

boolean

true

+

quarkus.minio.devservices.image-name

+
+
+
+
+

The container image name to use, for container based DevServices providers.

+
+
+

String

minio/minio:RELEASE.2020-11-10T21-02-24Z

+

quarkus.minio.devservices.shared

+
+
+
+
+

Indicates if the Minio server managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for Minio starts a new container. +The discovery uses the quarkus-dev-service-minio label. The value is configured using the service-name property. +Container sharing is only used in dev mode.

+
+
+

boolean

true

+

quarkus.minio.devservices.service-name

+
+
+
+
+

The value of the quarkus-dev-service-minio label attached to the started container. This property is used when shared is set to true. In this case, before starting a container, Dev Services for Minio looks for a container with the quarkus-dev-service-minio label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise, it starts a new container with the quarkus-dev-service-minio label set to the specified value. +This property is used when you need multiple shared Minio servers.

+
+
+

String

minio

+

quarkus.minio.devservices.access-key

+
+
+
+
+

Minio root username access key.

+
+
+

String

minioaccess

+

quarkus.minio.devservices.secret-key

+
+
+
+
+

Minio root username secret key.

+
+
+

String

miniosecret

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-mockk/dev/index.html b/quarkus-mockk/dev/index.html new file mode 100644 index 0000000000..56344ac039 --- /dev/null +++ b/quarkus-mockk/dev/index.html @@ -0,0 +1,995 @@ + + + + + + Quarkus Mockk Extension :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Mockk Extension

+
+
+
+

This extension allows you to inject MockK mocks in your QuarkusTest tests.

+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the quarkus-junit5-mockk extension first. +In your pom.xml file, add:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.mockk</groupId>
+    <artifactId>quarkus-junit5-mockk</artifactId>
+    <version>LATEST</version>
+    <scope>test</scope>
+</dependency>
+
+
+
+

Or add this in your build.gradle file:

+
+
+
+
dependencies {
+    testImplementation 'io.quarkiverse.mockk:quarkus-junit5-mockk:LATEST'
+}
+
+
+
+

The extension exposes two annotations:

+
+
+
    +
  • +

    @InjectMock to inject MockK mocks in your application

    +
  • +
  • +

    @InjectSpy to inject SpyK spies in your application

    +
  • +
+
+
+
+
+

Compatibility with Quarkus

+
+
+

Starting with Quarkus 2.8 and above, version 1.1.0 of quarkus-junit5-mockk should be used. +If you use a version before 2.7, version 1.0.1 of quarkus-junit5-mockk should be used.

+
+
+
+
+

Known limitations

+
+
+

For the moment, this library does not :

+
+
+
    +
  • +

    Support mock injection in @Nested test classes

    +
  • +
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-mockk/dev/injectmock.html b/quarkus-mockk/dev/injectmock.html new file mode 100644 index 0000000000..d1c5e2aee8 --- /dev/null +++ b/quarkus-mockk/dev/injectmock.html @@ -0,0 +1,1002 @@ + + + + + + @InjectMock annotation :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

@InjectMock annotation

+
+
+
+

This annotation allows you to inject MockK mocks in your application.

+
+
+

This annotation has three parameters:

+
+
+
    +
  • +

    relaxed, if set to true, all function will return simple values. Default to false.

    +
  • +
  • +

    relaxUnitFun, if set to true, Unit function will be relaxed. Default to false.

    +
  • +
  • +

    convertScopes, it set to true, convert the @Singleton scope of bean to @ApplicationScoped. This allows to mock singleton beans

    +
  • +
+
+
+
+
+

Example

+
+
+

For example, @InjectMock can be used in the following example:

+
+
+
+
@QuarkusTest
+class InjectionMockTest {
+
+    @Inject
+    private lateinit var firstService: FirstService
+
+    @InjectMock
+    private lateinit var secondService: SecondService
+
+    @Test
+    fun `should respond test`() {
+        every { secondService.greet() } returns "test"
+        assertThat(firstService.greet()).isEqualTo("test")
+    }
+
+    @Test
+    fun `should respond second`() {
+        every { secondService.greet() } returns "second"
+        assertThat(firstService.greet()).isEqualTo("second")
+        verify { secondService.greet() }
+    }
+}
+
+
+
+

In order to mock a RestClient, you must add the @RestClient qualifier alongside the @InjectMock:

+
+
+
+
@QuarkusTest
+class InjectionMockTest {
+
+    @Inject
+    private lateinit var firstService: FirstService
+
+    @InjectMock
+    @RestClient
+    private lateinit var myRestClientService: MyRestClientService
+
+    @Test
+    fun `should respond test`() {
+        every { myRestClientService.greet() } returns "test"
+        assertThat(firstService.greet()).isEqualTo("test")
+    }
+}
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-mockk/dev/injectspy.html b/quarkus-mockk/dev/injectspy.html new file mode 100644 index 0000000000..7ec019cf90 --- /dev/null +++ b/quarkus-mockk/dev/injectspy.html @@ -0,0 +1,962 @@ + + + + + + @InjectSpy annotation :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

@InjectSpy annotation

+
+
+
+

This annotation allows you to inject spies in your application.

+
+
+

Spy allows you to mixed real objects and mocks.

+
+
+
+
+

Example

+
+
+

For example, @InjectSpy can be used in the following example:

+
+
+
+
@QuarkusTest
+class InjectionMockTest {
+
+    @InjectSpy
+    private lateinit var firstService: FirstService
+
+    @Test
+    fun `should respond test`() {
+        assertThat(firstService.greet()).isEqualTo("Hello")
+    }
+
+    @Test
+    fun `should respond second`() {
+        every { firstService.greet() } returns "mock response"
+        assertThat(firstService.greet()).isEqualTo("mock response")
+        verify { firstService.greet() }
+    }
+}
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-mockserver/0.x/includes/attributes.html b/quarkus-mockserver/0.x/includes/attributes.html new file mode 100644 index 0000000000..f7ac5e60eb --- /dev/null +++ b/quarkus-mockserver/0.x/includes/attributes.html @@ -0,0 +1,919 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-mockserver/0.x/includes/quarkus-mockserver.html b/quarkus-mockserver/0.x/includes/quarkus-mockserver.html new file mode 100644 index 0000000000..63477b3c06 --- /dev/null +++ b/quarkus-mockserver/0.x/includes/quarkus-mockserver.html @@ -0,0 +1,1195 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

If DevServices has been explicitly enabled or disabled. DevServices is generally enabled by default, unless there is an existing configuration present. +When DevServices is enabled Quarkus will attempt to automatically configure and start a database when running in Dev or Test mode and when Docker is running.

+
+
+

Environment variable: QUARKUS_MOCKSERVER_DEVSERVICES_ENABLED

+
+
+

boolean

true

+
+
+
+

Enabled or disable log of the mock-server

+
+
+

Environment variable: QUARKUS_MOCKSERVER_DEVSERVICES_LOG

+
+
+

boolean

false

+
+
+
+

The container image name to use, for container based DevServices providers.

+
+
+

Environment variable: QUARKUS_MOCKSERVER_DEVSERVICES_IMAGE_NAME

+
+
+

string

+
+
+
+

Optional fixed port the dev service will listen to. +If not defined, the port will be chosen randomly.

+
+
+

Environment variable: QUARKUS_MOCKSERVER_DEVSERVICES_PORT

+
+
+

int

+
+
+
+

Indicates if the MockServer server managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for MockServer starts a new container. +The discovery uses the quarkus-dev-service-mockserver label. The value is configured using the service-name property. +Container sharing is only used in dev mode.

+
+
+

Environment variable: QUARKUS_MOCKSERVER_DEVSERVICES_SHARED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-mockserver label attached to the started container. This property is used when shared is set to true. In this case, before starting a container, Dev Services for Mockserver looks for a container with the quarkus-dev-service-mockserver label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise, it starts a new container with the quarkus-dev-service-mockserver label set to the specified value. +This property is used when you need multiple shared MockServer servers.

+
+
+

Environment variable: QUARKUS_MOCKSERVER_DEVSERVICES_SERVICE_NAME

+
+
+

string

mock-server

+
+
+
+

MockServer configuration file.

+
+
+

Environment variable: QUARKUS_MOCKSERVER_DEVSERVICES_CONFIG_FILE

+
+
+

string

+
+
+
+

MockServer’s configuration class-path binding. Useful for the test and CI builds. When set to true, a test-container withClasspathResourceMapping method is used.

+
+
+

Environment variable: QUARKUS_MOCKSERVER_DEVSERVICES_CONFIG_CLASS_PATH

+
+
+

boolean

false

+
+
+
+

Helper to define the stop strategy for containers created by DevServices. In particular, we don’t want to actually stop the containers when they have been flagged for reuse, and when the Testcontainers configuration has been explicitly set to allow container reuse. To enable reuse, ass testcontainers.reuse.enable=true in your .testcontainers.properties file, to be stored in your home.

+
+
+

Environment variable: QUARKUS_MOCKSERVER_DEVSERVICES_REUSE

+
+
+

boolean

false

+
+
+
+

The configuration directory to mount in the container /config.

+
+
+

Environment variable: QUARKUS_MOCKSERVER_DEVSERVICES_CONFIG_DIR

+
+
+

string

+
+
+
+

Host of the MockServer

+
+
+

Environment variable: QUARKUS_MOCKSERVER_HOST

+
+
+

string

localhost

+
+
+
+

Port of the MockServer

+
+
+

Environment variable: QUARKUS_MOCKSERVER_PORT

+
+
+

string

1080

+
+
+
+

Endpoint of the MockServer

+
+
+

Environment variable: QUARKUS_MOCKSERVER_ENDPOINT

+
+
+

string

http://localhost:8080

+
+
+
+

Host of the MockServer for the MockServerClient

+
+
+

Environment variable: QUARKUS_MOCKSERVER_CLIENT_HOST

+
+
+

string

localhost

+
+
+
+

Port of the MockServer for the MockServerClient

+
+
+

Environment variable: QUARKUS_MOCKSERVER_CLIENT_PORT

+
+
+

string

1080

+
+
+
+
+ + + + + + + diff --git a/quarkus-mockserver/0.x/index.html b/quarkus-mockserver/0.x/index.html new file mode 100644 index 0000000000..8e8e0f063c --- /dev/null +++ b/quarkus-mockserver/0.x/index.html @@ -0,0 +1,1365 @@ + + + + + + Quarkus MockServer :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus MockServer

+
+
+
+

Quarkus [MockServer](https://mock-server.com/) extension for tests and local development.

+
+
+ + + + + +
+ + +Quarkus test and dev MockServer extension. +
+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.mockserver:quarkus-mockserver extension first to your build file.

+
+
+

For instance, with Maven, add the following dependency to your POM file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.mockserver</groupId>
+    <artifactId>quarkus-mockserver-test</artifactId>
+    <version>0.6.0</version>
+    <scope>provided</scope>
+</dependency>
+
+
+
+
+
+

Usage

+
+
+

This extension provides a quarkus.mockserver.endpoint variable that points to the launched Docker container.

+
+
+

Example configuration for local development and testing:

+
+
+
+
%dev.quarkus.mockserver.devservices.config-file=src/test/resources/mockserver.properties
+%dev.quarkus.mockserver.devservices.config-dir=src/test/resources/mockserver
+%dev.quarkus.mockserver.devservices.log=true
+
+%dev.activity-client/mp-rest/url=${quarkus.mockserver.endpoint}
+%test.activity-client/mp-rest/url=${quarkus.mockserver.endpoint}
+
+
+ +
+

MockServer documentation

+ +
+
+
+
+

Testing

+
+
+

To use the extension for test, add the dependency to the target project:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.mockserver</groupId>
+    <artifactId>quarkus-mockserver-test</artifactId>
+    <version>0.6.0</version>
+    <scope>test</scope>
+</dependency>
+
+
+
+

Test class example

+
+
+
+
import io.quarkiverse.mockserver.test.MockServerTestResource;
+import io.quarkus.test.common.QuarkusTestResource;
+
+@QuarkusTest
+@QuarkusTestResource(MockServerTestResource.class)
+public class BaseTest {
+
+    @InjectMockServerClient
+    MockServerClient mockServerClient;
+
+        @Test
+    public void test200() {
+        Map<String, Object> data = new HashMap<>();
+        data.put("key-A", "value-A");
+        data.put("key-B", 1);
+
+        // create mock rest endpoint
+        mockServerClient
+                .when(request()
+                .withPath("/activity/data/1")
+                .withMethod("POST"))
+                .respond(
+                   httpRequest -> response()
+                                  .withStatusCode(200)
+                                  .withHeader("Content-Type", "application/json")
+                                  .withBody(JsonBody.json(data))
+                );
+        }
+
+        // ... test
+}
+
+
+
+

We can reuse the test for the integration test.

+
+
+
+
import io.quarkus.test.junit.QuarkusIntegrationTest;
+
+@QuarkusIntegrationTest
+public class BaseIT extends BaseTest {
+
+}
+
+
+
+

For more information check examples in the integration-tests directory in this repo.

+
+
+
+
+

Extension Configuration Reference

+
+
+ + + + + +
+ + +Remove this section if you don’t have Quarkus configuration properties in your extension. +
+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

If DevServices has been explicitly enabled or disabled. DevServices is generally enabled by default, unless there is an existing configuration present. +When DevServices is enabled Quarkus will attempt to automatically configure and start a database when running in Dev or Test mode and when Docker is running.

+
+
+

Environment variable: QUARKUS_MOCKSERVER_DEVSERVICES_ENABLED

+
+
+

boolean

true

+
+
+
+

Enabled or disable log of the mock-server

+
+
+

Environment variable: QUARKUS_MOCKSERVER_DEVSERVICES_LOG

+
+
+

boolean

false

+
+
+
+

The container image name to use, for container based DevServices providers.

+
+
+

Environment variable: QUARKUS_MOCKSERVER_DEVSERVICES_IMAGE_NAME

+
+
+

string

+
+
+
+

Optional fixed port the dev service will listen to. +If not defined, the port will be chosen randomly.

+
+
+

Environment variable: QUARKUS_MOCKSERVER_DEVSERVICES_PORT

+
+
+

int

+
+
+
+

Indicates if the MockServer server managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for MockServer starts a new container. +The discovery uses the quarkus-dev-service-mockserver label. The value is configured using the service-name property. +Container sharing is only used in dev mode.

+
+
+

Environment variable: QUARKUS_MOCKSERVER_DEVSERVICES_SHARED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-mockserver label attached to the started container. This property is used when shared is set to true. In this case, before starting a container, Dev Services for Mockserver looks for a container with the quarkus-dev-service-mockserver label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise, it starts a new container with the quarkus-dev-service-mockserver label set to the specified value. +This property is used when you need multiple shared MockServer servers.

+
+
+

Environment variable: QUARKUS_MOCKSERVER_DEVSERVICES_SERVICE_NAME

+
+
+

string

mock-server

+
+
+
+

MockServer configuration file.

+
+
+

Environment variable: QUARKUS_MOCKSERVER_DEVSERVICES_CONFIG_FILE

+
+
+

string

+
+
+
+

MockServer’s configuration class-path binding. Useful for the test and CI builds. When set to true, a test-container withClasspathResourceMapping method is used.

+
+
+

Environment variable: QUARKUS_MOCKSERVER_DEVSERVICES_CONFIG_CLASS_PATH

+
+
+

boolean

false

+
+
+
+

Helper to define the stop strategy for containers created by DevServices. In particular, we don’t want to actually stop the containers when they have been flagged for reuse, and when the Testcontainers configuration has been explicitly set to allow container reuse. To enable reuse, ass testcontainers.reuse.enable=true in your .testcontainers.properties file, to be stored in your home.

+
+
+

Environment variable: QUARKUS_MOCKSERVER_DEVSERVICES_REUSE

+
+
+

boolean

false

+
+
+
+

The configuration directory to mount in the container /config.

+
+
+

Environment variable: QUARKUS_MOCKSERVER_DEVSERVICES_CONFIG_DIR

+
+
+

string

+
+
+
+

Host of the MockServer

+
+
+

Environment variable: QUARKUS_MOCKSERVER_HOST

+
+
+

string

localhost

+
+
+
+

Port of the MockServer

+
+
+

Environment variable: QUARKUS_MOCKSERVER_PORT

+
+
+

string

1080

+
+
+
+

Endpoint of the MockServer

+
+
+

Environment variable: QUARKUS_MOCKSERVER_ENDPOINT

+
+
+

string

http://localhost:8080

+
+
+
+

Host of the MockServer for the MockServerClient

+
+
+

Environment variable: QUARKUS_MOCKSERVER_CLIENT_HOST

+
+
+

string

localhost

+
+
+
+

Port of the MockServer for the MockServerClient

+
+
+

Environment variable: QUARKUS_MOCKSERVER_CLIENT_PORT

+
+
+

string

1080

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-mockserver/dev/includes/attributes.html b/quarkus-mockserver/dev/includes/attributes.html new file mode 100644 index 0000000000..cca1b6e471 --- /dev/null +++ b/quarkus-mockserver/dev/includes/attributes.html @@ -0,0 +1,919 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-mockserver/dev/includes/quarkus-mockserver.html b/quarkus-mockserver/dev/includes/quarkus-mockserver.html new file mode 100644 index 0000000000..218840c398 --- /dev/null +++ b/quarkus-mockserver/dev/includes/quarkus-mockserver.html @@ -0,0 +1,1205 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

If DevServices has been explicitly enabled or disabled. DevServices is generally enabled by default, unless there is an existing configuration present.

+
+
+

When DevServices is enabled Quarkus will attempt to automatically configure and start a database when running in Dev or Test mode and when Docker is running.

+
+
+

Environment variable: QUARKUS_MOCKSERVER_DEVSERVICES_ENABLED

+
+
+

boolean

true

+
+
+
+

Enabled or disable log of the mock-server

+
+
+

Environment variable: QUARKUS_MOCKSERVER_DEVSERVICES_LOG

+
+
+

boolean

false

+
+
+
+

The container image name to use, for container based DevServices providers.

+
+
+

Environment variable: QUARKUS_MOCKSERVER_DEVSERVICES_IMAGE_NAME

+
+
+

string

+
+
+
+

Optional fixed port the dev service will listen to.

+
+
+

If not defined, the port will be chosen randomly.

+
+
+

Environment variable: QUARKUS_MOCKSERVER_DEVSERVICES_PORT

+
+
+

int

+
+
+
+

Indicates if the MockServer server managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for MockServer starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-mockserver label. The value is configured using the service-name property.

+
+
+

Container sharing is only used in dev mode.

+
+
+

Environment variable: QUARKUS_MOCKSERVER_DEVSERVICES_SHARED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-mockserver label attached to the started container. This property is used when shared is set to true. In this case, before starting a container, Dev Services for Mockserver looks for a container with the quarkus-dev-service-mockserver label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise, it starts a new container with the quarkus-dev-service-mockserver label set to the specified value.

+
+
+

This property is used when you need multiple shared MockServer servers.

+
+
+

Environment variable: QUARKUS_MOCKSERVER_DEVSERVICES_SERVICE_NAME

+
+
+

string

mock-server

+
+
+
+

MockServer configuration file.

+
+
+

Environment variable: QUARKUS_MOCKSERVER_DEVSERVICES_CONFIG_FILE

+
+
+

string

+
+
+
+

MockServer’s configuration class-path binding. Useful for the test and CI builds. When set to true, a test-container withClasspathResourceMapping method is used.

+
+
+

Environment variable: QUARKUS_MOCKSERVER_DEVSERVICES_CONFIG_CLASS_PATH

+
+
+

boolean

false

+
+
+
+

Helper to define the stop strategy for containers created by DevServices. In particular, we don’t want to actually stop the containers when they have been flagged for reuse, and when the Testcontainers configuration has been explicitly set to allow container reuse. To enable reuse, ass testcontainers.reuse.enable=true in your .testcontainers.properties file, to be stored in your home.

+
+
+

Environment variable: QUARKUS_MOCKSERVER_DEVSERVICES_REUSE

+
+
+

boolean

false

+
+
+
+

The configuration directory to mount in the container /config.

+
+
+

Environment variable: QUARKUS_MOCKSERVER_DEVSERVICES_CONFIG_DIR

+
+
+

string

+
+
+
+

Host of the MockServer

+
+
+

Environment variable: QUARKUS_MOCKSERVER_HOST

+
+
+

string

localhost

+
+
+
+

Port of the MockServer

+
+
+

Environment variable: QUARKUS_MOCKSERVER_PORT

+
+
+

string

1080

+
+
+
+

Endpoint of the MockServer

+
+
+

Environment variable: QUARKUS_MOCKSERVER_ENDPOINT

+
+
+

string

http://localhost:8080

+
+
+
+

Host of the MockServer for the MockServerClient

+
+
+

Environment variable: QUARKUS_MOCKSERVER_CLIENT_HOST

+
+
+

string

localhost

+
+
+
+

Port of the MockServer for the MockServerClient

+
+
+

Environment variable: QUARKUS_MOCKSERVER_CLIENT_PORT

+
+
+

string

1080

+
+
+
+
+ + + + + + + diff --git a/quarkus-mockserver/dev/index.html b/quarkus-mockserver/dev/index.html new file mode 100644 index 0000000000..66308b81b9 --- /dev/null +++ b/quarkus-mockserver/dev/index.html @@ -0,0 +1,1376 @@ + + + + + + Quarkus MockServer :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus MockServer

+
+
+
+

Quarkus MockServer extension for tests and local development.

+
+
+ + + + + +
+ + +Quarkus test and dev MockServer extension. +
+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.mockserver:quarkus-mockserver extension first to your build file.

+
+
+

For instance, with Maven, add the following dependency to your POM file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.mockserver</groupId>
+    <artifactId>quarkus-mockserver-test</artifactId>
+    <version>1.4.0</version>
+    <scope>provided</scope>
+</dependency>
+
+
+
+
+
+

Usage

+
+
+

This extension provides a quarkus.mockserver.endpoint variable that points to the launched Docker container.

+
+
+

Example configuration for local development and testing:

+
+
+
+
%dev.quarkus.mockserver.devservices.config-file=src/test/resources/mockserver.properties
+%dev.quarkus.mockserver.devservices.config-dir=src/test/resources/mockserver
+%dev.quarkus.mockserver.devservices.log=true
+
+%dev.activity-client/mp-rest/url=${quarkus.mockserver.endpoint}
+%test.activity-client/mp-rest/url=${quarkus.mockserver.endpoint}
+
+
+ +
+

MockServer documentation

+ +
+
+
+
+

Testing

+
+
+

To use the extension for test, add the dependency to the target project:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.mockserver</groupId>
+    <artifactId>quarkus-mockserver-test</artifactId>
+    <version>1.4.0</version>
+    <scope>test</scope>
+</dependency>
+
+
+
+

Test class example

+
+
+
+
import io.quarkiverse.mockserver.test.MockServerTestResource;
+import io.quarkus.test.common.QuarkusTestResource;
+
+@QuarkusTest
+@QuarkusTestResource(MockServerTestResource.class)
+public class BaseTest {
+
+    @InjectMockServerClient
+    MockServerClient mockServerClient;
+
+        @Test
+    public void test200() {
+        Map<String, Object> data = new HashMap<>();
+        data.put("key-A", "value-A");
+        data.put("key-B", 1);
+
+        // create mock rest endpoint
+        mockServerClient
+                .when(request()
+                .withPath("/activity/data/1")
+                .withMethod("POST"))
+                .respond(
+                   httpRequest -> response()
+                                  .withStatusCode(200)
+                                  .withHeader("Content-Type", "application/json")
+                                  .withBody(JsonBody.json(data))
+                );
+        }
+
+        // ... test
+}
+
+
+
+

We can reuse the test for the integration test.

+
+
+
+
import io.quarkus.test.junit.QuarkusIntegrationTest;
+
+@QuarkusIntegrationTest
+public class BaseIT extends BaseTest {
+
+}
+
+
+
+

For more information check examples in the integration-tests directory in this repo.

+
+
+
+
+

Extension Configuration Reference

+
+
+ + + + + +
+ + +Remove this section if you don’t have Quarkus configuration properties in your extension. +
+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

If DevServices has been explicitly enabled or disabled. DevServices is generally enabled by default, unless there is an existing configuration present.

+
+
+

When DevServices is enabled Quarkus will attempt to automatically configure and start a database when running in Dev or Test mode and when Docker is running.

+
+
+

Environment variable: QUARKUS_MOCKSERVER_DEVSERVICES_ENABLED

+
+
+

boolean

true

+
+
+
+

Enabled or disable log of the mock-server

+
+
+

Environment variable: QUARKUS_MOCKSERVER_DEVSERVICES_LOG

+
+
+

boolean

false

+
+
+
+

The container image name to use, for container based DevServices providers.

+
+
+

Environment variable: QUARKUS_MOCKSERVER_DEVSERVICES_IMAGE_NAME

+
+
+

string

+
+
+
+

Optional fixed port the dev service will listen to.

+
+
+

If not defined, the port will be chosen randomly.

+
+
+

Environment variable: QUARKUS_MOCKSERVER_DEVSERVICES_PORT

+
+
+

int

+
+
+
+

Indicates if the MockServer server managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for MockServer starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-mockserver label. The value is configured using the service-name property.

+
+
+

Container sharing is only used in dev mode.

+
+
+

Environment variable: QUARKUS_MOCKSERVER_DEVSERVICES_SHARED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-mockserver label attached to the started container. This property is used when shared is set to true. In this case, before starting a container, Dev Services for Mockserver looks for a container with the quarkus-dev-service-mockserver label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise, it starts a new container with the quarkus-dev-service-mockserver label set to the specified value.

+
+
+

This property is used when you need multiple shared MockServer servers.

+
+
+

Environment variable: QUARKUS_MOCKSERVER_DEVSERVICES_SERVICE_NAME

+
+
+

string

mock-server

+
+
+
+

MockServer configuration file.

+
+
+

Environment variable: QUARKUS_MOCKSERVER_DEVSERVICES_CONFIG_FILE

+
+
+

string

+
+
+
+

MockServer’s configuration class-path binding. Useful for the test and CI builds. When set to true, a test-container withClasspathResourceMapping method is used.

+
+
+

Environment variable: QUARKUS_MOCKSERVER_DEVSERVICES_CONFIG_CLASS_PATH

+
+
+

boolean

false

+
+
+
+

Helper to define the stop strategy for containers created by DevServices. In particular, we don’t want to actually stop the containers when they have been flagged for reuse, and when the Testcontainers configuration has been explicitly set to allow container reuse. To enable reuse, ass testcontainers.reuse.enable=true in your .testcontainers.properties file, to be stored in your home.

+
+
+

Environment variable: QUARKUS_MOCKSERVER_DEVSERVICES_REUSE

+
+
+

boolean

false

+
+
+
+

The configuration directory to mount in the container /config.

+
+
+

Environment variable: QUARKUS_MOCKSERVER_DEVSERVICES_CONFIG_DIR

+
+
+

string

+
+
+
+

Host of the MockServer

+
+
+

Environment variable: QUARKUS_MOCKSERVER_HOST

+
+
+

string

localhost

+
+
+
+

Port of the MockServer

+
+
+

Environment variable: QUARKUS_MOCKSERVER_PORT

+
+
+

string

1080

+
+
+
+

Endpoint of the MockServer

+
+
+

Environment variable: QUARKUS_MOCKSERVER_ENDPOINT

+
+
+

string

http://localhost:8080

+
+
+
+

Host of the MockServer for the MockServerClient

+
+
+

Environment variable: QUARKUS_MOCKSERVER_CLIENT_HOST

+
+
+

string

localhost

+
+
+
+

Port of the MockServer for the MockServerClient

+
+
+

Environment variable: QUARKUS_MOCKSERVER_CLIENT_PORT

+
+
+

string

1080

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-mybatis/1.x/includes/attributes.html b/quarkus-mybatis/1.x/includes/attributes.html new file mode 100644 index 0000000000..c6276c23c4 --- /dev/null +++ b/quarkus-mybatis/1.x/includes/attributes.html @@ -0,0 +1,919 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-mybatis/1.x/includes/quarkus-mybatis.html b/quarkus-mybatis/1.x/includes/quarkus-mybatis.html new file mode 100644 index 0000000000..dba77c18f7 --- /dev/null +++ b/quarkus-mybatis/1.x/includes/quarkus-mybatis.html @@ -0,0 +1,1920 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

enable mybatis xml configuration

+
+
+

boolean

false

+
+
+
+

xml configuration file

+
+
+

string

mybatis-config.xml

+
+
+
+

MyBatis environment id

+
+
+

string

quarkus

+
+
+
+

MyBatis transaction factory

+
+
+

string

MANAGED

+
+
+
+

MyBatis data source

+
+
+

string

+
+
+
+

MyBatis initial sql

+
+
+

string

+
+
+
+

MyBatis cacheEnabled

+
+
+

boolean

true

+
+
+
+

MyBatis lazyLoadingEnabled

+
+
+

boolean

false

+
+
+
+

MyBatis aggressiveLazyLoading

+
+
+

boolean

false

+
+
+
+

MyBatis useColumnLabel

+
+
+

boolean

true

+
+
+
+

MyBatis useGeneratedKeys

+
+
+

boolean

false

+
+
+
+

MyBatis autoMappingBehavior

+
+
+

none, partial, full

partial

+
+
+
+

MyBatis autoMappingUnknownColumnBehavior

+
+
+

none, warning, failing

none

+
+
+
+

MyBatis defaultExecutorType

+
+
+

simple, reuse, batch

simple

+
+
+
+

MyBatis defaultStatementTimeout

+
+
+

int

+
+
+
+

MyBatis defaultFetchSize

+
+
+

int

+
+
+
+

MyBatis defaultResultSetType

+
+
+

default, forward-only, scroll-insensitive, scroll-sensitive

+
+
+
+

MyBatis safeRowBoundsEnabled

+
+
+

boolean

false

+
+
+
+

MyBatis safeResultHandlerEnabled

+
+
+

boolean

true

+
+
+
+

MyBatis mapUnderscoreToCamelCase

+
+
+

boolean

false

+
+
+
+

MyBatis multipleResultSetsEnabled

+
+
+

boolean

true

+
+
+
+

MyBatis localCacheScope

+
+
+

session, statement

session

+
+
+
+

MyBatis jdbcTypeForNull

+
+
+

array, bit, tinyint, smallint, integer, bigint, float, real, double, numeric, decimal, char, varchar, longvarchar, date, time, timestamp, binary, varbinary, longvarbinary, null, other, blob, clob, boolean, cursor, undefined, nvarchar, nchar, nclob, struct, java-object, distinct, ref, datalink, rowid, longnvarchar, sqlxml, datetimeoffset, time-with-timezone, timestamp-with-timezone

other

+
+
+
+

MyBatis lazyLoadTriggerMethods

+
+
+

list of string

equals,clone,hashCode,toString

+
+
+
+

MyBatis defaultScriptingLanguage

+
+
+

string

org.apache.ibatis.scripting.xmltags.XMLLanguageDriver

+
+
+
+

MyBatis defaultEnumTypeHandler

+
+
+

string

org.apache.ibatis.type.EnumTypeHandler

+
+
+
+

MyBatis callSettersOnNulls

+
+
+

boolean

false

+
+
+
+

MyBatis returnInstanceForEmptyRow

+
+
+

boolean

false

+
+
+
+

MyBatis logPrefix

+
+
+

string

+
+
+
+

MyBatis logImpl

+
+
+

string

+
+
+
+

MyBatis proxyFactory

+
+
+

string

JAVASSIST

+
+
+
+

MyBatis vfsImpl

+
+
+

string

+
+
+
+

MyBatis useActualParamName

+
+
+

boolean

true

+
+
+
+

MyBatis configurationFactory

+
+
+

string

+
+
+
+

MyBatis shrinkWhitespacesInSql

+
+
+

boolean

false

+
+
+
+

MyBatis defaultSqlProviderType

+
+
+

string

+
+
+
+

MyBatis mapperLocations

+
+
+

list of string

Data sources config

Type

Default

+
+
+
+

MyBatis environment id

+
+
+

string

+
+
+
+

MyBatis transaction factory

+
+
+

string

+
+
+
+

MyBatis initial sql

+
+
+

string

+
+
+
+

MyBatis cacheEnabled

+
+
+

boolean

+
+
+
+

MyBatis lazyLoadingEnabled

+
+
+

boolean

+
+
+
+

MyBatis aggressiveLazyLoading

+
+
+

boolean

+
+
+
+

MyBatis useColumnLabel

+
+
+

boolean

+
+
+
+

MyBatis useGeneratedKeys

+
+
+

boolean

+
+
+
+

MyBatis autoMappingBehavior

+
+
+

none, partial, full

+
+
+
+

MyBatis autoMappingUnknownColumnBehavior

+
+
+

none, warning, failing

+
+
+
+

MyBatis defaultExecutorType

+
+
+

simple, reuse, batch

+
+
+
+

MyBatis defaultStatementTimeout

+
+
+

int

+
+
+
+

MyBatis defaultFetchSize

+
+
+

int

+
+
+
+

MyBatis defaultResultSetType

+
+
+

default, forward-only, scroll-insensitive, scroll-sensitive

+
+
+
+

MyBatis safeRowBoundsEnabled

+
+
+

boolean

+
+
+
+

MyBatis safeResultHandlerEnabled

+
+
+

boolean

+
+
+
+

MyBatis mapUnderscoreToCamelCase

+
+
+

boolean

+
+
+
+

MyBatis multipleResultSetsEnabled

+
+
+

boolean

+
+
+
+

MyBatis localCacheScope

+
+
+

session, statement

+
+
+
+

MyBatis jdbcTypeForNull

+
+
+

array, bit, tinyint, smallint, integer, bigint, float, real, double, numeric, decimal, char, varchar, longvarchar, date, time, timestamp, binary, varbinary, longvarbinary, null, other, blob, clob, boolean, cursor, undefined, nvarchar, nchar, nclob, struct, java-object, distinct, ref, datalink, rowid, longnvarchar, sqlxml, datetimeoffset, time-with-timezone, timestamp-with-timezone

+
+
+
+

MyBatis lazyLoadTriggerMethods

+
+
+

list of string

+
+
+
+

MyBatis defaultScriptingLanguage

+
+
+

string

+
+
+
+

MyBatis defaultEnumTypeHandler

+
+
+

string

+
+
+
+

MyBatis callSettersOnNulls

+
+
+

boolean

+
+
+
+

MyBatis returnInstanceForEmptyRow

+
+
+

boolean

+
+
+
+

MyBatis logPrefix

+
+
+

string

+
+
+
+

MyBatis logImpl

+
+
+

string

+
+
+
+

MyBatis proxyFactory

+
+
+

string

+
+
+
+

MyBatis vfsImpl

+
+
+

string

+
+
+
+

MyBatis useActualParamName

+
+
+

boolean

+
+
+
+

MyBatis configurationFactory

+
+
+

string

+
+
+
+

MyBatis shrinkWhitespacesInSql

+
+
+

boolean

+
+
+
+

MyBatis defaultSqlProviderType

+
+
+

string

+
+
+
+
+ + + + + + + diff --git a/quarkus-mybatis/1.x/index.html b/quarkus-mybatis/1.x/index.html new file mode 100644 index 0000000000..ba73913122 --- /dev/null +++ b/quarkus-mybatis/1.x/index.html @@ -0,0 +1,2376 @@ + + + + + + Quarkus - Using MyBatis :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus - Using MyBatis

+
+
+
+

This guide demonstrates how your Quarkus application can use MyBatis to support custom SQL, stored procedures and advanced mappings.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    less than 15 minutes

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    JDK 1.8+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    Apache Maven

    +
  • +
  • +

    A running Mysql Database server

    +
  • +
  • +

    GraalVM, or Docker, installed if you want to run in native mode.

    +
  • +
+
+
+
+
+

Architecture

+
+
+

The application built in this guide is quite simple: the user can get, add and remove a record through the RESTful API by using the MyBatis Mapper.

+
+
+
+
+

Solution

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step.

+
+
+
+
+

Creating the Maven Project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus:quarkus-maven-plugin:2.16.12.Final:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=mybatis-quickstart \
+    -Dextensions="resteasy-jackson,jdbc-mysql,io.quarkiverse.mybatis:quarkus-mybatis:1.0.9" \
+    -DnoExamples
+cd mybatis-quickstart
+
+
+
+ + + + + +
+ + +
+

Maven 3.6.2+ is required for this to work.

+
+
+
+
+

This command generates a Maven project, with its pom.xml importing the quarkus-mybatis extension.

+
+
+

If you already have your Quarkus project configured, you can add the quarkus-mybatis extension +to your project by adding the following dependency in your pom.xml:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.mybatis</groupId>
+    <artifactId>quarkus-mybatis</artifactId>
+    <version>1.0.9</version>
+</dependency>
+
+
+
+
+
+

Creating the User POJO

+
+
+

We are going to create a User POJO to access to the data in the backend mysql server. +Create the src/main/java/org/acme/mybatis/User.java file, with the following content:

+
+
+
+
package org.acme.mybatis;
+
+public class User {
+    private Integer id;
+    private String name;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+}
+
+
+
+
+
+

Creating the User Mapper

+
+
+

We are going to create a UserMapper class which will use the MyBatis annotations to inject the SQL. +Create the src/main/java/org/acme/mybatis/UserMapper.java file, with the following content:

+
+
+
+
package org.acme.mybatis;
+
+import org.apache.ibatis.annotations.Delete;
+import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+@Mapper
+public interface UserMapper {
+
+    @Select("SELECT * FROM USERS WHERE id = #{id}")
+    User getUser(Integer id); (1)
+
+    @Insert("INSERT INTO USERS (id, name) VALUES (#{id}, #{name})")
+    Integer createUser(@Param("id") Integer id, @Param("name") String name); (2)
+
+    @Delete("DELETE FROM USERS WHERE id = #{id}")
+    Integer removeUser(Integer id); (3)
+}
+
+
+
+
    +
  1. +

    Get a user from the database.

    +
  2. +
  3. +

    Insert a user into the database. We should use the @Param to bind the parameters.

    +
  4. +
  5. +

    Delete a user from the databse.

    +
  6. +
+
+
+
+
+

Creating the MyBatisResource to handle the requests

+
+
+

We are going to create a MyBatisResource class which will handle all the requests to create, query or remove the data +from the database.

+
+
+
+
package org.acme.mybatis;
+
+import javax.inject.Inject;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.FormParam;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+
+@Path("/mybatis")
+public class MyBatisResource {
+
+    @Inject
+    UserMapper userMapper; (1)
+
+    @Path("/user/{id}")
+    @GET
+    @Produces(MediaType.APPLICATION_JSON)
+    public User getUser(@PathParam("id") Integer id) {
+        return userMapper.getUser(id);
+    }
+
+    @Path("/user")
+    @POST
+    @Produces(MediaType.TEXT_PLAIN)
+    @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
+    public Integer createUser(@FormParam("id") Integer id, @FormParam("name") String name) {
+        return userMapper.createUser(id, name);
+    }
+
+    @Path("/user/{id}")
+    @DELETE
+    @Produces(MediaType.TEXT_PLAIN)
+    public Integer removeUser(@PathParam("id") Integer id) {
+        return userMapper.removeUser(id);
+    }
+}
+
+
+
+
    +
  1. +

    It uses the UserMapper which should be injected by the Quarkus to access the database.

    +
  2. +
+
+
+
+
+

Configure the properties

+
+
+

We need to config the datasource used to connect to the database and the mybatis will choose the default one. Also you +can use quarkus.mybatis.datasource for the specific database.

+
+
+
+
quarkus.datasource.db-kind=mysql
+quarkus.datasource.username=<db user>
+
+quarkus.datasource.jdbc.url=jdbc:mysql://localhost/test  (1)
+quarkus.mybatis.initial-sql=insert.sql  (2)
+
+
+
+
    +
  1. +

    The datasource used by the mybatis to connect the database.

    +
  2. +
  3. +

    The SQL file which should be executed just after the application is started.

    +
  4. +
+
+
+

We could keep the following content in the insert.sql to add some data:

+
+
+
+
DROP TABLE IF EXISTS USERS;
+
+CREATE TABLE USERS (
+    id integer not null primary key,
+    name varchar(80) not null
+);
+
+INSERT INTO USERS (id, name) values(1, 'Test User1');
+INSERT INTO USERS (id, name) values(2, 'Test User2');
+INSERT INTO USERS (id, name) values(3, 'Test User3');
+
+
+
+
+
+

Running with the JVM mode

+
+
+

At first, you should make sure the Mysql Server is running and the test database has been created. +Then, you just need to run:

+
+
+
+
./mvnw compile quarkus:dev
+
+
+
+

You can get the user by using the following command:

+
+
+
+
curl http://localhost:8080/mybatis/user/1
+
+
+
+

Or create a new user:

+
+
+
+
curl -X POST http://localhost:8080/mybatis/user -d 'id=4&name=test'
+
+
+
+

Or remove a user:

+
+
+
+
curl -X DELETE http://localhost:8080/mybatis/user/1
+
+
+
+
+
+

Running Native

+
+
+

You can build the native executable with:

+
+
+
+
./mvnw package -Pnative
+
+
+
+

and then run with:

+
+
+
+
./target/mybatis-quickstart-1.0-SNAPSHOT-runner
+
+
+
+
+
+

Support for multiple data sources

+
+
+

You can choose a specific data source for MyBatis mapper using the annotation @MapperDataSource. +Query in the next example will be running against data source with name user. +If there is no such annotation on the mapper, the default data source will be used.

+
+
+
+
@Mapper
+@MapperDataSource("user")
+public interface UserMapper {
+  @Select("SELECT * FROM USERS WHERE id = #{id}")
+  User getUser(Integer id);
+}
+
+
+
+
+
+

CDI integration

+
+
+

Injects default session factory:

+
+
+
+
@Inject
+SqlSessionFactory sqlSessionFactory;
+
+
+
+

Injects session factory for data source user:

+
+
+
+
@Named("user")
+SqlSessionFactory sqlSessionFactory;
+
+
+
+
+
+

XML Configuration Support

+
+
+

You need to set quarkus.mybatis.xmlconfig.enable to true and set quarkus.mybatis.xmlconfig.path to the +mybatis xml configuration which the default value is mybatis-config.xml. +Aslo quarkus.mybatis.environment is relevant to the element of environment in the xml configuration file.

+
+
+
+
# H2
+quarkus.datasource.h2.db-kind=h2
+quarkus.datasource.h2.username=sa
+quarkus.datasource.h2.password=sa
+quarkus.datasource.h2.jdbc.url=jdbc:h2:tcp://localhost/mem:default
+
+# MyBatis
+quarkus.mybatis.xmlconfig.enable=true
+quarkus.mybatis.xmlconfig.path=mybatis-config.xml
+quarkus.mybatis.environment=development
+quarkus.mybatis.h2.initial-sql=insert-h2.sql
+
+
+
+
+
<!DOCTYPE configuration
+        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-config.dtd">
+
+<configuration>
+    <typeHandlers>
+        <package name="io.quarkiverse.it.mybatis"/>
+    </typeHandlers>
+
+    <!-- setup environment with Quarkus data source -->
+    <environments default="development">
+        <environment id="development">
+            <transactionManager type="JDBC"/>
+            <dataSource type="QUARKUS">
+                <property name="db" value="h2"/>
+            </dataSource>
+        </environment>
+    </environments>
+
+    <mappers>
+        <package name="io.quarkiverse.it.mybatis"/>
+    </mappers>
+</configuration>
+
+
+
+

The dataSource type must be QARKUS and the property db could be specified to the datasource name in the +quarkus configuration.

+
+
+
+
+

Configuration References

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

enable mybatis xml configuration

+
+
+

boolean

false

+
+
+
+

xml configuration file

+
+
+

string

mybatis-config.xml

+
+
+
+

MyBatis environment id

+
+
+

string

quarkus

+
+
+
+

MyBatis transaction factory

+
+
+

string

MANAGED

+
+
+
+

MyBatis data source

+
+
+

string

+
+
+
+

MyBatis initial sql

+
+
+

string

+
+
+
+

MyBatis cacheEnabled

+
+
+

boolean

true

+
+
+
+

MyBatis lazyLoadingEnabled

+
+
+

boolean

false

+
+
+
+

MyBatis aggressiveLazyLoading

+
+
+

boolean

false

+
+
+
+

MyBatis useColumnLabel

+
+
+

boolean

true

+
+
+
+

MyBatis useGeneratedKeys

+
+
+

boolean

false

+
+
+
+

MyBatis autoMappingBehavior

+
+
+

none, partial, full

partial

+
+
+
+

MyBatis autoMappingUnknownColumnBehavior

+
+
+

none, warning, failing

none

+
+
+
+

MyBatis defaultExecutorType

+
+
+

simple, reuse, batch

simple

+
+
+
+

MyBatis defaultStatementTimeout

+
+
+

int

+
+
+
+

MyBatis defaultFetchSize

+
+
+

int

+
+
+
+

MyBatis defaultResultSetType

+
+
+

default, forward-only, scroll-insensitive, scroll-sensitive

+
+
+
+

MyBatis safeRowBoundsEnabled

+
+
+

boolean

false

+
+
+
+

MyBatis safeResultHandlerEnabled

+
+
+

boolean

true

+
+
+
+

MyBatis mapUnderscoreToCamelCase

+
+
+

boolean

false

+
+
+
+

MyBatis multipleResultSetsEnabled

+
+
+

boolean

true

+
+
+
+

MyBatis localCacheScope

+
+
+

session, statement

session

+
+
+
+

MyBatis jdbcTypeForNull

+
+
+

array, bit, tinyint, smallint, integer, bigint, float, real, double, numeric, decimal, char, varchar, longvarchar, date, time, timestamp, binary, varbinary, longvarbinary, null, other, blob, clob, boolean, cursor, undefined, nvarchar, nchar, nclob, struct, java-object, distinct, ref, datalink, rowid, longnvarchar, sqlxml, datetimeoffset, time-with-timezone, timestamp-with-timezone

other

+
+
+
+

MyBatis lazyLoadTriggerMethods

+
+
+

list of string

equals,clone,hashCode,toString

+
+
+
+

MyBatis defaultScriptingLanguage

+
+
+

string

org.apache.ibatis.scripting.xmltags.XMLLanguageDriver

+
+
+
+

MyBatis defaultEnumTypeHandler

+
+
+

string

org.apache.ibatis.type.EnumTypeHandler

+
+
+
+

MyBatis callSettersOnNulls

+
+
+

boolean

false

+
+
+
+

MyBatis returnInstanceForEmptyRow

+
+
+

boolean

false

+
+
+
+

MyBatis logPrefix

+
+
+

string

+
+
+
+

MyBatis logImpl

+
+
+

string

+
+
+
+

MyBatis proxyFactory

+
+
+

string

JAVASSIST

+
+
+
+

MyBatis vfsImpl

+
+
+

string

+
+
+
+

MyBatis useActualParamName

+
+
+

boolean

true

+
+
+
+

MyBatis configurationFactory

+
+
+

string

+
+
+
+

MyBatis shrinkWhitespacesInSql

+
+
+

boolean

false

+
+
+
+

MyBatis defaultSqlProviderType

+
+
+

string

+
+
+
+

MyBatis mapperLocations

+
+
+

list of string

Data sources config

Type

Default

+
+
+
+

MyBatis environment id

+
+
+

string

+
+
+
+

MyBatis transaction factory

+
+
+

string

+
+
+
+

MyBatis initial sql

+
+
+

string

+
+
+
+

MyBatis cacheEnabled

+
+
+

boolean

+
+
+
+

MyBatis lazyLoadingEnabled

+
+
+

boolean

+
+
+
+

MyBatis aggressiveLazyLoading

+
+
+

boolean

+
+
+
+

MyBatis useColumnLabel

+
+
+

boolean

+
+
+
+

MyBatis useGeneratedKeys

+
+
+

boolean

+
+
+
+

MyBatis autoMappingBehavior

+
+
+

none, partial, full

+
+
+
+

MyBatis autoMappingUnknownColumnBehavior

+
+
+

none, warning, failing

+
+
+
+

MyBatis defaultExecutorType

+
+
+

simple, reuse, batch

+
+
+
+

MyBatis defaultStatementTimeout

+
+
+

int

+
+
+
+

MyBatis defaultFetchSize

+
+
+

int

+
+
+
+

MyBatis defaultResultSetType

+
+
+

default, forward-only, scroll-insensitive, scroll-sensitive

+
+
+
+

MyBatis safeRowBoundsEnabled

+
+
+

boolean

+
+
+
+

MyBatis safeResultHandlerEnabled

+
+
+

boolean

+
+
+
+

MyBatis mapUnderscoreToCamelCase

+
+
+

boolean

+
+
+
+

MyBatis multipleResultSetsEnabled

+
+
+

boolean

+
+
+
+

MyBatis localCacheScope

+
+
+

session, statement

+
+
+
+

MyBatis jdbcTypeForNull

+
+
+

array, bit, tinyint, smallint, integer, bigint, float, real, double, numeric, decimal, char, varchar, longvarchar, date, time, timestamp, binary, varbinary, longvarbinary, null, other, blob, clob, boolean, cursor, undefined, nvarchar, nchar, nclob, struct, java-object, distinct, ref, datalink, rowid, longnvarchar, sqlxml, datetimeoffset, time-with-timezone, timestamp-with-timezone

+
+
+
+

MyBatis lazyLoadTriggerMethods

+
+
+

list of string

+
+
+
+

MyBatis defaultScriptingLanguage

+
+
+

string

+
+
+
+

MyBatis defaultEnumTypeHandler

+
+
+

string

+
+
+
+

MyBatis callSettersOnNulls

+
+
+

boolean

+
+
+
+

MyBatis returnInstanceForEmptyRow

+
+
+

boolean

+
+
+
+

MyBatis logPrefix

+
+
+

string

+
+
+
+

MyBatis logImpl

+
+
+

string

+
+
+
+

MyBatis proxyFactory

+
+
+

string

+
+
+
+

MyBatis vfsImpl

+
+
+

string

+
+
+
+

MyBatis useActualParamName

+
+
+

boolean

+
+
+
+

MyBatis configurationFactory

+
+
+

string

+
+
+
+

MyBatis shrinkWhitespacesInSql

+
+
+

boolean

+
+
+
+

MyBatis defaultSqlProviderType

+
+
+

string

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-mybatis/dev/includes/attributes.html b/quarkus-mybatis/dev/includes/attributes.html new file mode 100644 index 0000000000..c3cb2c7ca0 --- /dev/null +++ b/quarkus-mybatis/dev/includes/attributes.html @@ -0,0 +1,919 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-mybatis/dev/includes/quarkus-mybatis.html b/quarkus-mybatis/dev/includes/quarkus-mybatis.html new file mode 100644 index 0000000000..bbba9814f3 --- /dev/null +++ b/quarkus-mybatis/dev/includes/quarkus-mybatis.html @@ -0,0 +1,1920 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

enable mybatis xml configuration

+
+
+

boolean

false

+
+
+
+

xml configuration file

+
+
+

string

mybatis-config.xml

+
+
+
+

MyBatis environment id

+
+
+

string

quarkus

+
+
+
+

MyBatis transaction factory

+
+
+

string

MANAGED

+
+
+
+

MyBatis data source

+
+
+

string

+
+
+
+

MyBatis initial sql

+
+
+

string

+
+
+
+

MyBatis cacheEnabled

+
+
+

boolean

true

+
+
+
+

MyBatis lazyLoadingEnabled

+
+
+

boolean

false

+
+
+
+

MyBatis aggressiveLazyLoading

+
+
+

boolean

false

+
+
+
+

MyBatis useColumnLabel

+
+
+

boolean

true

+
+
+
+

MyBatis useGeneratedKeys

+
+
+

boolean

false

+
+
+
+

MyBatis autoMappingBehavior

+
+
+

none, partial, full

partial

+
+
+
+

MyBatis autoMappingUnknownColumnBehavior

+
+
+

none, warning, failing

none

+
+
+
+

MyBatis defaultExecutorType

+
+
+

simple, reuse, batch

simple

+
+
+
+

MyBatis defaultStatementTimeout

+
+
+

int

+
+
+
+

MyBatis defaultFetchSize

+
+
+

int

+
+
+
+

MyBatis defaultResultSetType

+
+
+

default, forward-only, scroll-insensitive, scroll-sensitive

+
+
+
+

MyBatis safeRowBoundsEnabled

+
+
+

boolean

false

+
+
+
+

MyBatis safeResultHandlerEnabled

+
+
+

boolean

true

+
+
+
+

MyBatis mapUnderscoreToCamelCase

+
+
+

boolean

false

+
+
+
+

MyBatis multipleResultSetsEnabled

+
+
+

boolean

true

+
+
+
+

MyBatis localCacheScope

+
+
+

session, statement

session

+
+
+
+

MyBatis jdbcTypeForNull

+
+
+

array, bit, tinyint, smallint, integer, bigint, float, real, double, numeric, decimal, char, varchar, longvarchar, date, time, timestamp, binary, varbinary, longvarbinary, null, other, blob, clob, boolean, cursor, undefined, nvarchar, nchar, nclob, struct, java-object, distinct, ref, datalink, rowid, longnvarchar, sqlxml, datetimeoffset, time-with-timezone, timestamp-with-timezone

other

+
+
+
+

MyBatis lazyLoadTriggerMethods

+
+
+

list of string

equals,clone,hashCode,toString

+
+
+
+

MyBatis defaultScriptingLanguage

+
+
+

string

org.apache.ibatis.scripting.xmltags.XMLLanguageDriver

+
+
+
+

MyBatis defaultEnumTypeHandler

+
+
+

string

org.apache.ibatis.type.EnumTypeHandler

+
+
+
+

MyBatis callSettersOnNulls

+
+
+

boolean

false

+
+
+
+

MyBatis returnInstanceForEmptyRow

+
+
+

boolean

false

+
+
+
+

MyBatis logPrefix

+
+
+

string

+
+
+
+

MyBatis logImpl

+
+
+

string

+
+
+
+

MyBatis proxyFactory

+
+
+

string

JAVASSIST

+
+
+
+

MyBatis vfsImpl

+
+
+

string

+
+
+
+

MyBatis useActualParamName

+
+
+

boolean

true

+
+
+
+

MyBatis configurationFactory

+
+
+

string

+
+
+
+

MyBatis shrinkWhitespacesInSql

+
+
+

boolean

false

+
+
+
+

MyBatis defaultSqlProviderType

+
+
+

string

+
+
+
+

MyBatis mapperLocations

+
+
+

list of string

Data sources config

Type

Default

+
+
+
+

MyBatis environment id

+
+
+

string

+
+
+
+

MyBatis transaction factory

+
+
+

string

+
+
+
+

MyBatis initial sql

+
+
+

string

+
+
+
+

MyBatis cacheEnabled

+
+
+

boolean

+
+
+
+

MyBatis lazyLoadingEnabled

+
+
+

boolean

+
+
+
+

MyBatis aggressiveLazyLoading

+
+
+

boolean

+
+
+
+

MyBatis useColumnLabel

+
+
+

boolean

+
+
+
+

MyBatis useGeneratedKeys

+
+
+

boolean

+
+
+
+

MyBatis autoMappingBehavior

+
+
+

none, partial, full

+
+
+
+

MyBatis autoMappingUnknownColumnBehavior

+
+
+

none, warning, failing

+
+
+
+

MyBatis defaultExecutorType

+
+
+

simple, reuse, batch

+
+
+
+

MyBatis defaultStatementTimeout

+
+
+

int

+
+
+
+

MyBatis defaultFetchSize

+
+
+

int

+
+
+
+

MyBatis defaultResultSetType

+
+
+

default, forward-only, scroll-insensitive, scroll-sensitive

+
+
+
+

MyBatis safeRowBoundsEnabled

+
+
+

boolean

+
+
+
+

MyBatis safeResultHandlerEnabled

+
+
+

boolean

+
+
+
+

MyBatis mapUnderscoreToCamelCase

+
+
+

boolean

+
+
+
+

MyBatis multipleResultSetsEnabled

+
+
+

boolean

+
+
+
+

MyBatis localCacheScope

+
+
+

session, statement

+
+
+
+

MyBatis jdbcTypeForNull

+
+
+

array, bit, tinyint, smallint, integer, bigint, float, real, double, numeric, decimal, char, varchar, longvarchar, date, time, timestamp, binary, varbinary, longvarbinary, null, other, blob, clob, boolean, cursor, undefined, nvarchar, nchar, nclob, struct, java-object, distinct, ref, datalink, rowid, longnvarchar, sqlxml, datetimeoffset, time-with-timezone, timestamp-with-timezone

+
+
+
+

MyBatis lazyLoadTriggerMethods

+
+
+

list of string

+
+
+
+

MyBatis defaultScriptingLanguage

+
+
+

string

+
+
+
+

MyBatis defaultEnumTypeHandler

+
+
+

string

+
+
+
+

MyBatis callSettersOnNulls

+
+
+

boolean

+
+
+
+

MyBatis returnInstanceForEmptyRow

+
+
+

boolean

+
+
+
+

MyBatis logPrefix

+
+
+

string

+
+
+
+

MyBatis logImpl

+
+
+

string

+
+
+
+

MyBatis proxyFactory

+
+
+

string

+
+
+
+

MyBatis vfsImpl

+
+
+

string

+
+
+
+

MyBatis useActualParamName

+
+
+

boolean

+
+
+
+

MyBatis configurationFactory

+
+
+

string

+
+
+
+

MyBatis shrinkWhitespacesInSql

+
+
+

boolean

+
+
+
+

MyBatis defaultSqlProviderType

+
+
+

string

+
+
+
+
+ + + + + + + diff --git a/quarkus-mybatis/dev/index.html b/quarkus-mybatis/dev/index.html new file mode 100644 index 0000000000..f260d2d647 --- /dev/null +++ b/quarkus-mybatis/dev/index.html @@ -0,0 +1,2376 @@ + + + + + + Quarkus - Using MyBatis :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus - Using MyBatis

+
+
+
+

This guide demonstrates how your Quarkus application can use MyBatis to support custom SQL, stored procedures and advanced mappings.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    less than 15 minutes

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    JDK 11+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    Apache Maven

    +
  • +
  • +

    A running Mysql Database server

    +
  • +
  • +

    GraalVM, or Docker, installed if you want to run in native mode.

    +
  • +
+
+
+
+
+

Architecture

+
+
+

The application built in this guide is quite simple: the user can get, add and remove a record through the RESTful API by using the MyBatis Mapper.

+
+
+
+
+

Solution

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step.

+
+
+
+
+

Creating the Maven Project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus:quarkus-maven-plugin:3.8.0:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=mybatis-quickstart \
+    -Dextensions="resteasy-jackson,jdbc-mysql,io.quarkiverse.mybatis:quarkus-mybatis:2.2.2" \
+    -DnoExamples
+cd mybatis-quickstart
+
+
+
+ + + + + +
+ + +
+

Maven 3.6.2+ is required for this to work.

+
+
+
+
+

This command generates a Maven project, with its pom.xml importing the quarkus-mybatis extension.

+
+
+

If you already have your Quarkus project configured, you can add the quarkus-mybatis extension +to your project by adding the following dependency in your pom.xml:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.mybatis</groupId>
+    <artifactId>quarkus-mybatis</artifactId>
+    <version>2.2.2</version>
+</dependency>
+
+
+
+
+
+

Creating the User POJO

+
+
+

We are going to create a User POJO to access to the data in the backend mysql server. +Create the src/main/java/org/acme/mybatis/User.java file, with the following content:

+
+
+
+
package org.acme.mybatis;
+
+public class User {
+    private Integer id;
+    private String name;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+}
+
+
+
+
+
+

Creating the User Mapper

+
+
+

We are going to create a UserMapper class which will use the MyBatis annotations to inject the SQL. +Create the src/main/java/org/acme/mybatis/UserMapper.java file, with the following content:

+
+
+
+
package org.acme.mybatis;
+
+import org.apache.ibatis.annotations.Delete;
+import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+@Mapper
+public interface UserMapper {
+
+    @Select("SELECT * FROM USERS WHERE id = #{id}")
+    User getUser(Integer id); (1)
+
+    @Insert("INSERT INTO USERS (id, name) VALUES (#{id}, #{name})")
+    Integer createUser(@Param("id") Integer id, @Param("name") String name); (2)
+
+    @Delete("DELETE FROM USERS WHERE id = #{id}")
+    Integer removeUser(Integer id); (3)
+}
+
+
+
+
    +
  1. +

    Get a user from the database.

    +
  2. +
  3. +

    Insert a user into the database. We should use the @Param to bind the parameters.

    +
  4. +
  5. +

    Delete a user from the databse.

    +
  6. +
+
+
+
+
+

Creating the MyBatisResource to handle the requests

+
+
+

We are going to create a MyBatisResource class which will handle all the requests to create, query or remove the data +from the database.

+
+
+
+
package org.acme.mybatis;
+
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.DELETE;
+import jakarta.ws.rs.FormParam;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.PathParam;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+
+@Path("/mybatis")
+public class MyBatisResource {
+
+    @Inject
+    UserMapper userMapper; (1)
+
+    @Path("/user/{id}")
+    @GET
+    @Produces(MediaType.APPLICATION_JSON)
+    public User getUser(@PathParam("id") Integer id) {
+        return userMapper.getUser(id);
+    }
+
+    @Path("/user")
+    @POST
+    @Produces(MediaType.TEXT_PLAIN)
+    @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
+    public Integer createUser(@FormParam("id") Integer id, @FormParam("name") String name) {
+        return userMapper.createUser(id, name);
+    }
+
+    @Path("/user/{id}")
+    @DELETE
+    @Produces(MediaType.TEXT_PLAIN)
+    public Integer removeUser(@PathParam("id") Integer id) {
+        return userMapper.removeUser(id);
+    }
+}
+
+
+
+
    +
  1. +

    It uses the UserMapper which should be injected by the Quarkus to access the database.

    +
  2. +
+
+
+
+
+

Configure the properties

+
+
+

We need to config the datasource used to connect to the database and the mybatis will choose the default one. Also you +can use quarkus.mybatis.datasource for the specific database.

+
+
+
+
quarkus.datasource.db-kind=mysql
+quarkus.datasource.username=<db user>
+
+quarkus.datasource.jdbc.url=jdbc:mysql://localhost/test  (1)
+quarkus.mybatis.initial-sql=insert.sql  (2)
+
+
+
+
    +
  1. +

    The datasource used by the mybatis to connect the database.

    +
  2. +
  3. +

    The SQL file which should be executed just after the application is started.

    +
  4. +
+
+
+

We could keep the following content in the insert.sql to add some data:

+
+
+
+
DROP TABLE IF EXISTS USERS;
+
+CREATE TABLE USERS (
+    id integer not null primary key,
+    name varchar(80) not null
+);
+
+INSERT INTO USERS (id, name) values(1, 'Test User1');
+INSERT INTO USERS (id, name) values(2, 'Test User2');
+INSERT INTO USERS (id, name) values(3, 'Test User3');
+
+
+
+
+
+

Running with the JVM mode

+
+
+

At first, you should make sure the Mysql Server is running and the test database has been created. +Then, you just need to run:

+
+
+
+
./mvnw compile quarkus:dev
+
+
+
+

You can get the user by using the following command:

+
+
+
+
curl http://localhost:8080/mybatis/user/1
+
+
+
+

Or create a new user:

+
+
+
+
curl -X POST http://localhost:8080/mybatis/user -d 'id=4&name=test'
+
+
+
+

Or remove a user:

+
+
+
+
curl -X DELETE http://localhost:8080/mybatis/user/1
+
+
+
+
+
+

Running Native

+
+
+

You can build the native executable with:

+
+
+
+
./mvnw package -Pnative
+
+
+
+

and then run with:

+
+
+
+
./target/mybatis-quickstart-1.0-SNAPSHOT-runner
+
+
+
+
+
+

Support for multiple data sources

+
+
+

You can choose a specific data source for MyBatis mapper using the annotation @MapperDataSource. +Query in the next example will be running against data source with name user. +If there is no such annotation on the mapper, the default data source will be used.

+
+
+
+
@Mapper
+@MapperDataSource("user")
+public interface UserMapper {
+  @Select("SELECT * FROM USERS WHERE id = #{id}")
+  User getUser(Integer id);
+}
+
+
+
+
+
+

CDI integration

+
+
+

Injects default session factory:

+
+
+
+
@Inject
+SqlSessionFactory sqlSessionFactory;
+
+
+
+

Injects session factory for data source user:

+
+
+
+
@Named("user")
+SqlSessionFactory sqlSessionFactory;
+
+
+
+
+
+

XML Configuration Support

+
+
+

You need to set quarkus.mybatis.xmlconfig.enable to true and set quarkus.mybatis.xmlconfig.path to the +mybatis xml configuration which the default value is mybatis-config.xml. +Aslo quarkus.mybatis.environment is relevant to the element of environment in the xml configuration file.

+
+
+
+
# H2
+quarkus.datasource.h2.db-kind=h2
+quarkus.datasource.h2.username=sa
+quarkus.datasource.h2.password=sa
+quarkus.datasource.h2.jdbc.url=jdbc:h2:tcp://localhost/mem:default
+
+# MyBatis
+quarkus.mybatis.xmlconfig.enable=true
+quarkus.mybatis.xmlconfig.path=mybatis-config.xml
+quarkus.mybatis.environment=development
+quarkus.mybatis.h2.initial-sql=insert-h2.sql
+
+
+
+
+
<!DOCTYPE configuration
+        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-config.dtd">
+
+<configuration>
+    <typeHandlers>
+        <package name="io.quarkiverse.it.mybatis"/>
+    </typeHandlers>
+
+    <!-- setup environment with Quarkus data source -->
+    <environments default="development">
+        <environment id="development">
+            <transactionManager type="JDBC"/>
+            <dataSource type="QUARKUS">
+                <property name="db" value="h2"/>
+            </dataSource>
+        </environment>
+    </environments>
+
+    <mappers>
+        <package name="io.quarkiverse.it.mybatis"/>
+    </mappers>
+</configuration>
+
+
+
+

The dataSource type must be QUARKUS and the property db could be specified to the datasource name in the +quarkus configuration.

+
+
+
+
+

Configuration References

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

enable mybatis xml configuration

+
+
+

boolean

false

+
+
+
+

xml configuration file

+
+
+

string

mybatis-config.xml

+
+
+
+

MyBatis environment id

+
+
+

string

quarkus

+
+
+
+

MyBatis transaction factory

+
+
+

string

MANAGED

+
+
+
+

MyBatis data source

+
+
+

string

+
+
+
+

MyBatis initial sql

+
+
+

string

+
+
+
+

MyBatis cacheEnabled

+
+
+

boolean

true

+
+
+
+

MyBatis lazyLoadingEnabled

+
+
+

boolean

false

+
+
+
+

MyBatis aggressiveLazyLoading

+
+
+

boolean

false

+
+
+
+

MyBatis useColumnLabel

+
+
+

boolean

true

+
+
+
+

MyBatis useGeneratedKeys

+
+
+

boolean

false

+
+
+
+

MyBatis autoMappingBehavior

+
+
+

none, partial, full

partial

+
+
+
+

MyBatis autoMappingUnknownColumnBehavior

+
+
+

none, warning, failing

none

+
+
+
+

MyBatis defaultExecutorType

+
+
+

simple, reuse, batch

simple

+
+
+
+

MyBatis defaultStatementTimeout

+
+
+

int

+
+
+
+

MyBatis defaultFetchSize

+
+
+

int

+
+
+
+

MyBatis defaultResultSetType

+
+
+

default, forward-only, scroll-insensitive, scroll-sensitive

+
+
+
+

MyBatis safeRowBoundsEnabled

+
+
+

boolean

false

+
+
+
+

MyBatis safeResultHandlerEnabled

+
+
+

boolean

true

+
+
+
+

MyBatis mapUnderscoreToCamelCase

+
+
+

boolean

false

+
+
+
+

MyBatis multipleResultSetsEnabled

+
+
+

boolean

true

+
+
+
+

MyBatis localCacheScope

+
+
+

session, statement

session

+
+
+
+

MyBatis jdbcTypeForNull

+
+
+

array, bit, tinyint, smallint, integer, bigint, float, real, double, numeric, decimal, char, varchar, longvarchar, date, time, timestamp, binary, varbinary, longvarbinary, null, other, blob, clob, boolean, cursor, undefined, nvarchar, nchar, nclob, struct, java-object, distinct, ref, datalink, rowid, longnvarchar, sqlxml, datetimeoffset, time-with-timezone, timestamp-with-timezone

other

+
+
+
+

MyBatis lazyLoadTriggerMethods

+
+
+

list of string

equals,clone,hashCode,toString

+
+
+
+

MyBatis defaultScriptingLanguage

+
+
+

string

org.apache.ibatis.scripting.xmltags.XMLLanguageDriver

+
+
+
+

MyBatis defaultEnumTypeHandler

+
+
+

string

org.apache.ibatis.type.EnumTypeHandler

+
+
+
+

MyBatis callSettersOnNulls

+
+
+

boolean

false

+
+
+
+

MyBatis returnInstanceForEmptyRow

+
+
+

boolean

false

+
+
+
+

MyBatis logPrefix

+
+
+

string

+
+
+
+

MyBatis logImpl

+
+
+

string

+
+
+
+

MyBatis proxyFactory

+
+
+

string

JAVASSIST

+
+
+
+

MyBatis vfsImpl

+
+
+

string

+
+
+
+

MyBatis useActualParamName

+
+
+

boolean

true

+
+
+
+

MyBatis configurationFactory

+
+
+

string

+
+
+
+

MyBatis shrinkWhitespacesInSql

+
+
+

boolean

false

+
+
+
+

MyBatis defaultSqlProviderType

+
+
+

string

+
+
+
+

MyBatis mapperLocations

+
+
+

list of string

Data sources config

Type

Default

+
+
+
+

MyBatis environment id

+
+
+

string

+
+
+
+

MyBatis transaction factory

+
+
+

string

+
+
+
+

MyBatis initial sql

+
+
+

string

+
+
+
+

MyBatis cacheEnabled

+
+
+

boolean

+
+
+
+

MyBatis lazyLoadingEnabled

+
+
+

boolean

+
+
+
+

MyBatis aggressiveLazyLoading

+
+
+

boolean

+
+
+
+

MyBatis useColumnLabel

+
+
+

boolean

+
+
+
+

MyBatis useGeneratedKeys

+
+
+

boolean

+
+
+
+

MyBatis autoMappingBehavior

+
+
+

none, partial, full

+
+
+
+

MyBatis autoMappingUnknownColumnBehavior

+
+
+

none, warning, failing

+
+
+
+

MyBatis defaultExecutorType

+
+
+

simple, reuse, batch

+
+
+
+

MyBatis defaultStatementTimeout

+
+
+

int

+
+
+
+

MyBatis defaultFetchSize

+
+
+

int

+
+
+
+

MyBatis defaultResultSetType

+
+
+

default, forward-only, scroll-insensitive, scroll-sensitive

+
+
+
+

MyBatis safeRowBoundsEnabled

+
+
+

boolean

+
+
+
+

MyBatis safeResultHandlerEnabled

+
+
+

boolean

+
+
+
+

MyBatis mapUnderscoreToCamelCase

+
+
+

boolean

+
+
+
+

MyBatis multipleResultSetsEnabled

+
+
+

boolean

+
+
+
+

MyBatis localCacheScope

+
+
+

session, statement

+
+
+
+

MyBatis jdbcTypeForNull

+
+
+

array, bit, tinyint, smallint, integer, bigint, float, real, double, numeric, decimal, char, varchar, longvarchar, date, time, timestamp, binary, varbinary, longvarbinary, null, other, blob, clob, boolean, cursor, undefined, nvarchar, nchar, nclob, struct, java-object, distinct, ref, datalink, rowid, longnvarchar, sqlxml, datetimeoffset, time-with-timezone, timestamp-with-timezone

+
+
+
+

MyBatis lazyLoadTriggerMethods

+
+
+

list of string

+
+
+
+

MyBatis defaultScriptingLanguage

+
+
+

string

+
+
+
+

MyBatis defaultEnumTypeHandler

+
+
+

string

+
+
+
+

MyBatis callSettersOnNulls

+
+
+

boolean

+
+
+
+

MyBatis returnInstanceForEmptyRow

+
+
+

boolean

+
+
+
+

MyBatis logPrefix

+
+
+

string

+
+
+
+

MyBatis logImpl

+
+
+

string

+
+
+
+

MyBatis proxyFactory

+
+
+

string

+
+
+
+

MyBatis vfsImpl

+
+
+

string

+
+
+
+

MyBatis useActualParamName

+
+
+

boolean

+
+
+
+

MyBatis configurationFactory

+
+
+

string

+
+
+
+

MyBatis shrinkWhitespacesInSql

+
+
+

boolean

+
+
+
+

MyBatis defaultSqlProviderType

+
+
+

string

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-neo4j/dev/includes/attributes.html b/quarkus-neo4j/dev/includes/attributes.html new file mode 100644 index 0000000000..ce6fc5a799 --- /dev/null +++ b/quarkus-neo4j/dev/includes/attributes.html @@ -0,0 +1,912 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-neo4j/dev/includes/quarkus-neo4j-config-group-dev-services-build-time-config.html b/quarkus-neo4j/dev/includes/quarkus-neo4j-config-group-dev-services-build-time-config.html new file mode 100644 index 0000000000..da38b566e2 --- /dev/null +++ b/quarkus-neo4j/dev/includes/quarkus-neo4j-config-group-dev-services-build-time-config.html @@ -0,0 +1,1013 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

If DevServices has been explicitly enabled or disabled. DevServices is generally enabled by default, unless there is an existing configuration present. When DevServices is enabled Quarkus will attempt to automatically configure and start a database when running in Dev or Test mode.

+
+
+

Environment variable: QUARKUS_NEO4J_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

The container image name to use, for container based DevServices providers.

+
+
+

Environment variable: QUARKUS_NEO4J_DEVSERVICES_IMAGE_NAME

+
+
+

string

neo4j:4.4

+
+
+
+

This value can be used to specify the port to which the bolt-port of the container is exposed. It must be a free port, otherwise startup will fail. A random, free port will be used by default. Either way, a messsage will be logged on which port the Neo4j container is reachable over bolt.

+
+
+

Environment variable: QUARKUS_NEO4J_DEVSERVICES_BOLT_PORT

+
+
+

int

+
+
+
+

This value can be used to specify the port to which the http-port of the container is exposed. It must be a free port, otherwise startup will fail. A random, free port will be used by default. Either way, a messsage will be logged on which port the Neo4j Browser is available.

+
+
+

Environment variable: QUARKUS_NEO4J_DEVSERVICES_HTTP_PORT

+
+
+

int

+
+
+
+

Additional environment entries that can be added to the container before its start.

+
+
+

Environment variable: QUARKUS_NEO4J_DEVSERVICES_ADDITIONAL_ENV

+
+
+

Map<String,String>

+
+
+
+
+ + + + + + + diff --git a/quarkus-neo4j/dev/includes/quarkus-neo4j.html b/quarkus-neo4j/dev/includes/quarkus-neo4j.html new file mode 100644 index 0000000000..76c7b8c80a --- /dev/null +++ b/quarkus-neo4j/dev/includes/quarkus-neo4j.html @@ -0,0 +1,1344 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Whether a health check is published in case the smallrye-health extension is present.

+
+
+

Environment variable: QUARKUS_NEO4J_HEALTH_ENABLED

+
+
+

boolean

true

+
+
+
+

If DevServices has been explicitly enabled or disabled. DevServices is generally enabled by default, unless there is an existing configuration present. When DevServices is enabled Quarkus will attempt to automatically configure and start a database when running in Dev or Test mode.

+
+
+

Environment variable: QUARKUS_NEO4J_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

The container image name to use, for container based DevServices providers.

+
+
+

Environment variable: QUARKUS_NEO4J_DEVSERVICES_IMAGE_NAME

+
+
+

string

neo4j:4.4

+
+
+
+

This value can be used to specify the port to which the bolt-port of the container is exposed. It must be a free port, otherwise startup will fail. A random, free port will be used by default. Either way, a messsage will be logged on which port the Neo4j container is reachable over bolt.

+
+
+

Environment variable: QUARKUS_NEO4J_DEVSERVICES_BOLT_PORT

+
+
+

int

+
+
+
+

This value can be used to specify the port to which the http-port of the container is exposed. It must be a free port, otherwise startup will fail. A random, free port will be used by default. Either way, a messsage will be logged on which port the Neo4j Browser is available.

+
+
+

Environment variable: QUARKUS_NEO4J_DEVSERVICES_HTTP_PORT

+
+
+

int

+
+
+
+

The uri this driver should connect to. The driver supports bolt, bolt+routing or neo4j as schemes.

+
+
+

Environment variable: QUARKUS_NEO4J_URI

+
+
+

string

bolt://localhost:7687

+
+
+
+

If the driver should use encrypted traffic.

+
+
+

Environment variable: QUARKUS_NEO4J_ENCRYPTED

+
+
+

boolean

false

+
+
+
+

Configure the maximum time transactions are allowed to retry.

+
+
+

Environment variable: QUARKUS_NEO4J_MAX_TRANSACTION_RETRY_TIME

+
+
+

Duration +

30S

+
+
+
+

Additional environment entries that can be added to the container before its start.

+
+
+

Environment variable: QUARKUS_NEO4J_DEVSERVICES_ADDITIONAL_ENV

+
+
+

Map<String,String>

Authentication

Type

Default

+
+
+
+

The login of the user connecting to the database.

+
+
+

Environment variable: QUARKUS_NEO4J_AUTHENTICATION_USERNAME

+
+
+

string

neo4j

+
+
+
+

The password of the user connecting to the database.

+
+
+

Environment variable: QUARKUS_NEO4J_AUTHENTICATION_PASSWORD

+
+
+

string

neo4j

+
+
+
+

Set this to true to disable authentication.

+
+
+

Environment variable: QUARKUS_NEO4J_AUTHENTICATION_DISABLED

+
+
+

boolean

false

+
+
+
+

An optional field that when is not empty has precedence over username and password. It behaves the same way as NEO4J_AUTH in the official docker image, containing both the username and password separated via a single forward slash (/).

+
+
+

Environment variable: QUARKUS_NEO4J_AUTHENTICATION_VALUE

+
+
+

string

Configure trust settings for encrypted traffic

Type

Default

+
+
+
+

Configures which trust strategy to apply when using encrypted traffic.

+
+
+

Environment variable: QUARKUS_NEO4J_TRUST_SETTINGS_STRATEGY

+
+
+
+

trust-all-certificates, trust-custom-ca-signed-certificates, trust-system-ca-signed-certificates

+

trust-system-ca-signed-certificates

+
+
+
+

The file of the certificate to use.

+
+
+

Environment variable: QUARKUS_NEO4J_TRUST_SETTINGS_CERT_FILE

+
+
+

path

+
+
+
+

If hostname verification is used.

+
+
+

Environment variable: QUARKUS_NEO4J_TRUST_SETTINGS_HOSTNAME_VERIFICATION_ENABLED

+
+
+

boolean

false

Connection pool

Type

Default

+
+
+
+

Flag, if metrics are enabled.

+
+
+

Environment variable: QUARKUS_NEO4J_POOL_METRICS_ENABLED

+
+
+

boolean

false

+
+
+
+

Flag, if leaked sessions logging is enabled.

+
+
+

Environment variable: QUARKUS_NEO4J_POOL_LOG_LEAKED_SESSIONS

+
+
+

boolean

false

+
+
+
+

The maximum amount of connections in the connection pool towards a single database.

+
+
+

Environment variable: QUARKUS_NEO4J_POOL_MAX_CONNECTION_POOL_SIZE

+
+
+

int

100

+
+
+
+

Pooled connections that have been idle in the pool for longer than this timeout will be tested before they are used again. The value 0 means connections will always be tested for validity and negative values mean connections will never be tested.

+
+
+

Environment variable: QUARKUS_NEO4J_POOL_IDLE_TIME_BEFORE_CONNECTION_TEST

+
+
+

Duration +

-0.001S

+
+
+
+

Pooled connections older than this threshold will be closed and removed from the pool.

+
+
+

Environment variable: QUARKUS_NEO4J_POOL_MAX_CONNECTION_LIFETIME

+
+
+

Duration +

1H

+
+
+
+

Acquisition of new connections will be attempted for at most configured timeout.

+
+
+

Environment variable: QUARKUS_NEO4J_POOL_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

1M

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-neo4j/dev/index.html b/quarkus-neo4j/dev/index.html new file mode 100644 index 0000000000..8c70988e0a --- /dev/null +++ b/quarkus-neo4j/dev/index.html @@ -0,0 +1,2254 @@ + + + + + + Quarkus Neo4j :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Neo4j

+
+
+
+

Neo4j is a graph database management system developed by Neo4j, Inc. Neo4j is a native graph database focused not only on the data itself, but especially on the relations between data. +Neo4j stores data as a property graph, which consists of vertices or nodes as we call them, connected with edges or relationships. +Both of them can have properties.

+
+
+

Neo4j offers Cypher, a declarative query language much like SQL. +Cypher is used to for both querying the graph and creating or updating nodes and relationships. +As a declarative language it used to tell the database what to do and not how to do it.

+
+
+ + + + + +
+ + +Learn more about Cypher in the Neo4j Cypher manual. + Cypher is not only available in Neo4j, but for example coming to Apache Spark. + A spec called OpenCypher is available, too. +
+
+
+

Clients communicate over the so-called Bolt protocol with the database.

+
+
+

Neo4j - as the most popular graph database according to DB-Engines ranking - provides a variety of drivers for various languages.

+
+
+

The Quarkus Neo4j extension is based on the official Neo4j Java Driver. +The extension provides an instance of the driver configured ready for usage in any Quarkus application. +You will be able to issue arbitrary Cypher statements over Bolt with this extension. +Those statements can be simple CRUD statements as well as complex queries, calling graph algorithms and more.

+
+
+

The driver itself is released under the Apache 2.0 license, +while Neo4j itself is available in a GPL3-licensed open-source "community edition", +with online backup and high availability extensions licensed under a closed-source commercial license.

+
+
+
+
+

Programming model

+
+
+

The driver and thus the Quarkus extension support three different programming models:

+
+
+
    +
  • +

    Blocking database access (much like standard JDBC)

    +
  • +
  • +

    Asynchronous programming based on JDK’s completable futures and related infrastructure

    +
  • +
  • +

    Reactive programming based on Reactive Streams

    +
  • +
+
+
+

The reactive programming model is only available when connected against a 4.0+ version of Neo4j. +Reactive programming in Neo4j is fully end-to-end reactive and therefore requires a server that supports backpressure.

+
+
+

In this guide you will learn how to

+
+
+
    +
  • +

    Add the Neo4j extension to your project

    +
  • +
  • +

    Configure the driver

    +
  • +
  • +

    And how to use the driver to access a Neo4j database

    +
  • +
+
+
+

This guide will focus on asynchronous access to Neo4j, as this is ready to use for everyone. +At the end of this guide, there will be a reactive version, which needs however a 4.0 database version.

+
+
+
+
+

The domain

+
+
+

As with some other guides, the application shall manage fruit entities.

+
+
+
+
package org.acme.neo4j;
+
+public class Fruit {
+    public UUID id;
+
+    public String name;
+
+    public Fruit() {
+        // This is needed for the REST-Easy JSON Binding
+    }
+
+    public Fruit(String name) {
+        this.name = name;
+    }
+
+    public Fruit(UUID id, String name) {
+        this.id = id;
+        this.name = name;
+    }
+}
+
+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    JDK 11+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    Access to a Neo4j Database

    +
  • +
  • +

    Optional Docker for your system

    +
  • +
+
+
+

Setup Neo4j

+
+

The easiest way to start a Neo4j instance is a locally installed Docker environment.

+
+
+
+
docker run --publish=7474:7474 --publish=7687:7687 -e 'NEO4J_AUTH=neo4j/secret' neo4j:4.4
+
+
+
+

This starts a Neo4j instance, that publishes its Bolt port on 7687 and a web interface on http://localhost:7474.

+
+
+

Have a look at the download page for other options to get started with the product itself.

+
+
+
+
+
+

Solution

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step. +However, you can go right to the completed example.

+
+
+

Clone the Git repository: git clone https://github.com/quarkusio/quarkus-quickstarts.git, or download an archive.

+
+
+

The solution is located in the neo4j-quickstart directory. +It contains a very simple UI to use the JAX-RS resources created here, too.

+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.8.1:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=neo4j-quickstart \
+    -DclassName="org.acme.datasource.GreetingResource" \
+    -Dextensions="neo4j,resteasy-reactive-jackson"
+cd neo4j-quickstart
+
+
+
+

It generates:

+
+
+
    +
  • +

    the Maven structure

    +
  • +
  • +

    a landing page accessible on http://localhost:8080

    +
  • +
  • +

    example Dockerfile files for both native and jvm modes

    +
  • +
  • +

    the application configuration file

    +
  • +
  • +

    an org.acme.datasource.GreetingResource resource

    +
  • +
  • +

    an associated test

    +
  • +
+
+
+

The Neo4j extension has been added already to your pom.xml. +In addition, we added resteasy-reactive-jackson, which allows us to expose Fruit instances over HTTP in the JSON format via JAX-RS resources. +If you have an already created project, the neo4j extension can be added to an existing Quarkus project with the add-extension command:

+
+
+
+
./mvnw quarkus:add-extension -Dextensions="neo4j"
+
+
+
+

Otherwise, you can manually add this to the dependencies section of your pom.xml file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.neo4j</groupId>
+    <artifactId>quarkus-neo4j</artifactId>
+    <version>3.8.0</version>
+</dependency>
+
+
+
+
+
+

Configuring

+
+
+

The Neo4j driver can be configured with standard Quarkus properties:

+
+
+
src/main/resources/application.properties
+
+
# Those are the default values and are implicitly assumed
+quarkus.neo4j.uri = bolt://localhost:7687
+quarkus.neo4j.authentication.username = neo4j
+quarkus.neo4j.authentication.password = secret
+
+
+
+

You’ll recognize the authentication here that you passed on to the docker command above.

+
+
+

Having done that, the driver is ready to use, there are however other configuration options, detailed below.

+
+
+

Dev Services (Configuration Free Databases)

+
+

Quarkus supports a feature called Dev Services that allows you to create various datasources without any config. +In the case of Neo4j this support applies to the single Neo4j driver instance. +Dev Services will bring up a Neo4j container if you didn’t explicit add the default values or configured custom values for +any of quarkus.neo4j.uri, quarkus.neo4j.authentication.username or quarkus.neo4j.authentication.password. +If Neo4j seems to be reachable via the default properties, Dev Services will also step back.

+
+
+

Otherwise, Quarkus will automatically start a Neo4j container when running tests or dev-mode, +and automatically configure the connection.

+
+
+

When running the production version of the application, the Neo4j connection need to be configured as normal, +so if you want to include a production database config in your application.properties and continue to use Dev Services +we recommend that you use the %prod. profile to define your Neo4j settings.

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

If DevServices has been explicitly enabled or disabled. DevServices is generally enabled by default, unless there is an existing configuration present. When DevServices is enabled Quarkus will attempt to automatically configure and start a database when running in Dev or Test mode.

+
+
+

Environment variable: QUARKUS_NEO4J_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

The container image name to use, for container based DevServices providers.

+
+
+

Environment variable: QUARKUS_NEO4J_DEVSERVICES_IMAGE_NAME

+
+
+

string

neo4j:4.4

+
+
+
+

This value can be used to specify the port to which the bolt-port of the container is exposed. It must be a free port, otherwise startup will fail. A random, free port will be used by default. Either way, a messsage will be logged on which port the Neo4j container is reachable over bolt.

+
+
+

Environment variable: QUARKUS_NEO4J_DEVSERVICES_BOLT_PORT

+
+
+

int

+
+
+
+

This value can be used to specify the port to which the http-port of the container is exposed. It must be a free port, otherwise startup will fail. A random, free port will be used by default. Either way, a messsage will be logged on which port the Neo4j Browser is available.

+
+
+

Environment variable: QUARKUS_NEO4J_DEVSERVICES_HTTP_PORT

+
+
+

int

+
+
+
+

Additional environment entries that can be added to the container before its start.

+
+
+

Environment variable: QUARKUS_NEO4J_DEVSERVICES_ADDITIONAL_ENV

+
+
+

Map<String,String>

+
+
+
+
+

Using the driver

+
+
+

General remarks

+
+

The result of a statement consists usually of one or more org.neo4j.driver.Record. +Those records contain arbitrary values, supported by the driver. +If you return a node of the graph, it will be a org.neo4j.driver.types.Node.

+
+
+

We add the following method to the Fruit, as a convenient way to create them:

+
+
+
+
public static Fruit from(Node node) {
+    return new Fruit(UUID.fromString(node.get("id").asString()), node.get("name").asString());
+}
+
+
+
+

Add a FruitResource skeleton like this and @Inject a org.neo4j.driver.Driver instance and a ThreadContext instance:

+
+
+
src/main/java/org/acme/neo4j/FruitResource.java
+
+
package org.acme.neo4j;
+
+import java.net.URI;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CompletionException;
+import java.util.concurrent.CompletionStage;
+
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.DELETE;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+import jakarta.ws.rs.core.Response.ResponseBuilder;
+import jakarta.ws.rs.core.Response.Status;
+
+import org.eclipse.microprofile.context.ThreadContext;
+import org.neo4j.driver.Driver;
+import org.neo4j.driver.async.AsyncSession;
+import org.neo4j.driver.async.ResultCursor;
+import org.neo4j.driver.exceptions.NoSuchRecordException;
+
+@Path("/fruits")
+@Consumes(MediaType.APPLICATION_JSON)
+@Produces(MediaType.APPLICATION_JSON)
+public class FruitResource {
+
+    @Inject
+    Driver driver;
+
+    @Inject
+    ThreadContext threadContext; (1)
+}
+
+
+
+ + + + + +
1The ThreadContext is related to context propagation with completion stage. A completion stage, +unlike Mutiny, does not have a hook to automatically "capture and restore" the context. +So, we need to use this construct in later steps when using the connections asynchronous api.
+
+
+
+

Reading nodes

+
+

Add the following method to the fruit resource:

+
+
+
FruitResource#get
+
+
@GET
+public CompletionStage<Response> get() {
+    AsyncSession session = driver.session(AsyncSession.class); (1)
+    CompletionStage<List<Fruit>> cs = session
+            .executeReadAsync(tx -> tx
+                    .runAsync("MATCH (f:Fruit) RETURN f ORDER BY f.name") (2)
+                    .thenCompose(cursor -> cursor (3)
+                            .listAsync(record -> Fruit.from(record.get("f").asNode()))));
+    return threadContext.withContextCapture(cs) (4)
+            .thenCompose(fruits -> (5)
+            session.closeAsync().thenApply(signal -> fruits))
+            .thenApply(Response::ok) (6)
+            .thenApply(ResponseBuilder::build);
+}
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
1Open a new, asynchronous session with Neo4j
2Execute a query. This is a Cypher statement.
3Retrieve a cursor, list the results and create Fruits. This must happen inside the transactional function, not outside.
4Wrap the completion stage so that the current context is captured, and restored it before calling a continuation +method of the completion stage. With that, the context is restored and available in any callback.
5Close the session after processing
6Create a JAX-RS response
+
+
+

Now start Quarkus in dev mode with:

+
+
+
+
./mvnw compile quarkus:dev
+
+
+
+

and retrieve the endpoint like this

+
+
+
+
curl localhost:8080/fruits
+
+
+
+

There are not any fruits, so let’s create some.

+
+
+
+

Creating nodes

+
+

The POST method looks similar. +It uses transaction functions of the driver:

+
+
+
FruitResource#create
+
+
@POST
+public CompletionStage<Response> create(Fruit fruit) {
+    AsyncSession session = driver.session(AsyncSession.class);
+    CompletionStage<Fruit> cs = session
+            .executeWriteAsync(tx -> tx
+                    .runAsync(
+                            "CREATE (f:Fruit {id: randomUUID(), name: $name}) RETURN f",
+                            Map.of("name", fruit.name))
+                    .thenCompose(ResultCursor::singleAsync)
+                    .thenApply(record -> Fruit.from(record.get("f").asNode())));
+    return threadContext.withContextCapture(cs)
+            .thenCompose(persistedFruit -> session
+                    .closeAsync().thenApply(signal -> persistedFruit))
+            .thenApply(persistedFruit -> Response
+                    .created(URI.create("/fruits/" + persistedFruit.id))
+                    .build());
+}
+
+
+
+

As you can see, we are now using a Cypher statement with named parameters (The $name of the fruit). +The node is returned, a Fruit entity created and then mapped to a 201 created response.

+
+
+

A curl request against this path may look like this:

+
+
+
+
curl -v -X "POST" "http://localhost:8080/fruits" \
+     -H 'Content-Type: application/json; charset=utf-8' \
+     -d $'{
+  "name": "Banana"
+}'
+
+
+
+

The response contains an URI that shall return single nodes.

+
+
+
+

Read single nodes

+
+

This time, we ask for a read-only transaction. +We also add some exception handling, in case the resource is called with an invalid id:

+
+
+
FruitResource#getSingle
+
+
@GET
+@Path("/{id}")
+public CompletionStage<Response> getSingle(String id) {
+    AsyncSession session = driver.session(AsyncSession.class);
+    return threadContext.withContextCapture(session
+            .executeReadAsync(tx -> tx
+                    .runAsync("MATCH (f:Fruit) WHERE f.id = $id RETURN f", Map.of("id", id))
+                    .thenCompose(ResultCursor::singleAsync))
+            .handle((record, exception) -> {
+                if (exception != null) {
+                    Throwable source = exception;
+                    if (exception instanceof CompletionException) {
+                        source = exception.getCause();
+                    }
+                    Status status = Status.INTERNAL_SERVER_ERROR;
+                    if (source instanceof NoSuchRecordException) {
+                        status = Status.NOT_FOUND;
+                    }
+                    return Response.status(status).build();
+                } else {
+                    return Response.ok(Fruit.from(record.get("f").asNode())).build();
+                }
+            }))
+            .thenCompose(response -> session.closeAsync().thenApply(signal -> response));
+}
+
+
+
+

A request may look like this:

+
+
+
+
curl localhost:8080/fruits/42
+
+
+
+ + + + + +
+ + +In case Neo4j has been setup as a cluster, the transaction mode is used to decide whether a request is routed + to a leader or a follower instance. Write transactions must be handled by a leader, whereas read-only transactions + can be handled by followers. +
+
+
+
+

Deleting nodes

+
+

Finally, we want to get rid of fruits again and we add the DELETE method:

+
+
+
FruitResource#delete
+
+
@DELETE
+@Path("{id}")
+public CompletionStage<Response> delete(String id) {
+    AsyncSession session = driver.session(AsyncSession.class);
+    return threadContext.withContextCapture(session
+            .executeWriteAsync(tx -> tx
+                    .runAsync("MATCH (f:Fruit) WHERE f.id = $id DELETE f", Map.of("id", id))
+                    .thenCompose(ResultCursor::consumeAsync) (1)
+            ))
+            .thenCompose(response -> session.closeAsync())
+            .thenApply(signal -> Response.noContent().build());
+}
+
+
+
+ + + + + +
1There is no result for us, only a summary of the query executed.
+
+
+

A request may look like this

+
+
+
+
curl -X DELETE localhost:8080/fruits/42
+
+
+
+

And that’s already the most simple CRUD application with one type of nodes. +Feel free to add relationships to the model. +One idea would be to model recipes that contain fruits. +The Cypher manual linked in the introduction will help you with modelling your queries.

+
+
+
+
+
+

Next steps

+
+
+

Packaging

+
+

Packaging your application is as simple as ./mvnw clean package. +It can be run with java -jar target/quarkus-app/quarkus-run.jar.

+
+
+

With GraalVM installed, you can also create a native executable binary: ./mvnw clean package -Dnative. +Depending on your system, that will take some time.

+
+
+
+

Connection Health Check

+
+

If you are using the quarkus-smallrye-health extension, quarkus-neo4j will automatically add a readiness health check +to validate the connection to Neo4j.

+
+
+

So when you access the /q/health/ready endpoint of your application you will have information about the connection validation status.

+
+
+

This behavior can be disabled by setting the quarkus.neo4j.health.enabled property to false in your application.properties.

+
+
+
+

Driver metrics

+
+

If you are using a metrics extension and specify the config property quarkus.neo4j.pool.metrics.enabled=true, the Neo4j extension will +expose several metrics related to the Neo4j connection pool.

+
+
+
+

Explore Cypher and the Graph

+
+

There are tons of options to model your domain within a Graph. +The Neo4j docs, the sandboxes and more are a good starting point.

+
+
+
+

Going reactive

+
+

If you have access to Neo4j 4.0, you can go fully reactive.

+
+
+

To make life a bit easier, we will use Mutiny for this.

+
+
+ + + + + +
+ + +
Mutiny
+
+

The following example uses Mutiny reactive types. +If you are not familiar with Mutiny, check Mutiny - an intuitive reactive programming library.

+
+
+
+
+

The reactive fruit resources streams the name of all fruits:

+
+
+
ReactiveFruitResource.java
+
+
package io.quarkus.it.neo4j;
+
+import java.util.Map;
+
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+
+import org.jboss.resteasy.reactive.ResponseStatus;
+import org.neo4j.driver.Driver;
+import org.neo4j.driver.reactive.ReactiveResult;
+import org.neo4j.driver.reactive.ReactiveSession;
+
+import io.smallrye.mutiny.Multi;
+import io.smallrye.mutiny.Uni;
+
+@Path("reactivefruits")
+@Consumes(MediaType.APPLICATION_JSON)
+public class ReactiveFruitResource {
+
+    @Inject
+    Driver driver;
+
+    static Uni<Void> sessionFinalizer(ReactiveSession session) { (1)
+        return Uni.createFrom().publisher(session.close());
+    }
+
+    @GET
+    @Produces(MediaType.SERVER_SENT_EVENTS)
+    public Multi<String> get() {
+        // Create a stream from a resource we can close in a finalizer...
+        return Multi.createFrom().resource(() -> driver.session(ReactiveSession.class), (2)
+                session -> session.executeRead(tx -> {
+                    var result = tx.run("MATCH (f:Fruit) RETURN f.name as name ORDER BY f.name");
+                    return Multi.createFrom().publisher(result).flatMap(ReactiveResult::records);
+                }))
+                .withFinalizer(ReactiveFruitResource::sessionFinalizer) (3)
+                .map(record -> record.get("name").asString());
+    }
+}
+
+
+
+ + + + + + + + + + + + + +
1A finalizer that will close a Neo4j driver session in a non-blocking fashion
2The Multi.createFrom().resource() is used to defer the creation of session until the publisher is subscribed to
3When the publisher is done, the finalizer will be called
+
+
+

driver.rxSession() returns a reactive session. +It exposes its API based on Reactive Streams, most prominently, as org.reactivestreams.Publisher. +Those can be used directly, but we found it easier and more expressive to wrap them in reactive types such as the one provided by Mutiny. +Typically, in the previous code, the session is closed when the stream completes, fails or the subscriber cancels.

+
+
+

If you want to return a Mutiny! Uni object, you need to be very careful before you convert a Multi into a Uni: +The conversion works in such a way, that the first item is emitted and then a cancellation signal is sent to the publisher, +that will propagate upto the drivers' session, indicating a cancellation of the transaction, thus doing a rollback.

+
+
+

In most cases you are better off returning a Multi or just a generic Publisher. If you need a Uni, you can still realize +this with an emitter:

+
+
+
ReactiveFruitResource.java#create
+
+
@POST
+@Produces(MediaType.TEXT_PLAIN)
+@ResponseStatus(201)
+public Uni<String> create(Fruit fruit) {
+
+    return Uni.createFrom().emitter(e -> Multi.createFrom().resource(() -> driver.session(ReactiveSession.class), (1)
+            session -> session.executeWrite(tx -> {
+                var result = tx.run(
+                        "CREATE (f:Fruit {id: randomUUID(), name: $name}) RETURN f",
+                        Map.of("name", fruit.name));
+                return Multi.createFrom().publisher(result).flatMap(ReactiveResult::records);
+            }))
+            .withFinalizer(ReactiveFruitResource::sessionFinalizer)
+            .map(record -> Fruit.from(record.get("f").asNode()))
+            .toUni()
+            .subscribe().with( (2)
+                    persistedFruit -> e.complete("/fruits/" + persistedFruit.id)));
+}
+
+
+
+ + + + + + + + + +
1Here we use Uni.createFrom().emitter() to retrieve an UniEmitter that we use in 2.
2Notice how we subscribe to a Multi setup in a similar fashion as in the prior example. The subscription will emit the one +and only item via the emitter, without a cancellation event.
+
+
+
+
+
+

Configuration Reference

+
+
+ + + + + +
+ + +Each of the neo4j and bolt URI schemes permit variants that contain extra encryption and trust information. + The +s variants enable encryption with a full certificate check, and the +ssc variants enable encryption, + but with no certificate check. This latter variant is designed specifically for use with self-signed certificates. + The variants are basically shortcuts over explicit configuration. If you use one of them, Quarkus won’t pass + quarkus.neo4j.encrypted and related to the driver creation as the driver prohibits this. +
+ The only check applied when Quarkus detects a secure url (either of +s or +ssc) is to ensure availability of + SSL in native image and will throw ConfigurationException if it isn’t available. +
+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Whether a health check is published in case the smallrye-health extension is present.

+
+
+

Environment variable: QUARKUS_NEO4J_HEALTH_ENABLED

+
+
+

boolean

true

+
+
+
+

If DevServices has been explicitly enabled or disabled. DevServices is generally enabled by default, unless there is an existing configuration present. When DevServices is enabled Quarkus will attempt to automatically configure and start a database when running in Dev or Test mode.

+
+
+

Environment variable: QUARKUS_NEO4J_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

The container image name to use, for container based DevServices providers.

+
+
+

Environment variable: QUARKUS_NEO4J_DEVSERVICES_IMAGE_NAME

+
+
+

string

neo4j:4.4

+
+
+
+

This value can be used to specify the port to which the bolt-port of the container is exposed. It must be a free port, otherwise startup will fail. A random, free port will be used by default. Either way, a messsage will be logged on which port the Neo4j container is reachable over bolt.

+
+
+

Environment variable: QUARKUS_NEO4J_DEVSERVICES_BOLT_PORT

+
+
+

int

+
+
+
+

This value can be used to specify the port to which the http-port of the container is exposed. It must be a free port, otherwise startup will fail. A random, free port will be used by default. Either way, a messsage will be logged on which port the Neo4j Browser is available.

+
+
+

Environment variable: QUARKUS_NEO4J_DEVSERVICES_HTTP_PORT

+
+
+

int

+
+
+
+

The uri this driver should connect to. The driver supports bolt, bolt+routing or neo4j as schemes.

+
+
+

Environment variable: QUARKUS_NEO4J_URI

+
+
+

string

bolt://localhost:7687

+
+
+
+

If the driver should use encrypted traffic.

+
+
+

Environment variable: QUARKUS_NEO4J_ENCRYPTED

+
+
+

boolean

false

+
+
+
+

Configure the maximum time transactions are allowed to retry.

+
+
+

Environment variable: QUARKUS_NEO4J_MAX_TRANSACTION_RETRY_TIME

+
+
+

Duration +

30S

+
+
+
+

Additional environment entries that can be added to the container before its start.

+
+
+

Environment variable: QUARKUS_NEO4J_DEVSERVICES_ADDITIONAL_ENV

+
+
+

Map<String,String>

Authentication

Type

Default

+
+
+
+

The login of the user connecting to the database.

+
+
+

Environment variable: QUARKUS_NEO4J_AUTHENTICATION_USERNAME

+
+
+

string

neo4j

+
+
+
+

The password of the user connecting to the database.

+
+
+

Environment variable: QUARKUS_NEO4J_AUTHENTICATION_PASSWORD

+
+
+

string

neo4j

+
+
+
+

Set this to true to disable authentication.

+
+
+

Environment variable: QUARKUS_NEO4J_AUTHENTICATION_DISABLED

+
+
+

boolean

false

+
+
+
+

An optional field that when is not empty has precedence over username and password. It behaves the same way as NEO4J_AUTH in the official docker image, containing both the username and password separated via a single forward slash (/).

+
+
+

Environment variable: QUARKUS_NEO4J_AUTHENTICATION_VALUE

+
+
+

string

Configure trust settings for encrypted traffic

Type

Default

+
+
+
+

Configures which trust strategy to apply when using encrypted traffic.

+
+
+

Environment variable: QUARKUS_NEO4J_TRUST_SETTINGS_STRATEGY

+
+
+
+

trust-all-certificates, trust-custom-ca-signed-certificates, trust-system-ca-signed-certificates

+

trust-system-ca-signed-certificates

+
+
+
+

The file of the certificate to use.

+
+
+

Environment variable: QUARKUS_NEO4J_TRUST_SETTINGS_CERT_FILE

+
+
+

path

+
+
+
+

If hostname verification is used.

+
+
+

Environment variable: QUARKUS_NEO4J_TRUST_SETTINGS_HOSTNAME_VERIFICATION_ENABLED

+
+
+

boolean

false

Connection pool

Type

Default

+
+
+
+

Flag, if metrics are enabled.

+
+
+

Environment variable: QUARKUS_NEO4J_POOL_METRICS_ENABLED

+
+
+

boolean

false

+
+
+
+

Flag, if leaked sessions logging is enabled.

+
+
+

Environment variable: QUARKUS_NEO4J_POOL_LOG_LEAKED_SESSIONS

+
+
+

boolean

false

+
+
+
+

The maximum amount of connections in the connection pool towards a single database.

+
+
+

Environment variable: QUARKUS_NEO4J_POOL_MAX_CONNECTION_POOL_SIZE

+
+
+

int

100

+
+
+
+

Pooled connections that have been idle in the pool for longer than this timeout will be tested before they are used again. The value 0 means connections will always be tested for validity and negative values mean connections will never be tested.

+
+
+

Environment variable: QUARKUS_NEO4J_POOL_IDLE_TIME_BEFORE_CONNECTION_TEST

+
+
+

Duration +

-0.001S

+
+
+
+

Pooled connections older than this threshold will be closed and removed from the pool.

+
+
+

Environment variable: QUARKUS_NEO4J_POOL_MAX_CONNECTION_LIFETIME

+
+
+

Duration +

1H

+
+
+
+

Acquisition of new connections will be attempted for at most configured timeout.

+
+
+

Environment variable: QUARKUS_NEO4J_POOL_CONNECTION_ACQUISITION_TIMEOUT

+
+
+

Duration +

1M

+
+ + + + + +
+ + +
About the Duration format
+
+

The format for durations uses the standard java.time.Duration format. +You can learn more about it in the Duration#parse() javadoc.

+
+
+

You can also provide duration values starting with a number. +In this case, if the value consists only of a number, the converter treats the value as seconds. +Otherwise, PT is implicitly prepended to the value to obtain a standard java.time.Duration format.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-ngrok/dev/_images/ngrok.svg b/quarkus-ngrok/dev/_images/ngrok.svg new file mode 100644 index 0000000000..80be9044a9 --- /dev/null +++ b/quarkus-ngrok/dev/_images/ngrok.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + diff --git a/quarkus-ngrok/dev/_images/plus-sign.svg b/quarkus-ngrok/dev/_images/plus-sign.svg new file mode 100644 index 0000000000..ea94fe7b0c --- /dev/null +++ b/quarkus-ngrok/dev/_images/plus-sign.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + image/svg+xml + + + + + + + + diff --git a/quarkus-ngrok/dev/_images/quarkus.svg b/quarkus-ngrok/dev/_images/quarkus.svg new file mode 100644 index 0000000000..1969e1e886 --- /dev/null +++ b/quarkus-ngrok/dev/_images/quarkus.svg @@ -0,0 +1 @@ +quarkus_icon_rgb_1024px_reverse \ No newline at end of file diff --git a/quarkus-ngrok/dev/includes/quarkus-ngrok.html b/quarkus-ngrok/dev/includes/quarkus-ngrok.html new file mode 100644 index 0000000000..b89b8ed05e --- /dev/null +++ b/quarkus-ngrok/dev/includes/quarkus-ngrok.html @@ -0,0 +1,1066 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Whether ngrok should be started when Quarkus dev-mode is launched.

+
+
+

Environment variable: QUARKUS_NGROK_ENABLED

+
+
+

boolean

true

+
+
+
+

The directory into which to save the ngrok binary if it doesn’t exist

+
+
+

Environment variable: QUARKUS_NGROK_DIRECTORY

+
+
+

string

${user.home}/.quarkus/ngrok

+
+
+
+

Specify a download URL where the ngrok distribution will be obtained from. If not set, the platform default will be used

+
+
+

Environment variable: QUARKUS_NGROK_DOWNLOAD_URL

+
+
+

string

+
+
+
+

The authentication token used to authenticate this client when it connects to the ngrok.com service

+
+
+

Environment variable: QUARKUS_NGROK_AUTH_TOKEN

+
+
+

string

+
+
+
+

The region where the ngrok agent will connect to host its tunnels

+
+
+

Environment variable: QUARKUS_NGROK_REGION

+
+
+
+

united-states, europe, asia-pacific, australia, south-america, japan, india

+
+
+
+
+

The port where ngrok will be serving the local web interface and api

+
+
+

Environment variable: QUARKUS_NGROK_PORT

+
+
+

int

+
+
+
+

The domain or hostname to use instead of the one ngrok generates. See https://ngrok.com/blog-post/free-static-domains-ngrok-users

+
+
+

Environment variable: QUARKUS_NGROK_DOMAIN

+
+
+

string

+
+
+
+

Name of the tunnel to start from ngrok default config instead of Quarkus configuration. Useful to use extended ngrok configuration.

+
+
+

Environment variable: QUARKUS_NGROK_TUNNEL_NAME

+
+
+

string

+
+
+
+
+ + + + + + + diff --git a/quarkus-ngrok/dev/index.html b/quarkus-ngrok/dev/index.html new file mode 100644 index 0000000000..76705872ad --- /dev/null +++ b/quarkus-ngrok/dev/index.html @@ -0,0 +1,1185 @@ + + + + + + Quarkus - Ngrok :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus - Ngrok

+
+
+
+

This Quarkus extension integrates [ngrok](https://ngrok.com/) into Quarkus Dev Mode thus allowing users to expose their application to the public internet while they are still developing it.

+
+
+ + + + + +
+ + +The extension has absolutely no impact on the production Quarkus application +
+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.ngrok:quarkus-ngrok extension first. +In your pom.xml file, add:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.ngrok</groupId>
+    <artifactId>quarkus-ngrok</artifactId>
+</dependency>
+
+
+
+
+
+

Usage

+
+
+
    +
  1. +

    Add the extension to the application’s dependencies ./mvnw quarkus:add-extension -Dextensions="io.quarkiverse.ngrok:quarkus-ngrok"

    +
  2. +
  3. +

    Get a [ngrok auth token](https://ngrok.com/docs/getting-started/#step-2-connect-your-account) and configure it using ngrok or set it via quarkus.ngrok.authtoken

    +
  4. +
  5. +

    A short while after the application has started, you should see something in the application logs like:

    +
    +
    +
    ngrok is running and its web interface can be accessed at: 'http://localhost:4040'
    +The application can be accessed publicly over the internet using: 'http://4f59-68-81-186-238.ngrok-free.app'
    +
    +
    +
  6. +
  7. +

    Use the .ngrok-free.app URL to access the running application from the public internet

    +
  8. +
+
+
+
+
+

Use a stable domain/url

+
+
+

You can get a stable url by setting quarkus.ngrok.domain to a domain you own and have configured in ngrok.

+
+
+

Tip: ngrok at current time of writing offer a free domain per user for free. See details at https://ngrok.com/blog-post/free-static-domains-ngrok-users.

+
+
+
+
+

Use ngrok custom configuration

+
+
+

For further customization of ngrok, assign quarkus.ngrok.tunnel-name to a named tunnel specified in your ngrok configuration file for your operating system. Quarkus will then utilize that configuration instead.

+
+
+

Example, set this in your application.properties:

+
+
+
+
quarkus.ngrok.tunnel-name=${quarkus.application.name}
+
+
+
+

And lets say your app is named quarkus-my-app then in your ngrok.yml file:

+
+
+
+
version: 2
+tunnels:
+    quarkus-my-app:
+        proto: http
+        addr: 8080
+        bind_tls: true
+        basic_auth:
+            - "bob:bobpassword"
+        domain: my-app.ngrok.io
+
+
+
+

Then Quarkus will launch ngrok using ngrok start quarkus-my-app and use that specific named tunnel configuration.

+
+
+
+
+

Extension Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Whether ngrok should be started when Quarkus dev-mode is launched.

+
+
+

Environment variable: QUARKUS_NGROK_ENABLED

+
+
+

boolean

true

+
+
+
+

The directory into which to save the ngrok binary if it doesn’t exist

+
+
+

Environment variable: QUARKUS_NGROK_DIRECTORY

+
+
+

string

${user.home}/.quarkus/ngrok

+
+
+
+

Specify a download URL where the ngrok distribution will be obtained from. If not set, the platform default will be used

+
+
+

Environment variable: QUARKUS_NGROK_DOWNLOAD_URL

+
+
+

string

+
+
+
+

The authentication token used to authenticate this client when it connects to the ngrok.com service

+
+
+

Environment variable: QUARKUS_NGROK_AUTH_TOKEN

+
+
+

string

+
+
+
+

The region where the ngrok agent will connect to host its tunnels

+
+
+

Environment variable: QUARKUS_NGROK_REGION

+
+
+
+

united-states, europe, asia-pacific, australia, south-america, japan, india

+
+
+
+
+

The port where ngrok will be serving the local web interface and api

+
+
+

Environment variable: QUARKUS_NGROK_PORT

+
+
+

int

+
+
+
+

The domain or hostname to use instead of the one ngrok generates. See https://ngrok.com/blog-post/free-static-domains-ngrok-users

+
+
+

Environment variable: QUARKUS_NGROK_DOMAIN

+
+
+

string

+
+
+
+

Name of the tunnel to start from ngrok default config instead of Quarkus configuration. Useful to use extended ngrok configuration.

+
+
+

Environment variable: QUARKUS_NGROK_TUNNEL_NAME

+
+
+

string

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-omnifaces/dev/_images/omnifaces.png b/quarkus-omnifaces/dev/_images/omnifaces.png new file mode 100644 index 0000000000..b805ff152a Binary files /dev/null and b/quarkus-omnifaces/dev/_images/omnifaces.png differ diff --git a/quarkus-omnifaces/dev/_images/plus-sign.svg b/quarkus-omnifaces/dev/_images/plus-sign.svg new file mode 100644 index 0000000000..ea94fe7b0c --- /dev/null +++ b/quarkus-omnifaces/dev/_images/plus-sign.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + image/svg+xml + + + + + + + + diff --git a/quarkus-omnifaces/dev/includes/attributes.html b/quarkus-omnifaces/dev/includes/attributes.html new file mode 100644 index 0000000000..c6e3952876 --- /dev/null +++ b/quarkus-omnifaces/dev/includes/attributes.html @@ -0,0 +1,912 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-omnifaces/dev/index.html b/quarkus-omnifaces/dev/index.html new file mode 100644 index 0000000000..0c0fe5849d --- /dev/null +++ b/quarkus-omnifaces/dev/index.html @@ -0,0 +1,973 @@ + + + + + + Quarkus OmniFaces :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus OmniFaces

+
+
+
+

A Quarkus extension that lets you utilize OmniFaces library to make JSF development so much easier!

+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.omnifaces:quarkus-omnifaces extension first to your build file.

+
+
+

For instance, with Maven, add the following dependency to your POM file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.omnifaces</groupId>
+    <artifactId>quarkus-omnifaces</artifactId>
+    <version>4.3.0</version>
+</dependency>
+
+
+
+
+
+

Versioning

+
+
+

The versioning of this extension will follow the pattern [faces.version].[omnifaces.version].[patch]. For example:

+
+ ++++ + + + + + + + + + + + + + + + + +
VersionExplanation

3.14.2

Quarkus 2 (EE8), OmniFaces 3, Revision 2

4.1.0

Quarkus 3 (EEE10), OmniFaces 4, Revision 0

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-openapi-generator/dev/client.html b/quarkus-openapi-generator/dev/client.html new file mode 100644 index 0000000000..43d8b0aca6 --- /dev/null +++ b/quarkus-openapi-generator/dev/client.html @@ -0,0 +1,2332 @@ + + + + + + Quarkus - OpenAPI Generator - Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus - OpenAPI Generator - Client

+
+
+
+

This extension is for REST code generation for client side only. If you’re looking for code generation for the server side, please take a look at the Quarkus OpenAPI Generator Server Extension.

+
+
+

Want to contribute? Great! We try to make it easy, and all contributions, even the smaller ones, are more than welcome. This includes bug reports, fixes, documentation, examples…​ But first, read this page.

+
+
+
+
+

Getting Started

+
+
+

Add the following dependency to your project’s pom.xml file:

+
+
+ + + + + +
+ + +Version 2.x.x of this extension supports Quarkus 3, and version 1.x.x supports Quarkus 2. We strongly recommend you to use version 2.x.x. No updates are planned for version 1.x.x. +
+
+
+
+
<dependency>
+  <groupId>io.quarkiverse.openapi.generator</groupId>
+  <artifactId>quarkus-openapi-generator</artifactId>
+  <version>3.0.0-SNAPSHOT</version>
+</dependency>
+
+
+
+

You will also need to add or update the quarkus-maven-plugin configuration with the following:

+
+
+ + + + + +
+ + +You probably already have this configuration if you created your application with Code Quarkus. That said, double-check your configuration not to add another plugin entry. +
+
+
+
+
<plugin>
+  <groupId>io.quarkus</groupId>
+  <artifactId>quarkus-maven-plugin</artifactId>
+  <extensions>true</extensions>
+  <executions>
+    <execution>
+      <goals>
+        <goal>build</goal>
+        <goal>generate-code</goal>
+        <goal>generate-code-tests</goal>
+      </goals>
+    </execution>
+  </executions>
+</plugin>
+
+
+
+

Now, create the directory openapi under your src/main/ path and add the OpenAPI spec files there. We support JSON, YAML and YML extensions.

+
+
+

If you want to change the directory where OpenAPI files must be found, use the property quarkus.openapi-generator.codegen.input-base-dir. +IMPORTANT: it is relative to the project base directory. For example, if you have a project called MyJavaProject and decide to place them in MyJavaProject/openapi-definitions, use the following property:

+
+
+
+
quarkus.openapi-generator.codegen.input-base-dir=openapi-definitions
+
+
+
+

To fine tune the configuration for each spec file, add the following entry to your properties file. In this example, our spec file is in src/main/openapi/petstore.json:

+
+
+
+
quarkus.openapi-generator.codegen.spec.petstore_json.additional-model-type-annotations=@org.test.Foo;@org.test.Bar
+
+
+
+

If you want to change the base package in which the classes are generated, use the quarkus.openapi-generator.codegen.spec.<filename>.base-package property. +If a base package is not provided, it will default to org.openapi.quarkus.<filename>. For example, org.openapi.quarkus.petstore_json.

+
+
+
+
quarkus.openapi-generator.codegen.spec.petstore_json.base-package=org.acme
+
+
+
+

Configuring additional-model-type-annotations will add all annotations to the generated model files (extra details can be found in OpenApi Generator Doc).

+
+
+

You can customize the name of generated classes. To do that, you must define the following properties:

+
+
+
+
quarkus.openapi-generator.codegen.spec.petstore_json.api-name-suffix=CustomApiSuffix
+
+
+
+
+
quarkus.openapi-generator.codegen.spec.petstore_json.model-name-suffix=CustomModelSuffix
+
+
+
+
+
quarkus.openapi-generator.codegen.spec.petstore_json.model-name-prefix=CustomModelPrefix
+
+
+
+

The same way you can add any additional annotations to the generated api files with additional-api-type-annotations. Given you want to include Foo and Bar annotations, you must define additional-api-type-annotations as:

+
+
+
+
quarkus.openapi-generator.codegen.spec.petstore_json.additional-api-type-annotations=@org.test.Foo;@org.test.Bar
+
+
+
+ + + + + +
+ + +Note that the file name`petstore_json`is used to configure the specific information for each spec. We follow the Environment Variables Mapping Rules from Microprofile Configuration to sanitize the OpenAPI spec filename. Any non-alphabetic characters are replaced by an underscore _. +
+
+
+

Run mvn compile to generate your classes in target/generated-sources/open-api-json path:

+
+
+
+
- org.acme.openapi
+  - api
+    - PetApi.java
+    - StoreApi.java
+    - UserApi.java
+  - model
+    - Address.java
+    - Category.java
+    - Customer.java
+    - ModelApiResponse.java
+    - Order.java
+    - Pet.java
+    - Tag.java
+    - User.java
+
+
+
+

You can reference the generated code in your project, for example:

+
+
+
+
import jakarta.inject.Inject;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+
+import org.acme.openapi.api.PetApi;
+import org.eclipse.microprofile.rest.client.inject.RestClient;
+import org.jboss.resteasy.annotations.jaxrs.PathParam;
+
+@Produces(MediaType.APPLICATION_JSON)
+@Path("/petstore")
+public class PetResource {
+
+    @RestClient
+    @Inject
+    PetApi petApi;
+}
+
+
+
+

See the integration-tests module for more information of how to use this extension. Please be advised that the extension is on experimental, early development stage.

+
+
+
+
+

RESTEasy Reactive and Classic support

+
+
+

You can use the quarkus-openapi-generator with REST Client Classic or REST Client Reactive respectively. To do so add either the classic or reactive jackson dependency to your project’s pom.xml file:

+
+
+

RESTEasy Classic

+
+
+
<dependency>
+  <groupId>io.quarkus</groupId>
+  <artifactId>quarkus-rest-client-jackson</artifactId>
+</dependency>
+
+
+
+ + + + + +
+ + +After Version 1.2.1 / 2.1.1 you need to declare the above dependency explicitly! Even if you stay with the REST Client Classic implementation! +
+
+
+
+

RESTEasy Reactive

+
+
+
<dependency>
+  <groupId>io.quarkus</groupId>
+  <artifactId>quarkus-rest-client-reactive-jackson</artifactId>
+</dependency>
+
+
+
+

To make truly non-blocking calls, you need to also set the mutiny option to true. This +will wrap all API return types in a io.smallrye.mutiny.Uni.

+
+
+
+
quarkus.openapi-generator.codegen.spec.my_openapi_yaml.mutiny=true
+
+
+
+

When using RESTEasy Reactive:

+
+
+
    +
  • +

    The client must not declare multiple MIME-TYPES with @Consumes

    +
  • +
  • +

    You might need to implement a ParamConverter for each complex type

    +
  • +
+
+
+
+
+
+

Returning Response objects

+
+
+

By default, this extension generates the methods according to their returning models based on the OpenAPI specification Schema Object. If no response model is defined, jakarta.ws.rs.core.Response is returned.

+
+
+

If you want to return jakarta.ws.rs.core.Response in all cases instead, you can set the return-response property to true.

+
+
+

Example

+
+

Given you want to return jakarta.ws.rs.core.Response for the my-openapi.yaml file, you must add the following to your application.properties file:

+
+
+
+
quarkus.openapi-generator.codegen.spec.my_openapi_yaml.return-response=true
+
+
+
+
+
+
+

Logging

+
+
+

Since the most part of this extension work is in the generate-code execution phase of the Quarkus Maven’s plugin, the log configuration must be set in the Maven context. When building your project, add -Dorg.slf4j.simpleLogger.log.org.openapitools=off to the mvn command to reduce the internal generator noise. For example:

+
+
+
+
mvn clean install -Dorg.slf4j.simpleLogger.log.org.openapitools=off
+
+
+
+

For more information, see the Maven Logging Configuration and Maven Configuration guides.

+
+
+
+
+

Filtering OpenAPI Specification Files

+
+
+

By default, the extension will process every OpenAPI specification file in the given path. +To limit code generation to only a specific set of OpenAPI specification files, you can set the quarkus.openapi-generator.codegen.include property.

+
+
+

For instance, if you want to limit code generation for include-openapi.yaml and include-openapi-2.yaml files, you need to define the property like:

+
+
+
+
quarkus.openapi-generator.codegen.include=include-openapi.yaml,include-openapi-2.yaml
+
+
+
+

If you prefer to specify which files you want to skip, you can set the quarkus.openapi-generator.codegen.exclude property. +For instance, if you want to skip code generation for exclude-openapi.yaml and exclude-openapi-2.yaml files, you need to define the property like:

+
+
+
+
quarkus.openapi-generator.codegen.exclude=exclude-openapi.yaml,exclude-openapi-2.yaml
+
+
+
+ + + + + +
+ + +exclude supersedes include, meaning that if a file is in both property it will NOT be analysed. +
+
+
+

See the module integration-tests/ignore for an example of how to use this feature.

+
+
+
+
+

Authentication Support

+
+
+

If your OpenAPI specification file has securitySchemes definitions, the inner generator +will register ClientRequestFilter providers for you to +implement the given authentication mechanism.

+
+
+

To provide the credentials for your application, you can use the Quarkus configuration support. The configuration key is composed using this +pattern: quarkus.openapi-generator.[filename].auth.[security_scheme_name].[auth_property_name]. Where:

+
+
+
    +
  • +

    filename is the sanitized name of file containing the OpenAPI spec, for example petstore_json.

    +
  • +
  • +

    security_scheme_name is the sanitized name of the security scheme object definition in the OpenAPI file. Given the following excerpt, we +have api_key and basic_auth security schemes:

    +
  • +
+
+
+
+
{
+  "securitySchemes": {
+    "api_key": {
+      "type": "apiKey",
+      "name": "api_key",
+      "in": "header"
+    },
+    "basic_auth": {
+      "type": "http",
+      "scheme": "basic"
+    }
+  }
+}
+
+
+
+ + + + + +
+ + +Note that the securityScheme name used to configure the specific information for each spec is sanitized using the same rules as for the file names. +
+
+
+
    +
  • +

    auth_property_name varies depending on the authentication provider. For example, for Basic Authentication we have username and password. See the following sections for more details.

    +
  • +
+
+
+
+
+

Tip: on production environments you will likely to use HashiCorp Vault or Kubernetes Secrets to provide this information for your application.

+
+
+
+
+

If the OpenAPI specification file has securitySchemes definitions, but no Security Requirement Object definitions, the generator can be configured to create these by default. In this case, for all operations without a security requirement the default one will be created. Note that the property value needs to match the name of a security scheme object definition, eg. api_key or basic_auth in the securitySchemes list above.

+
+ +++++ + + + + + + + + + + + + + + +
DescriptionProperty KeyExample

Create security for the referenced security scheme

quarkus.openapi-generator.codegen.default-security-scheme

quarkus.openapi-generator.codegen.default-security-scheme=api_key

+
+

See the module security for an example of how to use this feature.

+
+
+

Basic HTTP Authentication

+
+

For Basic HTTP Authentication, these are the supported configurations:

+
+ +++++ + + + + + + + + + + + + + + + + + + + +
DescriptionProperty KeyExample

Username credentials

quarkus.openapi-generator.[filename].auth.[security_scheme_name].username

quarkus.openapi-generator.petstore_json.auth.basic_auth.username

Password credentials

quarkus.openapi-generator.[filename].auth.[security_scheme_name].password

quarkus.openapi-generator.petstore_json.auth.basic_auth-password

+
+
+

Bearer Token Authentication

+
+

Authentication, these are the supported configurations:

+
+ +++++ + + + + + + + + + + + + + + +
DescriptionProperty KeyExample

Bearer Token

quarkus.openapi-generator.[filename].auth.[security_scheme_name].bearer-token

quarkus.openapi-generator.petstore_json.auth.bearer.bearer-token

+
+
+

API Key Authentication

+
+

Similarly to bearer token, the API Key Authentication also has the token entry key property:

+
+ +++++ + + + + + + + + + + + + + + +
DescriptionProperty KeyExample

API Key

quarkus.openapi-generator.[filename].auth.[security_scheme_name].api-key

quarkus.openapi-generator.petstore_json.auth.api_key.api-key

+
+

The API Key scheme has an additional property that requires where to add the API key in the request token: header, cookie or query. The inner provider takes care of that for you.

+
+
+
+

OAuth2 Authentication

+
+

The extension will generate a ClientRequestFilter capable to add OAuth2 authentication capabilities to the OpenAPI operations that require it. This means that you can use +the Quarkus OIDC Extension configuration to define your authentication flow.

+
+
+

The generated code creates a named OidcClient for each Security Scheme listed in the OpenAPI specification files. For example, given +the following excerpt:

+
+
+
+
{
+  "securitySchemes": {
+    "petstore_auth": {
+      "type": "oauth2",
+      "flows": {
+        "implicit": {
+          "authorizationUrl": "https://petstore3.swagger.io/oauth/authorize",
+          "scopes": {
+            "write:pets": "modify pets in your account",
+            "read:pets": "read your pets"
+          }
+        }
+      }
+    }
+  }
+}
+
+
+
+

You can configure this OidcClient as:

+
+
+
+
quarkus.oidc-client.petstore_auth.auth-server-url=https://petstore3.swagger.io/oauth/authorize
+quarkus.oidc-client.petstore_auth.discovery-enabled=false
+quarkus.oidc-client.petstore_auth.token-path=/tokens
+quarkus.oidc-client.petstore_auth.credentials.secret=secret
+quarkus.oidc-client.petstore_auth.grant.type=password
+quarkus.oidc-client.petstore_auth.grant-options.password.username=alice
+quarkus.oidc-client.petstore_auth.grant-options.password.password=alice
+quarkus.oidc-client.petstore_auth.client-id=petstore-app
+
+
+
+

The configuration suffix quarkus.oidc-client.petstore_auth is exclusive for the schema defined in the specification file and the schemaName is sanitized by applying the rules described above.

+
+
+

For this to work you must add Quarkus OIDC Client Filter Extension to your project:

+
+
+

RESTEasy Classic:

+
+
+
+
<dependency>
+  <groupId>io.quarkus</groupId>
+  <artifactId>quarkus-oidc-client-filter</artifactId>
+</dependency>
+
+
+
+

RESTEasy Reactive:

+
+
+
+
<dependency>
+  <groupId>io.quarkus</groupId>
+  <artifactId>quarkus-oidc-client-reactive-filter</artifactId>
+</dependency>
+
+
+
+

If authentication support doesn’t suit your needs you can decide to disable it with enable-security-generation=false. In such case CompositeAuthenticationProvider and AuthenticationPropagationHeadersFactory wont be generated and used with your api. +The option can be set globally with quarkus.openapi-generator.codegen.enable-security-generation or per api quarkus.openapi-generator.codegen.spec.my_spec_yml.enable-security-generation +Custom authentication provider can be used with additional-api-type-annotations

+
+
+

See the module generation-tests for an example of how to use this feature.

+
+
+
+
+
+

Authorization Token Propagation

+
+
+

The authorization token propagation can be used with OpenApi operations secured with a security scheme of type "oauth2" or "bearer". +When configured, you can propagate the authorization tokens passed to your service and the invocations to the REST clients generated by the quarkus-openapi-generator.

+
+
+

Let’s see how it works by following a simple example:

+
+
+

Imagine that we have a updatePet operation defined in the petstore.json specification file and secured with the petstore_auth security scheme. +The code below shows a simple example of the usage of this operation in a user-programmed service.

+
+
+
+
import org.acme.api.PetApi;
+import org.acme.model.Pet;
+import org.eclipse.microprofile.rest.client.inject.RestClient;
+
+/**
+ * User programmed service.
+ */
+@Path("/petstore")
+public class PetResource {
+
+  /**
+   * Inject the rest client generated by the quarkus-openapi-generator.
+   */
+  @Inject
+  @RestClient
+  PetApi petApi;
+
+  /**
+   * User programmed operation.
+   */
+  @Path("/pet/{id}")
+  @PATCH
+  @Produces(MediaType.APPLICATION_JSON)
+  @Consumes(MediaType.APPLICATION_JSON)
+  public Response customUpdatePet(@PathParam("id") long id, PetData petData) {
+
+    // Create a new instance of the Pet class generated by the quarkus-openapi-generator and
+    // populate accordingly.
+    Pet pet = new Pet();
+    pet.setId(id);
+    applyDataToPet(pet, petData);
+
+    // Execute the rest call using the generated client.
+    // The petstore.json open api spec stays that the "updatePet" operation is secured with the
+    // security scheme "petstore_auth".
+    petApi.updatePet(pet);
+
+    // Do other required things and finally return something.
+    return Response.ok().build();
+  }
+
+  public static class PetData {
+    // Represents the Pet modifiable data sent to the user programmed service.
+  }
+
+  private void applyDataToPet(Pet pet, PetData petData) {
+    // Set the corresponding values to the Pet instance.
+  }
+}
+
+
+
+

Let’s see what happens when the PetResource service customUpdatePet operation is invoked by a third party.

+
+
+

Default flow

+
+
    +
  1. +

    The customUpdatePet operation is invoked.

    +
  2. +
  3. +

    An authorization token is obtained using the corresponding petstore_auth OidcClient configuration. (for more information see OAuth2 Authentication)

    +
  4. +
  5. +

    The authorization token is automatically passed along the PetApi updatePet operation execution using an automatically generated request filter, etc.

    +
  6. +
+
+
+

Propagation flow

+
+

However, there are scenarios where we want to propagate the authorization token that was initially passed to the PetResource service when the customUpdatePet operation was invoked instead of having to obtain it by using the OidcClient.

+
+
+
    +
  1. +

    The user service customUpdatePet operation is invoked, and an authorization token is passed by the third party typically by using the HTTP Authorization header.

    +
  2. +
  3. +

    The incoming authorization token is automatically passed along the PetApi updatePet operation execution according to the user-provided configuration.

    +
  4. +
+
+
+ + + + + +
+ + +When configured, the token propagation applies to all the operations secured with the same securityScheme in the same specification file. +
+
+
+
+

Propagation flow configuration

+
+

The token propagation can be used with type "oauth2" or "bearer" security schemes. Finally, considering that a given security scheme might be configured on a set of operations in the same specification file when configured, it’ll apply to all these operations.

+
+ ++++ + + + + + + + + + + + + + + + + +
Property KeyExample

quarkus.openapi-generator.[filename].auth.[security_scheme_name].token-propagation=[true,false]

quarkus.openapi-generator.petstore_json.auth.petstore_auth.token-propagation=true
+Enables the token propagation for all the operations that are secured with the petstore_auth scheme in the petstore_json file.

quarkus.openapi-generator.[filename].auth.[security_scheme_name].header-name=[http_header_name]

quarkus.openapi-generator.petstore_json.auth.petstore_auth.header-name=MyHeaderName
+Says that the authorization token to propagate will be read from the HTTP header MyHeaderName instead of the standard HTTP Authorization header.

+
+
+
+
+
+

Circuit Breaker

+
+
+

You can define the CircuitBreaker annotation from MicroProfile Fault Tolerance +in your generated classes by setting the desired configuration in application.properties.

+
+
+

Let’s say you have the following OpenAPI definition:

+
+
+
+
{
+  "openapi": "3.0.3",
+  "info": {
+    "title": "Simple API",
+    "version": "1.0.0-SNAPSHOT"
+  },
+  "paths": {
+    "/hello": {
+      "get": {
+        "responses": {
+          "200": {
+            "description": "OK",
+            "content": {
+              "text/plain": {
+                "schema": {
+                  "type": "string"
+                }
+              }
+            }
+          }
+        }
+      }
+    },
+    "/bye": {
+      "get": {
+        "responses": {
+          "200": {
+            "description": "OK",
+            "content": {
+              "text/plain": {
+                "schema": {
+                  "type": "string"
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+}
+
+
+
+

And you want to configure Circuit Breaker for the /bye endpoint, you can do it in the following way:

+
+
+

Add the SmallRye Fault Tolerance extension to your project’s pom.xml file:

+
+
+
+
<dependency>
+  <groupId>io.quarkus</groupId>
+  <artifactId>quarkus-smallrye-fault-tolerance</artifactId>
+</dependency>
+
+
+
+

Assuming your Open API spec file is in src/main/openapi/simple-openapi.json, add the following configuration to your application.properties file:

+
+
+
+
# Note that the file name must have only alphabetic characters or underscores (_).
+quarkus.openapi-generator.codegen.spec.simple_openapi_json.base-package=org.acme.openapi.simple
+# Enables the CircuitBreaker extension for the byeGet method from the DefaultApi class
+org.acme.openapi.simple.api.DefaultApi/byeGet/CircuitBreaker/enabled=true
+
+
+
+

With the above configuration, your Rest Clients will be created with a code similar to the following:

+
+
+
+
package org.acme.openapi.simple.api;
+
+import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.List;
+import java.util.Map;
+
+import jakarta.ws.rs.*;
+import jakarta.ws.rs.core.Response;
+import jakarta.ws.rs.core.MediaType;
+
+@Path("")
+@RegisterRestClient(configKey="simple-openapi_json")
+public interface DefaultApi {
+
+    @GET
+    @Path("/bye")
+    @Produces({ "text/plain" })
+    @org.eclipse.microprofile.faulttolerance.CircuitBreaker
+    public String byeGet();
+
+    @GET
+    @Path("/hello")
+    @Produces({ "text/plain" })
+    public String helloGet();
+
+}
+
+
+
+

You can also override the default Circuit Breaker configuration by setting the properties +in application.properties just as you would for a traditional MicroProfile application:

+
+
+
+
org.acme.openapi.simple.api.DefaultApi/byeGet/CircuitBreaker/failOn=java.lang.IllegalArgumentException,java.lang.NullPointerException
+org.acme.openapi.simple.api.DefaultApi/byeGet/CircuitBreaker/skipOn=java.lang.NumberFormatException
+org.acme.openapi.simple.api.DefaultApi/byeGet/CircuitBreaker/delay=33
+org.acme.openapi.simple.api.DefaultApi/byeGet/CircuitBreaker/delayUnit=MILLIS
+org.acme.openapi.simple.api.DefaultApi/byeGet/CircuitBreaker/requestVolumeThreshold=42
+org.acme.openapi.simple.api.DefaultApi/byeGet/CircuitBreaker/failureRatio=3.14
+org.acme.openapi.simple.api.DefaultApi/byeGet/CircuitBreaker/successThreshold=22
+
+
+
+

See the module circuit-breaker for an example of how to use this feature.

+
+
+
+
+

Sending multipart/form-data

+
+
+

The rest client also supports request with mime-type multipart/form-data and, if the schema of the request body is known in advance, we can also automatically generate the models of the request +bodies.

+
+
+ + + + + +
+ + +RESTEasy Reactive supports multipart/form-data out of the box. Thus, no additional dependency is required. +
+
+
+

If you’re using RESTEasy Classic, you need to add the following additional dependency to your pom.xml:

+
+
+
+
<dependency>
+  <groupId>io.quarkus</groupId>
+  <artifactId>quarkus-resteasy-multipart</artifactId>
+</dependency>
+
+
+
+

For any multipart/form-data operation a model for the request body will be generated. Each part of the multipart is a field in this model that is annotated with the following annotations:

+
+
+
    +
  • +

    jakarta.ws.rs.FormParam, where the value parameter denotes the part name,

    +
  • +
  • +

    PartType, where the parameter is the jax-rs MediaType of the part (see below for details),

    +
  • +
  • +

    and, if the part contains a file, PartFilename, with a generated default parameter that will be passed as the fileName sub-header in the +Content-Disposition header of the part.

    +
  • +
+
+
+

For example, the model for a request that requires a file, a string and some complex object will look like this:

+
+
+
+
public class MultipartBody {
+
+    @FormParam("file")
+    @PartType(MediaType.APPLICATION_OCTET_STREAM)
+    @PartFilename("fileFile")
+    public File file;
+
+    @FormParam("fileName")
+    @PartType(MediaType.TEXT_PLAIN)
+    public String fileName;
+
+    @FormParam("someObject")
+    @PartType(MediaType.APPLICATION_JSON)
+    public MyComplexObject someObject;
+}
+
+
+
+

Then in the client, when using RESTEasy Classic, the org.jboss.resteasy.annotations.providers.multipart.MultipartForm annotation is added in front of the multipart parameter:

+
+
+
+
@Path("/echo")
+@RegisterRestClient(baseUri="http://my.endpoint.com/api/v1", configKey="multipart-requests_yml")
+public interface MultipartService {
+
+    @POST
+    @Consumes(MediaType.MULTIPART_FORM_DATA)
+    @Produces(MediaType.TEXT_PLAIN)
+    String sendMultipartData(@MultipartForm MultipartBody data);
+
+}
+
+
+
+

When using RESTEasy Reactive, the jakarta.ws.rs.BeanParam annotation is added in front of the multipart parameter:

+
+
+
+
@Path("/echo")
+@RegisterRestClient(baseUri="http://my.endpoint.com/api/v1", configKey="multipart-requests_yml")
+public interface MultipartService {
+
+  @POST
+  @Consumes(MediaType.MULTIPART_FORM_DATA)
+  @Produces(MediaType.TEXT_PLAIN)
+  String sendMultipartData(@jakarta.ws.rs.BeanParam MultipartBody data);
+
+}
+
+
+ +
+ + + + + +
+ + +MultipartForm is deprecated when using RESTEasy Reactive. +
+
+
+

baseURI value of RegisterRestClient annotation is extracted from the servers section of the file, if present. If not, it will be left empty and it is expected you set up the uri to be used in your configuration.

+
+
+

Importantly, if some multipart request bodies contain complex objects (i.e. non-primitives) you need to explicitly tell the Open API generator to create models for these objects by setting +the skip-form-model property corresponding to your spec in the application.properties to false, e.g.:

+
+
+
+
quarkus.openapi-generator.codegen.spec.my_multipart_requests_yml.skip-form-model=false
+
+
+
+

See the module multipart-request for an example of how to use this feature.

+
+
+

In case the default PartFilename annotation is not required, its generation can be disabled by setting the generate-part-filename property (globally or corresponding to your spec) in the application.properties to false, e.g.:

+
+
+
+
quarkus.openapi-generator.codegen.spec.my_multipart_requests_yml.generate-part-filename=false
+
+
+
+

By default, the PartFilename value representing the filename is prefixed by the field name. This can be changed by setting the use-field-name-in-part-filename property (globally or corresponding to your spec) in the application.properties to false, e.g.:

+
+
+
+
quarkus.openapi-generator.codegen.spec.my_multipart_requests_yml.use-field-name-in-part-filename=false
+
+
+
+

And in case the default PartFilename value is not suitable (e.g. a conversion service only allows/supports specific extensions), the value can be set by using the part-filename-value property (globally or corresponding to your spec) in the application.properties, e.g.:

+
+
+
+
quarkus.openapi-generator.codegen.spec.my_first_multipart_requests_yml.part-filename-value=".pdf"
+
+
+
+

So for instance, by setting part-filename-value to some.pdf and use-field-name-in-part-filename to false the generated code will look like this:

+
+
+
+
public class MultipartBody {
+
+  @FormParam("file")
+  @PartType(MediaType.APPLICATION_OCTET_STREAM)
+  @PartFilename("some.pdf")
+  public File file;
+}
+
+
+
+

And by setting only part-filename-value to .pdf, the generated code will look like this:

+
+
+
+
public class MultipartBody {
+
+  @FormParam("file")
+  @PartType(MediaType.APPLICATION_OCTET_STREAM)
+  @PartFilename("file.pdf")
+  public File file;
+}
+
+
+
+

See the module part-filename for examples of how to use these features.

+
+
+

Default content-types according to OpenAPI Specification and limitations

+
+

The OAS 3.0 specifies the following default content-types for a multipart:

+
+
+
    +
  • +

    If the property is a primitive, or an array of primitive values, the default Content-Type is text/plain

    +
  • +
  • +

    If the property is complex, or an array of complex values, the default Content-Type is application/json

    +
  • +
  • +

    If the property is a type: string with format: binary or format: base64 (aka a file object), the default Content-Type is application/octet-stream

    +
  • +
+
+
+

A different content-type may be defined in your api spec, but this is not yet supported in the code generation. Also, this "annotation-oriented" approach of RestEasy (i.e. using @MultipartForm to +denote the multipart body parameter) does not seem to properly support the unmarshalling of arrays of the same type (e.g. array of files), in these cases it uses Content-Type equal +to application/json.

+
+
+
+
+
+

Generating files via InputStream

+
+
+

Having the files in the src/main/openapi directory will generate the REST stubs by default. Alternatively, you can implement +the io.quarkiverse.openapi.generator.deployment.codegen.OpenApiSpecInputProvider +interface to provide a list of `InputStream`s of OpenAPI specification files. This is useful in scenarios where you want to dynamically generate the client code without having the target spec file +saved locally in your project.

+
+
+

See the example implementation here

+
+
+
+
+

Skip Deprecated Attributes in Model classes

+
+
+

The domain objects are classes generated in the model package. These classes might have deprecated attributes in the Open API specification +file. By default, these attributes are generated. You can fine tune this behavior if the deprecated attributes should not be generated.

+
+
+

Use the property key <base_package>.model.MyClass.generateDeprecated=false to disable the deprecated attributes in the given model. For example org.acme.weather.Country.generatedDeprecated=false.

+
+
+
+
+

Skip Deprecated Operations in API classes

+
+
+

The client objects are classes generated in the api package. These classes might have deprecated operations in the Open API specification +file. By default, these operations are generated. You can fine tune this behavior if the deprecated operations should not be generated.

+
+
+

Use the property key <base_package>.api.MyClass.generateDeprecated=false to disable the deprecated operations in the given API. For example org.acme.openapi.simple.api.DefaultApi.generatedDeprecated=false.

+
+
+
+
package org.acme.openapi.simple.api;
+
+import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.List;
+import java.util.Map;
+
+import jakarta.ws.rs.*;
+import jakarta.ws.rs.core.Response;
+import jakarta.ws.rs.core.MediaType;
+
+@Path("")
+@RegisterRestClient(configKey="simple-openapi_json")
+@RegisterProvider(org.test.Foo.class)
+@RegisterProvider(org.test.Bar.class)
+public interface DefaultApi {
+
+    @GET
+    @Path("/bye")
+    @Produces({ "text/plain" })
+    @org.eclipse.microprofile.faulttolerance.CircuitBreaker
+    public String byeGet();
+}
+
+
+
+

See the module integration-tests/register-provider for an example of how to use this feature.

+
+
+
+
+

Skip OpenAPI schema validation

+
+
+

Use the property key quarkus.openapi-generator.codegen.validateSpec=false to disable validating the input specification file before code generation. By default, invalid specifications will result in an error.

+
+
+
+
+

Type and import mappings

+
+
+

It’s possible to remap types in the generated files. For example, instead of a File you can configure the code generator to use InputStream for all file upload parts of multipart request, or you could change all UUID types to String. You can configure this in your application.properties using the following configuration keys:

+
+ +++++ + + + + + + + + + + + + + + + + + + + +
DescriptionProperty KeyExample

Type Mapping

quarkus.openapi-generator.codegen.spec.[filename].type-mappings.[oas_type]

quarkus.openapi-generator.codegen.spec.my_spec_yml.type-mappings.File=InputStream will use InputStream as type for all objects of the OAS File type.

Import Mapping

quarkus.openapi-generator.codegen.spec.[filename].import-mappings.[type]

quarkus.openapi-generator.codegen.spec.my_spec_yml.import-mappings.File=java.io.InputStream will replace the default import java.io.File with import java.io.InputStream

+
+

Note that these configuration properties are maps. For the type-mapping the keys are OAS data types and the values are Java types.

+
+
+

Another common example is needing java.time.Instant as type for date-time fields in your POJO classes. You can achieve with these settings:

+
+
+
+
quarkus.openapi-generator.codegen.spec.my_spec_yml.type-mappings.DateTime=Instant
+quarkus.openapi-generator.codegen.spec.my_spec_yml.import-mappings.Instant=java.time.Instant
+
+
+
+

It’s also possible to only use a type mapping with a fully qualified name, for instance quarkus.openapi-generator.codegen.spec.my_spec_yml.type-mappings.File=java.io.InputStream. For more information and a list of all types see the OpenAPI generator documentation on Type Mappings and Import Mappings.

+
+
+

See the module type-mapping for an example of how to use this feature.

+
+
+
+
+

Config key

+
+
+

By default, the @RegisterRestClient configKey property is the sanitized name of the file containing the OpenAPI spec. For example, if the file name is petstore.json, the configKey will be petstore_json:

+
+
+
+
/* omitted */
+@RegisterRestClient(configKey="petstore_json")
+public interface DefaultApi { /* omitted */ }
+
+
+
+

If you want to use a different configKey than the default one, you can set the quarkus.openapi-generator.codegen.spec.petstore_json.[config-key] property.

+
+
+

Using the config-key the extension allow you to define all allowed properties with quarkus.openapi-generator.codegen.spec.[my_custom_config_key].* prefix. For example:

+
+
+
+
quarkus.openapi-generator.codegen.spec.petstore_json.config-key=petstore
+quarkus.openapi-generator.codegen.spec.petstore.additional-api-type-annotations=@org.test.Foo
+
+
+
+

With it, you will have the following result:

+
+
+
+
/* omitted */
+@RegisterRestClient(configKey="petstore")
+@org.test.Foo
+public interface DefaultApi { /* omitted */ }
+
+
+
+ + + + + +
+ + +If you configure the property config-key, it will override the sanitized file name (will not consider the order of the configurations). For example, having the following configuration: +
+
+
+
+
quarkus.openapi-generator.codegen.spec.petstore_json.config-key=custom_config_key
+quarkus.openapi-generator.codegen.spec.custom_config_key.additional-api-type-annotations=@org.test.Foo
+quarkus.openapi-generator.codegen.spec.petstore_json.additional-api-type-annotations=@org.test.Bar
+
+
+
+

The generated code will be:

+
+
+
+
/* omitted */
+@RegisterRestClient(configKey="custom_config_key")
+@org.test.Foo
+public interface DefaultApi { /* omitted */ }
+
+
+
+
+
+

Template Customization

+
+
+

You have the option to swap out the templates used by this extension with your customized versions. To achieve this, place your custom templates under the resources/templates directory. It’s crucial that the filename of each custom template matches that of the original template.

+
+
+

You can find an example of using customized templates in integration-tests/custom-templates.

+
+
+ + + + + +
+ + +While the option to replace templates exists, it’s essential to exercise caution and consider this as a final resort. Prior to altering templates, exhaust all possibilities of achieving your goals through configuration settings. Modifying templates could have broader implications for the extension’s functionality and may introduce complexities. Only resort to template replacement when configuration adjustments prove insufficient for your requirements. +
+
+
+

Furthermore, be aware that customizing templates increases the risk of compatibility issues during future upgrades. Therefore, exercise discretion and weigh the benefits against the potential risks before opting for template customization.

+
+
+
+
+

Additional Properties as Attribute

+
+
+

In some cases is necessary to use additionalProperties inside the OpenAPI specification, by default this extension creates an object that inherits a java.util.HashMap +class. It works well, but there are some issues with Jackson on serialize/deserialize:

+
+
+
    +
  • +

    Serialization throws com.fasterxml.jackson.databind.exc.MismatchedInputException exception.

    +
  • +
  • +

    Deserialization Jackson does ignore plain fields.

    +
  • +
+
+
+

If you want to use composition instead inheritance and serialize/deserialize with Jackson without those problems, consider to configure the additional-properties-as-attributes.

+
+
+

To map additionalProperties as attribute, add the following entry to your properties file. In this example, our spec file is in src/main/openapi/petstore.json:

+
+
+
+
quarkus.openapi-generator.codegen.spec.petstore_json.additional-properties-as-attribute=true
+
+
+
+

This configuration implies that all models using additionalProperties will be mapped using a java.util.Map as composition.

+
+
+
+
+

Add Additional Request Arguments to each API Method

+
+
+

To add custom request specific parameters you can use the additional-request-args property.

+
+
+

Should work with:

+
+
+
    +
  • +

    @PathParam

    +
  • +
  • +

    @QueryParam

    +
  • +
  • +

    @CookieParam

    +
  • +
  • +

    @FormParam

    +
  • +
  • +

    @MatrixParam

    +
  • +
+
+
+

To use additional-request-args as attribute, add the following entry to your properties file. In this example, our spec file is in src/main/openapi/petstore.json:

+
+
+
+
quarkus.openapi-generator.codegen.spec.petstore_json.additional-request-args=@CookieParam("cookie") String cookie;@HeaderParam("x-correlation-id") String correlationId
+
+
+
+

This configuration is applied to every generated method.

+
+
+
+
+

Known Limitations

+
+
+

These are the known limitations of this pre-release version:

+
+
+
    +
  • +

    Only Jackson support

    +
  • +
+
+
+

We will work in the next few releases to address these use cases, until there please provide feedback for the current state of this extension. We also love contributions .

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-openapi-generator/dev/includes/additional-properties-as-attribute.html b/quarkus-openapi-generator/dev/includes/additional-properties-as-attribute.html new file mode 100644 index 0000000000..571fa40a55 --- /dev/null +++ b/quarkus-openapi-generator/dev/includes/additional-properties-as-attribute.html @@ -0,0 +1,942 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

In some cases is necessary to use additionalProperties inside the OpenAPI specification, by default this extension creates an object that inherits a java.util.HashMap +class. It works well, but there are some issues with Jackson on serialize/deserialize:

+
+
+
    +
  • +

    Serialization throws com.fasterxml.jackson.databind.exc.MismatchedInputException exception.

    +
  • +
  • +

    Deserialization Jackson does ignore plain fields.

    +
  • +
+
+
+

If you want to use composition instead inheritance and serialize/deserialize with Jackson without those problems, consider to configure the additional-properties-as-attributes.

+
+
+

To map additionalProperties as attribute, add the following entry to your properties file. In this example, our spec file is in src/main/openapi/petstore.json:

+
+
+
+
quarkus.openapi-generator.codegen.spec.petstore_json.additional-properties-as-attribute=true
+
+
+
+

This configuration implies that all models using additionalProperties will be mapped using a java.util.Map as composition.

+
+
+
+
+
+ + + + + + + diff --git a/quarkus-openapi-generator/dev/includes/additional-request-args.html b/quarkus-openapi-generator/dev/includes/additional-request-args.html new file mode 100644 index 0000000000..aaa9cc8872 --- /dev/null +++ b/quarkus-openapi-generator/dev/includes/additional-request-args.html @@ -0,0 +1,950 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

To add custom request specific parameters you can use the additional-request-args property.

+
+
+

Should work with:

+
+
+
    +
  • +

    @PathParam

    +
  • +
  • +

    @QueryParam

    +
  • +
  • +

    @CookieParam

    +
  • +
  • +

    @FormParam

    +
  • +
  • +

    @MatrixParam

    +
  • +
+
+
+

To use additional-request-args as attribute, add the following entry to your properties file. In this example, our spec file is in src/main/openapi/petstore.json:

+
+
+
+
quarkus.openapi-generator.codegen.spec.petstore_json.additional-request-args=@CookieParam("cookie") String cookie;@HeaderParam("x-correlation-id") String correlationId
+
+
+
+

This configuration is applied to every generated method.

+
+
+
+
+
+ + + + + + + diff --git a/quarkus-openapi-generator/dev/includes/authentication-support.html b/quarkus-openapi-generator/dev/includes/authentication-support.html new file mode 100644 index 0000000000..5dda943c3f --- /dev/null +++ b/quarkus-openapi-generator/dev/includes/authentication-support.html @@ -0,0 +1,1183 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

If your OpenAPI specification file has securitySchemes definitions, the inner generator +will register ClientRequestFilter providers for you to +implement the given authentication mechanism.

+
+
+

To provide the credentials for your application, you can use the Quarkus configuration support. The configuration key is composed using this +pattern: quarkus.openapi-generator.[filename].auth.[security_scheme_name].[auth_property_name]. Where:

+
+
+
    +
  • +

    filename is the sanitized name of file containing the OpenAPI spec, for example petstore_json.

    +
  • +
  • +

    security_scheme_name is the sanitized name of the security scheme object definition in the OpenAPI file. Given the following excerpt, we +have api_key and basic_auth security schemes:

    +
  • +
+
+
+
+
{
+  "securitySchemes": {
+    "api_key": {
+      "type": "apiKey",
+      "name": "api_key",
+      "in": "header"
+    },
+    "basic_auth": {
+      "type": "http",
+      "scheme": "basic"
+    }
+  }
+}
+
+
+
+ + + + + +
+ + +Note that the securityScheme name used to configure the specific information for each spec is sanitized using the same rules as for the file names. +
+
+
+
    +
  • +

    auth_property_name varies depending on the authentication provider. For example, for Basic Authentication we have username and password. See the following sections for more details.

    +
  • +
+
+
+
+
+

Tip: on production environments you will likely to use HashiCorp Vault or Kubernetes Secrets to provide this information for your application.

+
+
+
+
+

If the OpenAPI specification file has securitySchemes definitions, but no Security Requirement Object definitions, the generator can be configured to create these by default. In this case, for all operations without a security requirement the default one will be created. Note that the property value needs to match the name of a security scheme object definition, eg. api_key or basic_auth in the securitySchemes list above.

+
+ +++++ + + + + + + + + + + + + + + +
DescriptionProperty KeyExample

Create security for the referenced security scheme

quarkus.openapi-generator.codegen.default-security-scheme

quarkus.openapi-generator.codegen.default-security-scheme=api_key

+
+

See the module security for an example of how to use this feature.

+
+
+

Basic HTTP Authentication

+
+
+

For Basic HTTP Authentication, these are the supported configurations:

+
+ +++++ + + + + + + + + + + + + + + + + + + + +
DescriptionProperty KeyExample

Username credentials

quarkus.openapi-generator.[filename].auth.[security_scheme_name].username

quarkus.openapi-generator.petstore_json.auth.basic_auth.username

Password credentials

quarkus.openapi-generator.[filename].auth.[security_scheme_name].password

quarkus.openapi-generator.petstore_json.auth.basic_auth-password

+
+
+
+

Bearer Token Authentication

+
+
+

Authentication, these are the supported configurations:

+
+ +++++ + + + + + + + + + + + + + + +
DescriptionProperty KeyExample

Bearer Token

quarkus.openapi-generator.[filename].auth.[security_scheme_name].bearer-token

quarkus.openapi-generator.petstore_json.auth.bearer.bearer-token

+
+
+
+

API Key Authentication

+
+
+

Similarly to bearer token, the API Key Authentication also has the token entry key property:

+
+ +++++ + + + + + + + + + + + + + + +
DescriptionProperty KeyExample

API Key

quarkus.openapi-generator.[filename].auth.[security_scheme_name].api-key

quarkus.openapi-generator.petstore_json.auth.api_key.api-key

+
+

The API Key scheme has an additional property that requires where to add the API key in the request token: header, cookie or query. The inner provider takes care of that for you.

+
+
+
+
+

OAuth2 Authentication

+
+
+

The extension will generate a ClientRequestFilter capable to add OAuth2 authentication capabilities to the OpenAPI operations that require it. This means that you can use +the Quarkus OIDC Extension configuration to define your authentication flow.

+
+
+

The generated code creates a named OidcClient for each Security Scheme listed in the OpenAPI specification files. For example, given +the following excerpt:

+
+
+
+
{
+  "securitySchemes": {
+    "petstore_auth": {
+      "type": "oauth2",
+      "flows": {
+        "implicit": {
+          "authorizationUrl": "https://petstore3.swagger.io/oauth/authorize",
+          "scopes": {
+            "write:pets": "modify pets in your account",
+            "read:pets": "read your pets"
+          }
+        }
+      }
+    }
+  }
+}
+
+
+
+

You can configure this OidcClient as:

+
+
+
+
quarkus.oidc-client.petstore_auth.auth-server-url=https://petstore3.swagger.io/oauth/authorize
+quarkus.oidc-client.petstore_auth.discovery-enabled=false
+quarkus.oidc-client.petstore_auth.token-path=/tokens
+quarkus.oidc-client.petstore_auth.credentials.secret=secret
+quarkus.oidc-client.petstore_auth.grant.type=password
+quarkus.oidc-client.petstore_auth.grant-options.password.username=alice
+quarkus.oidc-client.petstore_auth.grant-options.password.password=alice
+quarkus.oidc-client.petstore_auth.client-id=petstore-app
+
+
+
+

The configuration suffix quarkus.oidc-client.petstore_auth is exclusive for the schema defined in the specification file and the schemaName is sanitized by applying the rules described above.

+
+
+

For this to work you must add Quarkus OIDC Client Filter Extension to your project:

+
+
+

RESTEasy Classic:

+
+
+
+
<dependency>
+  <groupId>io.quarkus</groupId>
+  <artifactId>quarkus-oidc-client-filter</artifactId>
+</dependency>
+
+
+
+

RESTEasy Reactive:

+
+
+
+
<dependency>
+  <groupId>io.quarkus</groupId>
+  <artifactId>quarkus-oidc-client-reactive-filter</artifactId>
+</dependency>
+
+
+
+

If authentication support doesn’t suit your needs you can decide to disable it with enable-security-generation=false. In such case CompositeAuthenticationProvider and AuthenticationPropagationHeadersFactory wont be generated and used with your api. +The option can be set globally with quarkus.openapi-generator.codegen.enable-security-generation or per api quarkus.openapi-generator.codegen.spec.my_spec_yml.enable-security-generation +Custom authentication provider can be used with additional-api-type-annotations

+
+
+

See the module generation-tests for an example of how to use this feature.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-openapi-generator/dev/includes/authorization-token-propagation.html b/quarkus-openapi-generator/dev/includes/authorization-token-propagation.html new file mode 100644 index 0000000000..48fa88ff3a --- /dev/null +++ b/quarkus-openapi-generator/dev/includes/authorization-token-propagation.html @@ -0,0 +1,1057 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

The authorization token propagation can be used with OpenApi operations secured with a security scheme of type "oauth2" or "bearer". +When configured, you can propagate the authorization tokens passed to your service and the invocations to the REST clients generated by the quarkus-openapi-generator.

+
+
+

Let’s see how it works by following a simple example:

+
+
+

Imagine that we have a updatePet operation defined in the petstore.json specification file and secured with the petstore_auth security scheme. +The code below shows a simple example of the usage of this operation in a user-programmed service.

+
+
+
+
import org.acme.api.PetApi;
+import org.acme.model.Pet;
+import org.eclipse.microprofile.rest.client.inject.RestClient;
+
+/**
+ * User programmed service.
+ */
+@Path("/petstore")
+public class PetResource {
+
+  /**
+   * Inject the rest client generated by the quarkus-openapi-generator.
+   */
+  @Inject
+  @RestClient
+  PetApi petApi;
+
+  /**
+   * User programmed operation.
+   */
+  @Path("/pet/{id}")
+  @PATCH
+  @Produces(MediaType.APPLICATION_JSON)
+  @Consumes(MediaType.APPLICATION_JSON)
+  public Response customUpdatePet(@PathParam("id") long id, PetData petData) {
+
+    // Create a new instance of the Pet class generated by the quarkus-openapi-generator and
+    // populate accordingly.
+    Pet pet = new Pet();
+    pet.setId(id);
+    applyDataToPet(pet, petData);
+
+    // Execute the rest call using the generated client.
+    // The petstore.json open api spec stays that the "updatePet" operation is secured with the
+    // security scheme "petstore_auth".
+    petApi.updatePet(pet);
+
+    // Do other required things and finally return something.
+    return Response.ok().build();
+  }
+
+  public static class PetData {
+    // Represents the Pet modifiable data sent to the user programmed service.
+  }
+
+  private void applyDataToPet(Pet pet, PetData petData) {
+    // Set the corresponding values to the Pet instance.
+  }
+}
+
+
+
+

Let’s see what happens when the PetResource service customUpdatePet operation is invoked by a third party.

+
+
+

Default flow

+
+
+
    +
  1. +

    The customUpdatePet operation is invoked.

    +
  2. +
  3. +

    An authorization token is obtained using the corresponding petstore_auth OidcClient configuration. (for more information see [_oauth2_authentication])

    +
  4. +
  5. +

    The authorization token is automatically passed along the PetApi updatePet operation execution using an automatically generated request filter, etc.

    +
  6. +
+
+
+

Propagation flow

+
+

However, there are scenarios where we want to propagate the authorization token that was initially passed to the PetResource service when the customUpdatePet operation was invoked instead of having to obtain it by using the OidcClient.

+
+
+
    +
  1. +

    The user service customUpdatePet operation is invoked, and an authorization token is passed by the third party typically by using the HTTP Authorization header.

    +
  2. +
  3. +

    The incoming authorization token is automatically passed along the PetApi updatePet operation execution according to the user-provided configuration.

    +
  4. +
+
+
+ + + + + +
+ + +When configured, the token propagation applies to all the operations secured with the same securityScheme in the same specification file. +
+
+
+
+

Propagation flow configuration

+
+

The token propagation can be used with type "oauth2" or "bearer" security schemes. Finally, considering that a given security scheme might be configured on a set of operations in the same specification file when configured, it’ll apply to all these operations.

+
+ ++++ + + + + + + + + + + + + + + + + +
Property KeyExample

quarkus.openapi-generator.[filename].auth.[security_scheme_name].token-propagation=[true,false]

quarkus.openapi-generator.petstore_json.auth.petstore_auth.token-propagation=true
+Enables the token propagation for all the operations that are secured with the petstore_auth scheme in the petstore_json file.

quarkus.openapi-generator.[filename].auth.[security_scheme_name].header-name=[http_header_name]

quarkus.openapi-generator.petstore_json.auth.petstore_auth.header-name=MyHeaderName
+Says that the authorization token to propagate will be read from the HTTP header MyHeaderName instead of the standard HTTP Authorization header.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-openapi-generator/dev/includes/circuit-breaker.html b/quarkus-openapi-generator/dev/includes/circuit-breaker.html new file mode 100644 index 0000000000..286d4be055 --- /dev/null +++ b/quarkus-openapi-generator/dev/includes/circuit-breaker.html @@ -0,0 +1,1045 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

You can define the CircuitBreaker annotation from MicroProfile Fault Tolerance +in your generated classes by setting the desired configuration in application.properties.

+
+
+

Let’s say you have the following OpenAPI definition:

+
+
+
+
{
+  "openapi": "3.0.3",
+  "info": {
+    "title": "Simple API",
+    "version": "1.0.0-SNAPSHOT"
+  },
+  "paths": {
+    "/hello": {
+      "get": {
+        "responses": {
+          "200": {
+            "description": "OK",
+            "content": {
+              "text/plain": {
+                "schema": {
+                  "type": "string"
+                }
+              }
+            }
+          }
+        }
+      }
+    },
+    "/bye": {
+      "get": {
+        "responses": {
+          "200": {
+            "description": "OK",
+            "content": {
+              "text/plain": {
+                "schema": {
+                  "type": "string"
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+}
+
+
+
+

And you want to configure Circuit Breaker for the /bye endpoint, you can do it in the following way:

+
+
+

Add the SmallRye Fault Tolerance extension to your project’s pom.xml file:

+
+
+
+
<dependency>
+  <groupId>io.quarkus</groupId>
+  <artifactId>quarkus-smallrye-fault-tolerance</artifactId>
+</dependency>
+
+
+
+

Assuming your Open API spec file is in src/main/openapi/simple-openapi.json, add the following configuration to your application.properties file:

+
+
+
+
# Note that the file name must have only alphabetic characters or underscores (_).
+quarkus.openapi-generator.codegen.spec.simple_openapi_json.base-package=org.acme.openapi.simple
+# Enables the CircuitBreaker extension for the byeGet method from the DefaultApi class
+org.acme.openapi.simple.api.DefaultApi/byeGet/CircuitBreaker/enabled=true
+
+
+
+

With the above configuration, your Rest Clients will be created with a code similar to the following:

+
+
+
+
package org.acme.openapi.simple.api;
+
+import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.List;
+import java.util.Map;
+
+import jakarta.ws.rs.*;
+import jakarta.ws.rs.core.Response;
+import jakarta.ws.rs.core.MediaType;
+
+@Path("")
+@RegisterRestClient(configKey="simple-openapi_json")
+public interface DefaultApi {
+
+    @GET
+    @Path("/bye")
+    @Produces({ "text/plain" })
+    @org.eclipse.microprofile.faulttolerance.CircuitBreaker
+    public String byeGet();
+
+    @GET
+    @Path("/hello")
+    @Produces({ "text/plain" })
+    public String helloGet();
+
+}
+
+
+
+

You can also override the default Circuit Breaker configuration by setting the properties +in application.properties just as you would for a traditional MicroProfile application:

+
+
+
+
org.acme.openapi.simple.api.DefaultApi/byeGet/CircuitBreaker/failOn=java.lang.IllegalArgumentException,java.lang.NullPointerException
+org.acme.openapi.simple.api.DefaultApi/byeGet/CircuitBreaker/skipOn=java.lang.NumberFormatException
+org.acme.openapi.simple.api.DefaultApi/byeGet/CircuitBreaker/delay=33
+org.acme.openapi.simple.api.DefaultApi/byeGet/CircuitBreaker/delayUnit=MILLIS
+org.acme.openapi.simple.api.DefaultApi/byeGet/CircuitBreaker/requestVolumeThreshold=42
+org.acme.openapi.simple.api.DefaultApi/byeGet/CircuitBreaker/failureRatio=3.14
+org.acme.openapi.simple.api.DefaultApi/byeGet/CircuitBreaker/successThreshold=22
+
+
+
+

See the module circuit-breaker for an example of how to use this feature.

+
+
+
+
+
+ + + + + + + diff --git a/quarkus-openapi-generator/dev/includes/config-key.html b/quarkus-openapi-generator/dev/includes/config-key.html new file mode 100644 index 0000000000..39b5670452 --- /dev/null +++ b/quarkus-openapi-generator/dev/includes/config-key.html @@ -0,0 +1,977 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

By default, the @RegisterRestClient configKey property is the sanitized name of the file containing the OpenAPI spec. For example, if the file name is petstore.json, the configKey will be petstore_json:

+
+
+
+
/* omitted */
+@RegisterRestClient(configKey="petstore_json")
+public interface DefaultApi { /* omitted */ }
+
+
+
+

If you want to use a different configKey than the default one, you can set the quarkus.openapi-generator.codegen.spec.petstore_json.[config-key] property.

+
+
+

Using the config-key the extension allow you to define all allowed properties with quarkus.openapi-generator.codegen.spec.[my_custom_config_key].* prefix. For example:

+
+
+
+
quarkus.openapi-generator.codegen.spec.petstore_json.config-key=petstore
+quarkus.openapi-generator.codegen.spec.petstore.additional-api-type-annotations=@org.test.Foo
+
+
+
+

With it, you will have the following result:

+
+
+
+
/* omitted */
+@RegisterRestClient(configKey="petstore")
+@org.test.Foo
+public interface DefaultApi { /* omitted */ }
+
+
+
+ + + + + +
+ + +If you configure the property config-key, it will override the sanitized file name (will not consider the order of the configurations). For example, having the following configuration: +
+
+
+
+
quarkus.openapi-generator.codegen.spec.petstore_json.config-key=custom_config_key
+quarkus.openapi-generator.codegen.spec.custom_config_key.additional-api-type-annotations=@org.test.Foo
+quarkus.openapi-generator.codegen.spec.petstore_json.additional-api-type-annotations=@org.test.Bar
+
+
+
+

The generated code will be:

+
+
+
+
/* omitted */
+@RegisterRestClient(configKey="custom_config_key")
+@org.test.Foo
+public interface DefaultApi { /* omitted */ }
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-openapi-generator/dev/includes/config.html b/quarkus-openapi-generator/dev/includes/config.html new file mode 100644 index 0000000000..d8e7dfc727 --- /dev/null +++ b/quarkus-openapi-generator/dev/includes/config.html @@ -0,0 +1,1099 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Comma-separated list of absolute resource paths to scan recursively for templates. All tree folder from 'resource-paths' will be added as a resource. Unprefixed locations or locations starting with classpath will be processed in the same way.

+
+
+

list of string

freemarker/templates

+
+
+
+

Comma-separated of file system paths where freemarker templates are located

+
+
+

list of string

+
+
+
+

Set the preferred charset template files are stored in.

+
+
+

string

+
+
+
+

Sets how errors will appear. rethrow, debug, html-debug, ignore.

+
+
+

string

+
+
+
+

If false, don’t log exceptions inside FreeMarker that it will be thrown at you anyway.

+
+
+

boolean

+
+
+
+

Wrap unchecked exceptions thrown during template processing into TemplateException-s.

+
+
+

boolean

+
+
+
+

If false, do not fall back to higher scopes when reading a null loop variable.

+
+
+

boolean

+
+
+
+

The string value for the boolean true and false values, usually intended for human consumption (not for a computer language), separated with comma.

+
+
+

string

+
+
+
+

Sets the default number format used to convert numbers to strings.

+
+
+

string

+
+
+
+

If true, the object wrapper will be configured to expose fields.

+
+
+

boolean

+
+
+
+

List of directives to register with format name=classname

+
+
+

Map<String,String>

+
+
+
+

If true, the object wrapper will be configured to expose fields.

+
+
+

boolean

+
+
+
+
+ + + + + + + diff --git a/quarkus-openapi-generator/dev/includes/filter-openapi-spec-files.html b/quarkus-openapi-generator/dev/includes/filter-openapi-spec-files.html new file mode 100644 index 0000000000..6fff88d4a2 --- /dev/null +++ b/quarkus-openapi-generator/dev/includes/filter-openapi-spec-files.html @@ -0,0 +1,950 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

By default, the extension will process every OpenAPI specification file in the given path. +To limit code generation to only a specific set of OpenAPI specification files, you can set the quarkus.openapi-generator.codegen.include property.

+
+
+

For instance, if you want to limit code generation for include-openapi.yaml and include-openapi-2.yaml files, you need to define the property like:

+
+
+
+
quarkus.openapi-generator.codegen.include=include-openapi.yaml,include-openapi-2.yaml
+
+
+
+

If you prefer to specify which files you want to skip, you can set the quarkus.openapi-generator.codegen.exclude property. +For instance, if you want to skip code generation for exclude-openapi.yaml and exclude-openapi-2.yaml files, you need to define the property like:

+
+
+
+
quarkus.openapi-generator.codegen.exclude=exclude-openapi.yaml,exclude-openapi-2.yaml
+
+
+
+ + + + + +
+ + +exclude supersedes include, meaning that if a file is in both property it will NOT be analysed. +
+
+
+

See the module integration-tests/ignore for an example of how to use this feature.

+
+
+
+
+
+ + + + + + + diff --git a/quarkus-openapi-generator/dev/includes/getting-started.html b/quarkus-openapi-generator/dev/includes/getting-started.html new file mode 100644 index 0000000000..6ae2770371 --- /dev/null +++ b/quarkus-openapi-generator/dev/includes/getting-started.html @@ -0,0 +1,1090 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Add the following dependency to your project’s pom.xml file:

+
+
+ + + + + +
+ + +Version 2.x.x of this extension supports Quarkus 3, and version 1.x.x supports Quarkus 2. We strongly recommend you to use version 2.x.x. No updates are planned for version 1.x.x. +
+
+
+
+
<dependency>
+  <groupId>io.quarkiverse.openapi.generator</groupId>
+  <artifactId>quarkus-openapi-generator</artifactId>
+  <version>3.0.0-SNAPSHOT</version>
+</dependency>
+
+
+
+

You will also need to add or update the quarkus-maven-plugin configuration with the following:

+
+
+ + + + + +
+ + +You probably already have this configuration if you created your application with Code Quarkus. That said, double-check your configuration not to add another plugin entry. +
+
+
+
+
<plugin>
+  <groupId>io.quarkus</groupId>
+  <artifactId>quarkus-maven-plugin</artifactId>
+  <extensions>true</extensions>
+  <executions>
+    <execution>
+      <goals>
+        <goal>build</goal>
+        <goal>generate-code</goal>
+        <goal>generate-code-tests</goal>
+      </goals>
+    </execution>
+  </executions>
+</plugin>
+
+
+
+

Now, create the directory openapi under your src/main/ path and add the OpenAPI spec files there. We support JSON, YAML and YML extensions.

+
+
+

If you want to change the directory where OpenAPI files must be found, use the property quarkus.openapi-generator.codegen.input-base-dir. +IMPORTANT: it is relative to the project base directory. For example, if you have a project called MyJavaProject and decide to place them in MyJavaProject/openapi-definitions, use the following property:

+
+
+
+
quarkus.openapi-generator.codegen.input-base-dir=openapi-definitions
+
+
+
+

To fine tune the configuration for each spec file, add the following entry to your properties file. In this example, our spec file is in src/main/openapi/petstore.json:

+
+
+
+
quarkus.openapi-generator.codegen.spec.petstore_json.additional-model-type-annotations=@org.test.Foo;@org.test.Bar
+
+
+
+

If you want to change the base package in which the classes are generated, use the quarkus.openapi-generator.codegen.spec.<filename>.base-package property. +If a base package is not provided, it will default to org.openapi.quarkus.<filename>. For example, org.openapi.quarkus.petstore_json.

+
+
+
+
quarkus.openapi-generator.codegen.spec.petstore_json.base-package=org.acme
+
+
+
+

Configuring additional-model-type-annotations will add all annotations to the generated model files (extra details can be found in OpenApi Generator Doc).

+
+
+

You can customize the name of generated classes. To do that, you must define the following properties:

+
+
+
+
quarkus.openapi-generator.codegen.spec.petstore_json.api-name-suffix=CustomApiSuffix
+
+
+
+
+
quarkus.openapi-generator.codegen.spec.petstore_json.model-name-suffix=CustomModelSuffix
+
+
+
+
+
quarkus.openapi-generator.codegen.spec.petstore_json.model-name-prefix=CustomModelPrefix
+
+
+
+

The same way you can add any additional annotations to the generated api files with additional-api-type-annotations. Given you want to include Foo and Bar annotations, you must define additional-api-type-annotations as:

+
+
+
+
quarkus.openapi-generator.codegen.spec.petstore_json.additional-api-type-annotations=@org.test.Foo;@org.test.Bar
+
+
+
+ + + + + +
+ + +Note that the file name`petstore_json`is used to configure the specific information for each spec. We follow the Environment Variables Mapping Rules from Microprofile Configuration to sanitize the OpenAPI spec filename. Any non-alphabetic characters are replaced by an underscore _. +
+
+
+

Run mvn compile to generate your classes in target/generated-sources/open-api-json path:

+
+
+
+
- org.acme.openapi
+  - api
+    - PetApi.java
+    - StoreApi.java
+    - UserApi.java
+  - model
+    - Address.java
+    - Category.java
+    - Customer.java
+    - ModelApiResponse.java
+    - Order.java
+    - Pet.java
+    - Tag.java
+    - User.java
+
+
+
+

You can reference the generated code in your project, for example:

+
+
+
+
import jakarta.inject.Inject;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+
+import org.acme.openapi.api.PetApi;
+import org.eclipse.microprofile.rest.client.inject.RestClient;
+import org.jboss.resteasy.annotations.jaxrs.PathParam;
+
+@Produces(MediaType.APPLICATION_JSON)
+@Path("/petstore")
+public class PetResource {
+
+    @RestClient
+    @Inject
+    PetApi petApi;
+}
+
+
+
+

See the integration-tests module for more information of how to use this extension. Please be advised that the extension is on experimental, early development stage.

+
+
+
+
+
+ + + + + + + diff --git a/quarkus-openapi-generator/dev/includes/logging.html b/quarkus-openapi-generator/dev/includes/logging.html new file mode 100644 index 0000000000..51474969f4 --- /dev/null +++ b/quarkus-openapi-generator/dev/includes/logging.html @@ -0,0 +1,925 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Since the most part of this extension work is in the generate-code execution phase of the Quarkus Maven’s plugin, the log configuration must be set in the Maven context. When building your project, add -Dorg.slf4j.simpleLogger.log.org.openapitools=off to the mvn command to reduce the internal generator noise. For example:

+
+
+
+
mvn clean install -Dorg.slf4j.simpleLogger.log.org.openapitools=off
+
+
+
+

For more information, see the Maven Logging Configuration and Maven Configuration guides.

+
+
+
+
+
+ + + + + + + diff --git a/quarkus-openapi-generator/dev/includes/quarkus-openapi-generator.html b/quarkus-openapi-generator/dev/includes/quarkus-openapi-generator.html new file mode 100644 index 0000000000..ede9109d45 --- /dev/null +++ b/quarkus-openapi-generator/dev/includes/quarkus-openapi-generator.html @@ -0,0 +1,1000 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Enables the authentication token propagation for this particular securityScheme.

+
+
+

For example, given a file named petstore.json with a securityScheme named "petstore-auth" the following configuration must be used.

+
+
+

quarkus.openapi-generator.petstore_json.auth.petstore_auth.token-propagation=true

+
+
+

Environment variable: QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS__TOKEN_PROPAGATION

+
+
+

boolean

false

+
+
+
+

Configures a particular http header attribute from were to take the security token from when the token propagation is enabled. Use this fine-grained configuration in very particular scenarios.

+
+
+

For example, given a file named petstore.json with a securityScheme named "petstore-auth" the following configuration must be used.

+
+
+

quarkus.openapi-generator.petstore_json.auth.petstore_auth.header-name=MyParticularHttpHeaderName

+
+
+

Environment variable: QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS__HEADER_NAME

+
+
+

string

+
+
+
+

Configures a particular parameter value to be used by any of the different internal authentication filters that processes the different securityScheme definitions.

+
+
+

For example, given a file named petstore.json with a securityScheme named "petstore-basic-auth", that is of http basic authentication type, the following configuration can establish the user and password to be used. must be used.

+
+
+

quarkus.openapi-generator.petstore_json.auth.petstore_basic_auth.username=MyUserName quarkus.openapi-generator.petstore_json.auth.petstore_basic_auth.password=MyPassword

+
+
+

Environment variable: QUARKUS_OPENAPI_GENERATOR__ITEM_CONFIGS__AUTH__AUTH_CONFIGS_

+
+
+

Map<String,String>

+
+
+
+
+ + + + + + + diff --git a/quarkus-openapi-generator/dev/includes/resteasy-support.html b/quarkus-openapi-generator/dev/includes/resteasy-support.html new file mode 100644 index 0000000000..7c0f8e5271 --- /dev/null +++ b/quarkus-openapi-generator/dev/includes/resteasy-support.html @@ -0,0 +1,977 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

You can use the quarkus-openapi-generator with REST Client Classic or REST Client Reactive respectively. To do so add either the classic or reactive jackson dependency to your project’s pom.xml file:

+
+
+

RESTEasy Classic

+
+
+
+
<dependency>
+  <groupId>io.quarkus</groupId>
+  <artifactId>quarkus-rest-client-jackson</artifactId>
+</dependency>
+
+
+
+ + + + + +
+ + +After Version 1.2.1 / 2.1.1 you need to declare the above dependency explicitly! Even if you stay with the REST Client Classic implementation! +
+
+
+
+
+

RESTEasy Reactive

+
+
+
+
<dependency>
+  <groupId>io.quarkus</groupId>
+  <artifactId>quarkus-rest-client-reactive-jackson</artifactId>
+</dependency>
+
+
+
+

To make truly non-blocking calls, you need to also set the mutiny option to true. This +will wrap all API return types in a io.smallrye.mutiny.Uni.

+
+
+
+
quarkus.openapi-generator.codegen.spec.my_openapi_yaml.mutiny=true
+
+
+
+

When using RESTEasy Reactive:

+
+
+
    +
  • +

    The client must not declare multiple MIME-TYPES with @Consumes

    +
  • +
  • +

    You might need to implement a ParamConverter for each complex type

    +
  • +
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-openapi-generator/dev/includes/return-response-objects.html b/quarkus-openapi-generator/dev/includes/return-response-objects.html new file mode 100644 index 0000000000..50781dfb0b --- /dev/null +++ b/quarkus-openapi-generator/dev/includes/return-response-objects.html @@ -0,0 +1,933 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

By default, this extension generates the methods according to their returning models based on the OpenAPI specification Schema Object. If no response model is defined, jakarta.ws.rs.core.Response is returned.

+
+
+

If you want to return jakarta.ws.rs.core.Response in all cases instead, you can set the return-response property to true.

+
+
+

Example

+
+
+

Given you want to return jakarta.ws.rs.core.Response for the my-openapi.yaml file, you must add the following to your application.properties file:

+
+
+
+
quarkus.openapi-generator.codegen.spec.my_openapi_yaml.return-response=true
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-openapi-generator/dev/includes/sending-multipart-formdata.html b/quarkus-openapi-generator/dev/includes/sending-multipart-formdata.html new file mode 100644 index 0000000000..0c3879a976 --- /dev/null +++ b/quarkus-openapi-generator/dev/includes/sending-multipart-formdata.html @@ -0,0 +1,1126 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

The rest client also supports request with mime-type multipart/form-data and, if the schema of the request body is known in advance, we can also automatically generate the models of the request +bodies.

+
+
+ + + + + +
+ + +RESTEasy Reactive supports multipart/form-data out of the box. Thus, no additional dependency is required. +
+
+
+

If you’re using RESTEasy Classic, you need to add the following additional dependency to your pom.xml:

+
+
+
+
<dependency>
+  <groupId>io.quarkus</groupId>
+  <artifactId>quarkus-resteasy-multipart</artifactId>
+</dependency>
+
+
+
+

For any multipart/form-data operation a model for the request body will be generated. Each part of the multipart is a field in this model that is annotated with the following annotations:

+
+
+
    +
  • +

    jakarta.ws.rs.FormParam, where the value parameter denotes the part name,

    +
  • +
  • +

    PartType, where the parameter is the jax-rs MediaType of the part (see below for details),

    +
  • +
  • +

    and, if the part contains a file, PartFilename, with a generated default parameter that will be passed as the fileName sub-header in the +Content-Disposition header of the part.

    +
  • +
+
+
+

For example, the model for a request that requires a file, a string and some complex object will look like this:

+
+
+
+
public class MultipartBody {
+
+    @FormParam("file")
+    @PartType(MediaType.APPLICATION_OCTET_STREAM)
+    @PartFilename("fileFile")
+    public File file;
+
+    @FormParam("fileName")
+    @PartType(MediaType.TEXT_PLAIN)
+    public String fileName;
+
+    @FormParam("someObject")
+    @PartType(MediaType.APPLICATION_JSON)
+    public MyComplexObject someObject;
+}
+
+
+
+

Then in the client, when using RESTEasy Classic, the org.jboss.resteasy.annotations.providers.multipart.MultipartForm annotation is added in front of the multipart parameter:

+
+
+
+
@Path("/echo")
+@RegisterRestClient(baseUri="http://my.endpoint.com/api/v1", configKey="multipart-requests_yml")
+public interface MultipartService {
+
+    @POST
+    @Consumes(MediaType.MULTIPART_FORM_DATA)
+    @Produces(MediaType.TEXT_PLAIN)
+    String sendMultipartData(@MultipartForm MultipartBody data);
+
+}
+
+
+
+

When using RESTEasy Reactive, the jakarta.ws.rs.BeanParam annotation is added in front of the multipart parameter:

+
+
+
+
@Path("/echo")
+@RegisterRestClient(baseUri="http://my.endpoint.com/api/v1", configKey="multipart-requests_yml")
+public interface MultipartService {
+
+  @POST
+  @Consumes(MediaType.MULTIPART_FORM_DATA)
+  @Produces(MediaType.TEXT_PLAIN)
+  String sendMultipartData(@jakarta.ws.rs.BeanParam MultipartBody data);
+
+}
+
+
+ +
+ + + + + +
+ + +MultipartForm is deprecated when using RESTEasy Reactive. +
+
+
+

baseURI value of RegisterRestClient annotation is extracted from the servers section of the file, if present. If not, it will be left empty and it is expected you set up the uri to be used in your configuration.

+
+
+

Importantly, if some multipart request bodies contain complex objects (i.e. non-primitives) you need to explicitly tell the Open API generator to create models for these objects by setting +the skip-form-model property corresponding to your spec in the application.properties to false, e.g.:

+
+
+
+
quarkus.openapi-generator.codegen.spec.my_multipart_requests_yml.skip-form-model=false
+
+
+
+

See the module multipart-request for an example of how to use this feature.

+
+
+

In case the default PartFilename annotation is not required, its generation can be disabled by setting the generate-part-filename property (globally or corresponding to your spec) in the application.properties to false, e.g.:

+
+
+
+
quarkus.openapi-generator.codegen.spec.my_multipart_requests_yml.generate-part-filename=false
+
+
+
+

By default, the PartFilename value representing the filename is prefixed by the field name. This can be changed by setting the use-field-name-in-part-filename property (globally or corresponding to your spec) in the application.properties to false, e.g.:

+
+
+
+
quarkus.openapi-generator.codegen.spec.my_multipart_requests_yml.use-field-name-in-part-filename=false
+
+
+
+

And in case the default PartFilename value is not suitable (e.g. a conversion service only allows/supports specific extensions), the value can be set by using the part-filename-value property (globally or corresponding to your spec) in the application.properties, e.g.:

+
+
+
+
quarkus.openapi-generator.codegen.spec.my_first_multipart_requests_yml.part-filename-value=".pdf"
+
+
+
+

So for instance, by setting part-filename-value to some.pdf and use-field-name-in-part-filename to false the generated code will look like this:

+
+
+
+
public class MultipartBody {
+
+  @FormParam("file")
+  @PartType(MediaType.APPLICATION_OCTET_STREAM)
+  @PartFilename("some.pdf")
+  public File file;
+}
+
+
+
+

And by setting only part-filename-value to .pdf, the generated code will look like this:

+
+
+
+
public class MultipartBody {
+
+  @FormParam("file")
+  @PartType(MediaType.APPLICATION_OCTET_STREAM)
+  @PartFilename("file.pdf")
+  public File file;
+}
+
+
+
+

See the module part-filename for examples of how to use these features.

+
+
+

Default content-types according to OpenAPI Specification and limitations

+
+
+

The OAS 3.0 specifies the following default content-types for a multipart:

+
+
+
    +
  • +

    If the property is a primitive, or an array of primitive values, the default Content-Type is text/plain

    +
  • +
  • +

    If the property is complex, or an array of complex values, the default Content-Type is application/json

    +
  • +
  • +

    If the property is a type: string with format: binary or format: base64 (aka a file object), the default Content-Type is application/octet-stream

    +
  • +
+
+
+

A different content-type may be defined in your api spec, but this is not yet supported in the code generation. Also, this "annotation-oriented" approach of RestEasy (i.e. using @MultipartForm to +denote the multipart body parameter) does not seem to properly support the unmarshalling of arrays of the same type (e.g. array of files), in these cases it uses Content-Type equal +to application/json.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-openapi-generator/dev/includes/server-getting-started.html b/quarkus-openapi-generator/dev/includes/server-getting-started.html new file mode 100644 index 0000000000..01d8942607 --- /dev/null +++ b/quarkus-openapi-generator/dev/includes/server-getting-started.html @@ -0,0 +1,1065 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Add the following dependency to your project’s pom.xml file:

+
+
+
+
<dependency>
+  <groupId>io.quarkiverse.openapi.generator</groupId>
+  <artifactId>quarkus-openapi-generator-server</artifactId>
+  <version>3.0.0-SNAPSHOT</version>
+</dependency>
+
+
+
+

You will also need to add or update the quarkus-maven-plugin configuration with the following:

+
+
+ + + + + +
+ + +You probably already have this configuration if you created your application with Code Quarkus. That said, double-check your configuration not to add another plugin entry. +
+
+
+
+
<plugin>
+  <groupId>io.quarkus</groupId>
+  <artifactId>quarkus-maven-plugin</artifactId>
+  <extensions>true</extensions>
+  <executions>
+    <execution>
+      <goals>
+        <goal>build</goal>
+        <goal>generate-code</goal>
+        <goal>generate-code-tests</goal>
+      </goals>
+    </execution>
+  </executions>
+</plugin>
+
+
+
+

Now, create the directory openapi under your src/main/resources path and add the OpenAPI spec files there. We support JSON, YAML and YML extensions.

+
+
+

To fine tune the configuration for each spec file, add the following entry to your properties file. In this example, our spec file is in src/main/openapi/petstore.json:

+
+
+

If a base package name is not provided, it will be used the default io.apicurio.api.

+
+
+

You can customize the specification used for code generation with the following property:

+
+
+
+
quarkus.openapi.generator.spec=petstore-openapi.json
+
+
+
+
+
quarkus.openapi.generator.base-package=io.petstore
+
+
+
+

Run mvn compile to generate your classes in target/generated-sources/jaxrs path:

+
+
+
+
- io.petstore
+  - beans
+    - Address.java
+    - ApiResponse.java
+    - Category.java
+    - Customer.java
+    - Order.java
+    - Pet.java
+    - Tag.java
+    - User.java
+  - PetResource.java
+  - StoreResource.java
+  - UserResource.java
+
+
+
+

You can reference the generated code in your project, for example:

+
+
+
+
package io.petstore;
+
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import io.petstore.beans.ApiResponse;
+import io.petstore.beans.Pet;
+
+public class PetStoreImpl implements PetResource {
+
+    private static final Map<Long, Pet> PETS = new HashMap<>();
+
+    @Override
+    public Pet updatePet(Pet data) {
+        return PETS.put(data.getId(), data);
+    }
+
+    @Override
+    public Pet addPet(Pet data) {
+        return PETS.put(data.getId(), data);
+    }
+
+    @Override
+    public List<Pet> findPetsByStatus(String status) {
+        return null;
+    }
+
+    @Override
+    public List<Pet> findPetsByTags(List<String> tags) {
+        return null;
+    }
+
+    @Override
+    public Pet getPetById(long petId) {
+        return PETS.get(petId);
+    }
+
+    @Override
+    public void updatePetWithForm(long petId, String name, String status) {
+
+    }
+
+    @Override
+    public void deletePet(String apiKey, long petId) {
+        PETS.remove(petId);
+    }
+
+    @Override
+    public ApiResponse uploadFile(long petId, String additionalMetadata, InputStream data) {
+        return null;
+    }
+}
+
+
+
+

See the integration-tests module for more information of how to use this extension. Please be advised that the extension is on experimental, early development stage.

+
+
+
+
+
+ + + + + + + diff --git a/quarkus-openapi-generator/dev/includes/template-customization.html b/quarkus-openapi-generator/dev/includes/template-customization.html new file mode 100644 index 0000000000..69294393ae --- /dev/null +++ b/quarkus-openapi-generator/dev/includes/template-customization.html @@ -0,0 +1,935 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

You have the option to swap out the templates used by this extension with your customized versions. To achieve this, place your custom templates under the resources/templates directory. It’s crucial that the filename of each custom template matches that of the original template.

+
+
+

You can find an example of using customized templates in integration-tests/custom-templates.

+
+
+ + + + + +
+ + +While the option to replace templates exists, it’s essential to exercise caution and consider this as a final resort. Prior to altering templates, exhaust all possibilities of achieving your goals through configuration settings. Modifying templates could have broader implications for the extension’s functionality and may introduce complexities. Only resort to template replacement when configuration adjustments prove insufficient for your requirements. +
+
+
+

Furthermore, be aware that customizing templates increases the risk of compatibility issues during future upgrades. Therefore, exercise discretion and weigh the benefits against the potential risks before opting for template customization.

+
+
+
+
+
+ + + + + + + diff --git a/quarkus-openapi-generator/dev/includes/want-to-contribute.html b/quarkus-openapi-generator/dev/includes/want-to-contribute.html new file mode 100644 index 0000000000..2937b7f3fd --- /dev/null +++ b/quarkus-openapi-generator/dev/includes/want-to-contribute.html @@ -0,0 +1,917 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Want to contribute? Great! We try to make it easy, and all contributions, even the smaller ones, are more than welcome. This includes bug reports, fixes, documentation, examples…​ But first, read this page.

+
+
+
+
+
+ + + + + + + diff --git a/quarkus-openapi-generator/dev/index.html b/quarkus-openapi-generator/dev/index.html new file mode 100644 index 0000000000..ebd334ff82 --- /dev/null +++ b/quarkus-openapi-generator/dev/index.html @@ -0,0 +1,950 @@ + + + + + + Quarkus - OpenAPI Generator :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus - OpenAPI Generator

+
+

This a multipurpose Quarkus' extension for generation of Rest Clients and Server stubs based on OpenAPI specification files.

+
+
+

Currently, we support two types of code generation:

+
+
+

Quarkus - OpenAPI Generator - Client: Refer to our documentation on how to generate these clients.

+
+
+

Quarkus - OpenAPI Generator - Server: Follow our guidelines to generate server stubs using Apicurio.

+
+
+ + + + + +
+ + +Check versions 1.x.x if you’re still using Quarkus 2. But be aware that we no longer support Quarkus 2. That means there are no updates planned for those versions. +
+
+
+

This extension is based on the OpenAPI Generator Tool. Please consider donation to help them maintain the +project: https://opencollective.com/openapi_generator/donate

+
+
+

Want to contribute? Great! We try to make it easy, and all contributions, even the smaller ones, are more than welcome. This includes bug reports, fixes, documentation, examples…​ But first, read this page.

+
+
+
+
+
+ + + + + + + diff --git a/quarkus-openapi-generator/dev/server.html b/quarkus-openapi-generator/dev/server.html new file mode 100644 index 0000000000..daedc49e1c --- /dev/null +++ b/quarkus-openapi-generator/dev/server.html @@ -0,0 +1,1116 @@ + + + + + + Quarkus - OpenAPI Generator - Server :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus - OpenAPI Generator - Server

+
+
+
+

Quarkus' extension for generation of server Stubs based on OpenAPI specification files.

+
+
+

This extension is based on the Apicurio Codegen tool.

+
+
+

This extension is for REST code generation for server side only.

+
+
+

Want to contribute? Great! We try to make it easy, and all contributions, even the smaller ones, are more than welcome. This includes bug reports, fixes, documentation, examples…​ But first, read this page.

+
+
+
+
+

Getting Started

+
+
+

Add the following dependency to your project’s pom.xml file:

+
+
+ + + + + +
+ + +Version 2.x.x of this extension supports Quarkus 3, and version 1.x.x supports Quarkus 2. We strongly recommend you to use version 2.x.x. No updates are planned for version 1.x.x. +
+
+
+
+
<dependency>
+  <groupId>io.quarkiverse.openapi.generator</groupId>
+  <artifactId>quarkus-openapi-generator</artifactId>
+  <version>3.0.0-SNAPSHOT</version>
+</dependency>
+
+
+
+

You will also need to add or update the quarkus-maven-plugin configuration with the following:

+
+
+ + + + + +
+ + +You probably already have this configuration if you created your application with Code Quarkus. That said, double-check your configuration not to add another plugin entry. +
+
+
+
+
<plugin>
+  <groupId>io.quarkus</groupId>
+  <artifactId>quarkus-maven-plugin</artifactId>
+  <extensions>true</extensions>
+  <executions>
+    <execution>
+      <goals>
+        <goal>build</goal>
+        <goal>generate-code</goal>
+        <goal>generate-code-tests</goal>
+      </goals>
+    </execution>
+  </executions>
+</plugin>
+
+
+
+

Now, create the directory openapi under your src/main/ path and add the OpenAPI spec files there. We support JSON, YAML and YML extensions.

+
+
+

If you want to change the directory where OpenAPI files must be found, use the property quarkus.openapi-generator.codegen.input-base-dir. +IMPORTANT: it is relative to the project base directory. For example, if you have a project called MyJavaProject and decide to place them in MyJavaProject/openapi-definitions, use the following property:

+
+
+
+
quarkus.openapi-generator.codegen.input-base-dir=openapi-definitions
+
+
+
+

To fine tune the configuration for each spec file, add the following entry to your properties file. In this example, our spec file is in src/main/openapi/petstore.json:

+
+
+
+
quarkus.openapi-generator.codegen.spec.petstore_json.additional-model-type-annotations=@org.test.Foo;@org.test.Bar
+
+
+
+

If you want to change the base package in which the classes are generated, use the quarkus.openapi-generator.codegen.spec.<filename>.base-package property. +If a base package is not provided, it will default to org.openapi.quarkus.<filename>. For example, org.openapi.quarkus.petstore_json.

+
+
+
+
quarkus.openapi-generator.codegen.spec.petstore_json.base-package=org.acme
+
+
+
+

Configuring additional-model-type-annotations will add all annotations to the generated model files (extra details can be found in OpenApi Generator Doc).

+
+
+

You can customize the name of generated classes. To do that, you must define the following properties:

+
+
+
+
quarkus.openapi-generator.codegen.spec.petstore_json.api-name-suffix=CustomApiSuffix
+
+
+
+
+
quarkus.openapi-generator.codegen.spec.petstore_json.model-name-suffix=CustomModelSuffix
+
+
+
+
+
quarkus.openapi-generator.codegen.spec.petstore_json.model-name-prefix=CustomModelPrefix
+
+
+
+

The same way you can add any additional annotations to the generated api files with additional-api-type-annotations. Given you want to include Foo and Bar annotations, you must define additional-api-type-annotations as:

+
+
+
+
quarkus.openapi-generator.codegen.spec.petstore_json.additional-api-type-annotations=@org.test.Foo;@org.test.Bar
+
+
+
+ + + + + +
+ + +Note that the file name`petstore_json`is used to configure the specific information for each spec. We follow the Environment Variables Mapping Rules from Microprofile Configuration to sanitize the OpenAPI spec filename. Any non-alphabetic characters are replaced by an underscore _. +
+
+
+

Run mvn compile to generate your classes in target/generated-sources/open-api-json path:

+
+
+
+
- org.acme.openapi
+  - api
+    - PetApi.java
+    - StoreApi.java
+    - UserApi.java
+  - model
+    - Address.java
+    - Category.java
+    - Customer.java
+    - ModelApiResponse.java
+    - Order.java
+    - Pet.java
+    - Tag.java
+    - User.java
+
+
+
+

You can reference the generated code in your project, for example:

+
+
+
+
import jakarta.inject.Inject;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+
+import org.acme.openapi.api.PetApi;
+import org.eclipse.microprofile.rest.client.inject.RestClient;
+import org.jboss.resteasy.annotations.jaxrs.PathParam;
+
+@Produces(MediaType.APPLICATION_JSON)
+@Path("/petstore")
+public class PetResource {
+
+    @RestClient
+    @Inject
+    PetApi petApi;
+}
+
+
+
+

See the integration-tests module for more information of how to use this extension. Please be advised that the extension is on experimental, early development stage.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-openfga-client/dev/includes/attributes.html b/quarkus-openfga-client/dev/includes/attributes.html new file mode 100644 index 0000000000..78026dc7c4 --- /dev/null +++ b/quarkus-openfga-client/dev/includes/attributes.html @@ -0,0 +1,912 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-openfga-client/dev/includes/quarkus-openfga.html b/quarkus-openfga-client/dev/includes/quarkus-openfga.html new file mode 100644 index 0000000000..9117b97566 --- /dev/null +++ b/quarkus-openfga-client/dev/includes/quarkus-openfga.html @@ -0,0 +1,1439 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Whether a health check is published in case the smallrye-health extension is present.

+
+
+

Environment variable: QUARKUS_OPENFGA_HEALTH_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether tracing spans of client commands are reported.

+
+
+

Environment variable: QUARKUS_OPENFGA_TRACING_ENABLED

+
+
+

boolean

false

+
+
+
+

If DevServices has been explicitly enabled or disabled. DevServices is generally enabled by default, unless there is an existing configuration present.

+
+
+

When DevServices is enabled Quarkus will attempt to automatically configure and start a database when running in 'dev' or 'test' mode.

+
+
+

Environment variable: QUARKUS_OPENFGA_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

The container image name to use, for container based DevServices providers.

+
+
+

Environment variable: QUARKUS_OPENFGA_DEVSERVICES_IMAGE_NAME

+
+
+

string

+
+
+
+

Indicates if the OpenFGA instance managed by Quarkus DevServices is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, DevServices for OpenFGA starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-openfga label. The value is configured using the service-name property.

+
+
+

Container sharing is only used in 'dev' mode.

+
+
+

Environment variable: QUARKUS_OPENFGA_DEVSERVICES_SHARED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-openfga label attached to the started container. This property is used when shared is set to true. In this case, before starting a container, DevServices for OpenFGA looks for a container with the quarkus-dev-service-openfga label set to the configured value. If found, it will use this container instead of starting a new one, otherwise it starts a new container with the quarkus-dev-service-openfga label set to the specified value.

+
+
+

This property is used when you need multiple shared OpenFGA instances.

+
+
+

Environment variable: QUARKUS_OPENFGA_DEVSERVICES_SERVICE_NAME

+
+
+

string

openfga

+
+
+
+

Optional fixed port the HTTP service will be bound to.

+
+
+

If not defined, the port will be chosen randomly.

+
+
+

Environment variable: QUARKUS_OPENFGA_DEVSERVICES_HTTP_PORT

+
+
+

int

+
+
+
+

Optional fixed port the gRPC service will be bound to.

+
+
+

If not defined, the port will be chosen randomly.

+
+
+

Environment variable: QUARKUS_OPENFGA_DEVSERVICES_GRPC_PORT

+
+
+

int

+
+
+
+

Optional fixed port the Playground service will be bound to.

+
+
+

If not defined, the port will be chosen randomly.

+
+
+

Environment variable: QUARKUS_OPENFGA_DEVSERVICES_PLAYGROUND_PORT

+
+
+

int

+
+
+
+

Name of authorization store to create for DevServices.

+
+
+

Defaults to "dev".

+
+
+

Environment variable: QUARKUS_OPENFGA_DEVSERVICES_STORE_NAME

+
+
+

string

dev

+
+
+
+

JSON formatted authorization model to upload during DevServices initialization.

+
+
+

Environment variable: QUARKUS_OPENFGA_DEVSERVICES_AUTHORIZATION_MODEL

+
+
+

string

+
+
+
+

Location of JSON formatted authorization model file to upload during DevServices initialization.

+
+
+

The location can be prefixed with classpath: or filesystem: to specify where the file will be read from; if not prefixed, it will be read from the classpath.

+
+
+

Environment variable: QUARKUS_OPENFGA_DEVSERVICES_AUTHORIZATION_MODEL_LOCATION

+
+
+

string

+
+
+
+

JSON formatted authorization tuples to upload during DevServices initialization.

+
+
+

Environment variable: QUARKUS_OPENFGA_DEVSERVICES_AUTHORIZATION_TUPLES

+
+
+

string

+
+
+
+

Location of JSON formatted authorization tuples file to upload during DevServices initialization.

+
+
+

The location can be prefixed with classpath: or filesystem: to specify where the file will be read from; if not prefixed, it will be read from the classpath.

+
+
+

Environment variable: QUARKUS_OPENFGA_DEVSERVICES_AUTHORIZATION_TUPLES_LOCATION

+
+
+

string

+
+
+
+

OpenFGA server URL.

+
+
+

Example: http://openfga:8080

+
+
+

Environment variable: QUARKUS_OPENFGA_URL

+
+
+

URL

required

+
+
+
+

Shared authentication key.

+
+
+

If none provided unauthenticated access will be attempted.

+
+
+

Environment variable: QUARKUS_OPENFGA_SHARED_KEY

+
+
+

string

+
+
+
+

Store id or name for default StoreClient bean.

+
+
+

If the provided property does not match the OpenFGA store id format (^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26$}) it will be treated as a store name and a matching store id will be resolved at runtime.

+
+
+

Environment variable: QUARKUS_OPENFGA_STORE

+
+
+

string

required

+
+
+
+

Always Treat store as the name of a store and resolve the store id at runtime.

+
+
+

If true, the store id will always be resolved at runtime regardless of the format of the store property. Otherwise, the store id will be resolved only when store does not match the OpenFGA store id format.

+
+
+

Environment variable: QUARKUS_OPENFGA_ALWAYS_RESOLVE_STORE_ID

+
+
+

boolean

false

+
+
+
+

Authorization model id for default AuthorizationModelClient bean.

+
+
+

If none is provided the default bean will target the default authorization model for the store.

+
+
+

Environment variable: QUARKUS_OPENFGA_AUTHORIZATION_MODEL_ID

+
+
+

string

+
+
+
+

Timeout to establish a connection with OpenFGA.

+
+
+

Environment variable: QUARKUS_OPENFGA_CONNECT_TIMEOUT

+
+
+

Duration +

5S

+
+
+
+

Request timeout on OpenFGA.

+
+
+

Environment variable: QUARKUS_OPENFGA_READ_TIMEOUT

+
+
+

Duration +

5S

+
+
+
+

List of remote hosts that are not proxied when the client is configured to use a proxy. This list serves the same purpose as the JVM nonProxyHosts configuration.

+
+
+

Entries can use the * wildcard character for pattern matching, e.g *.example.com matches www.example.com.

+
+
+

Environment variable: QUARKUS_OPENFGA_NON_PROXY_HOSTS

+
+
+

list of string

TLS configuration

Type

Default

+
+
+
+

Allows to bypass certificate validation on TLS communications.

+
+
+

If true this will allow TLS communications with OpenFGA, without checking the validity of the certificate presented by OpenFGA. This is discouraged in production because it allows man in the middle type of attacks.

+
+
+

Environment variable: QUARKUS_OPENFGA_TLS_SKIP_VERIFY

+
+
+

boolean

+
+
+
+

Certificate bundle used to validate TLS communications with OpenFGA.

+
+
+

The path to a pem bundle file, if TLS is required, and trusted certificates are not set through javax.net.ssl.trustStore system property.

+
+
+

Environment variable: QUARKUS_OPENFGA_TLS_CA_CERT

+
+
+

string

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-openfga-client/dev/index.html b/quarkus-openfga-client/dev/index.html new file mode 100644 index 0000000000..4985dccfdc --- /dev/null +++ b/quarkus-openfga-client/dev/index.html @@ -0,0 +1,1593 @@ + + + + + + Quarkus OpenFGA Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus OpenFGA Client

+
+

Overview

+
+
+

The Quarkus OpenFGA Client extension provides a reactive client for accessing OpenFGA +instances. Additionally, it is the client that powers the +Quarkus Zanzibar - OpenFGA Connector to provide +Find Grained Authorization for Quarkus applications.

+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.openfga:quarkus-openfga-client extension first to your build file.

+
+
+

For instance, with Maven, add the following dependency to your POM file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.openfga</groupId>
+    <artifactId>quarkus-openfga-client</artifactId>
+    <version>1.2.0</version>
+</dependency>
+
+
+
+

Or with Gradle, add the dependency to your build.gradle:

+
+
+
+
implementation("io.quarkiverse.openfga:quarkus-openfga-client:1.2.0")
+
+
+
+
+
+

Configuration

+
+
+

The extension requires two configuration properties to be defined at startup to define what instance and store are +targeted by the client. The url property selects the scheme, host and, optionally, the port of the OpenFGA instance. +While store determines which authorization store is targeted; it can be referenced by store id or name.

+
+
+
+
quarkus.openfga.url=http://localhost:80
+quarkus.openfga.store=my-app-authz
+# Optional authorization model id
+#quarkus.openfga.authorization-model-id=11G22H33I44J55K66L77M88N99
+
+
+
+

DevServices

+
+

The extension supports Quarkus’s DevServices and will start and configure a local OpenFGA in dev and test if no +url configuration property is provided. Additionally it will automatically create and configure an authorization +store in the server.

+
+
+

In addition to starting and creating an authorization store, an authorization model can be initialized in the store +by configuring the quarkus.openfga.devservices.authorization-model or +quarkus.openfga.devservices.authorization-model.lcation property.

+
+
+
+
+
+

Basic Usage

+
+
+

Adding the quarkus-openfga-client extension to your project defines clients beans OpenFGAClient that are configured to access the OpenFGA instance configured in application.properties.

+
+
+

Clients

+
+

The extension provides three injectable clients for accessing the configured instance and store.

+
+
+
+
OpenFGAClient
+
+

Main client for accessing the OpenFGA instance.

+
+
StoreClient
+
+

Access authorization store configured via quarkus.openfga.store-id

+
+
AuthorizationModelsClient
+
+

Manage (list, create, delete) authorization models and create AuthorizationModelClient instances for accessing a specific model.

+
+
AuthorizationModelClient
+
+

Access authorization model configured via quarkus.openfga.authoriztion-model-id or the default model if none is configured.

+
+
+
+
+
+
+
+

Examples

+
+
+

Write a Relationship Tuple

+
+
+
class ExampleTupleWriter {
+
+    @Inject
+    StoreClient storeClient;
+
+    void write() {
+        var authModelClient = storeClient.authorizationModels().defaultModel();
+        authModelClient.write(TupleKey.of("thing:1", "reader", "user:me"));
+    }
+}
+
+
+
+

Check Access for a Relationship Tuple

+
+
+
class Example {
+
+    @Inject
+    AuthorizationModelClient defaultAuthModelClient;
+
+    void write() {
+        if (defaultAuthModelClient.check(TupleKey.of("thing:1", "reader", "user:me"))) {
+            System.out.println("Allowed!");
+        }
+    }
+}
+
+
+
+
+
+
+
+

Extension Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Whether a health check is published in case the smallrye-health extension is present.

+
+
+

Environment variable: QUARKUS_OPENFGA_HEALTH_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether tracing spans of client commands are reported.

+
+
+

Environment variable: QUARKUS_OPENFGA_TRACING_ENABLED

+
+
+

boolean

false

+
+
+
+

If DevServices has been explicitly enabled or disabled. DevServices is generally enabled by default, unless there is an existing configuration present.

+
+
+

When DevServices is enabled Quarkus will attempt to automatically configure and start a database when running in 'dev' or 'test' mode.

+
+
+

Environment variable: QUARKUS_OPENFGA_DEVSERVICES_ENABLED

+
+
+

boolean

+
+
+
+

The container image name to use, for container based DevServices providers.

+
+
+

Environment variable: QUARKUS_OPENFGA_DEVSERVICES_IMAGE_NAME

+
+
+

string

+
+
+
+

Indicates if the OpenFGA instance managed by Quarkus DevServices is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, DevServices for OpenFGA starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-openfga label. The value is configured using the service-name property.

+
+
+

Container sharing is only used in 'dev' mode.

+
+
+

Environment variable: QUARKUS_OPENFGA_DEVSERVICES_SHARED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-openfga label attached to the started container. This property is used when shared is set to true. In this case, before starting a container, DevServices for OpenFGA looks for a container with the quarkus-dev-service-openfga label set to the configured value. If found, it will use this container instead of starting a new one, otherwise it starts a new container with the quarkus-dev-service-openfga label set to the specified value.

+
+
+

This property is used when you need multiple shared OpenFGA instances.

+
+
+

Environment variable: QUARKUS_OPENFGA_DEVSERVICES_SERVICE_NAME

+
+
+

string

openfga

+
+
+
+

Optional fixed port the HTTP service will be bound to.

+
+
+

If not defined, the port will be chosen randomly.

+
+
+

Environment variable: QUARKUS_OPENFGA_DEVSERVICES_HTTP_PORT

+
+
+

int

+
+
+
+

Optional fixed port the gRPC service will be bound to.

+
+
+

If not defined, the port will be chosen randomly.

+
+
+

Environment variable: QUARKUS_OPENFGA_DEVSERVICES_GRPC_PORT

+
+
+

int

+
+
+
+

Optional fixed port the Playground service will be bound to.

+
+
+

If not defined, the port will be chosen randomly.

+
+
+

Environment variable: QUARKUS_OPENFGA_DEVSERVICES_PLAYGROUND_PORT

+
+
+

int

+
+
+
+

Name of authorization store to create for DevServices.

+
+
+

Defaults to "dev".

+
+
+

Environment variable: QUARKUS_OPENFGA_DEVSERVICES_STORE_NAME

+
+
+

string

dev

+
+
+
+

JSON formatted authorization model to upload during DevServices initialization.

+
+
+

Environment variable: QUARKUS_OPENFGA_DEVSERVICES_AUTHORIZATION_MODEL

+
+
+

string

+
+
+
+

Location of JSON formatted authorization model file to upload during DevServices initialization.

+
+
+

The location can be prefixed with classpath: or filesystem: to specify where the file will be read from; if not prefixed, it will be read from the classpath.

+
+
+

Environment variable: QUARKUS_OPENFGA_DEVSERVICES_AUTHORIZATION_MODEL_LOCATION

+
+
+

string

+
+
+
+

JSON formatted authorization tuples to upload during DevServices initialization.

+
+
+

Environment variable: QUARKUS_OPENFGA_DEVSERVICES_AUTHORIZATION_TUPLES

+
+
+

string

+
+
+
+

Location of JSON formatted authorization tuples file to upload during DevServices initialization.

+
+
+

The location can be prefixed with classpath: or filesystem: to specify where the file will be read from; if not prefixed, it will be read from the classpath.

+
+
+

Environment variable: QUARKUS_OPENFGA_DEVSERVICES_AUTHORIZATION_TUPLES_LOCATION

+
+
+

string

+
+
+
+

OpenFGA server URL.

+
+
+

Example: http://openfga:8080

+
+
+

Environment variable: QUARKUS_OPENFGA_URL

+
+
+

URL

required

+
+
+
+

Shared authentication key.

+
+
+

If none provided unauthenticated access will be attempted.

+
+
+

Environment variable: QUARKUS_OPENFGA_SHARED_KEY

+
+
+

string

+
+
+
+

Store id or name for default StoreClient bean.

+
+
+

If the provided property does not match the OpenFGA store id format (^[ABCDEFGHJKMNPQRSTVWXYZ0-9]{26$}) it will be treated as a store name and a matching store id will be resolved at runtime.

+
+
+

Environment variable: QUARKUS_OPENFGA_STORE

+
+
+

string

required

+
+
+
+

Always Treat store as the name of a store and resolve the store id at runtime.

+
+
+

If true, the store id will always be resolved at runtime regardless of the format of the store property. Otherwise, the store id will be resolved only when store does not match the OpenFGA store id format.

+
+
+

Environment variable: QUARKUS_OPENFGA_ALWAYS_RESOLVE_STORE_ID

+
+
+

boolean

false

+
+
+
+

Authorization model id for default AuthorizationModelClient bean.

+
+
+

If none is provided the default bean will target the default authorization model for the store.

+
+
+

Environment variable: QUARKUS_OPENFGA_AUTHORIZATION_MODEL_ID

+
+
+

string

+
+
+
+

Timeout to establish a connection with OpenFGA.

+
+
+

Environment variable: QUARKUS_OPENFGA_CONNECT_TIMEOUT

+
+
+

Duration +

5S

+
+
+
+

Request timeout on OpenFGA.

+
+
+

Environment variable: QUARKUS_OPENFGA_READ_TIMEOUT

+
+
+

Duration +

5S

+
+
+
+

List of remote hosts that are not proxied when the client is configured to use a proxy. This list serves the same purpose as the JVM nonProxyHosts configuration.

+
+
+

Entries can use the * wildcard character for pattern matching, e.g *.example.com matches www.example.com.

+
+
+

Environment variable: QUARKUS_OPENFGA_NON_PROXY_HOSTS

+
+
+

list of string

TLS configuration

Type

Default

+
+
+
+

Allows to bypass certificate validation on TLS communications.

+
+
+

If true this will allow TLS communications with OpenFGA, without checking the validity of the certificate presented by OpenFGA. This is discouraged in production because it allows man in the middle type of attacks.

+
+
+

Environment variable: QUARKUS_OPENFGA_TLS_SKIP_VERIFY

+
+
+

boolean

+
+
+
+

Certificate bundle used to validate TLS communications with OpenFGA.

+
+
+

The path to a pem bundle file, if TLS is required, and trusted certificates are not set through javax.net.ssl.trustStore system property.

+
+
+

Environment variable: QUARKUS_OPENFGA_TLS_CA_CERT

+
+
+

string

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-opensearch/dev/includes/attributes.html b/quarkus-opensearch/dev/includes/attributes.html new file mode 100644 index 0000000000..8ce8956335 --- /dev/null +++ b/quarkus-opensearch/dev/includes/attributes.html @@ -0,0 +1,912 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-opensearch/dev/includes/quarkus-opensearch.html b/quarkus-opensearch/dev/includes/quarkus-opensearch.html new file mode 100644 index 0000000000..4c9bc42099 --- /dev/null +++ b/quarkus-opensearch/dev/includes/quarkus-opensearch.html @@ -0,0 +1,1266 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Whether a health check is published in case the smallrye-health extension is present.

+
+
+

Environment variable: QUARKUS_OPENSEARCH_HEALTH_ENABLED

+
+
+

boolean

true

+
+
+
+

The list of hosts of the OpenSearch servers, when accessing AWS OpenSearch set to AWS endpoint name. Host Example: opensearch-01:9200,opensearch-02:9200 AWS Endpoint Example: search-domain-name-identifier.region.es.amazonaws.com

+
+
+

Environment variable: QUARKUS_OPENSEARCH_HOSTS

+
+
+

list of string

+
+
+
+

The protocol to use when contacting OpenSearch servers. Set to "https" to enable SSL/TLS.

+
+
+

Environment variable: QUARKUS_OPENSEARCH_PROTOCOL

+
+
+

string

http

+
+
+
+

The username for basic HTTP authentication.

+
+
+

Environment variable: QUARKUS_OPENSEARCH_USERNAME

+
+
+

string

+
+
+
+

The password for basic HTTP authentication.

+
+
+

Environment variable: QUARKUS_OPENSEARCH_PASSWORD

+
+
+

string

+
+
+
+

The connection timeout.

+
+
+

Environment variable: QUARKUS_OPENSEARCH_CONNECTION_TIMEOUT

+
+
+

Duration +

15S

+
+
+
+

The connection timeout.

+
+
+

Environment variable: QUARKUS_OPENSEARCH_THREAD_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The socket timeout.

+
+
+

Environment variable: QUARKUS_OPENSEARCH_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The maximum number of connections to all the OpenSearch servers.

+
+
+

Environment variable: QUARKUS_OPENSEARCH_MAX_CONNECTIONS

+
+
+

int

20

+
+
+
+

The maximum number of connections per OpenSearch server.

+
+
+

Environment variable: QUARKUS_OPENSEARCH_MAX_CONNECTIONS_PER_ROUTE

+
+
+

int

10

+
+
+
+

The number of IO thread. By default, this is the number of locally detected processors.

+
+
+

Thread counts higher than the number of processors should not be necessary because the I/O threads rely on non-blocking operations, but you may want to use a thread count lower than the number of processors.

+
+
+

Environment variable: QUARKUS_OPENSEARCH_IO_THREAD_COUNTS

+
+
+

int

+
+
+
+

AWS Region

+
+
+

Environment variable: QUARKUS_OPENSEARCH_AWS_REGION

+
+
+

string

us-west-2

+
+
+
+

Set to "es" or "aoss" to use AWS OpenSearch Service. es : Amazon OpenSearch Service aoss : Amazon OpenSearch Serverless

+
+
+

Environment variable: QUARKUS_OPENSEARCH_AWS_SERVICE

+
+
+

string

+
+
+
+

AWS Secret Access Key for setting up StaticCredentialsProvider

+
+
+

Environment variable: QUARKUS_OPENSEARCH_AWS_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret Access Key Secret for setting up StaticCredentialsProvider

+
+
+

Environment variable: QUARKUS_OPENSEARCH_AWS_ACCESS_KEY_SECRET

+
+
+

string

+
+
+
+

Defines if automatic discovery is enabled.

+
+
+

Environment variable: QUARKUS_OPENSEARCH_DISCOVERY_ENABLED

+
+
+

boolean

false

+
+
+
+

Refresh interval of the node list.

+
+
+

Environment variable: QUARKUS_OPENSEARCH_DISCOVERY_REFRESH_INTERVAL

+
+
+

Duration +

5M

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-opensearch/dev/index.html b/quarkus-opensearch/dev/index.html new file mode 100644 index 0000000000..9b66eb2465 --- /dev/null +++ b/quarkus-opensearch/dev/index.html @@ -0,0 +1,1396 @@ + + + + + + Quarkus Opensearch Extension :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Opensearch Extension

+
+
+
+

The quarkus-opensearch extension allows you to connect to an OpenSearch cluster using the clients provided by the OpenSearch project.

+
+
+
+
+

OpenSearch Clients

+
+
+

OpenSearch provides three different flavours of clients for connecting to the cluster. This extension has support for all three of them.

+
+
+

OpenSearch Java Client

+
+

This is the latest implementation of the OpenSearch clients, when starting a new project you should use this client and not bother about the others. +This will be the only OpenSearch Client supported in the future. +Just like the OpenSearch REST high-level level, the OpenSearch Java client lets you interact with OpenSearch through Java methods and data structures. In comparison to the REST high-level, it has no dependency to org.opensearch:opensearch and also provides an async client implementation.

+
+
+ + + + + +
+ + +
Deprecation
+
+

The OpenSearch REST clients are deprecated. Support will be removed in OpenSearch version 3.0.0.

+
+
+

It is recommended to switch to the Java client. +We will try to support the REST clients as long as possible, but if you start a new project this is not the client you should use anymore.

+
+
+
+
+
+

OpenSearch REST High-Level Client

+
+

The OpenSearch Java high-level REST client lets you interact with your OpenSearch clusters and indices through Java methods and data structures rather than HTTP methods and JSON.

+
+
+
+

OpenSearch REST (low-level) client

+
+

Core low-level client which lets you interact with OpenSearch clusters through HTTP methods and JSON, it is also used by the two other higher level clients for connecting to the cluster.

+
+
+
+
+
+

Installation

+
+
+

OpenSearch Java client

+
+

The java client does not have any dependencies on the REST client. All clients are sharing most of the configuration properties. +The AWS related configuration properties quarkus.opensearch.aws.* are only applicable to this java client.

+
+
+

If you want to use this client all you need to do is add the io.quarkiverse.opensearch:quarkus-opensearch-java-client extension first to your build file.

+
+
+

with Maven, add the following dependency to your POM file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.opensearch</groupId>
+    <artifactId>quarkus-opensearch-java-client</artifactId>
+    <version>1.5.0</version>
+</dependency>
+
+
+
+
+

OpenSearch REST High-Level Client

+
+

The REST High-Level Client depends on the REST client and does not require any additional configuration.

+
+
+

If you want to use this client all you need to do is add the io.quarkiverse.opensearch:quarkus-opensearch-rest-high-level-client extension first to your build file.

+
+
+

with Maven, add the following dependency to your POM file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.opensearch</groupId>
+    <artifactId>quarkus-opensearch-rest-high-level-client</artifactId>
+    <version>1.5.0</version>
+</dependency>
+
+
+
+
+

OpenSearch REST Low-Level Client

+
+

If you want to use this extension, you need to add the io.quarkiverse.opensearch:quarkus-opensearch-rest-client extension first to your build file.

+
+
+

For instance, with Maven, add the following dependency to your POM file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.opensearch</groupId>
+    <artifactId>quarkus-opensearch-rest-client</artifactId>
+    <version>1.5.0</version>
+</dependency>
+
+
+
+
+
+
+

Extension Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Whether a health check is published in case the smallrye-health extension is present.

+
+
+

Environment variable: QUARKUS_OPENSEARCH_HEALTH_ENABLED

+
+
+

boolean

true

+
+
+
+

The list of hosts of the OpenSearch servers, when accessing AWS OpenSearch set to AWS endpoint name. Host Example: opensearch-01:9200,opensearch-02:9200 AWS Endpoint Example: search-domain-name-identifier.region.es.amazonaws.com

+
+
+

Environment variable: QUARKUS_OPENSEARCH_HOSTS

+
+
+

list of string

+
+
+
+

The protocol to use when contacting OpenSearch servers. Set to "https" to enable SSL/TLS.

+
+
+

Environment variable: QUARKUS_OPENSEARCH_PROTOCOL

+
+
+

string

http

+
+
+
+

The username for basic HTTP authentication.

+
+
+

Environment variable: QUARKUS_OPENSEARCH_USERNAME

+
+
+

string

+
+
+
+

The password for basic HTTP authentication.

+
+
+

Environment variable: QUARKUS_OPENSEARCH_PASSWORD

+
+
+

string

+
+
+
+

The connection timeout.

+
+
+

Environment variable: QUARKUS_OPENSEARCH_CONNECTION_TIMEOUT

+
+
+

Duration +

15S

+
+
+
+

The connection timeout.

+
+
+

Environment variable: QUARKUS_OPENSEARCH_THREAD_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The socket timeout.

+
+
+

Environment variable: QUARKUS_OPENSEARCH_SOCKET_TIMEOUT

+
+
+

Duration +

30S

+
+
+
+

The maximum number of connections to all the OpenSearch servers.

+
+
+

Environment variable: QUARKUS_OPENSEARCH_MAX_CONNECTIONS

+
+
+

int

20

+
+
+
+

The maximum number of connections per OpenSearch server.

+
+
+

Environment variable: QUARKUS_OPENSEARCH_MAX_CONNECTIONS_PER_ROUTE

+
+
+

int

10

+
+
+
+

The number of IO thread. By default, this is the number of locally detected processors.

+
+
+

Thread counts higher than the number of processors should not be necessary because the I/O threads rely on non-blocking operations, but you may want to use a thread count lower than the number of processors.

+
+
+

Environment variable: QUARKUS_OPENSEARCH_IO_THREAD_COUNTS

+
+
+

int

+
+
+
+

AWS Region

+
+
+

Environment variable: QUARKUS_OPENSEARCH_AWS_REGION

+
+
+

string

us-west-2

+
+
+
+

Set to "es" or "aoss" to use AWS OpenSearch Service. es : Amazon OpenSearch Service aoss : Amazon OpenSearch Serverless

+
+
+

Environment variable: QUARKUS_OPENSEARCH_AWS_SERVICE

+
+
+

string

+
+
+
+

AWS Secret Access Key for setting up StaticCredentialsProvider

+
+
+

Environment variable: QUARKUS_OPENSEARCH_AWS_ACCESS_KEY_ID

+
+
+

string

+
+
+
+

AWS Secret Access Key Secret for setting up StaticCredentialsProvider

+
+
+

Environment variable: QUARKUS_OPENSEARCH_AWS_ACCESS_KEY_SECRET

+
+
+

string

+
+
+
+

Defines if automatic discovery is enabled.

+
+
+

Environment variable: QUARKUS_OPENSEARCH_DISCOVERY_ENABLED

+
+
+

boolean

false

+
+
+
+

Refresh interval of the node list.

+
+
+

Environment variable: QUARKUS_OPENSEARCH_DISCOVERY_REFRESH_INTERVAL

+
+
+

Duration +

5M

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-operator-sdk/dev/includes/attributes.html b/quarkus-operator-sdk/dev/includes/attributes.html new file mode 100644 index 0000000000..e2275cec56 --- /dev/null +++ b/quarkus-operator-sdk/dev/includes/attributes.html @@ -0,0 +1,912 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-operator-sdk/dev/includes/quarkus-operator-sdk.html b/quarkus-operator-sdk/dev/includes/quarkus-operator-sdk.html new file mode 100644 index 0000000000..1e6e58a18e --- /dev/null +++ b/quarkus-operator-sdk/dev/includes/quarkus-operator-sdk.html @@ -0,0 +1,1560 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Whether the operator should check that the CRD is properly deployed and that the associated CustomResource implementation matches its information before registering the associated controller.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_CRD_VALIDATE

+
+
+

boolean

true

+
+
+
+

Whether the extension should automatically generate the CRD based on CustomResource implementations.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_CRD_GENERATE

+
+
+

boolean

+
+
+
+

Whether the extension should automatically apply updated CRDs when they change. When running on DEV mode, the CRD changes will always be applied automatically.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_CRD_APPLY

+
+
+

boolean

+
+
+
+

Comma-separated list of which CRD versions should be generated.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_CRD_VERSIONS

+
+
+

list of string

v1

+
+
+
+

The directory where the CRDs will be generated, defaults to the kubernetes directory of the project’s output directory.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_CRD_OUTPUT_DIRECTORY

+
+
+

string

+
+
+
+

Whether the extension should generate all CRDs even if some are not tied to a Reconciler.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_CRD_GENERATE_ALL

+
+
+

boolean

false

+
+
+
+

Whether the CRDs should be generated in parallel. Please note that this feature is experimental and it may lead to unexpected results.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_CRD_GENERATE_IN_PARALLEL

+
+
+

boolean

false

+
+
+
+

A comma-separated list of fully-qualified class names implementing custom resources to exclude from the CRD generation process.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_CRD_EXCLUDE_RESOURCES

+
+
+

list of string

+
+
+
+

Whether controllers should only process events if the associated resource generation has increased since last reconciliation, otherwise will process all events. Sets the default value for all controllers.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_GENERATION_AWARE

+
+
+

boolean

true

+
+
+
+

Whether Role-Based Access Control (RBAC) resources generated by the Kubernetes extension should be augmented by this extension.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_DISABLE_RBAC_GENERATION

+
+
+

boolean

false

+
+
+
+

Whether the operator should be automatically started or not. Mostly useful for testing scenarios.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_START_OPERATOR

+
+
+

boolean

true

+
+
+
+

Whether the injected Kubernetes client should be stopped when the operator is stopped.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_CLOSE_CLIENT_ON_STOP

+
+
+

boolean

true

+
+
+
+

Whether the operator should stop if an informer error (such as one caused by missing / improper RBACs) occurs during startup.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_STOP_ON_INFORMER_ERROR_DURING_STARTUP

+
+
+

boolean

true

+
+
+
+

Whether to fail or emit a debug-level (warning-level when misalignment is at the minor or above version level) log when the extension detects that there are misaligned versions.

+
+
+

The following versions are checked for alignment:

+
+
+
    +
  • +

    declared Quarkus version used to build the extension vs. actually used Quarkus version at runtime

    +
  • +
  • +

    Fabric8 client version used by JOSDK vs. actually used Fabric8 client version

    +
  • +
  • +

    Fabric8 client version used by Quarkus vs. actually used Fabric8 client version

    +
  • +
+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_FAIL_ON_VERSION_CHECK

+
+
+

boolean

false

+
+
+
+

The list of profile names for which leader election should be activated. This is mostly useful for testing scenarios where leader election behavior might lead to issues.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_ACTIVATE_LEADER_ELECTION_FOR_PROFILES

+
+
+

list of string

prod

+
+
+
+

The optional Server-Side Apply (SSA) related configuration.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_ENABLE_SSA

+
+
+

boolean

true

+
+
+
+

An optional list of comma-separated watched namespace names that will be used to generate manifests at build time if controllers do NOT specify a value individually. See BuildTimeControllerConfiguration#generateWithWatchedNamespaces for more information.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_GENERATE_WITH_WATCHED_NAMESPACES

+
+
+

list of string

+
+
+
+

Can be used to disable helm chart generation.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_HELM_ENABLED

+
+
+

boolean

false

+
+
+
+

The max number of concurrent dispatches of reconciliation requests to controllers.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_CONCURRENT_RECONCILIATION_THREADS

+
+
+

int

+
+
+
+

Amount of seconds the SDK waits for reconciliation threads to terminate before shutting down.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_TERMINATION_TIMEOUT_SECONDS

+
+
+

int

+
+
+
+

An optional list of comma-separated namespace names all controllers will watch if they do not specify their own list. If a controller specifies its own list either via the io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration annotation or via the associated application.properties property, that value will be used instead of the operator-level default value that this configuration option provides.

+
+
+

If this property is left empty then controllers will watch all namespaces by default (which is equivalent to setting this property to Constants#WATCH_ALL_NAMESPACES, assuming they do not provide their own list of namespaces to watch. . The value can be set to Constants#WATCH_CURRENT_NAMESPACE to make all controllers watch the current namespace as specified by the kube config file the operator uses.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_NAMESPACES

+
+
+

list of string

QOSDK_USE_BUILDTIME_NAMESPACES

+
+
+
+

The max number of concurrent workflow processing requests.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_CONCURRENT_WORKFLOW_THREADS

+
+
+

int

+
+
+
+

How long the operator will wait for informers to finish synchronizing their caches on startup before timing out.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_CACHE_SYNC_TIMEOUT

+
+
+

Duration +

2M

+
+
+
+

Whether the controller should only process events if the associated resource generation has increased since last reconciliation, otherwise will process all events.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_CONTROLLERS__CONTROLLERS__GENERATION_AWARE

+
+
+

boolean

+
+
+
+

An optional list of comma-separated watched namespace names that will be used to generate manifests at build time.

+
+
+

Note that this is provided as a means to quickly deploy a specific controller to test it by applying the generated manifests to the target cluster. If empty, no manifests will be generated. The namespace in which the controller will be deployed will be the currently configured namespace as specified by your .kube/config file, unless you specify the target deployment namespace using the quarkus.kubernetes.namespace property.

+
+
+

As this functionality cannot handle namespaces that are not know until runtime (because the generation happens during build time), we recommend that you use a different mechanism such as OLM or Helm charts to deploy your operator in production.

+
+
+

This replaces the previous namespaces property which was confusing and against Quarkus best practices since it existed both at build time and runtime. That property wasn’t also adequately capturing the fact that namespaces that wouldn’t be known until runtime would render whatever got generated at build time invalid as far as generated manifests were concerned.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_CONTROLLERS__CONTROLLERS__GENERATE_WITH_WATCHED_NAMESPACES

+
+
+

list of string

+
+
+
+

Indicates whether the primary resource for the associated controller is unowned, meaning that another controller is the principal controller handling resources of this type. By default, controllers are assumed to own their primary resource but there are cases where this might not be the case, for example, when extra processing of a given resource type is required even though another controller already handles reconciliations of resources of that type. Set this property to true if you want to indicate that the controller doesn’t own its primary resource

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_CONTROLLERS__CONTROLLERS__UNOWNED_PRIMARY

+
+
+

boolean

false

+
+
+
+

An optional list of comma-separated namespace names the controller should watch. If this property is left empty then the controller will watch all namespaces. The value can be set to "JOSDK_WATCH_CURRENT" to watch the current (default) namespace from kube config. Constant(s) can be found in at `io.javaoperatorsdk.operator.api.reconciler.Constants`".

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_CONTROLLERS__CONTROLLERS__NAMESPACES

+
+
+

list of string

QOSDK_USE_BUILDTIME_NAMESPACES

+
+
+
+

The optional name of the finalizer for the controller. If none is provided, one will be automatically generated.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_CONTROLLERS__CONTROLLERS__FINALIZER

+
+
+

string

+
+
+
+

How many times an operation should be retried before giving up

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_CONTROLLERS__CONTROLLERS__RETRY_MAX_ATTEMPTS

+
+
+

int

+
+
+
+

The initial interval that the controller waits for before attempting the first retry

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_CONTROLLERS__CONTROLLERS__RETRY_INTERVAL_INITIAL

+
+
+

long

2000

+
+
+
+

The value by which the initial interval is multiplied by for each retry

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_CONTROLLERS__CONTROLLERS__RETRY_INTERVAL_MULTIPLIER

+
+
+

double

1.5

+
+
+
+

The maximum interval that the controller will wait for before attempting a retry, regardless of all other configuration

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_CONTROLLERS__CONTROLLERS__RETRY_INTERVAL_MAX

+
+
+

long

+
+
+
+

An optional list of comma-separated label selectors that Custom Resources must match to trigger the controller. See https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ for more details on selectors.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_CONTROLLERS__CONTROLLERS__SELECTOR

+
+
+

string

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-operator-sdk/dev/index.html b/quarkus-operator-sdk/dev/index.html new file mode 100644 index 0000000000..a1224ff451 --- /dev/null +++ b/quarkus-operator-sdk/dev/index.html @@ -0,0 +1,1974 @@ + + + + + + Quarkiverse Java Operator SDK :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkiverse Java Operator SDK

+
+
+
+

This extension integrates the Java Operator SDK project (JOSDK) with Quarkus, making it even easier to use both.

+
+
+

For an introduction to this project, please read the blog series that we wrote on how to write operators in Java with Quarkus. +Please also refer to the JOSDK documentation for more details.

+
+
+
+
+

Features

+
+
+
    +
  • +

    Automatically generates a main class, so that the only thing that’s required is to write Reconciler implementation(s)

    +
  • +
  • +

    Automatically makes a Kubernetes/OpenShift client available for CDI injection

    +
  • +
  • +

    Automatically sets up an Operator instance, also available for CDI injection

    +
  • +
  • +

    Automatically processes the reconcilers' configuration at build time, exposing all the available configuration of JOSDK via application properties

    +
  • +
  • +

    Automatically registers reconcilers with the Operator and start them

    +
  • +
  • +

    Automatically generates CRDs for all CustomResource implementations used by reconcilers

    +
  • +
  • +

    Automatically generates Kubernetes descriptors

    +
  • +
  • +

    Automatically generates the bundle manifests for all reconcilers (using the quarkus-operator-sdk-bundle-generator extension)

    +
  • +
  • +

    Integrates with the Dev mode:

    +
    +
      +
    • +

      Watches your code for changes and reload automatically your operator if needed without having to hit an endpoint

      +
    • +
    • +

      Only re-generates the CRDs if a change impacting its generation is detected

      +
    • +
    • +

      Only re-processes a reconciler’s configuration if needed

      +
    • +
    • +

      Automatically apply the CRD to the cluster when it has changed

      +
    • +
    +
    +
  • +
  • +

    Supports micrometer registry extensions (adding a Quarkus-supported micrometer registry extension will automatically inject said registry into the operator)

    +
  • +
  • +

    Automatically adds a SmallRye health check

    +
  • +
  • +

    Sets up reflection for native binary generation

    +
  • +
  • +

    [Deprecated] Customize the JSON serialization that the Fabric8 client relies on by providing an ObjectMapperCustomizer implementation, qualified with the @KubernetesClientSerializationCustomizer annotation

    +
    +
      +
    • +

      The Quarkus kubernetes client extension now provides an official mechanism to do so by implementing the io.quarkus.kubernetes.client.KubernetesClientObjectMapperCustomizer interface instead so this mechanism should be used moving forward.

      +
    • +
    +
    +
  • +
  • +

    Dev mode commands:

    +
    +
      +
    • +

      Dev commands are automatically accessible from the Dev console after typing : in the Quarkus terminal in Dev mode, under the qosdk name. Two commands currently exist: qosdk api to create a Kubernetes API (hint: type qosdk api -h for more details) and qosdk versions to show which versions are targeted by QOSDK.

      +
    • +
    +
    +
  • +
  • +

    CLI command:

    +
    +
      +
    • +

      Add the Quarkus CLI command using: quarkus plug add io.quarkiverse.operatorsdk:quarkus-operator-sdk-cli:runner:jar:6.6.3

      +
    • +
    • +

      You can create a Kubernetes API using the quarkus operator-sdk api command, e.g. quarkus operator-sdk api -g halkyon.io -v v1 -k foo

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

Installation

+
+
+

If you want to use this extension, you need to add the quarkus-operator-sdk extension first.

+
+
+

You need to add minimally, the following to your pom.xml file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.operatorsdk</groupId>
+    <artifactId>quarkus-operator-sdk</artifactId>
+    <version>6.6.3</version>
+</dependency>
+
+
+
+

However, it might be more convenient to use the quarkus-operator-sdk-bom dependency to ensure that all dependency versions are properly aligned:

+
+
+
+
<dependencyManagement>
+    <dependencies>
+      <dependency>
+        <groupId>io.quarkiverse.operatorsdk</groupId>
+        <artifactId>quarkus-operator-sdk-bom</artifactId>
+        <version>6.6.3</version>
+        <type>pom</type>
+        <scope>import</scope>
+      </dependency>
+
+      <!-- other dependencies as needed by your project -->
+
+    </dependencies>
+  </dependencyManagement>
+
+
+
+

If you do use the BOM, please do make sure to use the same Quarkus version as the one defined in the BOM when configuring the Quarkus plugin as the Quarkus Dev Mode will not work properly otherwise, failing with an error:

+
+
+
+
Exception in thread "main" java.lang.RuntimeException: java.lang.RuntimeException: java.lang.IllegalStateException: Hot deployment of the application is not supported when updating the Quarkus version. The application needs to be stopped and dev mode started up again
+        at io.quarkus.deployment.dev.DevModeMain.start(DevModeMain.java:138)
+        at io.quarkus.deployment.dev.DevModeMain.main(DevModeMain.java:62)
+
+
+
+

If you want to use the Bundle generator, you will first need to use Quarkus 2.3.0.Final or above and add the quarkus-operator-sdk-bundle-generator extension first:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.operatorsdk</groupId>
+    <artifactId>quarkus-operator-sdk-bundle-generator</artifactId>
+    <version>6.6.3</version>
+</dependency>
+
+
+
+
+
+

Deployment

+
+
+

This section explains how to deploy your operator using the Operator Lifecycle Manager (OLM) by following the next steps:

+
+
+

Requirements

+
+

Make sure you have installed the opm command tool and are connected to a Kubernetes cluster on which OLM is installed.

+
+
+
+

Generate the Operator image and bundle manifests

+
+

Quarkus provides several extensions to build the container image. +For example, the Joke sample uses the Quarkus Jib container image extension to build the image. +So, you first need to configure one of these extensions as you prefer. +Then, you need to add the quarkus-operator-sdk-bundle-generator extension:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.operatorsdk</groupId>
+    <artifactId>quarkus-operator-sdk-bundle-generator</artifactId>
+    <version>6.6.3</version>
+</dependency>
+
+
+
+

This extension generates the Operator bundle manifests in the target/bundle directory.

+
+
+

Finally, to generate the operator image and the bundle manifests at once, you simply need to run the next Maven command:

+
+
+
+
mvn clean package -Dquarkus.container-image.build=true \
+    -Dquarkus.container-image.push=true \
+    -Dquarkus.container-image.registry=<your container registry. Example: quay.io> \
+    -Dquarkus.container-image.group=<your container registry namespace> \
+    -Dquarkus.kubernetes.namespace=<the kubernetes namespace where you will deploy the operator> \
+    -Dquarkus.operator-sdk.bundle.package-name=<the name of the package that bundle image belongs to> \
+    -Dquarkus.operator-sdk.bundle.channels=<the list of channels that bundle image belongs to>
+
+
+
+

For example, if we want to name the package my-operator and use the alpha channels, we would need to append the properties -Dquarkus.operator-sdk.bundle.package-name=my-operator -Dquarkus.operator-sdk.bundle.channels=alpha.

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

Find more information about channels and packages here.

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

If you’re using an insecure container registry, you’ll also need to append the next property to the Maven command -Dquarkus.container-image.insecure=true.

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

By default, the bundle generator disables outputting the application’s version as part of the manifests' selectors (equivalent to setting quarkus.kubernetes.add-version-to-label-selectors to false). This is done make updating your operator simpler. If, for some reason, you need that label to be added to the selectors, just set the property to true.

+
+
+
+
+
+

Build the Operator Bundle image

+
+

An Operator Bundle is a container image that stores Kubernetes manifests and metadata associated with an operator. +You can find more information about this here. +In the previous step, we generated the bundle manifests at target/bundle which includes a ready-to-use target/bundle/bundle.Dockerfile Dockerfile that you will use to build and push the final Operator Bundle image to your container registry:

+
+
+
+
MY_BUNDLE_IMAGE=<your container registry>/<your container registry namespace>/<bundle image name>:<tag>
+docker build -t $MY_BUNDLE_IMAGE -f target/bundle/bundle.Dockerfile target/bundle
+docker push $MY_BUNDLE_IMAGE
+
+
+
+

For example, if we want to name our bundle image as my-manifest-bundle, our container registry is quay.io, our Quay user is myuser and the tag we’re releasing is 1.0, the final MY_BUNDLE_IMAGE property would be quay.io/myuser/my-manifest-bundle:1.0.

+
+
+
+

Make your operator available within a Catalog

+
+

OLM uses catalogs to discover and install Operators and their dependencies. +So, a catalog is similar to a repository of operators and their associated versions that can be installed on a cluster. +Moreover, the catalog is also a container image that contains a collection of bundles and channels. +Therefore, we’d need to create a new catalog (or update an existing one if you’re already have one), build/push the catalog image and then install it on our cluster.

+
+
+

So far, we have already built the Operator bundle image at $MY_BUNDLE_IMAGE (see above) and next, we need to add this Operator bundle image into our catalog. +For doing this, we’ll use the olm tool as follows:

+
+
+
+
CATALOG_IMAGE=<catalog container registry>/<catalog container registry namespace>/<catalog name>:<tag>
+opm index add \
+    --bundles $MY_BUNDLE_IMAGE \
+    --tag $CATALOG_IMAGE \
+    --build-tool docker
+docker push $CATALOG_IMAGE
+
+
+
+

For example, if our catalog name is my-catalog, our container registry for the catalog is quay.io, our Quay user is myuser and the container tag we’re releasing is 59.0, the final CATALOG_IMAGE property would be quay.io/myuser/my-catalog:59.0.

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

If you’re using an insecure registry, you’d need to append the argument --skip-tls to the opm index command.

+
+
+
+
+

Once we have our catalog image built and pushed at $CATALOG_IMAGE, we need to install it in the same namespace where OLM is running (by default, OLM is running in the operators namespace, we will use the OLM_NAMESPACE property to represent this namespace) on our cluster using the CatalogSource resource by doing the next command:

+
+
+
+
cat <<EOF | kubectl apply -f -
+apiVersion: operators.coreos.com/v1alpha1
+kind: CatalogSource
+metadata:
+  name: my-catalog-source
+  namespace: $OLM_NAMESPACE
+spec:
+  sourceType: grpc
+  image: $CATALOG_IMAGE
+EOF
+
+
+
+

Once the catalog is installed, you should see the catalog pod up and running:

+
+
+
+
kubectl get pods -n $OLM_NAMESPACE --selector=olm.catalogSource=my-catalog-source
+
+
+
+
+

Install your operator via OLM

+
+

OLM deploys operators via subscriptions. +Creating a Subscription will trigger the operator deployment. +You can simply create the Subscription resource that contains the operator name and channel to install by running the following command:

+
+
+
+
cat <<EOF | kubectl create -f -
+apiVersion: operators.coreos.com/v1alpha1
+kind: Subscription
+metadata:
+  name: my-subscription
+  namespace: <Kubernetes namespace where your operator will be installed>
+spec:
+  channel: alpha
+  name: my-operator-name
+  source: my-catalog-source
+  sourceNamespace: $OLM_NAMESPACE
+EOF
+
+
+
+ + + + + +
+ + +
+

We’ll install the operator in the target namespace defined in the metadata object. +The sourceNamespace value is the Kubernetes namespace where the catalog was installed on.

+
+
+
+
+

Once the subscription is created, you should see your operator pod up and running:

+
+
+
+
kubectl get csv -n $OLM_NAMESPACE my-operator-name
+
+
+
+
+
+
+

Extension Configuration Reference

+
+
+ + + + + +
+ + +Remove this section if you don’t have Quarkus configuration properties in your extension. +
+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Whether the operator should check that the CRD is properly deployed and that the associated CustomResource implementation matches its information before registering the associated controller.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_CRD_VALIDATE

+
+
+

boolean

true

+
+
+
+

Whether the extension should automatically generate the CRD based on CustomResource implementations.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_CRD_GENERATE

+
+
+

boolean

+
+
+
+

Whether the extension should automatically apply updated CRDs when they change. When running on DEV mode, the CRD changes will always be applied automatically.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_CRD_APPLY

+
+
+

boolean

+
+
+
+

Comma-separated list of which CRD versions should be generated.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_CRD_VERSIONS

+
+
+

list of string

v1

+
+
+
+

The directory where the CRDs will be generated, defaults to the kubernetes directory of the project’s output directory.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_CRD_OUTPUT_DIRECTORY

+
+
+

string

+
+
+
+

Whether the extension should generate all CRDs even if some are not tied to a Reconciler.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_CRD_GENERATE_ALL

+
+
+

boolean

false

+
+
+
+

Whether the CRDs should be generated in parallel. Please note that this feature is experimental and it may lead to unexpected results.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_CRD_GENERATE_IN_PARALLEL

+
+
+

boolean

false

+
+
+
+

A comma-separated list of fully-qualified class names implementing custom resources to exclude from the CRD generation process.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_CRD_EXCLUDE_RESOURCES

+
+
+

list of string

+
+
+
+

Whether controllers should only process events if the associated resource generation has increased since last reconciliation, otherwise will process all events. Sets the default value for all controllers.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_GENERATION_AWARE

+
+
+

boolean

true

+
+
+
+

Whether Role-Based Access Control (RBAC) resources generated by the Kubernetes extension should be augmented by this extension.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_DISABLE_RBAC_GENERATION

+
+
+

boolean

false

+
+
+
+

Whether the operator should be automatically started or not. Mostly useful for testing scenarios.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_START_OPERATOR

+
+
+

boolean

true

+
+
+
+

Whether the injected Kubernetes client should be stopped when the operator is stopped.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_CLOSE_CLIENT_ON_STOP

+
+
+

boolean

true

+
+
+
+

Whether the operator should stop if an informer error (such as one caused by missing / improper RBACs) occurs during startup.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_STOP_ON_INFORMER_ERROR_DURING_STARTUP

+
+
+

boolean

true

+
+
+
+

Whether to fail or emit a debug-level (warning-level when misalignment is at the minor or above version level) log when the extension detects that there are misaligned versions.

+
+
+

The following versions are checked for alignment:

+
+
+
    +
  • +

    declared Quarkus version used to build the extension vs. actually used Quarkus version at runtime

    +
  • +
  • +

    Fabric8 client version used by JOSDK vs. actually used Fabric8 client version

    +
  • +
  • +

    Fabric8 client version used by Quarkus vs. actually used Fabric8 client version

    +
  • +
+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_FAIL_ON_VERSION_CHECK

+
+
+

boolean

false

+
+
+
+

The list of profile names for which leader election should be activated. This is mostly useful for testing scenarios where leader election behavior might lead to issues.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_ACTIVATE_LEADER_ELECTION_FOR_PROFILES

+
+
+

list of string

prod

+
+
+
+

The optional Server-Side Apply (SSA) related configuration.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_ENABLE_SSA

+
+
+

boolean

true

+
+
+
+

An optional list of comma-separated watched namespace names that will be used to generate manifests at build time if controllers do NOT specify a value individually. See BuildTimeControllerConfiguration#generateWithWatchedNamespaces for more information.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_GENERATE_WITH_WATCHED_NAMESPACES

+
+
+

list of string

+
+
+
+

Can be used to disable helm chart generation.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_HELM_ENABLED

+
+
+

boolean

false

+
+
+
+

The max number of concurrent dispatches of reconciliation requests to controllers.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_CONCURRENT_RECONCILIATION_THREADS

+
+
+

int

+
+
+
+

Amount of seconds the SDK waits for reconciliation threads to terminate before shutting down.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_TERMINATION_TIMEOUT_SECONDS

+
+
+

int

+
+
+
+

An optional list of comma-separated namespace names all controllers will watch if they do not specify their own list. If a controller specifies its own list either via the io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration annotation or via the associated application.properties property, that value will be used instead of the operator-level default value that this configuration option provides.

+
+
+

If this property is left empty then controllers will watch all namespaces by default (which is equivalent to setting this property to Constants#WATCH_ALL_NAMESPACES, assuming they do not provide their own list of namespaces to watch. . The value can be set to Constants#WATCH_CURRENT_NAMESPACE to make all controllers watch the current namespace as specified by the kube config file the operator uses.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_NAMESPACES

+
+
+

list of string

QOSDK_USE_BUILDTIME_NAMESPACES

+
+
+
+

The max number of concurrent workflow processing requests.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_CONCURRENT_WORKFLOW_THREADS

+
+
+

int

+
+
+
+

How long the operator will wait for informers to finish synchronizing their caches on startup before timing out.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_CACHE_SYNC_TIMEOUT

+
+
+

Duration +

2M

+
+
+
+

Whether the controller should only process events if the associated resource generation has increased since last reconciliation, otherwise will process all events.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_CONTROLLERS__CONTROLLERS__GENERATION_AWARE

+
+
+

boolean

+
+
+
+

An optional list of comma-separated watched namespace names that will be used to generate manifests at build time.

+
+
+

Note that this is provided as a means to quickly deploy a specific controller to test it by applying the generated manifests to the target cluster. If empty, no manifests will be generated. The namespace in which the controller will be deployed will be the currently configured namespace as specified by your .kube/config file, unless you specify the target deployment namespace using the quarkus.kubernetes.namespace property.

+
+
+

As this functionality cannot handle namespaces that are not know until runtime (because the generation happens during build time), we recommend that you use a different mechanism such as OLM or Helm charts to deploy your operator in production.

+
+
+

This replaces the previous namespaces property which was confusing and against Quarkus best practices since it existed both at build time and runtime. That property wasn’t also adequately capturing the fact that namespaces that wouldn’t be known until runtime would render whatever got generated at build time invalid as far as generated manifests were concerned.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_CONTROLLERS__CONTROLLERS__GENERATE_WITH_WATCHED_NAMESPACES

+
+
+

list of string

+
+
+
+

Indicates whether the primary resource for the associated controller is unowned, meaning that another controller is the principal controller handling resources of this type. By default, controllers are assumed to own their primary resource but there are cases where this might not be the case, for example, when extra processing of a given resource type is required even though another controller already handles reconciliations of resources of that type. Set this property to true if you want to indicate that the controller doesn’t own its primary resource

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_CONTROLLERS__CONTROLLERS__UNOWNED_PRIMARY

+
+
+

boolean

false

+
+
+
+

An optional list of comma-separated namespace names the controller should watch. If this property is left empty then the controller will watch all namespaces. The value can be set to "JOSDK_WATCH_CURRENT" to watch the current (default) namespace from kube config. Constant(s) can be found in at `io.javaoperatorsdk.operator.api.reconciler.Constants`".

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_CONTROLLERS__CONTROLLERS__NAMESPACES

+
+
+

list of string

QOSDK_USE_BUILDTIME_NAMESPACES

+
+
+
+

The optional name of the finalizer for the controller. If none is provided, one will be automatically generated.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_CONTROLLERS__CONTROLLERS__FINALIZER

+
+
+

string

+
+
+
+

How many times an operation should be retried before giving up

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_CONTROLLERS__CONTROLLERS__RETRY_MAX_ATTEMPTS

+
+
+

int

+
+
+
+

The initial interval that the controller waits for before attempting the first retry

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_CONTROLLERS__CONTROLLERS__RETRY_INTERVAL_INITIAL

+
+
+

long

2000

+
+
+
+

The value by which the initial interval is multiplied by for each retry

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_CONTROLLERS__CONTROLLERS__RETRY_INTERVAL_MULTIPLIER

+
+
+

double

1.5

+
+
+
+

The maximum interval that the controller will wait for before attempting a retry, regardless of all other configuration

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_CONTROLLERS__CONTROLLERS__RETRY_INTERVAL_MAX

+
+
+

long

+
+
+
+

An optional list of comma-separated label selectors that Custom Resources must match to trigger the controller. See https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ for more details on selectors.

+
+
+

Environment variable: QUARKUS_OPERATOR_SDK_CONTROLLERS__CONTROLLERS__SELECTOR

+
+
+

string

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-pact/0.x/consumer-index.html b/quarkus-pact/0.x/consumer-index.html new file mode 100644 index 0000000000..29f5d00758 --- /dev/null +++ b/quarkus-pact/0.x/consumer-index.html @@ -0,0 +1,1095 @@ + + + + + + Pact Consumer :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Pact Consumer

+
+
+
+

This extension ensures Pact consumer libraries works well with Quarkus applications, including with continuous testing. +It is based on version 4.3.17 of the Pact JVM JUnit 5 library.

+
+
+
+
+

Installation

+
+
+

To use this extension, add the io.quarkiverse:quarkus-pact-consumer extension first to your build file. +Choose a 1.x version for Quarkus 3, and a 0.x version for Quarkus 2.

+
+
+

For instance, with Maven, add the following dependency to your POM file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse</groupId>
+    <artifactId>quarkus-pact-consumer</artifactId>
+    <version>0.2.1</version>
+    <scope>provided</scope>
+</dependency>
+
+
+
+

Note the provided scope, rather than test or default. This is needed for the tests to pass in continuous testing mode.

+
+
+
+
+

Example usage

+
+
+

Use Pact as you normally would. +Remember that your consumer tests should be testing your application’s code, not the behaviour of the Pact-provided mock.

+
+
+

For example, a simple consumer test for REST endpoints would look like this:

+
+
+
+
(1)
+@ExtendWith(PactConsumerTestExt.class)
+@PactTestFor(providerName = "farm", port = "8085")
+@PactDirectory("target/pacts")
+@QuarkusTest (2)
+public class ConsumerTest {
+
+    (3)
+    @Inject
+    Knitter knitter;
+
+    @Pact(provider = "farm", consumer = "knitter")
+    public V4Pact createPact(PactDslWithProvider builder) {
+        Map<String, String> headers = new HashMap<>();
+        headers.put("Content-Type", "application/json");
+
+        return builder.given("test GET") (4)
+                .uponReceiving("GET REQUEST")
+                .path("/alpaca")
+                .method("GET")
+                .willRespondWith()
+                .status(200)
+                .headers(headers)
+                .body(" {\n" + (5)
+                        "      \"colour\": \"black\",\n" +
+                        "          \"name\": \"floppy\"\n" +
+                        "        }")
+                .toPact(V4Pact.class);
+    }
+
+    @Test
+    public void testConsumption() { (6)
+        String knitted = knitter.knit("irrelevant"); (7)
+        assertEquals("a nice striped sweater", knitted);
+    }
+}
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
1Add @Consumer annotations to the class, along with metadata about who the consumer is, and what provider is being used.
2Needed to enable dependency injection of the rest client.
3The consumer under test.
4We use the Pact DSL to define what the provider should return, given the request.
5Here we define our mock, which is also our expectations for the provider. +There is no need to verify these in this test; instead, the provider test will verify them.
6This test is realistic (in a simplified way) of how a consumer test might look.
7We have hardcoded the mock response, so the colour parameter we pass in is irrelevant (for this particular test) It tests how the consumer under test uses what the mock passes back, not the mock itself.
+
+
+
+
+

Extension Configuration Reference

+
+
+

For the moment, Pact needs to be configured by the normal Pact system properties.

+
+
+
+
+

Known limitations

+
+
+
    +
  • +

    If continuous testing is being used, the dependency scope cannot be test. The provided scope is a good alternative.

    +
  • +
  • +

    @TestProfile does not work in dev mode (GitHub issue)

    +
  • +
  • +

    A harmless java.lang.NoClassDefFoundError: org/apache/hc/client5/http/fluent/Request message will be produced if Pact tracking is enabled (GitHub issue)

    +
  • +
+
+
+
+
+

Samples and resources

+
+
+ +
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-pact/0.x/includes/attributes.html b/quarkus-pact/0.x/includes/attributes.html new file mode 100644 index 0000000000..8b6a9679ad --- /dev/null +++ b/quarkus-pact/0.x/includes/attributes.html @@ -0,0 +1,922 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-pact/0.x/includes/resources.html b/quarkus-pact/0.x/includes/resources.html new file mode 100644 index 0000000000..60708eb41a --- /dev/null +++ b/quarkus-pact/0.x/includes/resources.html @@ -0,0 +1,946 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ + +
+
+
+ + + + + + + diff --git a/quarkus-pact/0.x/index.html b/quarkus-pact/0.x/index.html new file mode 100644 index 0000000000..044f754460 --- /dev/null +++ b/quarkus-pact/0.x/index.html @@ -0,0 +1,934 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Pact

+
+
+

Pact is a polyglot contract testing framework. +This set of extensions ensures Pact JVM libraries works well with Quarkus applications, including with continuous testing. +They are based on version 4.3.17 of the Pact JVM JUnit 5 library.

+
+
+

You can find the full set of extensions and documentation for each of them in the navigation on the left.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-pact/0.x/provider-index.html b/quarkus-pact/0.x/provider-index.html new file mode 100644 index 0000000000..e4d53cc398 --- /dev/null +++ b/quarkus-pact/0.x/provider-index.html @@ -0,0 +1,1066 @@ + + + + + + Quarkus Pact Provider :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Pact Provider

+
+
+
+

This extension ensures Pact provider libraries works well with Quarkus applications, including with continuous testing. +It is based on version 4.3.17 of the Pact JVM JUnit 5 library.

+
+
+
+
+

Installation

+
+
+

To use this extension, add the io.quarkiverse:quarkus-pact-provider extension first to your build file. +Choose a 1.x version for Quarkus 3, and a 0.x version for Quarkus 2.

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse</groupId>
+    <artifactId>quarkus-pact-provider</artifactId>
+    <version>0.2.1</version>
+    <scope>provided</scope>
+</dependency>
+
+
+
+

Note the provided scope, rather than test or default. This is needed for the tests to pass in continuous testing mode.

+
+
+
+
+

Example usage

+
+
+

Use Pact as you normally would. +For example, a simple provider test for REST endpoints would look like this:

+
+
+
+
@Provider("Farm") (1)
+@PactFolder("pacts")
+@QuarkusTest
+public class SimpleContractTest {
+
+    (2)
+    @ConfigProperty(name = "quarkus.http.test-port")
+    int quarkusPort;
+
+    @BeforeEach
+    void before(PactVerificationContext context) {
+        context.setTarget(new HttpTestTarget("localhost", quarkusPort)); (3)
+    }
+
+    @TestTemplate (4)
+    @ExtendWith(PactVerificationInvocationContextProvider.class)
+    void pactVerificationTestTemplate(PactVerificationContext context) {
+        context.verifyInteraction();
+    }
+}
+
+
+
+ + + + + + + + + + + + + + + + + +
1Add @Provider annotations to the class, along with instructions where to find the pacts (a folder or a broker).
2We inject Quarkus configuration.
3With the injected configuration, we can tell the Pact verifier where to look for our endpoints.
4Standard Pact provider boilerplate, to create a series of templated tests which run the Pact verifications.
+
+
+
+
+

Extension Configuration Reference

+
+
+

For the moment, Pact needs to be configured by the normal Pact system properties.

+
+
+
+
+

Known limitations

+
+
+
    +
  • +

    If continuous testing is being used, the dependency scope cannot be test. The provided scope is a good alternative.ps

    +
  • +
  • +

    @State methods do not not have access to the CDI context (GitHub issue)

    +
  • +
  • +

    When changing the code of classes with a @TestTemplate, continuous testing may not automatically retrigger (Fix PR)

    +
  • +
  • +

    @TestProfile does not work in dev mode (GitHub issue)

    +
  • +
  • +

    A harmless java.lang.NoClassDefFoundError: org/apache/hc/client5/http/fluent/Request message will be produced if Pact tracking is enabled (GitHub issue)

    +
  • +
+
+
+
+
+

Samples and resources

+
+
+ +
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-pact/dev/consumer-index.html b/quarkus-pact/dev/consumer-index.html new file mode 100644 index 0000000000..0033857c24 --- /dev/null +++ b/quarkus-pact/dev/consumer-index.html @@ -0,0 +1,1087 @@ + + + + + + Pact Consumer :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Pact Consumer

+
+
+
+

This extension ensures Pact consumer libraries works well with Quarkus applications, including with continuous testing. +It is based on version 4.6.7 of the Pact JVM JUnit 5 library.

+
+
+
+
+

Installation

+
+
+

To use this extension, add the io.quarkiverse:quarkus-pact-consumer extension first to your build file. +Choose a 1.x version for Quarkus 3, and a 0.x version for Quarkus 2.

+
+
+

For instance, with Maven, add the following dependency to your POM file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse</groupId>
+    <artifactId>quarkus-pact-consumer</artifactId>
+    <version>1.3.0</version>
+    <scope>test</scope>
+</dependency>
+
+
+
+
+
+

Example usage

+
+
+

Use Pact as you normally would. +Remember that your consumer tests should be testing your application’s code, not the behaviour of the Pact-provided mock.

+
+
+

For example, a simple consumer test for REST endpoints would look like this:

+
+
+
+
(1)
+@ExtendWith(PactConsumerTestExt.class)
+@PactTestFor(providerName = "farm", port = "8085")
+@PactDirectory("target/pacts")
+@QuarkusTest // Needed to enable dependency injection of the rest client
+public class ConsumerTest {
+
+    (2)
+    @Inject
+    Knitter knitter;
+
+    @Pact(provider = "farm", consumer = "knitter")
+    public V4Pact createPact(PactDslWithProvider builder) {
+        Map<String, String> headers = new HashMap<>();
+        headers.put("Content-Type", "application/json");
+
+        var requestBody = newJsonBody(body -> body.stringType("colour").numberType("orderNumber")).build(); (3)
+
+        var woolResponseBody = newJsonBody(body -> body.stringValue("colour", "white")).build(); (4)
+
+        (5)
+        return builder.uponReceiving("post request").path("/wool/order").headers(headers).method(HttpMethod.POST)
+                .body(requestBody).willRespondWith().status(Status.OK.getStatusCode()).headers(headers).body(woolResponseBody)
+                .toPact(V4Pact.class);
+
+    }
+
+    @Test
+    public void testConsumption() { (6)
+        String knitted = knitter.knit("irrelevant"); (7)
+        assertEquals("a nice striped sweater", knitted);
+    }
+}
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
1Add @Consumer annotations to the class, along with metadata about who the consumer is, and what provider is being used.
2The consumer under test.
3This defines what the body of the request could look like; we are generic and say it can be anything that meets the schema. +We could be stricter and put more expectations on what the consumer sends.
4We use the Pact DSL to define what the provider should return, given the request.
5Here we define our mock, which is also our expectations for the provider. +There is no need to verify these in this test; instead, the provider test will verify them.
6This test is realistic (in a simplified way) of how a consumer test might look.
7We have hardcoded the mock response, so the colour parameter we pass in is irrelevant (for this particular test) It tests how the consumer under test uses what the mock passes back, not the mock itself.
+
+
+
+
+

Extension Configuration Reference

+
+
+

For the moment, Pact needs to be configured by the normal Pact system properties.

+
+
+
+
+

Known limitations

+
+
+
    +
  • +

    Consumer tests cannot directly access the Pact MockServer when continuous testing is being used (GitHub issue)

    +
  • +
  • +

    @TestProfile does not work in dev mode (GitHub issue)

    +
  • +
+
+
+
+
+

Samples and resources

+
+
+ +
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-pact/dev/includes/attributes.html b/quarkus-pact/dev/includes/attributes.html new file mode 100644 index 0000000000..6929256101 --- /dev/null +++ b/quarkus-pact/dev/includes/attributes.html @@ -0,0 +1,922 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-pact/dev/includes/resources.html b/quarkus-pact/dev/includes/resources.html new file mode 100644 index 0000000000..e735f737d6 --- /dev/null +++ b/quarkus-pact/dev/includes/resources.html @@ -0,0 +1,946 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ + +
+
+
+ + + + + + + diff --git a/quarkus-pact/dev/index.html b/quarkus-pact/dev/index.html new file mode 100644 index 0000000000..b2468de1fa --- /dev/null +++ b/quarkus-pact/dev/index.html @@ -0,0 +1,934 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Pact

+
+
+

Pact is a polyglot contract testing framework. +This set of extensions ensures Pact JVM libraries works well with Quarkus applications, including with continuous testing. +They are based on version 4.6.7 of the Pact JVM JUnit 5 library.

+
+
+

You can find the full set of extensions and documentation for each of them in the navigation on the left.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-pact/dev/provider-index.html b/quarkus-pact/dev/provider-index.html new file mode 100644 index 0000000000..48421a91e3 --- /dev/null +++ b/quarkus-pact/dev/provider-index.html @@ -0,0 +1,1057 @@ + + + + + + Quarkus Pact Provider :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Pact Provider

+
+
+
+

This extension ensures Pact provider libraries works well with Quarkus applications, including with continuous testing. +It is based on version 4.6.7 of the Pact JVM JUnit 5 library.

+
+
+
+
+

Installation

+
+
+

To use this extension, add the io.quarkiverse:quarkus-pact-provider extension first to your build file. +Choose a 1.x version for Quarkus 3, and a 0.x version for Quarkus 2.

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse</groupId>
+    <artifactId>quarkus-pact-provider</artifactId>
+    <version>1.3.0</version>
+    <scope>test</scope>
+</dependency>
+
+
+
+
+
+

Example usage

+
+
+

Use Pact as you normally would. +For example, a simple provider test for REST endpoints would look like this:

+
+
+
+
@Provider("Farm") (1)
+@PactFolder("pacts")
+@QuarkusTest
+public class SimpleContractTest {
+
+    (2)
+    @ConfigProperty(name = "quarkus.http.test-port")
+    int quarkusPort;
+
+    @BeforeEach
+    void before(PactVerificationContext context) {
+        context.setTarget(new HttpTestTarget("localhost", quarkusPort)); (3)
+    }
+
+    @TestTemplate (4)
+    @ExtendWith(PactVerificationInvocationContextProvider.class)
+    void pactVerificationTestTemplate(PactVerificationContext context) {
+        context.verifyInteraction();
+    }
+}
+
+
+
+ + + + + + + + + + + + + + + + + +
1Add @Provider annotations to the class, along with instructions where to find the pacts (a folder or a broker).
2We inject Quarkus configuration.
3With the injected configuration, we can tell the Pact verifier where to look for our endpoints.
4Standard Pact provider boilerplate, to create a series of templated tests which run the Pact verifications.
+
+
+
+
+

Extension Configuration Reference

+
+
+

For the moment, Pact needs to be configured by the normal Pact system properties.

+
+
+
+
+

Known limitations

+
+
+
    +
  • +

    @State methods do not not have access to the CDI context (GitHub issue)

    +
  • +
  • +

    When changing the code of classes with a @TestTemplate, continuous testing may not automatically retrigger (Fix PR)

    +
  • +
  • +

    @TestProfile does not work in dev mode (GitHub issue)

    +
  • +
+
+
+
+
+

Samples and resources

+
+
+ +
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-pdfbox/dev/includes/attributes.html b/quarkus-pdfbox/dev/includes/attributes.html new file mode 100644 index 0000000000..218aa8e84c --- /dev/null +++ b/quarkus-pdfbox/dev/includes/attributes.html @@ -0,0 +1,912 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-pdfbox/dev/index.html b/quarkus-pdfbox/dev/index.html new file mode 100644 index 0000000000..d966f9fcdd --- /dev/null +++ b/quarkus-pdfbox/dev/index.html @@ -0,0 +1,944 @@ + + + + + + Quarkus PDFBox :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus PDFBox

+
+
+
+

This extension provides support for Apache PDFBox. +It allows you to create and manipulate PDF documents and forms programmatically and compile to native code with GraalVM.

+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.pdfbox:quarkus-pdfbox extension first to your build file.

+
+
+

For instance, with Maven, add the following dependency to your POM file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.pdfbox</groupId>
+    <artifactId>quarkus-pdfbox</artifactId>
+    <version>1.0.0</version>
+</dependency>
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-playwright/dev/includes/attributes.html b/quarkus-playwright/dev/includes/attributes.html new file mode 100644 index 0000000000..6ebdffe1b3 --- /dev/null +++ b/quarkus-playwright/dev/includes/attributes.html @@ -0,0 +1,912 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-playwright/dev/index.html b/quarkus-playwright/dev/index.html new file mode 100644 index 0000000000..8efd10124c --- /dev/null +++ b/quarkus-playwright/dev/index.html @@ -0,0 +1,982 @@ + + + + + + Quarkus Playwright :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Playwright

+
+
+
+

Easily create effective cross-browsers e2e tests for your Quarkus web-app using Playwright (Qute, Quinoa, Renarde, Web-Bundler, …​):

+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.playwright:quarkus-playwright extension first to your build file.

+
+
+

For instance, with Maven, add the following dependency to your POM file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.playwright</groupId>
+    <artifactId>quarkus-playwright</artifactId>
+    <version>0.0.1</version>
+    <scope>test</scope>
+</dependency>
+
+
+
+
+
+

Usage

+
+
+
+
@QuarkusTest
+@WithPlaywright
+public class WithDefaultPlaywrightTest {
+
+    @InjectPlaywright
+    BrowserContext context;
+
+    @TestHTTPResource("/")
+    URL index;
+
+    @Test
+    public void testIndex() {
+        final Page page = context.newPage();
+        Response response = page.navigate(index.toString());
+        Assertions.assertEquals("OK", response.statusText());
+
+        page.waitForLoadState();
+
+        String title = page.title();
+        Assertions.assertEquals("My Awesome App", title);
+
+        // Make sure the web app is loaded and hits the backend
+        final ElementHandle quinoaEl = page.waitForSelector(".toast-body.received");
+        String greeting = quinoaEl.innerText();
+        Assertions.assertEquals("Hello from RESTEasy Reactive", greeting);
+    }
+}
+
+
+
+

Use the annotation @WithPlaywright() to change the browser (Chromium, Firefox, Webkit), headless, enable debug, logs and other options.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-poi/1.x/includes/attributes.html b/quarkus-poi/1.x/includes/attributes.html new file mode 100644 index 0000000000..26c1e79fcc --- /dev/null +++ b/quarkus-poi/1.x/includes/attributes.html @@ -0,0 +1,919 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-poi/1.x/index.html b/quarkus-poi/1.x/index.html new file mode 100644 index 0000000000..f5513acdc8 --- /dev/null +++ b/quarkus-poi/1.x/index.html @@ -0,0 +1,952 @@ + + + + + + Quarkus POI :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus POI

+
+
+
+

This extension enables you to use Apache POI in your Quarkus application.

+
+
+

Apache POI is a Java API for Microsoft Documents. It allows Java programs to read and write files in Microsoft Office formats, such as Word, Excel and PowerPoint. It also allows programs to create new files in these formats. It is an open source project and is available under the Apache License.

+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.poi:quarkus-poi extension first to your build file.

+
+
+

For instance, with Maven, add the following dependency to your POM file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.poi</groupId>
+    <artifactId>quarkus-poi</artifactId>
+    <version>1.0.6</version>
+</dependency>
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-poi/dev/includes/attributes.html b/quarkus-poi/dev/includes/attributes.html new file mode 100644 index 0000000000..2baa4b5ad2 --- /dev/null +++ b/quarkus-poi/dev/includes/attributes.html @@ -0,0 +1,919 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-poi/dev/index.html b/quarkus-poi/dev/index.html new file mode 100644 index 0000000000..af290db07d --- /dev/null +++ b/quarkus-poi/dev/index.html @@ -0,0 +1,983 @@ + + + + + + Quarkus POI :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus POI

+
+
+
+

This extension enables you to use Apache POI in your Quarkus application.

+
+
+

Apache POI is a Java API for Microsoft Documents. It allows Java programs to read and write files in Microsoft Office formats, such as Word, Excel and PowerPoint. It also allows programs to create new files in these formats. It is an open source project and is available under the Apache License.

+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.poi:quarkus-poi extension first to your build file.

+
+
+

For instance, with Maven, add the following dependency to your POM file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.poi</groupId>
+    <artifactId>quarkus-poi</artifactId>
+    <version>2.0.5</version>
+</dependency>
+
+
+
+
+
+

Docker

+
+
+

When building native images in Docker using the standard Quarkus Docker configuration files some additional features need to be +installed to support Apache POI. Specifically font information is not included in Red Hat’s ubi-minimal images. To install it +simply add these lines to your DockerFile.native file:

+
+
+
+
FROM registry.access.redhat.com/ubi8/ubi-minimal:8.7
+
+######################### Set up environment for POI ##########################
+RUN microdnf update && microdnf install freetype fontconfig && microdnf clean all
+######################### Set up environment for POI ##########################
+
+WORKDIR /work/
+RUN chown 1001 /work \
+    && chmod "g+rwX" /work \
+    && chown 1001:root /work
+COPY --chown=1001:root target/*-runner /work/application
+
+EXPOSE 8080
+USER 1001
+
+CMD ["./application", "-Dquarkus.http.host=0.0.0.0"]
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-pooled-jms/1.x/config.html b/quarkus-pooled-jms/1.x/config.html new file mode 100644 index 0000000000..7a6348a4d6 --- /dev/null +++ b/quarkus-pooled-jms/1.x/config.html @@ -0,0 +1,1107 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Whether to enable pooling capabilities for JMS connections.

+
+
+

Environment variable: QUARKUS_POOLED_JMS_POOLING_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether to enable javax.jms.XAConnection support and integrate with javax.transaction.TransactionManager If you enable it, you need to include io.quarkus:quarkus-narayana-jta extension.

+
+
+

Environment variable: QUARKUS_POOLED_JMS_TRANSACTION

+
+
+
+

enabled, xa, disabled

+

disabled

+
+
+
+

Determines the maximum number of Connections the pool maintains in a single Connection pool (defaults to one).

+
+
+

Environment variable: QUARKUS_POOLED_JMS_MAX_CONNECTIONS

+
+
+

int

1

+
+
+
+

The idle timeout (default 30 seconds) controls how long a Connection that hasn’t been or currently isn’t loaned out to any client will remain idle in the Connection pool before it is eligible to be closed and discarded. To disable idle timeouts the value should be set to 0 or a negative number.

+
+
+

Environment variable: QUARKUS_POOLED_JMS_CONNECTION_IDLE_TIMEOUT

+
+
+

int

30

+
+
+
+

used to establish a periodic check for expired Connections which will close all Connection that have exceeded the set expiration value. This value is set to 0ms by default and only activates if set to a positive non-zero value.

+
+
+

Environment variable: QUARKUS_POOLED_JMS_CONNECTION_CHECK_INTERVAL

+
+
+

long

0

+
+
+
+

by default the JMS pool will use it’s own generic JMSContext classes to wrap a Connection borrowed from the pool instead of using the JMSContext functionality of the JMS ConnectionFactory that was configured. This generic JMSContext implementation may be limited compared to the Provider version and if that functionality is critical to the application this option can be enabled to force the pool to use the Provider JMSContext implementation. When enabled the JMSContext API is then not part of the Connections that are pooled by this JMS Connection pooling library.

+
+
+

Environment variable: QUARKUS_POOLED_JMS_USE_PROVIDER_JMS_CONTEXT

+
+
+

boolean

false

+
+
+
+

For each Connection in the pool there can be a configured maximum number of Sessions that the pooled Connection will loan out before either blocking or throwing an error (based on configuration). By default this value is 500 meaning that each provider Connection is limited to 500 sessions, this limit can be disabled by setting the value to a negative number.

+
+
+

Environment variable: QUARKUS_POOLED_JMS_MAX_SESSIONS_PER_CONNECTION

+
+
+

int

500

+
+
+
+

When true (default) a call to createSession on a Connection from the pool will block until another previously created and loaned out session is closed an thereby becomes available. When false a call to createSession when no Session is available will throw an IllegalStateException to indicate that the Connection is not able to provide a new Session at that time.

+
+
+

Environment variable: QUARKUS_POOLED_JMS_BLOCK_IF_SESSION_POOL_IS_FULL

+
+
+

boolean

true

+
+
+
+

When the blockIfSessionPoolIsFull option is enabled and this value is set then a call to createSession that has blocked awaiting a Session will wait for the specified number of milliseconds before throwing an IllegalStateException. By default this value is set to -1 indicating that the createSession call should block forever if configured to wait.

+
+
+

Environment variable: QUARKUS_POOLED_JMS_BLOCK_IF_SESSION_POOL_IS_FULL_TIMEOUT

+
+
+

int

-1

+
+
+
+

By default a Session that has been loaned out on a call to createSession will use a single anonymous JMS MessageProducer as the underlying producer for all calls to createProducer. In some rare cases this is not desirable and this feature can be disabled using this option, when disabled every call to createProducer will result in a new MessageProducer instance being created.

+
+
+

Environment variable: QUARKUS_POOLED_JMS_USE_ANONYMOUS_PRODUCERS

+
+
+

boolean

true

+
+
+
+
+ + + + + + + diff --git a/quarkus-pooled-jms/1.x/index.html b/quarkus-pooled-jms/1.x/index.html new file mode 100644 index 0000000000..f42d30cffd --- /dev/null +++ b/quarkus-pooled-jms/1.x/index.html @@ -0,0 +1,1140 @@ + + + + + + Quarkus Messaginghub Pooled JMS :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Messaginghub Pooled JMS

+
+
+
+

Quarkus extension for a JMS Connection pool and transaction manager integration for messaging applications supporting JMS 1.1 and 2.0 clients.

+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.messaginghub:quarkus-pooled-jms extension first. +In your pom.xml file, add:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.messaginghub</groupId>
+    <artifactId>quarkus-pooled-jms</artifactId>
+</dependency>
+
+
+
+
+
+

Extension Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Whether to enable pooling capabilities for JMS connections.

+
+
+

Environment variable: QUARKUS_POOLED_JMS_POOLING_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether to enable javax.jms.XAConnection support and integrate with javax.transaction.TransactionManager If you enable it, you need to include io.quarkus:quarkus-narayana-jta extension.

+
+
+

Environment variable: QUARKUS_POOLED_JMS_TRANSACTION

+
+
+
+

enabled, xa, disabled

+

disabled

+
+
+
+

Determines the maximum number of Connections the pool maintains in a single Connection pool (defaults to one).

+
+
+

Environment variable: QUARKUS_POOLED_JMS_MAX_CONNECTIONS

+
+
+

int

1

+
+
+
+

The idle timeout (default 30 seconds) controls how long a Connection that hasn’t been or currently isn’t loaned out to any client will remain idle in the Connection pool before it is eligible to be closed and discarded. To disable idle timeouts the value should be set to 0 or a negative number.

+
+
+

Environment variable: QUARKUS_POOLED_JMS_CONNECTION_IDLE_TIMEOUT

+
+
+

int

30

+
+
+
+

used to establish a periodic check for expired Connections which will close all Connection that have exceeded the set expiration value. This value is set to 0ms by default and only activates if set to a positive non-zero value.

+
+
+

Environment variable: QUARKUS_POOLED_JMS_CONNECTION_CHECK_INTERVAL

+
+
+

long

0

+
+
+
+

by default the JMS pool will use it’s own generic JMSContext classes to wrap a Connection borrowed from the pool instead of using the JMSContext functionality of the JMS ConnectionFactory that was configured. This generic JMSContext implementation may be limited compared to the Provider version and if that functionality is critical to the application this option can be enabled to force the pool to use the Provider JMSContext implementation. When enabled the JMSContext API is then not part of the Connections that are pooled by this JMS Connection pooling library.

+
+
+

Environment variable: QUARKUS_POOLED_JMS_USE_PROVIDER_JMS_CONTEXT

+
+
+

boolean

false

+
+
+
+

For each Connection in the pool there can be a configured maximum number of Sessions that the pooled Connection will loan out before either blocking or throwing an error (based on configuration). By default this value is 500 meaning that each provider Connection is limited to 500 sessions, this limit can be disabled by setting the value to a negative number.

+
+
+

Environment variable: QUARKUS_POOLED_JMS_MAX_SESSIONS_PER_CONNECTION

+
+
+

int

500

+
+
+
+

When true (default) a call to createSession on a Connection from the pool will block until another previously created and loaned out session is closed an thereby becomes available. When false a call to createSession when no Session is available will throw an IllegalStateException to indicate that the Connection is not able to provide a new Session at that time.

+
+
+

Environment variable: QUARKUS_POOLED_JMS_BLOCK_IF_SESSION_POOL_IS_FULL

+
+
+

boolean

true

+
+
+
+

When the blockIfSessionPoolIsFull option is enabled and this value is set then a call to createSession that has blocked awaiting a Session will wait for the specified number of milliseconds before throwing an IllegalStateException. By default this value is set to -1 indicating that the createSession call should block forever if configured to wait.

+
+
+

Environment variable: QUARKUS_POOLED_JMS_BLOCK_IF_SESSION_POOL_IS_FULL_TIMEOUT

+
+
+

int

-1

+
+
+
+

By default a Session that has been loaned out on a call to createSession will use a single anonymous JMS MessageProducer as the underlying producer for all calls to createProducer. In some rare cases this is not desirable and this feature can be disabled using this option, when disabled every call to createProducer will result in a new MessageProducer instance being created.

+
+
+

Environment variable: QUARKUS_POOLED_JMS_USE_ANONYMOUS_PRODUCERS

+
+
+

boolean

true

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-pooled-jms/dev/includes/attributes.html b/quarkus-pooled-jms/dev/includes/attributes.html new file mode 100644 index 0000000000..54225fbe4f --- /dev/null +++ b/quarkus-pooled-jms/dev/includes/attributes.html @@ -0,0 +1,919 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-pooled-jms/dev/includes/quarkus-pooled-jms.html b/quarkus-pooled-jms/dev/includes/quarkus-pooled-jms.html new file mode 100644 index 0000000000..e4fa61f6be --- /dev/null +++ b/quarkus-pooled-jms/dev/includes/quarkus-pooled-jms.html @@ -0,0 +1,1107 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Whether to enable pooling capabilities for JMS connections.

+
+
+

Environment variable: QUARKUS_POOLED_JMS_POOLING_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether to enable jakarta.jms.XAConnection support and integrate with jakarta.transaction.TransactionManager If you enable it, you need to include io.quarkus:quarkus-narayana-jta extension.

+
+
+

Environment variable: QUARKUS_POOLED_JMS_TRANSACTION

+
+
+
+

enabled, xa, disabled

+

disabled

+
+
+
+

Determines the maximum number of Connections the pool maintains in a single Connection pool (defaults to one).

+
+
+

Environment variable: QUARKUS_POOLED_JMS_MAX_CONNECTIONS

+
+
+

int

1

+
+
+
+

The idle timeout (default 30 seconds) controls how long a Connection that hasn’t been or currently isn’t loaned out to any client will remain idle in the Connection pool before it is eligible to be closed and discarded. To disable idle timeouts the value should be set to 0 or a negative number.

+
+
+

Environment variable: QUARKUS_POOLED_JMS_CONNECTION_IDLE_TIMEOUT

+
+
+

int

30

+
+
+
+

used to establish a periodic check for expired Connections which will close all Connection that have exceeded the set expiration value. This value is set to 0ms by default and only activates if set to a positive non-zero value.

+
+
+

Environment variable: QUARKUS_POOLED_JMS_CONNECTION_CHECK_INTERVAL

+
+
+

long

0

+
+
+
+

by default the JMS pool will use it’s own generic JMSContext classes to wrap a Connection borrowed from the pool instead of using the JMSContext functionality of the JMS ConnectionFactory that was configured. This generic JMSContext implementation may be limited compared to the Provider version and if that functionality is critical to the application this option can be enabled to force the pool to use the Provider JMSContext implementation. When enabled the JMSContext API is then not part of the Connections that are pooled by this JMS Connection pooling library.

+
+
+

Environment variable: QUARKUS_POOLED_JMS_USE_PROVIDER_JMS_CONTEXT

+
+
+

boolean

false

+
+
+
+

For each Connection in the pool there can be a configured maximum number of Sessions that the pooled Connection will loan out before either blocking or throwing an error (based on configuration). By default this value is 500 meaning that each provider Connection is limited to 500 sessions, this limit can be disabled by setting the value to a negative number.

+
+
+

Environment variable: QUARKUS_POOLED_JMS_MAX_SESSIONS_PER_CONNECTION

+
+
+

int

500

+
+
+
+

When true (default) a call to createSession on a Connection from the pool will block until another previously created and loaned out session is closed an thereby becomes available. When false a call to createSession when no Session is available will throw an IllegalStateException to indicate that the Connection is not able to provide a new Session at that time.

+
+
+

Environment variable: QUARKUS_POOLED_JMS_BLOCK_IF_SESSION_POOL_IS_FULL

+
+
+

boolean

true

+
+
+
+

When the blockIfSessionPoolIsFull option is enabled and this value is set then a call to createSession that has blocked awaiting a Session will wait for the specified number of milliseconds before throwing an IllegalStateException. By default this value is set to -1 indicating that the createSession call should block forever if configured to wait.

+
+
+

Environment variable: QUARKUS_POOLED_JMS_BLOCK_IF_SESSION_POOL_IS_FULL_TIMEOUT

+
+
+

int

-1

+
+
+
+

By default a Session that has been loaned out on a call to createSession will use a single anonymous JMS MessageProducer as the underlying producer for all calls to createProducer. In some rare cases this is not desirable and this feature can be disabled using this option, when disabled every call to createProducer will result in a new MessageProducer instance being created.

+
+
+

Environment variable: QUARKUS_POOLED_JMS_USE_ANONYMOUS_PRODUCERS

+
+
+

boolean

true

+
+
+
+
+ + + + + + + diff --git a/quarkus-pooled-jms/dev/index.html b/quarkus-pooled-jms/dev/index.html new file mode 100644 index 0000000000..5d1aa905d9 --- /dev/null +++ b/quarkus-pooled-jms/dev/index.html @@ -0,0 +1,1288 @@ + + + + + + Quarkus Messaginghub Pooled JMS :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Messaginghub Pooled JMS

+
+
+
+

Quarkus extension for a JMS Connection pool and transaction manager integration for messaging applications supporting JMS 1.1 and 2.0 clients.

+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.messaginghub:quarkus-pooled-jms extension first. +In your pom.xml file, add:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.messaginghub</groupId>
+    <artifactId>quarkus-pooled-jms</artifactId>
+    <version>2.3.1</version>
+</dependency>
+
+
+
+
+
+

Pooling support

+
+
+

It is enabled by default. And we test for quarkus-artemis and quarkus-qpid-jms

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

clientID and durableSubscriptionName are not supported in pooling connections. If setClientID is called on a reused connection from the pool, an IllegalStateException will be thrown. You will get some error messages such like Cause: setClientID can only be called directly after the connection is created

+
+
+
+
+
+
+

XA transaction support

+
+
+

It needs to add quarkus-narayana-jta extension:

+
+
+
+
<dependency>
+    <groupId>io.quarkus</groupId>
+    <artifactId>quarkus-narayana-jta</artifactId>
+</dependency>
+
+
+
+

and add the following configuration to your application.properties:

+
+
+
+
quarkus.pooled-jms.transaction=xa
+quarkus.transaction-manager.enable-recovery=true
+
+
+
+

XA support is only available with quarkus-artemis-jms.

+
+
+
+
+

Custom ConnectionFactory

+
+
+

For those messaging drivers which do not have quarkus extension, such as ibmmq-client. You need to create a custom ConnectionFactory and wrap it by yourself. Here is an example:

+
+
+
+
@Produces
+public ConnectionFactory createXAConnectionFactory(PooledJmsWrapper wrapper) {
+    MQXAConnectionFactory mq = new MQXAConnectionFactory();
+    try {
+        mq.setHostName(ConfigProvider.getConfig().getValue("ibm.mq.host", String.class));
+        mq.setPort(ConfigProvider.getConfig().getValue("ibm.mq.port", Integer.class));
+        mq.setChannel(ConfigProvider.getConfig().getValue("ibm.mq.channel", String.class));
+        mq.setQueueManager(ConfigProvider.getConfig().getValue("ibm.mq.queueManagerName", String.class));
+        mq.setTransportType(WMQConstants.WMQ_CM_CLIENT);
+        mq.setStringProperty(WMQConstants.USERID,
+            ConfigProvider.getConfig().getValue("ibm.mq.user", String.class));
+        mq.setStringProperty(WMQConstants.PASSWORD,
+            ConfigProvider.getConfig().getValue("ibm.mq.password", String.class));
+    } catch (Exception e) {
+        throw new RuntimeException("Unable to create new IBM MQ connection factory", e);
+    }
+    return wrapper.wrapConnectionFactory(mq);
+}
+
+
+
+ + + + + +
+ + +
+

If you use ibmmq-client to consume messages and enable XA, you should make sure it is running in a transaction. Otherwise, you will get an error like MQRC_SYNCPOINT_NOT_AVAILABLE. +When you are using ibmmq-client and rollback a transaction, there will be a WARN message like:

+
+
+
+
WARN  [com.arj.ats.jta] (executor-thread-1) ARJUNA016045: attempted rollback of < formatId=131077, gtrid_length=35, bqual_length=36, tx_uid=0:ffffc0a86510:aed3:650915d7:16, node_name=quarkus, branch_uid=0:ffffc0a86510:aed3:650915d7:1f, subordinatenodename=null, eis_name=0 > (com.ibm.mq.jmqi.JmqiXAResource@79786dde) failed with exception code XAException.XAER_NOTA: javax.transaction.xa.XAException: The method 'xa_rollback' has failed with errorCode '-4'.
+
+
+
+

it may be ignored and can be assumed that MQ has discarded the transaction’s work.

+
+
+
+
+
+
+

Local JMS Transaction support

+
+
+

It needs to set the following configuration:

+
+
+
+
quarkus.pooled-jms.transaction=enabled
+
+
+
+

and if it is running in a transaction, it can mark the session with SESSION_TRANSACTED and commit or rollback the session according to the outcome of the globe transaction. The example like sending message:

+
+
+
+
@Transactional
+protected void send(String body, ConnectionFactory factory, String queueName) {
+    try (JMSContext context = factory.createContext()) {
+        JMSProducer producer = context.createProducer();
+        producer.send(ActiveMQDestination.createQueue(queueName), body);
+
+        log.info("send {}", body);
+    }
+}
+
+
+
+ + + + + +
+ + +
+

It is different from the XA support. So if there is any issue happening during the session committing, the transaction will not be rollbacked.

+
+
+
+
+
+
+

Extension Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Whether to enable pooling capabilities for JMS connections.

+
+
+

Environment variable: QUARKUS_POOLED_JMS_POOLING_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether to enable jakarta.jms.XAConnection support and integrate with jakarta.transaction.TransactionManager If you enable it, you need to include io.quarkus:quarkus-narayana-jta extension.

+
+
+

Environment variable: QUARKUS_POOLED_JMS_TRANSACTION

+
+
+
+

enabled, xa, disabled

+

disabled

+
+
+
+

Determines the maximum number of Connections the pool maintains in a single Connection pool (defaults to one).

+
+
+

Environment variable: QUARKUS_POOLED_JMS_MAX_CONNECTIONS

+
+
+

int

1

+
+
+
+

The idle timeout (default 30 seconds) controls how long a Connection that hasn’t been or currently isn’t loaned out to any client will remain idle in the Connection pool before it is eligible to be closed and discarded. To disable idle timeouts the value should be set to 0 or a negative number.

+
+
+

Environment variable: QUARKUS_POOLED_JMS_CONNECTION_IDLE_TIMEOUT

+
+
+

int

30

+
+
+
+

used to establish a periodic check for expired Connections which will close all Connection that have exceeded the set expiration value. This value is set to 0ms by default and only activates if set to a positive non-zero value.

+
+
+

Environment variable: QUARKUS_POOLED_JMS_CONNECTION_CHECK_INTERVAL

+
+
+

long

0

+
+
+
+

by default the JMS pool will use it’s own generic JMSContext classes to wrap a Connection borrowed from the pool instead of using the JMSContext functionality of the JMS ConnectionFactory that was configured. This generic JMSContext implementation may be limited compared to the Provider version and if that functionality is critical to the application this option can be enabled to force the pool to use the Provider JMSContext implementation. When enabled the JMSContext API is then not part of the Connections that are pooled by this JMS Connection pooling library.

+
+
+

Environment variable: QUARKUS_POOLED_JMS_USE_PROVIDER_JMS_CONTEXT

+
+
+

boolean

false

+
+
+
+

For each Connection in the pool there can be a configured maximum number of Sessions that the pooled Connection will loan out before either blocking or throwing an error (based on configuration). By default this value is 500 meaning that each provider Connection is limited to 500 sessions, this limit can be disabled by setting the value to a negative number.

+
+
+

Environment variable: QUARKUS_POOLED_JMS_MAX_SESSIONS_PER_CONNECTION

+
+
+

int

500

+
+
+
+

When true (default) a call to createSession on a Connection from the pool will block until another previously created and loaned out session is closed an thereby becomes available. When false a call to createSession when no Session is available will throw an IllegalStateException to indicate that the Connection is not able to provide a new Session at that time.

+
+
+

Environment variable: QUARKUS_POOLED_JMS_BLOCK_IF_SESSION_POOL_IS_FULL

+
+
+

boolean

true

+
+
+
+

When the blockIfSessionPoolIsFull option is enabled and this value is set then a call to createSession that has blocked awaiting a Session will wait for the specified number of milliseconds before throwing an IllegalStateException. By default this value is set to -1 indicating that the createSession call should block forever if configured to wait.

+
+
+

Environment variable: QUARKUS_POOLED_JMS_BLOCK_IF_SESSION_POOL_IS_FULL_TIMEOUT

+
+
+

int

-1

+
+
+
+

By default a Session that has been loaned out on a call to createSession will use a single anonymous JMS MessageProducer as the underlying producer for all calls to createProducer. In some rare cases this is not desirable and this feature can be disabled using this option, when disabled every call to createProducer will result in a new MessageProducer instance being created.

+
+
+

Environment variable: QUARKUS_POOLED_JMS_USE_ANONYMOUS_PRODUCERS

+
+
+

boolean

true

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-prettytime/dev/includes/attributes.html b/quarkus-prettytime/dev/includes/attributes.html new file mode 100644 index 0000000000..6cb4261b13 --- /dev/null +++ b/quarkus-prettytime/dev/includes/attributes.html @@ -0,0 +1,912 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-prettytime/dev/index.html b/quarkus-prettytime/dev/index.html new file mode 100644 index 0000000000..64cf0d8def --- /dev/null +++ b/quarkus-prettytime/dev/index.html @@ -0,0 +1,982 @@ + + + + + + Quarkus - Prettytime :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus - Prettytime

+
+
+
+

PrettyTime is an OpenSource time formatting library. It creates human readable, relative timestamps.

+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.prettytime:quarkus-prettytime extension first. +In your pom.xml file, add:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.prettytime</groupId>
+    <artifactId>quarkus-prettytime</artifactId>
+    <version>2.0.1</version>
+</dependency>
+
+
+
+
+
+

Features

+
+
+

Inject PrettyTime Singleton

+
+

A singleton org.ocpsoft.prettytime.PrettyTime can be injected anywhere.

+
+
+
+
// Inject PrettyTime using the default locale
+@Inject PrettyTime prettyTime;
+
+
+
+

Important: Be aware that any changes to the injected PrettyTime object (as in calling setLocale or setReference) will reflect on the singleton and its usage in your entire application. In cases where you need to format to a specific locale we recommend you to create a new PrettyTime object instead.

+
+
+

The singleton may be referenced by the name prettyTime when used in a non-typesafe environment such as templates. For example, if used together with the Qute templating engine:

+
+
+
+
<table>
+  {#for label in labels}
+  <tr>
+    <td>{label.name}</td>
+    <td>Created {inject:prettyTime.format(label.created)}</td>
+  </tr>
+  {/for}
+</table>
+
+
+
+
+

Native Support

+
+

This extension is fully supported in native mode.

+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-primefaces/dev/includes/attributes.html b/quarkus-primefaces/dev/includes/attributes.html new file mode 100644 index 0000000000..c22b86ed79 --- /dev/null +++ b/quarkus-primefaces/dev/includes/attributes.html @@ -0,0 +1,912 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-primefaces/dev/index.html b/quarkus-primefaces/dev/index.html new file mode 100644 index 0000000000..4a93b40a1d --- /dev/null +++ b/quarkus-primefaces/dev/index.html @@ -0,0 +1,1009 @@ + + + + + + Quarkus PrimeFaces :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus PrimeFaces

+
+
+
+

A Quarkus extension that lets you utilize PrimeFaces and PrimeFaces Extensions make JSF development so much easier!

+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.primefaces:quarkus-primefaces extension first to your build file.

+
+
+

For instance, with Maven, add the following dependency to your POM file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.primefaces</groupId>
+    <artifactId>quarkus-primefaces</artifactId>
+    <version>3.13.10</version>
+</dependency>
+<dependency>
+    <groupId>io.quarkiverse.primefaces</groupId>
+    <artifactId>quarkus-primefaces-extensions</artifactId>
+    <version>3.13.10</version>
+</dependency>
+
+
+
+
+
+

Limitations

+
+
+

When creating a GraalVM Native image you may need to change some of your code to be native friendly and some features may not be available to use in Native mode.

+
+
+ + + + + +
+ + +FeedReader not supported. Rome library uses JDOM XML parsing and we did not spend the time to investigate for a lightly used component. +
+
+
+ + + + + +
+ + +EL expressions which use reflection may run into issues with things like List size() or Enum name() as they are not bean compliant method names. You might need to change your EL expression or add helper code to achieve what you want. +
+
+
+
+
+

Versioning

+
+
+

The versioning of this extension will follow the pattern [quarkus.version].[primefaces.version].[patch]. For example:

+
+ ++++ + + + + + + + + + + + + + + + + +
VersionExplanation

2.12.1

Quarkus 2 (EE8), PrimeFaces 12, Revision 1

3.12.0

Quarkus 3 (EEE10), PrimeFaces 12, Revision 0

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-quinoa/dev/_images/node_logo.svg b/quarkus-quinoa/dev/_images/node_logo.svg new file mode 100644 index 0000000000..41d044ac6b --- /dev/null +++ b/quarkus-quinoa/dev/_images/node_logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/quarkus-quinoa/dev/_images/plus-sign.svg b/quarkus-quinoa/dev/_images/plus-sign.svg new file mode 100644 index 0000000000..ea94fe7b0c --- /dev/null +++ b/quarkus-quinoa/dev/_images/plus-sign.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + image/svg+xml + + + + + + + + diff --git a/quarkus-quinoa/dev/_images/quarkus.svg b/quarkus-quinoa/dev/_images/quarkus.svg new file mode 100644 index 0000000000..1969e1e886 --- /dev/null +++ b/quarkus-quinoa/dev/_images/quarkus.svg @@ -0,0 +1 @@ +quarkus_icon_rgb_1024px_reverse \ No newline at end of file diff --git a/quarkus-quinoa/dev/_images/quinoa-build.excalidraw b/quarkus-quinoa/dev/_images/quinoa-build.excalidraw new file mode 100644 index 0000000000..2d6fd361e6 --- /dev/null +++ b/quarkus-quinoa/dev/_images/quinoa-build.excalidraw @@ -0,0 +1,1444 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "https://excalidraw.com", + "elements": [ + { + "type": "rectangle", + "version": 546, + "versionNonce": 1607732650, + "isDeleted": false, + "id": "3j_0I4u4zP8yuIBoHDrnW", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 608.8173217773438, + "y": 203.0885467529297, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 330, + "height": 73, + "seed": 933898858, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1654619551915, + "link": null, + "locked": false + }, + { + "type": "ellipse", + "version": 351, + "versionNonce": 2115553386, + "isDeleted": false, + "id": "Kghk9hssmFQrtaiS4tLOR", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 481.2056990085714, + "y": 257.54325390867893, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 14.600721975655537, + "height": 11.322729695985394, + "seed": 1446352490, + "groupIds": [ + "miQxeL54s6V0WWGng7QUz" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1654619551915, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 400, + "versionNonce": 587582262, + "isDeleted": false, + "id": "Rgq-WBuPjNMj50jfUvhbM", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 489.5255990974921, + "y": 269.94625005880164, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 0.8979611339198464, + "height": 33.67290171953199, + "seed": 40164662, + "groupIds": [ + "miQxeL54s6V0WWGng7QUz" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1654619551915, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0.8979611339198464, + 33.67290171953199 + ] + ] + }, + { + "type": "line", + "version": 433, + "versionNonce": 1366829866, + "isDeleted": false, + "id": "ftZc7D1hUbvaMZZq6ynb5", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 473.4834875646234, + "y": 276.6998863310255, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 32.71960924359078, + "height": 0.5100473544603152, + "seed": 1758148906, + "groupIds": [ + "miQxeL54s6V0WWGng7QUz" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1654619551915, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 32.71960924359078, + -0.5100473544603152 + ] + ] + }, + { + "type": "line", + "version": 414, + "versionNonce": 1104344182, + "isDeleted": false, + "id": "RGKYuxkH_-ZLYTSalksCg", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 476.3556448606875, + "y": 315.4108428932281, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 13.201224184961875, + "height": 12.28114182455434, + "seed": 1199556214, + "groupIds": [ + "miQxeL54s6V0WWGng7QUz" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1654619551916, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 13.201224184961875, + -12.28114182455434 + ] + ] + }, + { + "type": "line", + "version": 438, + "versionNonce": 811415018, + "isDeleted": false, + "id": "nJrGFgjsH3JHGaVRXBqRg", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 489.70065821567005, + "y": 303.5045023107252, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 12.063843734925756, + "height": 11.331366360100283, + "seed": 1176404970, + "groupIds": [ + "miQxeL54s6V0WWGng7QUz" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1654619551916, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 12.063843734925756, + 11.331366360100283 + ] + ] + }, + { + "id": "RyjdvsxubnKadhqwer03E", + "type": "image", + "x": 631.4831237792969, + "y": 226.64744567871094, + "width": 24.350448608398448, + "height": 24.350448608398448, + "angle": 0, + "strokeColor": "transparent", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "strokeSharpness": "round", + "seed": 1715200874, + "version": 526, + "versionNonce": 2007561654, + "isDeleted": false, + "boundElements": null, + "updated": 1654619551916, + "link": null, + "locked": false, + "status": "saved", + "fileId": "efbc8b2b54a0d8ee4db318559e1c660a2957a8f9", + "scale": [ + 1, + 1 + ] + }, + { + "id": "qA2h94AGfdvjYbZUQsjV7", + "type": "text", + "x": 471.34912109375, + "y": 215.92706298828125, + "width": 40, + "height": 25, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "strokeSharpness": "sharp", + "seed": 416543862, + "version": 116, + "versionNonce": 1808984234, + "isDeleted": false, + "boundElements": null, + "updated": 1654619551916, + "link": null, + "locked": false, + "text": "DEV", + "fontSize": 20, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 18, + "containerId": null, + "originalText": "DEV" + }, + { + "type": "rectangle", + "version": 314, + "versionNonce": 497864438, + "isDeleted": false, + "id": "jVUwPPEStAq2o-TkYXhwS", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 662.0994873046875, + "y": 297.3799591064453, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 15.622802734375, + "height": 245.4173583984375, + "seed": 1085750966, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "LDm_UQroeU8cWGuwnjCmL", + "type": "arrow" + }, + { + "id": "DlCzYsfvYxmpkur8AMSN6", + "type": "arrow" + } + ], + "updated": 1654619551916, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 245, + "versionNonce": 2072265578, + "isDeleted": false, + "id": "gNfa1eVqKmDVb9i6KivsL", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 669.0093383789062, + "y": 268.0572052001953, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 1.904296875, + "height": 29.10211181640625, + "seed": 946450346, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1654619551916, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -1.904296875, + 29.10211181640625 + ] + ] + }, + { + "type": "line", + "version": 276, + "versionNonce": 543391798, + "isDeleted": false, + "id": "aeARTq1Ut-2whIq2BB0Dt", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 670.1524658203125, + "y": 545.4160308837891, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 1.102294921875, + "height": 35.6409912109375, + "seed": 537524214, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1654619551916, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 1.102294921875, + 35.6409912109375 + ] + ] + }, + { + "type": "rectangle", + "version": 355, + "versionNonce": 330434934, + "isDeleted": false, + "id": "QEO0dLbLv1IHOlQoIri2d", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 836.512939453125, + "y": 295.33428955078125, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 15.622802734375, + "height": 245.4173583984375, + "seed": 135988726, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "DlCzYsfvYxmpkur8AMSN6", + "type": "arrow" + }, + { + "id": "DUUNk8Jte4E3cuNB-gnOj", + "type": "arrow" + }, + { + "id": "9H7M30T3OvnrLhowevYbp", + "type": "arrow" + } + ], + "updated": 1654619551916, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 286, + "versionNonce": 1063645418, + "isDeleted": false, + "id": "1063HDbG9mygIQfjcnJqg", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 843.4227905273438, + "y": 266.01153564453125, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 1.904296875, + "height": 29.10211181640625, + "seed": 1601764458, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1654619551916, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -1.904296875, + 29.10211181640625 + ] + ] + }, + { + "type": "line", + "version": 317, + "versionNonce": 1188915894, + "isDeleted": false, + "id": "Ja_-Ia3qVq_mpFE8yDdk_", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 844.56591796875, + "y": 543.370361328125, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 1.102294921875, + "height": 35.6409912109375, + "seed": 770889526, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1654619551916, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 1.102294921875, + 35.6409912109375 + ] + ] + }, + { + "type": "rectangle", + "version": 457, + "versionNonce": 495945642, + "isDeleted": false, + "id": "jZQxVuNFituLPMpaWsAeP", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 775.3819580078125, + "y": 211.345947265625, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 143.85095214843747, + "height": 52.509155273437486, + "seed": 11657002, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1654619571648, + "link": null, + "locked": false + }, + { + "id": "_zVxO04Eegxnuz0iX__iP", + "type": "text", + "x": 783.2276611328125, + "y": 225.3285675048828, + "width": 131, + "height": 20, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "strokeSharpness": "sharp", + "seed": 1819603382, + "version": 380, + "versionNonce": 630191158, + "isDeleted": false, + "boundElements": null, + "updated": 1654619604584, + "link": null, + "locked": false, + "text": "Quinoa extension", + "fontSize": 16, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "top", + "baseline": 14, + "containerId": null, + "originalText": "Quinoa extension" + }, + { + "id": "LDm_UQroeU8cWGuwnjCmL", + "type": "arrow", + "x": 505.162109375, + "y": 332.36968994140625, + "width": 143.46202373801725, + "height": 2.380787836760277, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "strokeSharpness": "round", + "seed": 1023592694, + "version": 151, + "versionNonce": 1171930730, + "isDeleted": false, + "boundElements": null, + "updated": 1654619551916, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 143.46202373801725, + -2.380787836760277 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "ACQlr3TSP4cf3SIbVsd4z", + "focus": 1.96604670938946, + "gap": 12.378875732421875 + }, + "endBinding": { + "elementId": "jVUwPPEStAq2o-TkYXhwS", + "focus": 0.7363581784668973, + "gap": 13.475354191670249 + }, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "ACQlr3TSP4cf3SIbVsd4z", + "type": "text", + "x": 514.734130859375, + "y": 299.9908142089844, + "width": 104, + "height": 20, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "strokeSharpness": "sharp", + "seed": 1822705258, + "version": 164, + "versionNonce": 1254012214, + "isDeleted": false, + "boundElements": [ + { + "id": "LDm_UQroeU8cWGuwnjCmL", + "type": "arrow" + } + ], + "updated": 1654619551916, + "link": null, + "locked": false, + "text": "quarkus build", + "fontSize": 16, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 14, + "containerId": null, + "originalText": "quarkus build" + }, + { + "type": "arrow", + "version": 200, + "versionNonce": 1301995818, + "isDeleted": false, + "id": "DlCzYsfvYxmpkur8AMSN6", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 690.6290345177101, + "y": 358.93194054923947, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 143.46202373801725, + "height": 2.380787836760277, + "seed": 1131575018, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1654619551916, + "link": null, + "locked": false, + "startBinding": { + "elementId": "jVUwPPEStAq2o-TkYXhwS", + "focus": -0.49506440073933894, + "gap": 12.906744478647624 + }, + "endBinding": { + "elementId": "QEO0dLbLv1IHOlQoIri2d", + "focus": 0.5019740114031549, + "gap": 2.4218811973976244 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 143.46202373801725, + -2.380787836760277 + ] + ] + }, + { + "type": "rectangle", + "version": 421, + "versionNonce": 383688310, + "isDeleted": false, + "id": "60DrQucVz-lixTcL8ZJcb", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1013.1197509765625, + "y": 297.2296142578125, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 12.83081054687499, + "height": 124.32684326171872, + "seed": 1531318518, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "DUUNk8Jte4E3cuNB-gnOj", + "type": "arrow" + }, + { + "id": "9H7M30T3OvnrLhowevYbp", + "type": "arrow" + } + ], + "updated": 1654619551916, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 298, + "versionNonce": 1119431658, + "isDeleted": false, + "id": "JM__WqUOHcDw81-ExIR9a", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1020.0296020507812, + "y": 267.9068603515625, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 1.904296875, + "height": 29.10211181640625, + "seed": 1889018218, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1654619551916, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -1.904296875, + 29.10211181640625 + ] + ] + }, + { + "type": "line", + "version": 329, + "versionNonce": 1102012342, + "isDeleted": false, + "id": "ujsJE8eJ0Ac2ZicQK092K", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1021.1727294921875, + "y": 545.2656860351562, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 1.102294921875, + "height": 35.6409912109375, + "seed": 495223350, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1654619551916, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 1.102294921875, + 35.6409912109375 + ] + ] + }, + { + "type": "rectangle", + "version": 375, + "versionNonce": 2067799722, + "isDeleted": false, + "id": "FTPqplPCOEpWc4rYZbDt1", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 955.5648803710938, + "y": 221.69921875, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 140.44091796874997, + "height": 44.5531005859375, + "seed": 1285841962, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "type": "text", + "id": "aDr0UsUaPAYXE_LWqCLBE" + } + ], + "updated": 1654619551916, + "link": null, + "locked": false + }, + { + "id": "aDr0UsUaPAYXE_LWqCLBE", + "type": "text", + "x": 960.5648803710938, + "y": 233.97576904296875, + "width": 130, + "height": 20, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "strokeSharpness": "sharp", + "seed": 1456952310, + "version": 40, + "versionNonce": 1867905270, + "isDeleted": false, + "boundElements": null, + "updated": 1654619551916, + "link": null, + "locked": false, + "text": "NodeJs", + "fontSize": 16, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 14, + "containerId": "FTPqplPCOEpWc4rYZbDt1", + "originalText": "NodeJs" + }, + { + "type": "arrow", + "version": 368, + "versionNonce": 1406843242, + "isDeleted": false, + "id": "DUUNk8Jte4E3cuNB-gnOj", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1032.9184814207506, + "y": 382.5382128857126, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 3.2170469800853425, + "height": 0.90218899691979, + "seed": 298943670, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1654619551916, + "link": null, + "locked": false, + "startBinding": { + "elementId": "jHayZ2zZ6DyLbOS97LW68", + "gap": 10.13535828361357, + "focus": 2.0607060541962623 + }, + "endBinding": { + "elementId": "60DrQucVz-lixTcL8ZJcb", + "gap": 3.9669373703527624, + "focus": 0.302846461079968 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + -3.2170469800853425, + -0.90218899691979 + ] + ] + }, + { + "id": "jHayZ2zZ6DyLbOS97LW68", + "type": "text", + "x": 879.8831787109375, + "y": 351.93115234375, + "width": 100, + "height": 20, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "strokeSharpness": "sharp", + "seed": 736862634, + "version": 77, + "versionNonce": 2002217526, + "isDeleted": false, + "boundElements": [ + { + "id": "DUUNk8Jte4E3cuNB-gnOj", + "type": "arrow" + } + ], + "updated": 1654619551916, + "link": null, + "locked": false, + "text": "npm run build", + "fontSize": 16, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 14, + "containerId": null, + "originalText": "npm run build" + }, + { + "type": "rectangle", + "version": 492, + "versionNonce": 1540619306, + "isDeleted": false, + "id": "-HpAUHYN7RoPcnMUWY7Me", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1219.2330322265625, + "y": 303.19085693359375, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 15.622802734375, + "height": 245.4173583984375, + "seed": 1420135670, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1654619551916, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 282, + "versionNonce": 2023273334, + "isDeleted": false, + "id": "NPy5BRAJYE5DN88UpBJz-", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1224.4344482421875, + "y": 272.570556640625, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 1.54119873046875, + "height": 30.34539794921875, + "seed": 1543398762, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1654619551916, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 1.54119873046875, + 30.34539794921875 + ] + ] + }, + { + "type": "line", + "version": 373, + "versionNonce": 18278122, + "isDeleted": false, + "id": "S8fBBuY5kVZ0sEz1PfQOg", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1226.2567749023438, + "y": 551.5037231445312, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 1.102294921875, + "height": 35.6409912109375, + "seed": 898924086, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1654619551916, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 1.102294921875, + 35.6409912109375 + ] + ] + }, + { + "type": "rectangle", + "version": 445, + "versionNonce": 1834931382, + "isDeleted": false, + "id": "G-dBdzOwX6It-RniNizA4", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1155.5696411132812, + "y": 202.79345703125, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 141, + "height": 65, + "seed": 2057447466, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [ + { + "type": "text", + "id": "Ad6f5GgGWTmyw6Fh3yyBS" + } + ], + "updated": 1654619551916, + "link": null, + "locked": false + }, + { + "id": "Ad6f5GgGWTmyw6Fh3yyBS", + "type": "text", + "x": 1160.5696411132812, + "y": 242.79345703125, + "width": 131, + "height": 20, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "strokeSharpness": "sharp", + "seed": 724089002, + "version": 98, + "versionNonce": 1062129142, + "isDeleted": false, + "boundElements": null, + "updated": 1654619551916, + "link": null, + "locked": false, + "text": "Jar or Binary", + "fontSize": 16, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "bottom", + "baseline": 14, + "containerId": "G-dBdzOwX6It-RniNizA4", + "originalText": "Jar or Binary" + }, + { + "type": "image", + "version": 401, + "versionNonce": 1011201130, + "isDeleted": false, + "id": "ySsbV8r4l23TJbm-i03yl", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1210.8436965942383, + "y": 213.32379913330078, + "strokeColor": "transparent", + "backgroundColor": "transparent", + "width": 24.350448608398448, + "height": 24.350448608398448, + "seed": 579188598, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1654619551916, + "link": null, + "locked": false, + "status": "saved", + "fileId": "efbc8b2b54a0d8ee4db318559e1c660a2957a8f9", + "scale": [ + 1, + 1 + ] + }, + { + "type": "arrow", + "version": 586, + "versionNonce": 1533910838, + "isDeleted": false, + "id": "LZ3dbdxBiK__-194pVv6M", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 870.1466736778663, + "y": 476.2983040746301, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 332.65566334052926, + "height": 0.47503465008924195, + "seed": 2116008298, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1654619551916, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 332.65566334052926, + 0.47503465008924195 + ] + ] + }, + { + "id": "6ycX3JNLMVALdn97JX7q5", + "type": "text", + "x": 944.6569213867188, + "y": 433.540771484375, + "width": 211, + "height": 40, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "strokeSharpness": "sharp", + "seed": 962114230, + "version": 89, + "versionNonce": 1176520822, + "isDeleted": false, + "boundElements": null, + "updated": 1654619551916, + "link": null, + "locked": false, + "text": "Copy generated resources\n(html, js, css, images)", + "fontSize": 16, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 34, + "containerId": null, + "originalText": "Copy generated resources\n(html, js, css, images)" + }, + { + "type": "rectangle", + "version": 558, + "versionNonce": 1631527402, + "isDeleted": false, + "id": "_fOk2UbW1y-QqktOuMWMm", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1015.040771484375, + "y": 488.5185241699219, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 12.477539062499984, + "height": 45.37615966796872, + "seed": 1638499958, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "DUUNk8Jte4E3cuNB-gnOj", + "type": "arrow" + } + ], + "updated": 1654619551916, + "link": null, + "locked": false + }, + { + "type": "arrow", + "version": 236, + "versionNonce": 791398838, + "isDeleted": false, + "id": "9H7M30T3OvnrLhowevYbp", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 862.9367737755226, + "y": 382.0338997777552, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 143.46202373801725, + "height": 2.380787836760277, + "seed": 746178218, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1654619551916, + "link": null, + "locked": false, + "startBinding": { + "elementId": "QEO0dLbLv1IHOlQoIri2d", + "focus": -0.290627497603616, + "gap": 10.801031588022624 + }, + "endBinding": { + "elementId": "60DrQucVz-lixTcL8ZJcb", + "focus": -0.3218582196090205, + "gap": 6.720953463022624 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 143.46202373801725, + -2.380787836760277 + ] + ] + }, + { + "id": "zp-nrIvlBcWOZrDLQcFEt", + "type": "text", + "x": 663.2645263671875, + "y": 228.6998291015625, + "width": 80, + "height": 25, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "strokeSharpness": "sharp", + "seed": 1783154858, + "version": 117, + "versionNonce": 903556970, + "isDeleted": false, + "boundElements": null, + "updated": 1654619551917, + "link": null, + "locked": false, + "text": "Quarkus", + "fontSize": 20, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "top", + "baseline": 18, + "containerId": null, + "originalText": "Quarkus" + }, + { + "id": "44jacjXX6h1274WK5LD0r", + "type": "text", + "x": 712.2716674804688, + "y": 313.2401123046875, + "width": 76, + "height": 40, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "strokeSharpness": "sharp", + "seed": 2135822250, + "version": 101, + "versionNonce": 2073049206, + "isDeleted": false, + "boundElements": null, + "updated": 1654619687114, + "link": null, + "locked": false, + "text": "extension\nmechanism", + "fontSize": 16, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "top", + "baseline": 34, + "containerId": null, + "originalText": "extension\nmechanism" + } + ], + "appState": { + "gridSize": null, + "viewBackgroundColor": "#ffffff" + }, + "files": { + "efbc8b2b54a0d8ee4db318559e1c660a2957a8f9": { + "mimeType": "image/svg+xml", + "id": "efbc8b2b54a0d8ee4db318559e1c660a2957a8f9", + "dataURL": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGlkPSJMYXllcl8xIiBkYXRhLW5hbWU9IkxheWVyIDEiIHZpZXdCb3g9IjAgMCAxMDI0IDEwMjQiIHdpZHRoPSIxMDI0IiBoZWlnaHQ9IjEwMjQiPjxkZWZzPjxzdHlsZT4uY2xzLTF7ZmlsbDojNDY5NWViO30uY2xzLTJ7ZmlsbDojZmYwMDRhO30uY2xzLTN7ZmlsbDojMDkxMzEzO308L3N0eWxlPjwvZGVmcz48dGl0bGU+cXVhcmt1c19pY29uX3JnYl8xMDI0cHhfZGVmYXVsdDwvdGl0bGU+PHBvbHlnb24gY2xhc3M9ImNscy0xIiBwb2ludHM9IjY2OS4zNCAxODAuNTcgNTEyIDI3MS40MSA2NjkuMzQgMzYyLjI1IDY2OS4zNCAxODAuNTciLz48cG9seWdvbiBjbGFzcz0iY2xzLTIiIHBvaW50cz0iMzU0LjY2IDE4MC41NyAzNTQuNjYgMzYyLjI1IDUxMiAyNzEuNDEgMzU0LjY2IDE4MC41NyIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtMyIgcG9pbnRzPSI2NjkuMzQgMzYyLjI1IDUxMiAyNzEuNDEgMzU0LjY2IDM2Mi4yNSA1MTIgNDUzLjA5IDY2OS4zNCAzNjIuMjUiLz48cG9seWdvbiBjbGFzcz0iY2xzLTEiIHBvaW50cz0iMTg4Ljc2IDQ2Ny45MyAzNDYuMSA1NTguNzYgMzQ2LjEgMzc3LjA5IDE4OC43NiA0NjcuOTMiLz48cG9seWdvbiBjbGFzcz0iY2xzLTIiIHBvaW50cz0iMzQ2LjEgNzQwLjQ0IDUwMy40MyA2NDkuNiAzNDYuMSA1NTguNzYgMzQ2LjEgNzQwLjQ0Ii8+PHBvbHlnb24gY2xhc3M9ImNscy0zIiBwb2ludHM9IjM0Ni4xIDM3Ny4wOSAzNDYuMSA1NTguNzYgNTAzLjQzIDY0OS42IDUwMy40MyA0NjcuOTMgMzQ2LjEgMzc3LjA5Ii8+PHBvbHlnb24gY2xhc3M9ImNscy0xIiBwb2ludHM9IjY3Ny45IDc0MC40NCA2NzcuOSA1NTguNzYgNTIwLjU3IDY0OS42IDY3Ny45IDc0MC40NCIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtMiIgcG9pbnRzPSI4MzUuMjQgNDY3LjkzIDY3Ny45IDM3Ny4wOSA2NzcuOSA1NTguNzYgODM1LjI0IDQ2Ny45MyIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtMyIgcG9pbnRzPSI1MjAuNTcgNjQ5LjYgNjc3LjkgNTU4Ljc2IDY3Ny45IDM3Ny4wOSA1MjAuNTcgNDY3LjkzIDUyMC41NyA2NDkuNiIvPjxwYXRoIGNsYXNzPSJjbHMtMSIgZD0iTTg1My40NywxSDE3MC41M0M3Ny4yOSwxLDEsNzcuMjksMSwxNzAuNTNWODUzLjQ3QzEsOTQ2LjcxLDc3LjI5LDEwMjMsMTcwLjUzLDEwMjNoNDY3LjdMNTEyLDcxNi4zOSw0MjAuNDIsOTEwSDE3MC41M0MxMzkuOSw5MTAsMTE0LDg4NC4xLDExNCw4NTMuNDdWMTcwLjUzQzExNCwxMzkuOSwxMzkuOSwxMTQsMTcwLjUzLDExNEg4NTMuNDdDODg0LjEsMTE0LDkxMCwxMzkuOSw5MTAsMTcwLjUzVjg1My40N0M5MTAsODg0LjEsODg0LjEsOTEwLDg1My40Nyw5MTBINzA1LjI4bDQ2LjUyLDExM0g4NTMuNDdjOTMuMjQsMCwxNjkuNTMtNzYuMjksMTY5LjUzLTE2OS41M1YxNzAuNTNDMTAyMyw3Ny4yOSw5NDYuNzEsMSw4NTMuNDcsMVoiLz48L3N2Zz4=", + "created": 1654618699002 + } + } +} \ No newline at end of file diff --git a/quarkus-quinoa/dev/_images/quinoa-build.png b/quarkus-quinoa/dev/_images/quinoa-build.png new file mode 100644 index 0000000000..ae4c4d058b Binary files /dev/null and b/quarkus-quinoa/dev/_images/quinoa-build.png differ diff --git a/quarkus-quinoa/dev/_images/quinoa-proxy-dev.excalidraw b/quarkus-quinoa/dev/_images/quinoa-proxy-dev.excalidraw new file mode 100644 index 0000000000..2a3512100e --- /dev/null +++ b/quarkus-quinoa/dev/_images/quinoa-proxy-dev.excalidraw @@ -0,0 +1,2570 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "https://excalidraw.com", + "elements": [ + { + "type": "rectangle", + "version": 878, + "versionNonce": 1633181770, + "isDeleted": false, + "id": "3j_0I4u4zP8yuIBoHDrnW", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 608.3282470703125, + "y": 203.0885467529297, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 729.3008422851562, + "height": 73, + "seed": 933898858, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656336527533, + "link": null, + "locked": false + }, + { + "type": "ellipse", + "version": 779, + "versionNonce": 1192501590, + "isDeleted": false, + "id": "Kghk9hssmFQrtaiS4tLOR", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 296.2948408542745, + "y": 218.44340039305393, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 14.600721975655537, + "height": 11.322729695985394, + "seed": 1446352490, + "groupIds": [ + "miQxeL54s6V0WWGng7QUz" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1656336527533, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 828, + "versionNonce": 2092549898, + "isDeleted": false, + "id": "Rgq-WBuPjNMj50jfUvhbM", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 304.6147409431952, + "y": 230.84639654317664, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 0.8979611339198464, + "height": 33.67290171953199, + "seed": 40164662, + "groupIds": [ + "miQxeL54s6V0WWGng7QUz" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1656336527533, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0.8979611339198464, + 33.67290171953199 + ] + ] + }, + { + "type": "line", + "version": 861, + "versionNonce": 435259030, + "isDeleted": false, + "id": "ftZc7D1hUbvaMZZq6ynb5", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 288.5726294103265, + "y": 237.60003281540048, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 32.71960924359078, + "height": 0.5100473544603152, + "seed": 1758148906, + "groupIds": [ + "miQxeL54s6V0WWGng7QUz" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1656336527533, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 32.71960924359078, + -0.5100473544603152 + ] + ] + }, + { + "type": "line", + "version": 842, + "versionNonce": 1556108746, + "isDeleted": false, + "id": "RGKYuxkH_-ZLYTSalksCg", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 291.44478670639063, + "y": 276.3109893776031, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 13.201224184961875, + "height": 12.28114182455434, + "seed": 1199556214, + "groupIds": [ + "miQxeL54s6V0WWGng7QUz" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1656336527533, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 13.201224184961875, + -12.28114182455434 + ] + ] + }, + { + "type": "line", + "version": 866, + "versionNonce": 242238422, + "isDeleted": false, + "id": "nJrGFgjsH3JHGaVRXBqRg", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 304.78980006137317, + "y": 264.4046487951002, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 12.063843734925756, + "height": 11.331366360100283, + "seed": 1176404970, + "groupIds": [ + "miQxeL54s6V0WWGng7QUz" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1656336527533, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 12.063843734925756, + 11.331366360100283 + ] + ] + }, + { + "type": "image", + "version": 822, + "versionNonce": 42405002, + "isDeleted": false, + "id": "RyjdvsxubnKadhqwer03E", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 627.7505798339844, + "y": 215.73594665527344, + "strokeColor": "transparent", + "backgroundColor": "transparent", + "width": 24.350448608398448, + "height": 24.350448608398448, + "seed": 1715200874, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1656336527533, + "link": null, + "locked": false, + "status": "saved", + "fileId": "efbc8b2b54a0d8ee4db318559e1c660a2957a8f9", + "scale": [ + 1, + 1 + ] + }, + { + "type": "text", + "version": 606, + "versionNonce": 379934998, + "isDeleted": false, + "id": "qA2h94AGfdvjYbZUQsjV7", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 279.0828857421875, + "y": 185.9093017578125, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 46, + "height": 25, + "seed": 416543862, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656336527533, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "User", + "baseline": 18, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "User" + }, + { + "type": "line", + "version": 435, + "versionNonce": 331934538, + "isDeleted": false, + "id": "gNfa1eVqKmDVb9i6KivsL", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 668.7158813476562, + "y": 268.0572052001953, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 1.904296875, + "height": 29.10211181640625, + "seed": 946450346, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1656336527533, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -1.904296875, + 29.10211181640625 + ] + ] + }, + { + "type": "line", + "version": 512, + "versionNonce": 436586070, + "isDeleted": false, + "id": "1063HDbG9mygIQfjcnJqg", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 843.1293334960938, + "y": 266.01153564453125, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 2.8442011706531503, + "height": 85.32051601335405, + "seed": 1601764458, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1656336527533, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -2.8442011706531503, + 85.32051601335405 + ] + ] + }, + { + "type": "rectangle", + "version": 647, + "versionNonce": 1189147146, + "isDeleted": false, + "id": "jZQxVuNFituLPMpaWsAeP", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 775.0885009765625, + "y": 211.345947265625, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 143.85095214843747, + "height": 52.509155273437486, + "seed": 11657002, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656336527533, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 572, + "versionNonce": 1231457174, + "isDeleted": false, + "id": "_zVxO04Eegxnuz0iX__iP", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 783.0320434570312, + "y": 225.2306671142578, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 131, + "height": 20, + "seed": 1819603382, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656336527533, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Quinoa extension", + "baseline": 14, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "Quinoa extension" + }, + { + "type": "text", + "version": 498, + "versionNonce": 1321869514, + "isDeleted": false, + "id": "zp-nrIvlBcWOZrDLQcFEt", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 638.2770385742188, + "y": 219.94577026367188, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 112, + "height": 40, + "seed": 1783154858, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656336527533, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Quarkus\nVert.x Routing", + "baseline": 34, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "Quarkus\nVert.x Routing" + }, + { + "type": "rectangle", + "version": 753, + "versionNonce": 1929160918, + "isDeleted": false, + "id": "-cdmcHzpDTZLsLtoZXUR5", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 929.9967346191406, + "y": 212.69427490234375, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 188, + "height": 53, + "seed": 157524672, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "type": "text", + "id": "zuIEPekUU6n2-1vTqRkIG" + } + ], + "updated": 1656336527533, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 249, + "versionNonce": 1193244554, + "isDeleted": false, + "id": "zuIEPekUU6n2-1vTqRkIG", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 934.9967346191406, + "y": 229.19427490234375, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 178, + "height": 20, + "seed": 348682944, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656336527533, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "META-INF/resources", + "baseline": 14, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "-cdmcHzpDTZLsLtoZXUR5", + "originalText": "META-INF/resources" + }, + { + "type": "rectangle", + "version": 781, + "versionNonce": 1448943126, + "isDeleted": false, + "id": "N-zszdFn1WSBHnPXZfOTL", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1133.1138000488281, + "y": 214.2135009765625, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 188, + "height": 53, + "seed": 1326041408, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "rP9DTffjfcqvQaufIhQ3p", + "type": "text" + }, + { + "type": "text", + "id": "rP9DTffjfcqvQaufIhQ3p" + } + ], + "updated": 1656336527533, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 311, + "versionNonce": 538703434, + "isDeleted": false, + "id": "rP9DTffjfcqvQaufIhQ3p", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1138.1138000488281, + "y": 230.7135009765625, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 178, + "height": 20, + "seed": 539431616, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656336527533, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "REST", + "baseline": 14, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "N-zszdFn1WSBHnPXZfOTL", + "originalText": "REST" + }, + { + "type": "rectangle", + "version": 864, + "versionNonce": 2021452630, + "isDeleted": false, + "id": "j0anMp3n_jzUy1BHdQuCB", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1019.1544698079426, + "y": 629.380839029948, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 17.58032226562501, + "height": 52.240112304687514, + "seed": 1219385664, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "DlCzYsfvYxmpkur8AMSN6", + "type": "arrow" + }, + { + "id": "DUUNk8Jte4E3cuNB-gnOj", + "type": "arrow" + }, + { + "id": "kcWWUvCQ3xUXWhjlS-tIp", + "type": "arrow" + }, + { + "id": "KZGWFs9_9IErQzEYk59_0", + "type": "arrow" + } + ], + "updated": 1656336527533, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 708, + "versionNonce": 177904906, + "isDeleted": false, + "id": "yGbooa3XWqy2In8B1X3I0", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 60, + "angle": 0, + "x": 1020.8869934082031, + "y": 270.1339111328125, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 2.4074687242508617, + "height": 323.2056984663009, + "seed": 586078912, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1656336527533, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 2.4074687242508617, + 323.2056984663009 + ] + ] + }, + { + "type": "line", + "version": 744, + "versionNonce": 2008092822, + "isDeleted": false, + "id": "BJ3Hagib2xkW5aOMVG-z1", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 60, + "angle": 0, + "x": 1223.756780770302, + "y": 278.7471128861109, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 2.484043601036092, + "height": 327.8269199132918, + "seed": 1007780160, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1656336527533, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -2.484043601036092, + 327.8269199132918 + ] + ] + }, + { + "type": "line", + "version": 1027, + "versionNonce": 1679190986, + "isDeleted": false, + "id": "gqhcSPRMTh8gUpvZIDgyl", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 302.89117431640625, + "y": 282.29095458984375, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 9.194332480430603, + "height": 522.4503662347794, + "seed": 781349568, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1656336527533, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 9.194332480430603, + 522.4503662347794 + ] + ] + }, + { + "type": "rectangle", + "version": 86, + "versionNonce": 2029962966, + "isDeleted": false, + "id": "IvM54b2on31G7p9eyJcKF", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 1359.6211242675781, + "y": 205.91201782226562, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 150.19970703125, + "height": 69.236083984375, + "seed": 1354208732, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656334093822, + "link": null, + "locked": false + }, + { + "type": "image", + "version": 354, + "versionNonce": 810957194, + "isDeleted": false, + "id": "hL5zgbT_hP8u5rQibo1Vz", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 1387.9199566193895, + "y": 211.43161010742188, + "strokeColor": "transparent", + "backgroundColor": "transparent", + "width": 91.15380335250381, + "height": 55.77376781398962, + "seed": 1457416420, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656334093822, + "link": null, + "locked": false, + "status": "saved", + "fileId": "5e5a748346a626e29018204a0d447d23491ed0c6", + "scale": [ + 1, + 1 + ] + }, + { + "type": "arrow", + "version": 248, + "versionNonce": 1382775830, + "isDeleted": false, + "id": "CeSXoN_Vs_5LFvZ2v7tYI", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 318.1623140140476, + "y": 356.04812209130745, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 321.98761884728054, + "height": 3.643718663769789, + "seed": 297727196, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656334093822, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 321.98761884728054, + 3.643718663769789 + ] + ] + }, + { + "type": "arrow", + "version": 152, + "versionNonce": 1000080662, + "isDeleted": false, + "id": "OUGyZU2SWZmi6jnJX_fS0", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 686.1771545410156, + "y": 360.5125118242385, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 132.04083605864753, + "height": 12.744223571883708, + "seed": 1078196572, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656334169131, + "link": null, + "locked": false, + "startBinding": { + "elementId": "XedfzJ6PF8iXU94hdfUh3", + "focus": -0.7593615561545274, + "gap": 11.453887939453125 + }, + "endBinding": { + "elementId": "KValvy_FHN8LpzfGBt9qU", + "focus": 0.7159475632255958, + "gap": 15.284481324164972 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 132.04083605864753, + 12.744223571883708 + ] + ] + }, + { + "type": "arrow", + "version": 297, + "versionNonce": 1594853718, + "isDeleted": false, + "id": "x2_UrSZHt3j7G6rpSC0hk", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 864.3392639160156, + "y": 373.84859203603327, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 540.9561898574234, + "height": 42.190105930833965, + "seed": 877171684, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656334093822, + "link": null, + "locked": false, + "startBinding": { + "elementId": "KValvy_FHN8LpzfGBt9qU", + "focus": -0.7794941744621152, + "gap": 11.69659423828125 + }, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 540.9561898574234, + 42.190105930833965 + ] + ] + }, + { + "type": "arrow", + "version": 268, + "versionNonce": 42524426, + "isDeleted": false, + "id": "7EC8o9LufYmhlCaTI4JOw", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1408.4967346191406, + "y": 431.4836120605469, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 539.5859375, + "height": 21.530029296875, + "seed": 15125220, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656334093822, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + -539.5859375, + 21.530029296875 + ] + ] + }, + { + "type": "arrow", + "version": 125, + "versionNonce": 1128723030, + "isDeleted": false, + "id": "vzAuCaa6cX_x5rmnsxxfS", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 825.1746520996094, + "y": 450.2348838922182, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 144.83892822265625, + "height": 12.794775281551154, + "seed": 1048916444, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656334169131, + "link": null, + "locked": false, + "startBinding": { + "elementId": "KValvy_FHN8LpzfGBt9qU", + "focus": -0.5716004731964522, + "gap": 8.32781982421875 + }, + "endBinding": { + "elementId": "XedfzJ6PF8iXU94hdfUh3", + "focus": -0.34379691996182515, + "gap": 5.612457275390625 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + -144.83892822265625, + 12.794775281551154 + ] + ] + }, + { + "type": "arrow", + "version": 296, + "versionNonce": 149712330, + "isDeleted": false, + "id": "MCPTGP0mr4OIi-icST7_Y", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 631.1633605957031, + "y": 459.9018249511719, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 306.5958383656579, + "height": 17.56459092049124, + "seed": 81445340, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656334093822, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": { + "elementId": "Xdd6lBIWTXeg2S4_SBT7n", + "focus": -1.8558677150025769, + "gap": 15.003890524821259 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + -306.5958383656579, + 17.56459092049124 + ] + ] + }, + { + "type": "arrow", + "version": 399, + "versionNonce": 40842442, + "isDeleted": false, + "id": "1oiiiE2W8Dk60UP0K5w3t", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 333.01433449054207, + "y": 519.4786177051582, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 314.09955711102043, + "height": 4.364731174908343, + "seed": 2131956068, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656334169131, + "link": null, + "locked": false, + "startBinding": { + "elementId": "Xdd6lBIWTXeg2S4_SBT7n", + "focus": 1.5818924098538605, + "gap": 7.008311308673797 + }, + "endBinding": { + "elementId": "XedfzJ6PF8iXU94hdfUh3", + "focus": 0.1081500972267444, + "gap": 11.92437744140625 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 314.09955711102043, + 4.364731174908343 + ] + ] + }, + { + "type": "arrow", + "version": 123, + "versionNonce": 24126602, + "isDeleted": false, + "id": "qb87ejmIWasJqvTtI-_Pd", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 692.4162902832031, + "y": 524.6665751139324, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 124.10955810546875, + "height": 10.68853759765625, + "seed": 1019695972, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656334093822, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 124.10955810546875, + 10.68853759765625 + ] + ] + }, + { + "type": "arrow", + "version": 360, + "versionNonce": 1990489610, + "isDeleted": false, + "id": "o5CEFHrVqd5eta2WLRAeS", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 859.9114619118108, + "y": 537.6920156223739, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 539.0018986838924, + "height": 6.921784426454224, + "seed": 1608422620, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656334122725, + "link": null, + "locked": false, + "startBinding": { + "elementId": "kuohARog4mqFmWcsK3hL6", + "gap": 7.558170082383756, + "focus": -0.5017621347171972 + }, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 539.0018986838924, + 6.921784426454224 + ] + ] + }, + { + "type": "arrow", + "version": 376, + "versionNonce": 56144202, + "isDeleted": false, + "id": "NTgUiFnnwQ8zgKmkqxtAi", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1399.6683654785156, + "y": 561.0919494628906, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 543.9452719745806, + "height": 37.71935633499277, + "seed": 1174630628, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656334127505, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": { + "elementId": "kuohARog4mqFmWcsK3hL6", + "focus": 0.34405968287833977, + "gap": 3.3698016745080395 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + -543.9452719745806, + 37.71935633499277 + ] + ] + }, + { + "type": "arrow", + "version": 542, + "versionNonce": 925360982, + "isDeleted": false, + "id": "KeuK_-GuQ27aF6F-RmVx-", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 867.9590036502971, + "y": 640.8712307544469, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 153.18428639631452, + "height": 6.547477181975296, + "seed": 222659932, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656334131678, + "link": null, + "locked": false, + "startBinding": { + "elementId": "kuohARog4mqFmWcsK3hL6", + "focus": 0.8933873234983154, + "gap": 15.605711820870056 + }, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 153.18428639631452, + 6.547477181975296 + ] + ] + }, + { + "type": "arrow", + "version": 556, + "versionNonce": 153459530, + "isDeleted": false, + "id": "KZGWFs9_9IErQzEYk59_0", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1052.6260085666327, + "y": 648.6471773994823, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 136.7333155707372, + "height": 8.779651620700065, + "seed": 321898724, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656336539810, + "link": null, + "locked": false, + "startBinding": { + "elementId": "-nVWvD58AhjNN1PK5MeX_", + "focus": 1.3672574450415587, + "gap": 5.342405740008417 + }, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 136.7333155707372, + 8.779651620700065 + ] + ] + }, + { + "type": "arrow", + "version": 275, + "versionNonce": 1542343894, + "isDeleted": false, + "id": "fjNNFxkRBXtzaZs1ujJ5b", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1200.536210298474, + "y": 681.3903856511328, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 520.1386171181355, + "height": 22.429102874257865, + "seed": 478390620, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656334229977, + "link": null, + "locked": false, + "startBinding": { + "elementId": "DkbxyxBSTy5M4BN3CItv4", + "focus": -0.32830342838407717, + "gap": 10.079634428088411 + }, + "endBinding": { + "elementId": "XedfzJ6PF8iXU94hdfUh3", + "focus": 0.6029306645180241, + "gap": 5.6743265787761175 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + -520.1386171181355, + 22.429102874257865 + ] + ] + }, + { + "type": "arrow", + "version": 149, + "versionNonce": 781747722, + "isDeleted": false, + "id": "YZnSsrKDPQ4W3e2x9GMA8", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 655.9536437988281, + "y": 703.8733678926992, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 322.13913352042437, + "height": 15.243434906505627, + "seed": 252088668, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656334169131, + "link": null, + "locked": false, + "startBinding": { + "elementId": "XedfzJ6PF8iXU94hdfUh3", + "focus": -0.5987276442766234, + "gap": 3.084625244140625 + }, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + -322.13913352042437, + 15.243434906505627 + ] + ] + }, + { + "type": "rectangle", + "version": 862, + "versionNonce": 1095373014, + "isDeleted": false, + "id": "KValvy_FHN8LpzfGBt9qU", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 833.5024719238281, + "y": 360.4700927734375, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 19.140197753906254, + "height": 111.57690429687499, + "seed": 505340380, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "DlCzYsfvYxmpkur8AMSN6", + "type": "arrow" + }, + { + "id": "DUUNk8Jte4E3cuNB-gnOj", + "type": "arrow" + }, + { + "id": "kcWWUvCQ3xUXWhjlS-tIp", + "type": "arrow" + }, + { + "id": "OUGyZU2SWZmi6jnJX_fS0", + "type": "arrow" + }, + { + "id": "x2_UrSZHt3j7G6rpSC0hk", + "type": "arrow" + }, + { + "id": "vzAuCaa6cX_x5rmnsxxfS", + "type": "arrow" + } + ], + "updated": 1656334093822, + "link": null, + "locked": false + }, + { + "type": "rectangle", + "version": 985, + "versionNonce": 440083722, + "isDeleted": false, + "id": "kuohARog4mqFmWcsK3hL6", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 836.7448527018228, + "y": 501.1080627441406, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 15.60843912760425, + "height": 146.26121012369805, + "seed": 1150064356, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "DlCzYsfvYxmpkur8AMSN6", + "type": "arrow" + }, + { + "id": "DUUNk8Jte4E3cuNB-gnOj", + "type": "arrow" + }, + { + "id": "kcWWUvCQ3xUXWhjlS-tIp", + "type": "arrow" + }, + { + "id": "OUGyZU2SWZmi6jnJX_fS0", + "type": "arrow" + }, + { + "id": "x2_UrSZHt3j7G6rpSC0hk", + "type": "arrow" + }, + { + "id": "vzAuCaa6cX_x5rmnsxxfS", + "type": "arrow" + }, + { + "id": "o5CEFHrVqd5eta2WLRAeS", + "type": "arrow" + }, + { + "id": "NTgUiFnnwQ8zgKmkqxtAi", + "type": "arrow" + }, + { + "id": "KeuK_-GuQ27aF6F-RmVx-", + "type": "arrow" + } + ], + "updated": 1656334131678, + "link": null, + "locked": false + }, + { + "type": "rectangle", + "version": 1162, + "versionNonce": 1113078986, + "isDeleted": false, + "id": "DkbxyxBSTy5M4BN3CItv4", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1210.6158447265625, + "y": 608.3124694824219, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 21.720153808593757, + "height": 108.44091796875004, + "seed": 2113178716, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "DlCzYsfvYxmpkur8AMSN6", + "type": "arrow" + }, + { + "id": "DUUNk8Jte4E3cuNB-gnOj", + "type": "arrow" + }, + { + "id": "kcWWUvCQ3xUXWhjlS-tIp", + "type": "arrow" + }, + { + "id": "OUGyZU2SWZmi6jnJX_fS0", + "type": "arrow" + }, + { + "id": "x2_UrSZHt3j7G6rpSC0hk", + "type": "arrow" + }, + { + "id": "vzAuCaa6cX_x5rmnsxxfS", + "type": "arrow" + }, + { + "id": "o5CEFHrVqd5eta2WLRAeS", + "type": "arrow" + }, + { + "id": "NTgUiFnnwQ8zgKmkqxtAi", + "type": "arrow" + }, + { + "id": "KeuK_-GuQ27aF6F-RmVx-", + "type": "arrow" + }, + { + "id": "fjNNFxkRBXtzaZs1ujJ5b", + "type": "arrow" + } + ], + "updated": 1656334229977, + "link": null, + "locked": false + }, + { + "type": "rectangle", + "version": 1609, + "versionNonce": 844500554, + "isDeleted": false, + "id": "RPgCWXdv5ogwT2zuwSkou", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1431.2672119140625, + "y": 282.2231140136719, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 15.684997558593759, + "height": 506.46466064453125, + "seed": 1239004260, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "DlCzYsfvYxmpkur8AMSN6", + "type": "arrow" + }, + { + "id": "DUUNk8Jte4E3cuNB-gnOj", + "type": "arrow" + }, + { + "id": "kcWWUvCQ3xUXWhjlS-tIp", + "type": "arrow" + }, + { + "id": "OUGyZU2SWZmi6jnJX_fS0", + "type": "arrow" + }, + { + "id": "vzAuCaa6cX_x5rmnsxxfS", + "type": "arrow" + }, + { + "id": "o5CEFHrVqd5eta2WLRAeS", + "type": "arrow" + }, + { + "id": "NTgUiFnnwQ8zgKmkqxtAi", + "type": "arrow" + }, + { + "id": "KeuK_-GuQ27aF6F-RmVx-", + "type": "arrow" + } + ], + "updated": 1656334093822, + "link": null, + "locked": false + }, + { + "type": "rectangle", + "version": 1687, + "versionNonce": 1518998410, + "isDeleted": false, + "id": "XedfzJ6PF8iXU94hdfUh3", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 659.0382690429688, + "y": 298.28458658854174, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 15.684997558593759, + "height": 506.46466064453125, + "seed": 1685523932, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "DlCzYsfvYxmpkur8AMSN6", + "type": "arrow" + }, + { + "id": "DUUNk8Jte4E3cuNB-gnOj", + "type": "arrow" + }, + { + "id": "kcWWUvCQ3xUXWhjlS-tIp", + "type": "arrow" + }, + { + "id": "OUGyZU2SWZmi6jnJX_fS0", + "type": "arrow" + }, + { + "id": "vzAuCaa6cX_x5rmnsxxfS", + "type": "arrow" + }, + { + "id": "o5CEFHrVqd5eta2WLRAeS", + "type": "arrow" + }, + { + "id": "NTgUiFnnwQ8zgKmkqxtAi", + "type": "arrow" + }, + { + "id": "KeuK_-GuQ27aF6F-RmVx-", + "type": "arrow" + }, + { + "id": "YZnSsrKDPQ4W3e2x9GMA8", + "type": "arrow" + }, + { + "id": "1oiiiE2W8Dk60UP0K5w3t", + "type": "arrow" + }, + { + "id": "fjNNFxkRBXtzaZs1ujJ5b", + "type": "arrow" + } + ], + "updated": 1656334229977, + "link": null, + "locked": false + }, + { + "type": "arrow", + "version": 96, + "versionNonce": 2110895370, + "isDeleted": false, + "id": "gQfPerK_3EQs5iD3TUuC4", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 849.7505187988281, + "y": 298.8137512207031, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 555.0487060546875, + "height": 22.164764404296875, + "seed": 926291684, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656334093822, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 555.0487060546875, + 22.164764404296875 + ] + ] + }, + { + "type": "text", + "version": 121, + "versionNonce": 1226274966, + "isDeleted": false, + "id": "sgXEsc-9_BlDU6q06EBRc", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0.03165470774321211, + "x": 1043.7655334472656, + "y": 287.6576232910156, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 152, + "height": 20, + "seed": 1428430180, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656334093822, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "startup: npm start", + "baseline": 14, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "startup: npm start" + }, + { + "type": "line", + "version": 23, + "versionNonce": 279610314, + "isDeleted": false, + "id": "TBnR5nR-zTAdltP3u37tn", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 843.4302673339844, + "y": 471.8352355957031, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 0.2696533203125, + "height": 27.6282958984375, + "seed": 768813924, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656334093822, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -0.2696533203125, + 27.6282958984375 + ] + ] + }, + { + "type": "line", + "version": 91, + "versionNonce": 502881878, + "isDeleted": false, + "id": "RC0d_bGxd7JDaww0nYyXA", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 846.5451881214976, + "y": 652.4583893095453, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 4.8497602020700015, + "height": 144.6216582978766, + "seed": 93623644, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656334149118, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 4.8497602020700015, + 144.6216582978766 + ] + ] + }, + { + "type": "line", + "version": 81, + "versionNonce": 1439142678, + "isDeleted": false, + "id": "bbByx73lWN5G6PIJmSSh7", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1028.0355750525214, + "y": 698.0219508136312, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 1.3160179650567443, + "height": 111.13491971045744, + "seed": 1170433124, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656334108283, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 1.3160179650567443, + 111.13491971045744 + ] + ] + }, + { + "type": "line", + "version": 79, + "versionNonce": 645319446, + "isDeleted": false, + "id": "suhqe0U3vfxhbsQFJgeFe", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1223.4812316894531, + "y": 719.1482849121094, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 4.860595703125, + "height": 85.4195556640625, + "seed": 578093540, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656334093823, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -4.860595703125, + 85.4195556640625 + ] + ] + }, + { + "type": "line", + "version": 32, + "versionNonce": 964663626, + "isDeleted": false, + "id": "3GVqC9s8__htanpyO7267", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1439.1296691894531, + "y": 789.1697692871094, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 1.9014892578125, + "height": 20.21685791015625, + "seed": 1924554724, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656334093823, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 1.9014892578125, + 20.21685791015625 + ] + ] + }, + { + "type": "text", + "version": 180, + "versionNonce": 1389951062, + "isDeleted": false, + "id": "6z4OBk_SKfg1Cuiv9ofr6", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 361.7459411621094, + "y": 332.13385009765625, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 215, + "height": 20, + "seed": 724358748, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656334093823, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "GET http://0.0.0.0:8080/", + "baseline": 14, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "GET http://0.0.0.0:8080/" + }, + { + "type": "text", + "version": 662, + "versionNonce": 496099338, + "isDeleted": false, + "id": "Xdd6lBIWTXeg2S4_SBT7n", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 331.45770263671875, + "y": 492.4703063964844, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 279, + "height": 20, + "seed": 233475798, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "CeSXoN_Vs_5LFvZ2v7tYI", + "type": "arrow" + }, + { + "id": "1oiiiE2W8Dk60UP0K5w3t", + "type": "arrow" + }, + { + "id": "MCPTGP0mr4OIi-icST7_Y", + "type": "arrow" + } + ], + "updated": 1656334093823, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "GET http://0.0.0.0:8080/api/hello", + "baseline": 14, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "GET http://0.0.0.0:8080/api/hello" + }, + { + "type": "text", + "version": 181, + "versionNonce": 725514570, + "isDeleted": false, + "id": "d9_exTKjnCff8_MFZ1gLx", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0.04384368521286319, + "x": 962.6775207519531, + "y": 365.113311767578, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 302, + "height": 20, + "seed": 479582602, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656334296261, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "GET http://0.0.0.0:3000/index.html *", + "baseline": 14, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "GET http://0.0.0.0:3000/index.html *" + }, + { + "type": "text", + "version": 146, + "versionNonce": 124982922, + "isDeleted": false, + "id": "B0bPACG3w7IKcZ6PTCkCF", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 6.241573413672565, + "x": 362.1749572753906, + "y": 444.4752502441406, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 204, + "height": 20, + "seed": 1005623126, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656336551731, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "/index.html SUCCESS 200", + "baseline": 14, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "/index.html SUCCESS 200" + }, + { + "type": "text", + "version": 213, + "versionNonce": 485287306, + "isDeleted": false, + "id": "4BdGFlZEeU9uU4xlNNxeE", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 6.241573413672565, + "x": 977.1037292480469, + "y": 422.1078186035156, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 204, + "height": 20, + "seed": 1954391254, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656334093823, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "/index.html SUCCESS 200", + "baseline": 14, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "/index.html SUCCESS 200" + }, + { + "type": "text", + "version": 207, + "versionNonce": 1900332938, + "isDeleted": false, + "id": "TSLCjyuYwMXSrhLeeliAM", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0.04384368521286319, + "x": 960.5237528483073, + "y": 512.2564188639321, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 301, + "height": 20, + "seed": 1026170186, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656334303021, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "GET http://0.0.0.0:3000/api/hello **", + "baseline": 14, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "GET http://0.0.0.0:3000/api/hello **" + }, + { + "type": "text", + "version": 280, + "versionNonce": 1980474442, + "isDeleted": false, + "id": "Ko3nEp6SNn5pQrwg1Vs7J", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 6.241573413672565, + "x": 1013.1659240722656, + "y": 561.7757873535156, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 138, + "height": 20, + "seed": 508553418, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656334093823, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "404 NOT FOUND", + "baseline": 14, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "404 NOT FOUND" + }, + { + "type": "text", + "version": 147, + "versionNonce": 205849238, + "isDeleted": false, + "id": "FwF3MlrK6bXQ-cDq814SC", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 302.9053243001307, + "y": 869.1862284342448, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 1115, + "height": 25, + "seed": 997604682, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656334093823, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "** We can configure Quinoa to avoid the extra request when the api is under the same root path ( e.g. /api/ )", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "** We can configure Quinoa to avoid the extra request when the api is under the same root path ( e.g. /api/ )" + }, + { + "type": "text", + "version": 569, + "versionNonce": 141728202, + "isDeleted": false, + "id": "a1XOkvsu6FECfsu129mCG", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 311.5395406087242, + "y": 842.3331807454425, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 1054, + "height": 25, + "seed": 1461246678, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656334093823, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "* Quinoa will check the index.html (configurable) instead of root to workaround dev server directory listing", + "baseline": 18, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "* Quinoa will check the index.html (configurable) instead of root to workaround dev server directory listing" + }, + { + "type": "text", + "version": 145, + "versionNonce": 1097899158, + "isDeleted": false, + "id": "UJrVHBP9bOdOUZ50bzIJA", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 6.230240248624054, + "x": 708.7631530761721, + "y": 408.34027099609375, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 101, + "height": 40, + "seed": 341086294, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656336548862, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Forward \nthe response", + "baseline": 34, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Forward \nthe response" + }, + { + "type": "text", + "version": 201, + "versionNonce": 2014420886, + "isDeleted": false, + "id": "AhH9jNtf5CrHxL8Titeoy", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 884.5659484863286, + "y": 623.4987080891927, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 98, + "height": 20, + "seed": 516741450, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656336532665, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "next handler", + "baseline": 14, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "next handler" + }, + { + "type": "text", + "version": 149, + "versionNonce": 974601622, + "isDeleted": false, + "id": "-nVWvD58AhjNN1PK5MeX_", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1057.968414306641, + "y": 624.1621398925784, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 98, + "height": 20, + "seed": 2016454934, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "KZGWFs9_9IErQzEYk59_0", + "type": "arrow" + } + ], + "updated": 1656336535869, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "next handler", + "baseline": 14, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "next handler" + }, + { + "type": "text", + "version": 129, + "versionNonce": 171023254, + "isDeleted": false, + "id": "4r8pS6QL8cGz1KL2UoYuu", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 396.0925801595056, + "y": 687.9431660970054, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 194, + "height": 20, + "seed": 316126742, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656334219992, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "/api/hello SUCCESS 200", + "baseline": 14, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "/api/hello SUCCESS 200" + }, + { + "type": "text", + "version": 108, + "versionNonce": 126760918, + "isDeleted": false, + "id": "vOqPzReCkIFD7F7HRevt9", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 869.1954040527347, + "y": 703.9792175292969, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 121, + "height": 20, + "seed": 601035338, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656334251374, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Resource found", + "baseline": 14, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Resource found" + } + ], + "appState": { + "gridSize": null, + "viewBackgroundColor": "#ffffff" + }, + "files": { + "efbc8b2b54a0d8ee4db318559e1c660a2957a8f9": { + "mimeType": "image/svg+xml", + "id": "efbc8b2b54a0d8ee4db318559e1c660a2957a8f9", + "dataURL": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGlkPSJMYXllcl8xIiBkYXRhLW5hbWU9IkxheWVyIDEiIHZpZXdCb3g9IjAgMCAxMDI0IDEwMjQiIHdpZHRoPSIxMDI0IiBoZWlnaHQ9IjEwMjQiPjxkZWZzPjxzdHlsZT4uY2xzLTF7ZmlsbDojNDY5NWViO30uY2xzLTJ7ZmlsbDojZmYwMDRhO30uY2xzLTN7ZmlsbDojMDkxMzEzO308L3N0eWxlPjwvZGVmcz48dGl0bGU+cXVhcmt1c19pY29uX3JnYl8xMDI0cHhfZGVmYXVsdDwvdGl0bGU+PHBvbHlnb24gY2xhc3M9ImNscy0xIiBwb2ludHM9IjY2OS4zNCAxODAuNTcgNTEyIDI3MS40MSA2NjkuMzQgMzYyLjI1IDY2OS4zNCAxODAuNTciLz48cG9seWdvbiBjbGFzcz0iY2xzLTIiIHBvaW50cz0iMzU0LjY2IDE4MC41NyAzNTQuNjYgMzYyLjI1IDUxMiAyNzEuNDEgMzU0LjY2IDE4MC41NyIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtMyIgcG9pbnRzPSI2NjkuMzQgMzYyLjI1IDUxMiAyNzEuNDEgMzU0LjY2IDM2Mi4yNSA1MTIgNDUzLjA5IDY2OS4zNCAzNjIuMjUiLz48cG9seWdvbiBjbGFzcz0iY2xzLTEiIHBvaW50cz0iMTg4Ljc2IDQ2Ny45MyAzNDYuMSA1NTguNzYgMzQ2LjEgMzc3LjA5IDE4OC43NiA0NjcuOTMiLz48cG9seWdvbiBjbGFzcz0iY2xzLTIiIHBvaW50cz0iMzQ2LjEgNzQwLjQ0IDUwMy40MyA2NDkuNiAzNDYuMSA1NTguNzYgMzQ2LjEgNzQwLjQ0Ii8+PHBvbHlnb24gY2xhc3M9ImNscy0zIiBwb2ludHM9IjM0Ni4xIDM3Ny4wOSAzNDYuMSA1NTguNzYgNTAzLjQzIDY0OS42IDUwMy40MyA0NjcuOTMgMzQ2LjEgMzc3LjA5Ii8+PHBvbHlnb24gY2xhc3M9ImNscy0xIiBwb2ludHM9IjY3Ny45IDc0MC40NCA2NzcuOSA1NTguNzYgNTIwLjU3IDY0OS42IDY3Ny45IDc0MC40NCIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtMiIgcG9pbnRzPSI4MzUuMjQgNDY3LjkzIDY3Ny45IDM3Ny4wOSA2NzcuOSA1NTguNzYgODM1LjI0IDQ2Ny45MyIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtMyIgcG9pbnRzPSI1MjAuNTcgNjQ5LjYgNjc3LjkgNTU4Ljc2IDY3Ny45IDM3Ny4wOSA1MjAuNTcgNDY3LjkzIDUyMC41NyA2NDkuNiIvPjxwYXRoIGNsYXNzPSJjbHMtMSIgZD0iTTg1My40NywxSDE3MC41M0M3Ny4yOSwxLDEsNzcuMjksMSwxNzAuNTNWODUzLjQ3QzEsOTQ2LjcxLDc3LjI5LDEwMjMsMTcwLjUzLDEwMjNoNDY3LjdMNTEyLDcxNi4zOSw0MjAuNDIsOTEwSDE3MC41M0MxMzkuOSw5MTAsMTE0LDg4NC4xLDExNCw4NTMuNDdWMTcwLjUzQzExNCwxMzkuOSwxMzkuOSwxMTQsMTcwLjUzLDExNEg4NTMuNDdDODg0LjEsMTE0LDkxMCwxMzkuOSw5MTAsMTcwLjUzVjg1My40N0M5MTAsODg0LjEsODg0LjEsOTEwLDg1My40Nyw5MTBINzA1LjI4bDQ2LjUyLDExM0g4NTMuNDdjOTMuMjQsMCwxNjkuNTMtNzYuMjksMTY5LjUzLTE2OS41M1YxNzAuNTNDMTAyMyw3Ny4yOSw5NDYuNzEsMSw4NTMuNDcsMVoiLz48L3N2Zz4=", + "created": 1654618699002 + }, + "5e5a748346a626e29018204a0d447d23491ed0c6": { + "mimeType": "image/png", + "id": "5e5a748346a626e29018204a0d447d23491ed0c6", + "dataURL": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABJwAAALSCAYAAACYrMv6AAAAAXNSR0IArs4c6QAAIABJREFUeF7s3Qt8XHWd///PdyaZJmnSlqt4W6Vc1GovyUxaCooV1HVd2XV3xV138f9zFUVFLhVaWEXkflEUVFi86yL4U4u77k9WVEAiUrslMxNgtYpUXAWRS+klbTLXc77/x3cuySRNmpnJd+acM/Oa3Qe26Tmf7/c8v2dyeef7/R4lvBBAAAEEEEAAAQQQQACBeQhEo9FOrfXfKqXeLSLLReQgEfmDiNyttf5CMpl8eB7lORUBBBBAIIACKoB9pssIIIAAAggggAACCCDgE4GVK1e+MBwOf0cpdfwsXdIicnsoFLpweHj4MZ90m24ggAACCDRYgMCpwcCURwABBBBAAAEEEECgVQVOOOGEvnQ6PSwiL6viGrMi8nkRuTiRSOyp4ngOQQABBBAIsACBU4AHj64jgAACCCCAAAIIIOClQDQa/ZqIvKvGPjwrIpf09fV9cWhoKF/juRyOAAIIIBAQAQKngAwU3UQAAQQQQAABBBBAwE8C/f39h4VCocdFZEGd/XpERD6WSCQ21Xk+pyGAAAII+FiAwMnHg0PXEEAAAQQQQAABBBDwq0AsFnuH1vqbFvr3E6XU+fF4fMRCLUoggAACCPhEgMDJJwNBNxBAAAEEEEAAAQQQCJLAwMDAR5RSV1rqsysit+Tz+YseeuihP1qqSRkEEEAAAQ8FCJw8xKdpBBBAAAEEEEAAAQSCKhCLxa7UWn/Ecv/HReRzHR0dV23dunXUcm3KIYAAAgg0UYDAqYnYNIUAAggggAACCCCAQKsINChwKvPsEJErli5deuOmTZucVjHjOhBAAIF2EiBwaqfR5loRQAABBBBAAAEEELAk0ODAqdzLX2mtNyaTyTssdZsyCCCAAAJNEiBwahI0zSCAAAIIIIAAAggg0EoCTQqcCmRa67tF5LxkMvlwKxlyLQgggEArCxA4tfLocm0IIIAAAggggAACCDRIoJmBU+kSXK31beFweOPw8PBTDbosyiKAAAIIWBIgcLIESRkEEEAAAQQQQAABBNpJwIPAqcw7JiI3plKpK7Zt27avncy5VgQQQCBIAgROQRot+ooAAggggAACCCCAgE8EPAycygJ/1FpfdtRRR32FjcV9clPQDQQQQKBCgMCJ2wEBBBBAAAEEEEAAAQRqFvBB4FTuc1IpdV48Hh+q+SI4AQEEEECgYQIETg2jpTACCCCAAAIIIIAAAq0r4KPAqYBsNhYPhULr4/H4L1pXnStDAAEEgiNA4BScsaKnCCCAAAIIIIAAAgj4RsBvgVMJJq+U+mo4HL5469atT/sGi44ggAACbShA4NSGg84lI4AAAggggAACCCAwXwGfBk7ly9qnlPpUb2/vNUNDQ+n5XivnI4AAAgjULkDgVLsZZyCAAAIIIIAAAggg0PYCPg+cyuPzuFLqong8/g2z6q7tBw0ABBBAoIkCBE5NxKYpBBBAAAEEEEAAAQRaRSAggVOBW2s9LCLnJZPJn7WKP9eBAAII+F2AwMnvI0T/EEAAAQQQQAABBBDwoUCQAqcKvjtE5NxEIvFbH5LSJQQQQKClBAicWmo4uRgEEEAAAQQQQAABBJojENDAyeDklFJfcxznopGRkWebo0UrCCCAQPsJEDi135hzxQgggAACCCCAAAIIzFsgwIFT+dp3ici1e/bsuWH79u2ZeYNQAAEEEEBgigCBEzcEAggggAACCCCAAAII1CzQAoFT+ZofFZGPJhKJ29lYvObbgBMQQACBWQUInLg5EEAAAQQQQAABBBBAoGaBFgqcyte+NRQKfXh4ePjnNWNwAgIIIIDAfgIETtwUCCCAAAIIIIAAAgggULNACwZOxkCLyO3hcPiCBx544Hc1o3ACAggggMCEAIETNwMCCCCAAAIIIIAAAgjULNCigVPZISsinxeRixOJxJ6acTgBAQQQQEAInLgJEEAAAQQQQAABBBBAoGaBFg+cyh7PicjlfX19Nw0NDeVrRuIEBBBAoI0FCJzaePC5dAQQQAABBBBAAAEE6hVok8CpzPOIiHwskUhsqteL8xBAAIF2EyBwarcR53oRQAABBBBAAAEEELAg0GaBU1nsJ0qp8+Px+IgFQkoggAACLS1A4NTSw8vFIYAAAggggAACCCDQGIE2DZwMpisi33Vdd8PIyMjvG6NLVQQQQCD4AgROwR9DrgABBBBAAAEEEEAAgaYLtHHgVLYeF5HPdXR0XLV169bRpg8ADSKAAAI+FyBw8vkA0T0EEEAAAQQQQAABBPwoQOA0MSpPaq0vPeqoo76yadMmx49jRZ8QQAABLwQInLxQp00EEEAAAQQQQAABBAIuQOC03wD+SkQ2JBKJ/wr40NJ9BBBAwIoAgZMVRooggAACCCCAAAIIINBeAgROM4+31vpuETkvmUw+3F53BFeLAAIITBUgcOKOQAABBBBAAAEEEEAAgZoFCJwOSOZqrW8Lh8Mbh4eHn6oZlxMQQACBFhAgcGqBQeQSEEAAAQQQQAABBBBotgCBU1XiYyJyYyqVumLbtm37qjqDgxBAAIEWESBwapGB5DIQQAABBBBAAAEEEGimAIFTTdp/1FpfxsbiNZlxMAIIBFyAwCngA0j3EUAAAQQQQAABBBDwQoDAqXZ1pVTcdd33J5PJRO1ncwYCCCAQLAECp2CNF71FAAEEEEAAAQQQQMAXAgROdQ9DXkQuTyQSl4uIrrsKJyKAAAI+FyBw8vkA0T0EEEAAAQQQQAABBPwoQOA0v1FRSt165JFHvmvTpk3O/CpxNgIIIOBPAQInf44LvUIAAQQQQAABBBBAwNcCBE5WhudfE4nEmVYqUQQBBBDwmQCBk88GhO4ggAACCCCAAAIIIBAEAQIna6P0T4lE4pvWqlEIAQQQ8IkAgZNPBoJuIIAAAggggAACCCAQJAECJ2ujtSsSiRy9ZcuWndYqUggBBBDwgQCBkw8GgS4ggAACCCCAAAIIIBA0AQIneyOmtb4ymUxeZK8ilRBAAAHvBQicvB8DeoAAAggggAACCCCAQOAECJysDtnOVCr1/G3btmWtVqUYAggg4KEAgZOH+DSNAAIIIIAAAggggEBQBQic7I6cUurN8Xj8TrtVqYYAAgh4J0Dg5J09LSOAAAIIIIAAAgggEFgBAifrQ3d1IpH4iPWqFEQAAQQ8EiBw8gieZhFAAAEEEEAAAQQQCLIAgZP10ftBIpH4S+tVKYgAAgh4JEDg5BE8zSKAAAIIIIAAAgggEGQBAie7o6eUisfj8UG7VamGAAIIeCdA4OSdPS0jgAACCCCAAAIIIBBYAQIn60P3SCKReLn1qhREAAEEPBIgcPIInmYRQAABBBBAAAEEEAiyAIGT9dH7TSKReJn1qhREAAEEPBIgcPIInmYRQAABBBBAAAEEEAiyAIGT9dEjcLJOSkEEEPBSgMDJS33aRgABBBBAAAEEEEAgoAIETtYHjsDJOikFEUDASwECJy/1aRsBBBBAAAEEEEAAgYAKEDhZHzgCJ+ukFEQAAS8FCJy81KdtBBBAAAEEEEAAAQQCKkDgZH3gCJysk1IQAQS8FCBw8lKfthFAAAEEEEAAAQQQCKgAgZP1gSNwsk5KQQQQ8FKAwMlLfdpGAAEEEEAAAQQQQCCgAgRO1geOwMk6KQURQMBLAQInL/VpGwEEEEAAAQQQQACBgAoQOFkfOAIn66QURAABLwUInLzUp20EEEAAAQQQQAABBAIqQOBkfeAInKyTUhABBLwUIHDyUp+2EUAAAQQQQAABBBAIqACBk/WBI3CyTkpBBBDwUoDAyUt92kYAAQQQQAABBBBAIKACBE7WB47AyTopBRFAwEsBAicv9WkbAQQQQAABBBBAAIGAChA4WR84AifrpBREAAEvBQicvNSnbQQQQAABBBBAAAEEAipA4GR94AicrJNSEAEEvBQgcPJSn7YRQAABBBBAAAEEEAioAIGT9YEjcLJOSkEEEPBSgMDJS33aRgABBBBAAAEEEEAgoAIETtYHjsDJOikFEUDASwECJy/1aRsBBBBAAAEEEEAAgYAKEDhZHzgCJ+ukFEQAAS8FCJy81KdtBBBAAAEEEEAAAQQCKkDgZH3gCJysk1IQAQS8FCBw8lKfthFAAAEEEEAAAQQQCKgAgZP1gSNwsk5KQQQQ8FKAwMlLfdpGAAEEEEAAAQQQQCCgAgRO1geOwMk6KQURQMBLAQInL/VpGwEEEEAAAQQQQACBgAoQOFkfOAIn66QURAABLwUInLzUp20EEEAAAQQQQAABBAIqQOBkfeAInKyTUhABBLwUIHDyUp+2EUAAAQQQQAABBBAIqACBk/WBI3CyTkpBBBDwUoDAyUt92kYAAQQQQAABBBBAIKACBE7WB47AyTopBRFAwEsBAicv9WkbAQQQQAABBBBAAIGAChA4WR84AifrpBREAAEvBQicvNSnbQQQQAABBBBAAAEEAipA4GR94AicrJNSEAEEvBQgcPJSn7YRQAABBBBAAAEEEAioAIGT9YEjcLJOSkEEEPBSgMDJS33aRgABBBBAAAEEEEAgoAIETtYHjsDJOikFEUDASwECJy/1aRsBBBBAAAEEEEAAgYAKEDhZHzgCJ+ukFEQAAS8FCJy81KdtBBBAAAEEEEAAAQQCKkDgZH3gCJysk1IQAQS8FCBw8lKfthFAAAEEEEAAAQQQCKgAgZP1gSNwsk5KQQQQ8FKAwMlLfdpGAAEEEEAAAQQQQCCgAgRO1geOwMk6KQURQMBLAQInL/VpGwEEEEAAAQQQQACBgAoQOFkfOAIn66QURAABLwUInLzUp20EEEAAAQQQQAABBAIqQOBkfeAInKyTUhABBLwUIHDyUp+2EUAAAQQQQAABBBAIqACBk/WBI3CyTkpBBBDwUoDAyUt92kYAAQQQQAABBBBAIKACBE7WB47AyTopBRFAwEsBAicv9WkbAQQQQAABBBBAAIGAChA4WR84AifrpBREAAEvBQicvNSnbQQQQAABBBBAAAEEAipA4GR94AicrJNSEAEEvBQgcPJSn7YRQAABBBBAAAEEEAioAIGT9YEjcLJOSkEEEPBSgMDJS33aRgABBBBAAAEEEEAgoAIETtYHjsDJOikFEUDASwECJy/1aRsBBBBAAAEEEEAAgYAKEDhZHzgCJ+ukFEQAAS8FCJy81KdtBBBAAAEEEEAAAQQCKkDgZH3gCJysk1IQAQS8FCBw8lKfthFAAAEEEEAAAQQQCKgAgZP1gSNwsk5KQQQQ8FKAwMlLfdpGAAEEEEAAAQQQQCCgAgRO1geOwMk6KQURQMBLAQInL/VpGwEEEEAAAQQQQACBgAoQOFkfOAIn66QURAABLwUInLzUp20EEEAAAQQQQAABBAIqQOBkfeAInKyTUhABBLwUIHDyUp+2EUAAAQQQQAABBBAIqACBk/WBI3CyTkpBBBDwUoDAyUt92kYAAQQQQAABBBBAIKACBE7WB47AyTopBRFAwEsBAicv9WkbAQQQQAABBBBAAIGAChA4WR84AifrpBREAAEvBQicvNSnbQQQQAABBBBAAAEEAipA4GR94AicrJNSEAEEvBQgcPJSn7YRQAABBBBAAAEEEAioAIGT9YEjcLJOSkEEEPBSgMDJS33aRgABBBBAAAEEEEAgoAIETtYHjsDJOikFEUDASwECJy/1aRsBBBBAAAEEEEAAgYAKEDhZHzgCJ+ukFEQAAS8FCJy81KdtBBBAAAEEEEAAAQQCKkDgZH3gCJysk1IQAQS8FCBw8lKfthFAAAEEEEAAAQQQCKgAgZP1gSNwsk5KQQQQ8FKAwMlLfdpGAAEEEEAAAQQQQCCgAgRO1geOwMk6KQURQMBLAQInL/VpGwEEEEAAAQQQQACBgAoQOFkfOAIn66QURAABLwUInLzUp20EEEAAAQQQQAABBAIqQOBkfeAInKyTUhABBLwUIHDyUp+2EUAAAQQQQAABBBAIqACBk/WBI3CyTkpBBBDwUoDAyUt92kYAAQQQQAABBBBAIKACBE7WB47AyTopBRFAwEsBAicv9WkbAQQQQAABBBBAAIGAChA4WR84AifrpBREAAEvBQicvNSnbQQQQAABBBBAAAEEAipA4GR94AicrJNSEAEEvBQgcPJSn7YRQAABBBBAAAEEEAioAIGT9YEjcLJOSkEEEPBSgMDJS33aRgABBBBAAAEEEEAgoAIETtYHjsDJOikFEUDASwECJy/1aRsBBBBAAAEEEEAAgYAKEDhZHzgCJ+ukFEQAAS8FCJy81KdtBBBAAAEEEEAAAQQCKkDgZH3gCJysk1IQAQS8FCBw8lKfthFAAAEEEEAAAQQQCKgAgZP1gSNwsk5KQQQQ8FKAwMlLfdpGAAEEEEAAAQQQQCCgAgRO1geOwMk6KQURQMBLAQInL/VpGwEEEEAAAQQQQACBgAoQOFkfOAIn66QURAABLwUInLzUp20EEEAAAQQQQAABBAIqQOBkfeAInKyTUhABBLwUIHDyUp+2EUAAAQQQQAABBBAIqACBk/WBI3CyTkpBBBDwUoDAyUt92kYAAQQQQAABBBBAIKACBE7WB47AyTopBRFAwEsBAicv9WkbAQQQQAABBBBAAIGAChA4WR84AifrpBREAAEvBQicvNSnbQQQQAABBBBAAAEEAipA4GR94AicrJNSEAEEvBQgcPJSn7YRQAABBBBAAAEEEAioAIGT9YEjcLJOSkEEEPBSgMDJS33aRgABBBBAAAEEEEAgoAIETtYHjsDJOikFEUDASwECJy/1aRsBBBBAAAEEEEAAgYAKEDhZHzgCJ+ukFEQAAS8FCJy81KdtBBBAAAEEEEAAAQQCKkDgZH3gCJysk1IQAQS8FCBw8lKfthFAAAEEEEAAAQQQCKgAgZP1gSNwsk5KQQQQ8FKAwMlLfdpGAAEEEEAAAQQQQCCgAgRO1geOwMk6KQURQMBLAQInL/VpGwEEEEAAAQQQQACBgAoQOFkfOAIn66QURAABLwUInLzUp20EEEAAAQQQQAABBAIqQOBkfeAInKyTUhABBLwUIHDyUp+2EUAAAQQQQAABBBAIqACBk/WBI3CyTkpBBBDwUoDAyUt92kYAAQQQQAABBBBAIKACBE7WB47AyTopBRFAwEsBAicv9WkbAQQQQAABBBBAAIGAChA4WR84AifrpBREAAEvBQicvNSnbQQQQAABBBBAAAEEAipA4GR94AicrJNSEAEEvBQgcPJSn7YRQAABBBBAAAEEEAioAIGT9YEjcLJOSkEEEPBSgMDJS33aRgABBBBAAAEEEEAgoAIETtYHjsDJOikFEUDASwECJy/1aRsBBBBAAAEEEEAAgYAKEDhZHzgCJ+ukFEQAAS8FCJy81KdtBBBAAAEEEEAAAQQCKkDgZH3gCJysk1IQAQS8FCBw8lKfthFAAAEEEEAAAQQQCKgAgZP1gSNwsk5KQQQQ8FKAwMlLfdpGAAEEEEAAAQQQQCCgAgRO1geOwMk6KQURQMBLAQInL/VpGwEEEEAAAQQQQACBgAoQOFkfOAIn66QURAABLwUInLzUp20EEEAAAQQQQAABBAIqQOBkfeAInKyTUhABBLwUIHDyUp+2EUAAAQQQQAABBBAIqACBk/WBI3CyTkpBBBDwUoDAyUt92kYAAQQQQAABBBBAIKACBE7WB47AyTopBRFAwEsBAicv9WkbAQQQQAABBBBAAIGAChA4WR84AifrpBREAAEvBQicvNSnbQQQQAABBBBAAAEEAipA4GR94AicrJNSEAEEvBQgcPJSn7YRQAABBBBAAAEEEAioAIGT9YEjcLJOSkEEEPBSgMDJS33aRgABBBBAAAEEEEAgoAIETtYHjsDJOikFEUDASwECJy/1aRsBBBBAAAEEEEAAgYAKEDhZHzgCJ+ukFEQAAS8FCJy81KdtBBBAAAEEEEAAAQQCKkDgZH3gCJysk1IQAQS8FCBw8lKfthFAAAEEEEAAAQQQCKgAgZP1gSNwsk5KQQQQ8FKAwMlLfdpGAAEEEEAAAQQQQCCgAgRO1geOwMk6KQURQMBLAQInL/VpGwEEEEAAAQQQQACBgAoQOFkfOAIn66QURAABLwUInLzUp20EEEAAAQQQQAABBAIqQOBkfeAInKyTUhABBLwUIHDyUp+2EUAAAQQQQAABBBAIqACBk/WBI3CyTkpBBBDwUoDAyUt92kYAAQQQQAABBBBAIKACBE7WB47AyTopBRFAwEsBAicv9WkbAQQQQAABBBBAAIGAChA4WR84AifrpBREAAEvBQicvNSnbQQQQAABBBBAAAEEAipA4GR94AicrJNSEAEEvBQgcPJSn7YRQAABBBBAAAEEEAioAIGT9YEjcLJOSkEEEPBSgMDJS33aRgABBBBAAAEEEEAgoAIETtYHjsDJOikFEUDASwECJy/1PWh72bJlkb6+vsNd143k83mnq6vrmS1btqQ86ApNIoAAAggggAACCARYgMDJ+uAROFknpSACCHgpQODkpX6T2o5GowMi8o8icrKIvEpEOqY1/RsRuS8UCn17eHj4JyLiNqlrNIMAAggggAACCCAQUAECJ+sDR+BknZSCCCDgpQCBk5f6DW57YGDguFAodIXW2gRN1b4eVkpdHI/H/7PaEzgOAQQQQAABBBBAoP0ECJysjzmBk3VSCnokoKLR6Ku01jGl1JEiskRrbVbV7BCRh13X3frggw/u9qhvNNtEAQKnJmI3q6mVK1e+sLOz8xqt9T+JSF1jrJS6R2u9PpFI/E+z+k07CCCAQDUC676w7tCOSM/GSCh0Uldn5KgFHaGFWrTKOk42n3dHd+xJPZBX7g8eOOyeL8vbxammJscggAACCNQuQOBUu9kcZxA4WSelYDMF+vv7D1NKnaOUOk1EXnKAtrMicrdS6sZ4PH5nM/tIW80VqCuMaG4Xaa1agbVr13Zns9nzReQCEVlY7XkHOM78oPZFEbk4kUiYNJoXAggg4JnA8be88VWHdSz4+pKuhQNhFS58/dKF/0yuAtaiJJXOS2o8K1knlx/Np78dedZ5/9AlQ/s86zgNI4AAAgcQOProoxcsXrz49SLyahFZISKHlLY/GBWRx0Qk3tHRccfWrVuf8BskgZP1ESFwsk5KwWYIRKPRntLPoOfV8XPoVtd114+MjGxpRl9po7kCBE7N9W5Ua2pgYOBUpdQn5kiS621/l9b6MqXUTYlEIldvEc5DAAEE6hF4wRdO6VnZ5d56eF/vW8OhsBI9+aVrpsDJpFB79qZE5828Jy2ZfD6/M5f+7ANn3nO+qGJGxQsBBBDwWmDNmjXPy+fzG0XkPSKyeI7+mM9d92qtr0wmk2a/TV+8CJysDwOBk3VSCjZYwCyde4eIXCsiL5pHW1opdVsul7vwoYce+uM86nCqzwQInHw2ILV2JxaL9YvIDVrrE2s9t47jzebiFyUSiU11nMspCCCAQM0Cb/jqn288dFHvZT0dkQVmhXAxYJo7cHIcR/aMZiRUOLyYMaXzuV17s6n3/vyse79bc0c4AQEEELAkYJ4Y3N3d/QERuVxE+uooawKnc/2w7QGBUx2jd+BTCJysk1KwUQKlB1N9pjQ701Yz40qpT/b29l4zNDSUtlWUOt4JEDh5Zz+vllevXn2I4zgXi8iZIhKeV7EaT9Za3x0KhdbH4/Ff1HgqhyOAAAJVCZz8tT9/00E9C25Z3LXwsMIJhcyo+sDJHL1vPCPZjCOqFDgVy2jZnUv/Oj3W8dcPnPcDE6LzQgABBJomMDAwcIpSyvyAZjbRnc8rr5T6quM4F42MjDw7n0LzOZfAaT56M55L4GSdlIK2BaLR6POVUpdorc3szEb9HPq4UuqieDx+i+3+U6+5AgROzfWed2vRaLRTRD4oIpdWMf163u0doEBOKfU1rfVH2d+pkczURqC9BN74pVOO7OzSmw5b1BsNKSUTWVEdgZOrHdmzJyta6ymhkxF1tKt3ZdN3/C7c9Q9PnvH98fZS5moRQKDZAoODg6scx7lBKfVay23vMktZUqnU9du2bTOb8Db1ReBknZvAyTopBW0JVPwcepmILLJVd446Zinxuclk8uEmtUczlgUInCyDNrLc4ODg613X/ayIvKKR7dRYe6eIXNbX13fT0NBQvsZzORwBBBAoCKz72ru6FnY89aVD+xb/Y2coFCpvAz6fwEmLK6m0I+lUbsrSukryvONmd2bHr9zyoXvMN0+8EEAAAasCa9euPTibzX68CTPSH1FKfTgej//A6gXMUYzAybo2gZN1UgraECjNzrxeRI6yUa/GGq7W+jat9Xlezuissc8cXhIgcArArRCNRl+utf60UuovfNzdX5e+0eGxlj4eJLqGgB8F3nDLn593WE/PFT0LIl1m2ZzZo8lW4OSKkr2jaXEdPWvoFJKQjOZTO3a4mdMe+sC9P/KjEX1CAIFgCVTMBLhERJY0q/dm2wOt9TkjIyPbmtEmgZN1ZQIn66QUnI+Az34ONTM6L2Wiw3xGtPnnEjg137zqFit+K2aW0HVUfaK3B95R2sjyt952g9YRQMDvAm/6+ptOXtgT+fqSnu4XTW6zZDdwMgb5rCt7x4orTSr3c5r0MZGTiCuu7Mmmf7Ezr//q4bN+/Du/+9E/BBDwp0BpRvoNIvJKj3ponih8s4hcnEgk9jSyDwRO1nUJnKyTUrAegeXLlx8UiURMYO7Hn0N/rbVen0wmf1jPtXFOcwUInJrrXVVr69at6xgdHX23UupKETm0qpP8dVDhG52Ojo6Pbd26ddRfXaM3CCDgtcDxt7zx8IPDHd85vK/3teFQcTZTIwMnM2NqbF9GsvnivKnZQqfyxx3XdXdmUrfvOmzJO7e9fVPT90TxenxoHwEE6hNYvXr1sY7jfEpE3lJfBetnPWeehLd06dIbN23a5FivLiIETtZVCZysk1KwFoGKn0OvEJHig1v8+7ojFAqdMzw8/Jh/u0jPCJx8dg+aDz0mAAAgAElEQVSUfitm1se+ymddq6c7O0TkikZ+o1NPpzgHAQQ8EtAS+otvvunmwxf2nt7ZGQ6VQ6ZmBE6Oq2V0b0ZEH3hpna54ol0qn03vTWU++vNz7vm0R2I0iwACARBYtWrVknA4fKGZ4S0iC3zY5RHXdc8dGRm5z3bfCJxsiwqBk3VSClYrMDAwcJJSyszOXF7tOT44zvxi8PNdXV0Xbd68ea8P+kMXpgkQOPnklli1atUx4XDYzGg61SddstmNZOnpAj+zWZRaCCAQHIGT/+2N/+fQvu7P9XV19UnhiXOTs5qaETiZ9sbTOcmki882mHmWk4hZXFcZOplj9+WzT6fSmVM3n30Pn8OCc8vRUwSaIRCKxWKnaa0/KSKHN6PBebZxRzgcPvuBBx6wtmSYwGmeI7L/6QRO1kkpOJfAwMDA0UqpqwL+c+iTSql/icfj3xApf6c515Xz780QIHBqhvIB2gjAb8VsCln/Rsdm56iFAAL2Bd5426ujvZEl3zlkYffSYs4Umvg2oJkznEzLWmvZO5oRRxd7cqD9nKaHTq7WMpoZT4zp3FuGzxx6yr4UFRFAIEgCsVhsndbazARYGaR+i0hKRD7b1dV1pY3ZAARO1kefwMk6KQVnE1ixYsXCSCSyQWttZmj6cXZmzYOntR4WkbOTyeR/13wyJzREgMCpIaxVFQ3ab8WquqgqDrL6jU4V7XEIAgh4ILD2y2sPXtK76NYjFvW+qUOFlPldk+eBk4jksnkZGzfbzBWir/1mMxWpQrPOgHK06+zKjd9y/8F3v1feLg3ZE8WD4aJJBBCoUmBwcPDFjuNcqZR6Z5Wn+PWwJ7XWlyaTyS8XnplQ54vAqU642U8jcLJOSsEZBFQsFnun1vpaETmiBYW01vrWzs7ODVu3bn26Ba8vUJdE4OTBcEWj0deJiNmnKWi/FbOpZeUbHZsdohYCCNgReP1tb7z8iL6eC7s7OyefrumTwMlc4djetOScifhrxtBppqV1kyGVSMrJju1LZz58/4fu+aIdNaoggICfBaLRaI9SaqPW+gIR6fJzX2vpm1IqrpQym+7+vJbzyscSONWjdsBzCJysk1KwUiAWi63WWn9GRI5rA5kxpdR1u3fvvnr79u2ZNrheX14igVMTh2VwcHCpWeevtf7bJjbr66aUUltK3+iY6Y+8EEAgwAJv+MYb3rGkN3Lzou7uxWY6U0gqvsT4KHBy8o7s3Tf58Lla9nOqDJ3Mn0ezmd/vcvb+XfKD9ycCPHR0HQEEZhcwMwHMPk3XiMgLWhTKJPDfcF33X0ZGRp6s5Rqj0ehnReSsWs7hWAIn7oHmC5RmZ35CKfX3ZleB5vfA0xYfUUqtj8fjd3raizZtvN1uNk+G+YQTTuhLp9MfEZH1rbI+1jKk+UbnFtd1P1LrNzqW+0E5BBCoQ+Atn3/LMXJwbtPzFi0szdos7tPk18DJPKluLJWVXHZyFUkt+zlND53MllC70+M/3Z3JvvXB9UO76yDkFAQQ8KFANBpdIyJmJoD533Z47dNaX71o0aJPDw0Npau54Fgs9lOt9YnVHMsxVQkww6kqJg6qVqBiduYGEemp9rwWPe6/wuHwhx944IHftOj1+fKyCJwaOyyhgYGB/6+06//zG9tUS1Sv+RudlrhqLgKBoAp8P9rzpn1Lbj1s0cK3doTDajJg8n/gZDYB37s3LVoXvwzWs59T8Zzy4CnJu46zJzf+lfvef/cZQR1S+o0AAiL9/f0vUEpdo5Q6rQ1nAphb4HdKqQ3xePy7B7ofYrFYv9bazO7k5wl7bxwCJ3uW7V7JzM78e631J0Tkxe2OUXH9Zor7Zzs6Oi7funXrKC6NF+ALRIOMY7HYCSJyg9Y61qAmWrlsVd/otDIA14aA3wVe+82TNx7R23VZz4KOBaJN9FI5o8n/gZOZVpnN5CWVzk9QzxY6zbWf0+RYFb+kpnPZXbvz2TO2fPCuTX4fR/qHAAKTAuvWresaHR39sHm0toj0YiNDruueOzIy8tB0izVr1rwon8/fIyLH4mRVgMDJKmd7FhsYGIgqpcxTNF/dngJVXfXTSqmPxOPxr8/nwQlVtdTmBxE4Wb4BzPpY13XNjv//wG985o07FAqF1g8PDz8470oUQAABKwLrvrHuTUsWdv3b4oWRwydmNAU0cDJL6/aNZcSpeNbcfPZzmvpLfi17s5nH9nZmT9n67nu2WcGnCAIINEwgFov9ndlnU0SObFgjwSzsaK2/qZT6moj8Wil1iIi8WWt9nogcHsxL8nWvCZx8PTz+7tyaNWuel8/nrxSRfy5N3vZ3h33Qu/k+OMEHl+D7LhA4WRoisz62tGniRfxWzBJqsYyrtb6Nx1paNaUYAjULvPFLJx4ZPmjBNw/pXXCcWTxnXoEPnEQk57gyXrGBuLmu2fZzmj2Mmrq0roxrlBxx9a5s6of53b//+80XPLK3ZnhOQACBhgoMDAy8Qillnhz85w1tiOIIVCdA4FSdE0dVCESj0U4R+aCIXCoii8GpS+AO13U/NDIy8vu6zuakWQUInCzcHAMDA6copcxTOl5qoRwlZhbYp5T6FI+15PZAoMkCl6zreOPL1E0HL+4+PdIZDqnCPtvlfY9KX0KCOsOpRDk2npV8bnID8VqX1hXDt9lDJ8OVcZ3saCb96fs+8GOzVIcXAgh4LLB27dqDs9nsx0XkTBEJe9wdmkegLEDgxL1Qk8Dg4ODrXdc1DzdYVtOJHDyTwLhS6pO9vb3XVPvgBBjnFiBwmtto1iNYHzsPvPpPfVREPppIJNgbpX5DzkSgKoHX3/a69YsXdV7V09XZVYyZQtKKgZM4WvaMZcUssSu/ag2dpgZOlaFcqWLpq+1YLrtzNJN5988/dPd/VjUIHIQAAlYFzEwArfU/K6XMspNDrRanGALzFyBwmr9hW1SIxWIv01p/2ixxbYsLbu5FPqGU+mg8Hr+luc22ZmsETnWMazQafb5S6hKt9Xv4rVgdgBZOUUrdo7Ven0gk/sdCOUoggECFwHG3vHrNwb2Rbx7S17W0+OHil4qWDZy0SCaTlXRmcpZT4XrVZAA1yWO2EDezmfb/t7lmOZVrmFb2ptO/0KnQX9+z/r8e4+ZDAIHmCJRmApjlc69qTou0gkDNAgRONZO11wnLly8/KBKJXCAi60Uk0l5X3/SrHdJan5NMJh9uesst1CCBUw2DuWzZskh3d/cHROQyEVlUw6kc2hiBvFLqq47jXDQyMvJsY5qgKgLtI3D8LW88fGFX9juHLOl6bTgkEiotlWuHwMk1G4jvy4qumOV0oNCpnv2cpj84PKsdvSeTuX3HwYtO2/b2TeYxvbwQQKABAqtWrTomHA6bGU2nNqA8JRGwKUDgZFOztWqFYrHYaVrr60TksNa6NF9fTWE/YfOgBH7erG+cCJyqdCvt02QeL1n6jX+VJ3JYMwR2ici1qVTq+m3btvFDWzPEaaO1BLSEXvut11x32JIFZy/oDIcn9mhqo8BJi5ZszpF0Kj9lbGtdWmdOrnamU7mhrJNP73HyH7vvfXeabyJ5IYCAJYFVq1YtCYfDF4rIuSKywFJZyiDQSAECp0bqBrT2wMDASaWHG6wI6CW0QrfNz5uX9vX13TQ0NDT1m8VWuLoGXgOB0xy4PL2kgXef/dKPKKU+HI/Hf2C/NBURaE2BE2898f8sXhz+XG93Z9/EU+fKm4K3WeBkRnhsPCPOtG8jag2dqt3PqXxHlRcsjuazT6eymb//2Qfv+mlr3m1cFQJNEyjPBPiEiDyvaa3SEALzFyBwmr9hy1SIRqNHicjVzM701ZD+2mzrkkwmf+irXvm4MwROswwOTy/x8V07R9e01neb9bYjIyPbgnsV9ByBxgrEbl/bv0RFvn3IkvAxSsKidGGHplKjpafQtWHg5LhaxsYylY+cK5g0aj+n6aGTmWm1O5tJpMO5v9r8nruebOxdQHUEWk9gcHDwta7rmhnpq1rv6riiNhAgcGqDQZ7rElesWLEwEols0FqbvZoKD27h5TuBO0Kh0DnDw8PsxTnH0BA4TQMyTy8RkQ+KyCUissR3tzYdqlYgJyI3i8jFiURiT7UncRwCrS7wyu+sPfjQjtCth/YteFNHKKTKs2sInCY3AU+ls5LL7r8p+Gyhk439nAqhVjHaKvx/VjvO3vT4LfcevOS98vZNTqvfl1wfAvMVWLNmzYtyudxVSqnTJt5O8y3K+Qg0X4DAqfnmfmpRxWKxd2qtrxWRI/zUMfoyo4DZyuXzXV1dF23evHkvRjMLEDhVuJSeXmJ+K/ZKbpiWEXhORC5funTpjZs28UNby4wqF1KXwKv/7/GXH3xQ54VdkXBH8SFr5TlNihlOMhkwaVdk31hatJ76JbKepXVGebLMZD1Ta/om4hMfKsWA5u+pfH5sbzZ13n0fuOsLdQ06JyHQ4gLRaLRHKbVRa71RRLpb/HK5vNYXIHBq/TGe8QoHBwcHtdaf0VqvbVOCIF/2k0qpf4nH498w3/YF+UIa0XcCJxFZvXr1sY7jfFpE/rIRyNT0hcCDoVDo3OHhYfZG8cVw0IlmCrz6m69+R++i0M29PeHFhaBDTMBE4DQxBtp8d1AROGmRbC4vmbSZKFkUK79mn80UEl1EnfI64AbixaGYWr80PtM/vi+b+X3ayb5t6P13xZt579AWAj4WUNFo9G0i8kkReYmP+0nXEKhFgMCpFq0WOHblypUvDIfDVzM7M/iDqbUeLm3rsiX4V2PvCto6cFq+fPlBkUjErI1dLyIRe6xU8rEA6219PDh0za7AiV878ZjwYnfTIUvCK8vBCYGT+d1TZbxU/F3U9MDJjITZy8l13SpDp1Dp6XQ1hk4zfBWuXFpXeUe42pVdqfRPd6XTb31w/dBuu3cL1RAIjsDAwEBUKfUZETkhOL2mpwhUJUDgVBVT8A9au3ZtdzabPVtEPioifcG/Iq6gJKC11reGw+GNw8PDT6Ey44T+tmApP73E/Fbs8La4Yi6yUqCw3rajo+NjW7duHYUGgZYT+H6058RU5NbFB4ffuiAcVsXJO8WoicCp+sDJddzCU+umz3Iyjs3cz6ny/jRhVE47+Z2ZzBfue98Pz5LS6LbcPcwFITCDQDQafb5S6hKt9ekzvjFRQyD4AgROwR/DOa9gYGDglFJofuScB3NAUAXGlFLX7d69++rt27ebbybb9tV2M5wGBgZOUkpdLyIr2nbUufCywJNa60uTyeSXRcRMY+CFQOAFjv/26o1LFkUu6+pSC4oBU6i0mpzAaWLuUZUznIxfOpWVXN7s2T11aV09+zlN3RKq9v2cyjdn+cx9+ezuPbnse3/+/h/fHvgblwtA4AACy5Yti3R3d39ARC4TkUVgIdDCAgROLTy4sVisX0Ru0Fqf2MKXyaVNFXjUzGJLJBKb2hWmbQKngYGBo5VSV4nIqe062Fz3rAIJETk3kUjcjxECQRU4/lvHv7G7x/3G4r6O0qzN4qd3AqfJXbvrCZxcrSW1L11KpP2xn9PEF25lknIto9nMo5mM+uv7zvyvXwX1/qXfCMwmUJoJYB7oshQlBNpAgMCpBQd59erVhziOc7GInCki4Ra8RC5pDgGt9d3hcNjsJ/zLdsNq+cBpxYoVCyORyAat9YUiUviNPy8EZhAwP4ve7rruhpGRkd8jhEBQBE768vEvcQ51vtW3OHRcWCkJ63IoQuCkyxMXS1OL6gmczPSwdCYvuWy+dEtUEzo1fj+nytDJdCyvXT2aTt8RHj3sHT/e8I2xoNy/9BOB2QSi0ejLzYx0rfWbUEKgjQQInFposKPRaKeIfFBELhWRxS10aVxKfQLmaTQ3i8jFiURiT30lgndWKwdO5X2arhWRI4I3NPTYI4FxEflcKpW6Ytu2bfs86gPNIjCnwCWXrOu4+1VjNy1aEjq9syMUKm/JR+CkJh5Iaytw0q6W1HhWHG0iq+qW1pnjZn+incjk8rr5L62rfKJd1nGye8ZTVw+d+eNL5ryJOAABHwqsXbv24Gw2+/HSD2kdPuwiXUKgkQIETo3UbWLtwcHB17uuax5usKyJzdJUMASeE5HLly5deuOmTZvMvg0t/WrJwCkaja4x62NF5LiWHj0urpECTyilPhqPx79RfIYVLwT8I3DCt9acu/AgfdWCBaq7OJfGvIqfzgmc7AdOrhbJ5x3JpM0vpsyrutDJjI1Wcz21bnLsJqrO+OQ6NeNjPqbPdCofNJZL7xzN5d51//t//H3/3Ln0BIHZBdatW9cxOjr6bqXUlSJyKFYItKkAgVPAB3716tXHOo7zaRH5y4BfCt1vvMCI1vqcZDL5s8Y35V0LLRU4rVmz5kW5XO4qpdRpEz99eWdLy60h8EDpE8F/t8blcBVBFlhxy3FrDlnifLN3sdnLpLgZOIGTiYQn9/zXJngrZTy2ZjiZwMm8zAbijlNuq5qldcXxmTt0mjbLaTKDmrhdi0fsHzrtHzgVjzMf16JlT2r8oXTePeW+M3/8eJDvffre2gL9/f0nh0Ih84vCV7X2lXJ1CMwpQOA0J5E/D1i+fPlBkUjkAhFZLyIRf/aSXvlU4A7XdT/Uqtu6tETgFI1Ge5RSG7XWG0Wk26c3Et0KroDWWt8aDoc3Dg8PPxXcy6DnQRVY94V1h2YPH7t9yRL92nCo/GmbwMmMZyELalLgpB0tY+PZ0lK5qYFTIeaZYTZTORKsOXSacZZT7aGTOSMvrt6ZHvveM0sW/8O2t2/KBvV9QL9bT2DVqlXHhMNhM6OJB7q03vByRfUJEDjV5+blWeVtXD4pIqUHt3jZHdoOqMC4UuqTnZ2d127ZsiUV0GuYsdtBD5xUNBp9m4iYN/hLWmlguBZfCowppa7r7e29ZmhoKO3LHtKp1hLQElp7e+y63oPdsyIdqrCXyeSMJgKnZgdOpr1MJif5XHm5fXVL67zaz6k806nwplAi4/lcal82tWHojLtuaq03ClcTNIFly5b19vT0nM8DXYI2cvS3CQIETk1AttVENBp9XWkblxW2alKn7QVabluXwAZO/f39sdL06xPa/rYEoNkCf1BKfSwej9/S7IZpr30E1nyn/53di9ybenpCfYW8oPT0OQInM6Np8ktXM2c4mXEwy+tSY5V5c3WhU3VL60rJUOUuUdO+Ss+2tG7yzMoF5RNHF984pVr7stmnx9zsqT99749aes+A9vlsEagrLc8E+ISIPC9QPaezCDRHgMCpOc7zamVwcPDFjuNcqZR657wKcTICswsMua577sjIyENBRwpc4NTf3/+CcDj8ca316fvt3Br00aD/QRO4V2t9bjKZfDhoHae//hWI3b6yv3tB6LaFi91XmF6WAyYCp2JiUgyYvAucTPtO1pF0Jl+xhM7/+zlN3PElOvPEvT3p1H/vyam/GT7zBywV9u+nhJbpWemBLuaJTebBLrwQQGBmAQInH98ZK1asWBiJRDZorc1eTV0+7ipdaw0BV2t9Wz6fP//hhx9+JqiXFJjAadmyZZHu7u4PmEcIikjhN/68EPCBQEt8IvCBY9t34dSbTu194oWP3rLwIOetHUpN7A5N4FS6NQpJkz8CJ5N6pVJZcR1d835OM+/zVHzu3WSONm0TcYv7OZVnOZXfcHnXdUbT47fcfdCi98rbW//RvG3/icYDAB7o4gE6TQZZgMDJn6NX3sblOhH5M392kV61sMAuEbk2lUpdv23btsDtxRmIwGlgYOAUpZT5rdiRLXwjcWnBFtgtItfs2bPnhu3bt2eCfSn0vtkCa77bf3nPQe4FHZ35ThM9hAvJQ/HTM4GTHwMnLa6rJTWem3WWUzFAKj3eruKGmm1pXXGs6widTDY57bX/k+tmXlpXPs3863g+O7Y3mz536Iy7vtzs+5/2WlPAPNBFRM4SkYtEpLc1r5KrQsC6AIGTddL5FRwcHBx0HOcGpdTx86vE2QjMW+ARpdT6eDx+57wrNbGArwOnWCzWbzZi01qf2EQTmkJgPgK/0Vqfl0wm75hPEc5tD4Hod1b9Zc8i9+tdC51DJ6+YwMlM9XFLIBOZja9mOBWDpEw6L/m8ay10mho4mRbKoWMZY+r7wsZ+TpWhk/nz3mzm9/u08zf3nX7nSHu8C7nKBgjwQJcGoFKybQQInHwy1Gzj4pOBoBszCdwRCoXOGR4efiwIPL4MnFavXn2I4zgXi8iZIhIOAiR9RKBSQGt9dzgcPnd4ePiXyCAwXeCkrx9/VOaQse/2LMmv3F+HwMn/gZMZNS1ai4yP58T8YXKpXDX7ORXnrc08A6qOWU4mmJpxc/HKDcSLAdaUwyr+UvlxR4neOT5+3x6d++vEGXfv4R2MQLUCAwMDUaXUDSLy6mrP4TgEEJgiQODk8Q3BNi4eDwDNVytgltZ9vqur66LNmzfvrfYkL47zVeAUjUY7ReSDInKpiCz2AoQ2EbAokFNKfU1r/dFEIrHDYl1KBVXg+9JzQm7VF7oPzv+jCpceO7fftRA4+T9wmlwql806kss6FQHS1MCpEPPMsLTOLKDz235OU8MoJVk3n9+dSn/h3jN++KGgvuXod3MEotHo85VSl2it38MvCptjTistK0Dg5OHQso2Lh/g0Xa/Ak1rrS5PJpNkSobxAoN5aDTnPN4HT4ODg613XNfs0LWvIlVIUAe8EdorIZX19fTcNDQ3lvesGLXspcPx3BzZGFucv61zgLDhwPwicghQ4OWZp3XhWtFsZLE0NnWrdz6l8ds2biFvaz6l4f07OmhrLpXeNZvKn3/f+H/67l+8h2vafQMUvCi8TkUX+6yE9QiBwAgROHgzZ4ODgqtI+Ta/1oHmaRGDeAlrrYa31OSMjI1vmXcxyAc8Dp1gs9jKt9adF5M2Wr41yCPhN4Nda6/XJZPKHfusY/WmcwAnfib0h1Jv/t66+3POra4XAyf+BkxnJ4iwn818nryWTzhVjmonZTPMPnSYDp1IAVNpYvJwHVd5Ps+3ntP8G4pO1Zv63itV5FQGWK1r2ZdKP6kz4lB9+8P89Ut29zFGtLFCaCXC9iBzVytfJtSHQZAECpyaCr1279uBsNvtxtnFpIjpNNVJAa61vDYfDG4eHh59qZEO11PYscFq+fPlBkUjkktISuo5aOs2xCARcwGwofm4ikfhtwK+D7h9A4M239b9kzyL1re7F2eNmWzo18+kETv4PnCaX1BX+pEUymVwheDpQ6DTb0jo/7+ck02ZNua6rd2fG7+hyO//h+2d8f5xPAu0nEI1GX25+UaiU+ov2u3quGIGGCxA4NZxYpGJ2pvlZdEkTmqQJBJopMKaUum737t1X++Hp6U0PnNatW9cxOjr6bqXUFSJyWDPlaQsBHwmY6RA3d3R0fGzr1q2jPuoXXZmnwCWXXNLxo5X/76aexfnTQ53O/hv6zFmfwCmIgZOrtaTHzYpZ3WL7OU3dkLz8TUM2n8/uyoxdce8Zd10+5y3NAS0hUDETwOy1yS8KW2JUuQgfChA4NXhQStu4mIcbvLLBTVEeAa8FtovIRxKJxCYvO9LUwKm/v//kUChkpl8v9/KiaRsBHwmYzcSvWLp06Y2bNm0y28HwCrDA8f8+ePaCvvw1HV3Z7vovg8DJ/4GTGd3JJXWlP0o2m5N87sCznAK5n9O0WU6V3zjsy6d3jDuZf/rJe+76cf33PGf6WYBfFPp5dOhbCwoQODVoUFevXn2s4zifEpG3NKgJyiLgSwGl1D1KqXO8enp6UwKnVatWHRMOh68UkVN9OQp0CgHvBZJa63OTyeTPvO8KPahV4PhvHT/Y0Tv+rQWLc0trPXf/4wmc/B847b+krhBBmVlOabOBeGlHpVn2c5r96XQh0TM80a4YUpXvlMkv2xPT56Z9JW/0fk6mJ5VNukrL7lTqoaf0+Fsefu/QE/N/D1DBLwL8otAvI0E/2kiAwMnyYK9atWpJOBy+0GxnISJzPLjFcuOUQ8A/AoXVNSJycSKR2NPMbjU0cFq2bFlvT0/P+Vpr8ybnDd7MkaWtoArc4TjOWQ8++OD/BvUC2qnf0W+uO7S7d/T2BYszrw3VsXhuZisCp8AGTqIll3cln5mcrDjbJuJB389pyjcPpb/kXdfdnR67/W53x2lyRqK4izqvQAoMDAwcrZS6il8UBnL46HSwBQic7I1fKBaLnaa1/qSIHG6vLJUQCLTAcyJyeTNX1zQqcCq/wT8hIs8L9JDQeQSaL5ASkc92dXVduXnz5r3Nb54W5xTQEnrNfwxc17kkd1a407W8lwmBU5ADJ3PvmCfWuaXMaXIJXXVPrRMJVTzpbuqdeMCZTjN8Na91ptOcT60z85oq2pkpdCpcfy4/vjs7vuHe9/34X+d8L3GArwRWrFixMBKJbOAXhb4aFjrTXgIEThbGOxaLrdNam32aVlooRwkEWlFgRGt9TjNW11gPnHiDt+L9yDV5JPBHpdRH4vH4NyY2jPGoIzQ7KXD8twdO6zxIbop0ZxY1xoXAKeiBkzhaUmmzgXjxNdssp3r2c5pcWleoXKg/29K6iSOm7cE0eWbl2riJeKrU6al392QYNfXbhtlCJyVKRnOZP2VTqVPv+sBdmxvzXqGqRYHyLwqvFZEjLNalFAII1CZA4FSb15SjBwcHX+w4zpVKqXfOowynItBOAg1fXWMtcOIN3k73JdfaTAGt9XA4HD53eHj4581sl7amChzzH6tWHREJfbNrUeYVjbUhcAp84KRFcllH8nl34lapbWmdCZG82c9ptgBpakhVfejkalf2pFKb0+74W4fOGDIPSeDlM4FYLLZaa/0ZETnOZ12jOwi0owCBUx2jHo1Ge5RSG7XWF4hIVx0lOAWBdhYYF5HPpVKpK7Zt27bPNsS8A6eK6de8wW2PDvUQmBQwuxTfLiLnJxKJPwDTPIFTbzq195kX/e8tnUvSb1Wh0m7QDW2ewKkVAqfCBuIps65ucoPxYui0/2ZfrbifUzGgmvwWI+86zsrrZ84AACAASURBVK70+FfuPv2HHxAlk0lcQ99LFD+QwMqVK18YDoevVkqdNm0feOAQQMA7AQKn2uxVNBp9m4hcJyJ/VtupHI0AAtMEnlBKfdT26pr5BE68wblHEWi+wLhS6pO9vb3XDA0NpZvffHu1eNx/RC9fuDh/Qagz39m8KydwaoXAydwv+bwjuexktuL5fk5VLa2bFhXN+AS84jHV7OdUGTqZ48ez2b178+kzf3L6j8xSYV4eCJiZACJylohcJCK9HnSBJhFAYHYBAqcq747+/v5YKBQy+zSdUOUpHIYAAlUIaK1/avZ3GhkZeaiKw+c8pK7AaXBwcNBMv9Zar52zBQ5AAIFGCDyulLrIdgLdiI4GseYJt696c6Q39G8dCzOHNr//BE6tEjhpLZLN5MStmM/j7X5OU0Oi8r29/2bh9vdzmngfKRFXtIxm0o+NqrG/2vyue3/Z/PdY+7Y4MDBwilLqsyLy0vZV4MoR8LUAgdMcw9Pf3/+CcDj8ca316TNOG/b18NI5BAIj4Gqtb8vn8+c//PDDz8yn1zUFTky/ng815yLQEIGhUCi0fnh4+MGGVG+zoid9/fijnEPT3+1clF058zKnZoAQOLVM4CQirqMlm5ncQNzcQe26n1Nl6GT+7GpX706n7gmNHfR3d55922gz3l3t2kY0Gh0QETMT4DXtasB1IxAQAQKnWQZq2bJlke7u7g+IyGUi0qAHtwTkLqGbCDRPYJeIXJtKpa7ftm1btp5mqwqc1q5d253NZs8WkY+KSF89DXEOAgg0TKCQQHd2dm7YunXr0w1rpYULr/vaS7tkycFfihyU/Ucd1vtvstPUaydwaqXAydw6JnAywVPlK3D7Oc26tK6QoE3Pkop/rzhnytK6af+Wzedzu7Ljn/7J6T+6sKlvtTZoLBqNmlmaHxORM0Uk3AaXzCUiEHQBAqcZRrA0O9OE5kuDPsD0H4GACjyilFofj8fvrLX/cwZOTL+ulZTjEfBMYJ9S6lO7d+++evv27RnPehGwhk/43przu3qzl4cWZH3yVBMCp1YLnLTrSiZt1tVN30DcvFmm5puT+zxNfSPN9tS6cgW9/7q4YuUZvsoXPuSD/ZzKV1ju4t5seufuzPh7fnbGPd8L2KcR33U3Go2afec+yEwA3w0NHUJgLgECpwqhgYGBVyilrheRP58Ljn9HAIGmCNwhIucmEonfVtvarIFTf3//ylAodBMbsVVLyXEI+EbgN1rrs5PJ5I980yMfdmTNv8fe0NOV/2pHX+5F/uoegVOrBU6idWED8XxupllO8w+diiFV5V1c/MtElDXj7CR/7Oc0PXQy+17tSY//IjLmvvV7Z99Z9Tcz/noPe9ubWCz211pr88Smo73tCa0jgEAdAgROImJmZ2qtr1BKmX2amJ1Zx43EKQg0UMA8uOr6VCp11bZt2/bN1c5MgZN5+pxZOnexiDTxyUxzdZV/RwCBGgW+EolEztqyZUuqxvNa+vCT/3PN85yQ8+2OxenXerdP04GICZxaMXAyQUo6mxPlTv2yW9t+TmaekwmXpgZX5XBp1llO5oAqQ6cZJkoVTp4hzyrcxFM/Pu3apqdJpb9Pf3LdTIfltKufGx/73oIXbn/HnW9mxmY1n5QHBwdf6TjODUqp11dzPMcggIAvBdo6cDKzM7XWZyqlPi4iS3w5QnQKAQTKAk8qpS6Mx+O3TpnGP81nyneHpSnYXxORf8IRAQSCL6C1/vmCBQtO2bJly87gX808r0CLWnvbCZcsfNHei1TY8XifJgKnQlhRyk3MYrPJDEUVpuuUH+w28fHCsaq4KK1iOk/x75OPgdMmAinV1eUqpeMnYhqtKxa3Fb9EVn7EhEOTLy1uxd+L7U1+oPj34tETNSb+XqpSOt5xXMlm3f1WudW6n9NsQenUmU6TX94PuLTO9Ga2/ZmmpUwzh1Gzh06zh1QzN7jfb8CUklQ+l9qZGrvgp+/78efm+RmgZU9fu3btwblc7jKt9Rki0tGyF8qFIdAeAm0bOMVisXVa65tF5OXtMdRcJQKtIaCU2iIi74vH47+Y6YqmfH8Xi8W+qrX+59a4dK4CAQRKApv7+vpePzQ0ZKY/tuWr/8aTXhLW+utayboly56TUKfjYwdmOLVq4GRyqGwmJ7rKWU7+2s+p+O3C3KHT1ACrqtBpyubi096apb2mdmbGH96zs/t1Wz68ifC8RLRu3bqOffv2vV9rfamIHOzjT2p0DQEEqhdou8Dp1FNPDf/ud7+7Tmt9zsw7D1aPx5EIIOCZgNk/eEMikdjvF4QT3+ZFo1GzuaTZs4kXAgi0mIBS6ovxeNz89rvtXgP/+rpo2FV3aK2PMBe/4KCc9LzEPOHTry8Cp1YOnBxXSzabk9C0hyHOtrSu1tDJ+n5OMyRGc4ZO0zYkn1foVNzhvPBmTeey+/buGhu465y7HvXru7dZ/RocHBx0XfcrIrK8WW3SDgIINEWgrQKno48+esGSJUs2aa1PaYoujSCAQKMFrkskEhsqGyl8FxeNRv9MRH4pIr2N7gH1EUDAEwEzueLkRCJxryete9Tocdef+Ard2bHZFTmo3AWttSx62W4Jd2c96tVczRI4tXLgZEY/n3Uk7xQW/015NWU/pxl2bpyYu1Tr0rrJLKhwHY3az6nyiXp/2LvriUf3qJc/veHHY3O9k1r136PR6IdF5FqWz7XqCHNdbS7QToFTaGBg4Dal1D+0+Zhz+Qi0lIBS6oJ4PP6J8kUVvj+MxWJf0Fq/r6WulItBAIFpP8yqLfF4/Ph2YVl306m9Y7LzIdF66fRr7uzNy8KjnvMpBYFTqwdOZsupTCYravI5coV7cXI20/5bjM28b1NI2mk/p5zjyH1/+r1kXPe23RckT/PpG7ih3YpGo1eLyIUNbYTiCCDgpUDbBE7RaPQsEfmsl9i0jQACDRFwlVInxuPxzaa6MptNZrPZP4lIpCHNURQBBHwjoLVem0wm/9s3HWpgR1bfdNLnlJYPmSYmt5SebLBn6V6J9I03sAf1liZwavXAyWwy7uQdyeWd/UInm0vrzB0465PrZpvpNG05XOEbhfKtPO0PTV1aJyLbd++QX+/dXehNWvTfZC948Hv1vsuCeN7AwIB5ctONQew7fUYAgaoF2iJwWrly5Qs7OjoeEZGFVctwIAIIBEng1319fcuHhobyKhqNni4iXwpS7+krAgjUJ6CUuiEej6+v7+zgnPXq609emu9Uj+iJJzYVI6fK4CnU5Ujfsc/NOkPEu6slcGqHwMk80S6XyYurzdK6qTOaaltaZ2ZGhURPPuZv4tY94FPrpiRJxVNqXVo3cxhVWcsUnZps1bufUyqfk/uf+oNkSk/800oe3fvSo18hb9/k5ycAWPs00t/fvywUCiXNNnTWilIIAQT8KNAWgdPAwMDnlFKFXwryQgCB1hTQWr8zmUzeagKn20TkH1vzMrkqBBCYJvBgIpHob3WV4//1pM86Wp1VMb2jdMlTg6eeP9snkYP8thUMgZP/AydzO5lt0Ur/Lf5RTIg0+cHyEeYfKo4tnWSONRuI5zNOIZRpl/2cZguciuHVzI+rMx/95Y6n5XepvVM+daVD+q3ZDQ/+Z6t/PjPXF41GfyIir2uHa+UaEWhzgZYPnKLRaI+IPMPspja/07n8lhdQqridiwmcfiUiL2/5K+YCEUDACORSqVTvtm3b/Lpj9vxH6Tunho97ducTIlJ4Kl3hR/3JdUVTgifV4crCV+yQUKgUFMy/dQsVCJzaJXAyN0s+my8ET629n5OasqN4rbOcxjIZGXrm8f3eW2GRb++6YKTlN5vt7+8/MRQK/dTCJxdKIICA/wVaPnCKxWJv01pv8v9Q0EMEEJingPkB66UmcDIbIiyeZzFORwCB4Ai8IJFImH3bWvK1+vOvWxlyOh6cvnPTbMHTguenZMHhoz6yIHDyf+A0GVAW76vi7VPrDCdzjllSl0ubWU7VL62b3Fx86m1b3dI6c85k5FNYzOfz/ZwSTz8pT2X332/NFXlu3wUjh/rozduQrgwMDNyilHpnQ4pTFAEE/CbQ8oFTNBr9jIic7Td4+oMAAvYFlFLvMIGT2f9g/0fi2G+Piggg4A+BVyQSiV/7oyv2e/Gam056V07CX5usPHXL8P2Cp7CWhS/fIeGOvP3O1FWRwKmdAidzi+Rzrjh5t6bQafan07XWfk470mOydcfs+fioDr1ELkz8oa63WgBOOvXUU8OPPfaYeaQmvxgMwHjRRQQsCLRD4HSPiJxkwYoSCCDgcwGl1FUmcPLTWhKfk9E9BIIvoLVelkwmzVLalnwdd+PJHwmp0JXm4qZGTbMHTwsOScuCF+3yiQeBU7sFTmaGVMbs5WT2emI/p8L7sLyf09an/yA7crOvAO4WZ+3TFzzcsk/eHBwcfKXrur/wyScnuoEAAo0XaIfA6X9E5FWNp6QFBBDwWkAp9UUTOJmfwmaYUO9192gfAQQaIdDqgdPam15/tRJ1YaXdXMGT+QS48NidEuryw9ZWBE7tGDg5jluY6TTT0rrJJXRTJyPPtrTOTFqefQZU5ZZmNpfWVcZE+39XMdlS9fs5/WlsVJK7zL6ys78WKPUXz25M/rARnyv9UHNgYOBvlVLf9UNf6AMCCDRFoB0Cp9+KyNKmaNIIAgh4LfB/meHk9RDQPgLNF2jpJXXH3/yGa0XrjftvFH7gGU8di7LS/dKdzR+N/VokcGrHwMmEovmsK9qtbWmdrf2cJqKsGfdzmhoSlW/ZiUOn/WH/jxfPmPz41EZm2kTc0Vq2PPUHGXXmWOqqwn85ujH+Ax+8cRvShWg0erqIfKkhxSmKAAJ+FGiHwOkxETnSj/j0CQEErAsUAidmOFl3pSACvhZo6cDpNTe/4VpHq43FEXBneELd7MFT99G7paMn7fHgETi1a+AkrpZM1iluqjjvpXVmnpM3+znN9hS6WkKnx0d3yf+MVhEAt3jgFIvFPqS1/pzHn5RoHgEEmidA4NQ8a1pCAIHGCxA4Nd6YFhDwnUDLB056InAqh0vVBU/hnpz0HG325/XyReDUtoGTiDi5vOSd0pM8Zg2d9n/Ox8xL6EzkZDLX/bdqLH68fJ9XubTOzFGaNgNq5tlM5R2YDrS0rhiq7d8DkZx25P6nHpeUa55pMseLwGkuIf4dAQSCJUDgFKzxorcIIHBggULgxFPquE0QaCMBpdTL4/H4I616yWaGU2XgVL7O4j5OcwdPXS/dLZ2L9n8Ee/O8CJz8HziZu6EY4hSfeli8O/TkHyb/rfAPFceWjp84tvT38j5jWmvJZ8zfzAbiWtS0h8hOBkutu5/To7t3yKNje6p7yxE4VefEUQggEBQBAqegjBT9RACBagQInKpR4hgEWkmgXQOnaoOnUMSRnpc9M+umy42/Fwic2jlwMkFTcQNxXVpaN//QqbqldebOLs448nI/p3Q+J/c//YTkpj1jctb3HYFT4z8l0QICCDRTgMCpmdq0hQACjRYgcGq0MPUR8JtAqwdOr/7CG64Vp7yH0+z6B5rxFHnhXuk8ZK9HQ0fg5P/AaXKJmu0ZToV5UtpsIJ4XV5fmN7XRfk7bnntGfp+u4b1H4OTR5ymaRQCBBgkQODUIlrIIIOCJQCFwMo+ACXvSPI0igEDTBcLh8MseeOCB3zS94SY1aAIn7RYDpxm2rtmvFzMFT6pDS8/LnxEJVbGHjPXrInAicBJxzdK6rPnyXNyHafZNxKvfz2nmfZ6KM5r8sJ/T3mxG7n/2idreUQROtXlxNAII+F2AwMnvI0T/EECgFgECp1q0OBaBVhBop8CpPF41BU/mJK0kcvi4dB6x24MhJ3AicCredk7OEcctbyDeuKV1pq26QqeKTb8n3muz/GHmzcUr9yBXMrLjT/JUtsb90wicPPgcRZMIINBAAQKnBuJSGgEEmi5A4NR0chpEwGOBdgyc6gqeQiILj90h0plr8ogROBE4lQInEzplzP1XnuXUuNBpauBk2j/wfk7Ff93/qXWTZ1Y+oW7i6OKFzfCku53pMdm68+na32sETrWbcQYCCPhZgMDJz6ND3xBAoFaBQuBkvpvtqPVMjkcAgWAKOI5z7IMPPvhoMHs/d6+LS+r0xoqtj/c7qdoZTx0HjcuCF+2au1GrRxA4ETgVbyizP5STd8Q105zmXFpnzpi6vG7mJXTF8ErP8Caoa5bTDKHTzLOZ1NScqTJ00iIPPPuE7Mxna38nETjVbsYZCCDgZwECJz+PDn1DAIFaBQicahXjeASCLtAOgZOr9cbJn6f33+OmPIbVBE+Ro5+VcHcdPwjXfaMQOBE4TQZOZgfxXC5fTJ9KoZOatpRtMkAK5n5OT42NyoN7dtT3jiFwqs+NsxBAwK8CBE5+HRn6hQAC9QgQONWjxjkIBFmgXQKn/UOl+oKnUG9WFhz5bBOHnMCJwGlq4JTXruhc5Synxi2tK8ZadWwiXud+Tq6r5efPPC77XLNBeh0vAqc60DgFAQR8LEDg5OPBoWsIIFCzQCFwMr+676z5VE5AAIFACrRb4GQjeFpw5E4J9aaaNN4ETv4PnMytUJhyVPxv8Y+iJ/8w+W+Ff6g4tnT8xLGlvxeflliqMlGveK75v7wJnAp1Arif05Q9m6bu5/SHfbtl296d9b+3CJzqt+NMBBDwowCBkx9HhT4hgEC9AgRO9cpxHgJBFdBaH5NMJrcHtf9z9dvs4WSW1M12XD1L7VRXTrqOeWaupi39O4ETgVM5epoMnEzWlM85E1t5F+brqWn7IhU+VEqrArCfU8515P5nnpCMdup/7xA41W/HmQgg4EcBAic/jgp9QgCBegUKgVNGRCL1VuA8BBAIlkC7B07l0aomeCr8TF/6+T3y4j0SXrKvCYNN4OT/wKkc6jRvhlMhcDKbh7vF5XTlBaJB3s/pt3t2yPbx0fm9pwic5ufH2Qgg4DcBAie/jQj9QQCB+QgQOM1Hj3MRCKJAqwdOx3/x5Gu1VhWbhh94lKoNnsIdjkRe9nTFDJJGjT6BE4FT8d4qLtcrLqkrBE7mf/OuhCo2EDeJqAmgKl+zzXKa/el0oVmfWlfowgyPnSvOsNr/PVD4UBX7OaXyedny7ONiHpM7rxeB07z4OBkBBHwnQODkuyGhQwggMA+BQuCUFpEF8yjCqcEQeEJEfiQiCa31E+FwOKW1jriu+zyl1CoReZ2ILA/GpdDL+Qi0Q+CktCosqTP74lTzJLrCz8gTk1Zm31y844h9Ejl0z3z4qziXwInAqXibTA+cXNHiOro0y8kcUft+TpNh1NRb0VTSM7xZDriB+Ayh08QOTdPCqOmZ1a92PiN/yIxV8X6Y4xACp/kbUgEBBPwkQODkp9GgL/MVMN+KPy4ifxCRQ0TkKHKH+ZIG7nwCp8ANWY0d1lrfqbW+ZmRk5GeTW9vOXKS/v39ZOBw+X2v9ThHpqLEpDg+IQDsFTuUhsRU8qbArXcc+Kypc5xO1qrpHCJwInGYPnAr7hudNGOUGdj+nfbmMbH7uyareDXMeROA0JxEHIIBAoAQInAI1XHR2FgHzpJ2bQ6HQTcPDw4+VjznhhBP60un0aSKyQUSORK8tBAqBk7khutrictvrIhMicm4ikbi/1stevXr1sY7jfEpE3lLruRwfCIGjE4nEbwPR0zo6aZbUlWc4TT/dRvDUeeiYdB6xu46eVXsKgROB0xyBk3ZF58sr12af5TS5hG7qrL3ZltaZGVOzz4CqY2mdicRmmOn00M4/yVNZM7nawovAyQIiJXwk8Eut9cVKqR9GIpGubDb79yJysYgc4aM+0pXGChA4NdaX6o0X2OS67oaRkZHfz9bUunXruvbu3bteRD4iIr2N7xIteCjADCcP8RvV9A4RuWLp0qU3btq0aR6P/hHp7+8/ORQKXc9Su0YNlTd1Q6HQUZW/bfCmF41r9UCBU7nV+QRP5gfyrmOeFRWZ9+4zsyAQOBE4zRE4mcV2TnFfp2KeU/vSunr2c5rcy8m0WW65dBtXuZ/Tc+lxSex+2t4nAAIne5ZU8lJgl4hcm0qlrt+2bVu2siMrVqxYGIlENmitL+AXxF4OUdPaJnBqGjUNWRYYcV333JGRkfuqrRuNRp+vlLpEa3164ZsZXq0owAynFhpV89PvzR0dHR/bunXrPB/7M6mybt26jtHR0Xcrpa4QkcNayKttL6UtAicp7uFU3ARn9le9wVPH4rREXvxcg+4hAicCp7kDJ13cRbyQ+9QbOjV7Pyfzfnvw2T/KDmfKz9Pzex8ROM3Pj7O9FnC11rdprc8bGRl59kCdiUajZu+Tq0XkVK87TfsNFSBwaigvxRsgYL4hvnw+kx0GBgaiSqnPiMgJDegfJb0VIHDy1t9a63eUls81bJnU8uXLD4pEIpeIyAfZ38nauHlSqPUDp9ddqyRcDJzKrwYET11Ld0mox9KyoCmdJXAicKoucNKuiCqkptNDJ7XfA+SK4dL+vzycOXQqzpiqeRPx2WY5lTr49PheeWjUTMK1+CJwsohJqSYL3Ku1PjeZTD5cS7sDAwMnKaXM7PMVtZzHsYERIHAKzFC1fUcLkx3Mst9EImHjiTpmq5+3icgnReQlba/bOgAETgEfy18rpT4cj8fvbNZ1RKPRl4uI2d/pzc1qk3bsCoTD4aUPPPDA7+xW9U+1479oAqfSDKfpP2DPETyZqyhsylzFK9ydk66lln94LrRL4OT/wKlwpxRGq/gkueINoyf/MPlvFTfVxK2lK44tnW9yo4kqE/WKN2Th/8zD6Ur/Wzhbm23DpbC0LqSVqELY49/9nMz67q3PPiH7XMsb7hM4VfHZikN8JvC4UuqieDx+yzz6FYrFYqdpra9j9vk8FP15KoGTP8eFXlUIaK3vDofD5w4PD//SNkw0Gu1RSm3UWptfHnfbrk+9pgsUAqdxBrPp8PNtcKeIXNbX13fT0NCQ5e/eq+va4ODg613X/ayIvKK6MzjKLwLtFTiV1afN7KgiVKpmud2Cl+yWjl7z3AWbLwIn/wdOkzeQ54GTqyXkFqc41bu0rhn7OT2xb4/8asxsU2P5ReBkGZRyDRQYU0pd19vbe83Q0JCV6bGl2edmbyez+W6kgX2ndPMECJyaZ01LtQv8RkQ+nEgk/qv2U2s7Y82aNS/K5XJXKaXMU+1mmENdWz2O9kyAwMkz+voaziulvqq1/mgikWjE1IqaehWNRjtLS+wuFZHFNZ3MwZ4JtHrgdNyXX3dt2C3PcJrObDd4UhFHuo9+dtYne9U3yAROBE7FO6cYZh14hpOZ6WSW1ZlZTtUvrTOFp74XGrmfU9Z15P4dfxTHrAG0/SJwsi1KPfsC5q18eygUOm94ePhx++VFYrHYy7TWn2b2eSN0m16TwKnp5DRYhYB5PPM1Mz3YoIpz53VINBpdIyJmfyfzv7yCJ1AInMZEpCd4fW+vHiul7jH7NMXj8V/47cpXr159iOM45rG9Z4pI2G/9oz9TBRzHOfLBBx/831Z1MYFTSBcDp8K2NTO+7AVPC16wTzoO2muRk8CJwKl4O1UbOJkYp8MxeVMtoVPz9nPaPrpTfpey9iyLqe81AieLn3soZVtAaz1cWnbyc9u1Z6pXmn1ufjBb1oz2aKMhAgRODWGlaJ0ChQcb5PP58x9++OFn6qxh47TyMuJPiMjzbBSkRtMECJyaRl1/Q4+KiJnRtKn+Es05MxqNDojIDSLymua0SCv1CLRT4FT2aWTwFAq70n3sM2aKST3DMcM5BE4ETrUHTsrV0mFmOZnYaY79nCZnM00NnWpdWmd6WTxn4p02cT8XKiuRdD4v//3cE2J2Fm3Ii8CpIawUnbfAk1rrS5PJ5JfFbL/WxBezz5uI3ZimCJwa40rV2gXudV13/cjIyEO1n9qYM5YtW9bb09Nzvtb6QhFZ0JhWqGpZgMDJMqjNcoWpi3v27Llh+/btGZuFG11rYGDglNKjLY9sdFvUr12gHQOniR+HGzTjKXL4mHQeZmsGB4ETgVMdgZPWEnbNHCd/7ef0qz3PyhMZM5G6QS8CpwbBUrZOgayIfL6rq+uizZs325z6WnN3mH1eM5lfTiBw8stItG8/bDzYoKF6q1atOiYcDl8pIqc2tCGK2xAoBE77RGShjWrUsCJQmLrY2dm5YevWrU9bqehBkbVr13Zns9mzzewsEenzoAs0OYuA67ovHRkZ+X2rAlUuqZvtGm3PeAopke5jnhXVYWMPfwInAqf6AiezBi9snlhX09I601Zj9nMaz2Vky64/NfZTDYFTY32pXovAHeFw+Gy/PQWW2ee1DKEvjiVw8sUwtGUnrD/YoNGK/f39J4dCoetFZHmj26J+3QIETnXTNebEIdd1z/XT1MX5XubKlStfGA6Hr+YJA/OVtHd+OwROStTG2UOlSUubwVPHQWmJPN/GU7gInAic6gucXHGl0y1uo1db6FT9fk6zby6+/9K6X+z6kzyda/AEXQIne18cqFSvwK+01uuTyeSP6i3QjPNKs8/N04Vf2oz2aKNuAQKnuuk4sU6BwoMNROT8RCLxhzpreHbaunXrOkZHR9+tlLpCRA7zrCM0PJtAIXAyU357MfJU4HdKqQ3xePy7nvaigY0PDg4e7zjODUqpwQY2Q+kqBNolcCpTNDN46jlqh8iC+e5WQ+BE4FR/4KS0kg4dKj0/2Lv9nHal05IcbcIkXQKnKj7rc0iDBJ7VWl901FFHfWXTpk1Og9qwWjYajf7/7L0JmFxVmf//PfdW9d6dhJBAICGhE5YESNJ1qwMBGXBknBkZZ+avwrgQl0FlVISEJSqbAVGJorLogIKMsjka5qejqL/5uQUxxKbrVofFMGLYCQQI2dNr1X3/z7lLVXXSS3XXqbrbe/M8uV1V57znPd9z7q2qT73nPU1CiNVEJDfWaFRqnI2pUoCBkyol2c64CgghNrqbUj06buGAF3CXEV8H4ONyL5WAuxsnh2xKgQAAIABJREFU9xg4+TzaoQtdrFAvCTjfA+BGAEdVaIurT16BuWH8BaPc7soldTLC6cDy5YAnWWfkcuXtaqe19qNhTqVRTgycgg+c5ExxEoI5O8l5gKjwR/E1+/WSsm558iq5j4tZhckrPqFd6gQRZIQTkYAmoZMd4+RPPifZN3PHq9idqxS+lnHVM3AqQyQuoliBISHEfxCR3NBlu2LbNTHH0ec1kXmyjTBwmqxyXG8iCvi2scFEnJxMWcMwjieirwsh/n4y9bmOWgWEEN+RAEBmuuUcO2q1Hc+a/PZxt2VZV/T09LwyXuGovX7aaae19vf3XwFgFe8wUPvRjVuEU63BU928nUg09VcwsAycgg+citnngwicJLxq8Hasq0o+J83dne7gLPwSzb7etxeP79tRwTUwgaoMnCYgFhetVAEi+qWmaasymcyfK7UVhPqpVOp0IYTcXVjuMsxHMBRg4BSMcYiqF30AvjY0NHTD448/XsUdPfyXzzCMf3aDHOb7702sPbiBl9TVePyJqFvX9ZXd3d2P1LjpwDXX2dk5J5/Pf1EIsSJwzkXboVhGONUKPInGHBqPfqOCGcTAiYGTM30cmCXjhZyoJ8s9y1fIjmiSLzvn0ggnGemkk45kcWGdTOoE4SYHl1BICDFsjsrnyA7vqyyfk0UWMjtexYCVQw3imwAGThXca7jqBBT4CxFdks1mH5xAnbAUFel0egURrQVweFicjrCfDJwiPLg+dy2QGxtUUxPDMJIAPglALrVrq2ZbbHtUBT4ggdNuHoCaTJHX3Q8r9xcXYNSk3cA3YhjGWwHcBuC4wDsbDQejDZzueutaEK0WdPAX55GGrxpL7epn74be1jvJ2cLAiYFT5cBJ5nJKQkYi2QvrJGFy8ZMTnSTXjnoAypuoxYTgw6+dIowaPqWlJQdSFY+tvbuxpXcPtMLTVnXBEwOnSd5nuFqZCuwC8AUAt5qmWROGWqZfyoudfPLJbblc7moAcofhOuUNsMFyFWDgVK5SXK5cBTZpmiaDHR4qt0LUynV2dh5ORF8iog+N+Mta1DocoP7out7OwKkGA0JEPxVCnB/Wtf41kAjLly9vHBgY+IoQ4sJatBfzNmIBnApfon0AT1oyj/r5b2C0Hb3Gnn8MnBg4qQFOMiaqHvLHvdF2rVMLnfJWHo/sfBWWm7NKtlt18MTAKeZvZ1Xrfl4I8d18Pn9VT09PJSGrVXOwWoaXLl16TCKR+BoRvbNabbDdMRVg4MQTRJUCMtjh6jBtbKCq46PZ6ejoSAshbhZCnFrttti+HU2fyWQynQycqj8b/r29vf2isOxgUn05xm7BMIyLAXzD/n7ER1UU0DTtqO7u7peqYjwARk9xI5wOdKU2EU/2V2y76brD9iNxiEyRN9GDgRMDJ2fOVLKkTkY4yaV1CUog6S6fGzmJuBf5VJyno0U6jQxQi/mcXti3Ey/3y41vgdwBt/CqgScGThO9wXD5cRQgoofc1Aeb4iyWYRhvdz+PLYqzDj70nYGTD6JHrEkZjXmrXEZmmqZcyeTr8e7/eP8xmq5fAbIWCYGH9b7mG35wwXf83HBBLiN+r7uMeI6v4kS8cSHERzOZzHclcJLhwlMi3l+/une/aZrn8RK6iclvGMY1AK6dWC0uXa4CcQVOnj61Ak+kCzQueAOaNtHdshk4MXBSB5zkrnUNQreX1snD3rvO/nP0pXWTyec0YA1h085tcGZ7cc+9qoMnBk7l3vq53PgKvADgctM0141fNB4lzjzzzMTevXtl/pM1AKbFo9e+95KBk+9DEGoHfq7r+iWPPvro03734u13r2huI7ocAp8VQL3nDwG7NMINh+2edtOtF9064JefhmE0CSFWk/QRaPLLjwi3+yyA4+VydAZO1Rvl/21tbe1Yv359JdtVVc+7gFs2DOPnAN4RcDdD6V7cgVMtwVPy0H4kZ0z0xyUGTgyc1AInHQL1QneBU3XyOT23dwdeHZSb35Qeo4MnG3nZIVwV5nhi4BTK96GAOS13alpbV1d348aNGw+cxAFz1R93li1bNj2fz8ukux8HkPDHi9i0ysApNkOttKP7AFxgmqbMFezrsWbNGu3J+U+fp0F8hUgcNqozhKcJ2qUPfOhuXzdjkMuIdV2XPzQs8VW4aDVOlmX9TU9Pz29ktxg4VW9wTzdN8w/VMx9ty0uWLDkykUjIbYebo93T2vcuDsCJQKvtG9zBu7YfJHg1I57kzvSN87dD5nQq/2DgxMDJmS0qltTJCCcnl1MCunCWe468tK78fE4HLq3bnxvEE3ucNDfymjt4tlcRPDFwKv/WwiUPVEBeYvcnEonPdnV1vczyjK+AYRgnAbgJwF+PX5pLTFIBBk6TFC7G1WSU0BmmaXb5rcG7737vyRrpN0GIU8r3Rfw6YWkrf/Dh7/+p/DpqS8poJwByB3mGTmqkvd40TbkJhfPZ0DCMnQCmqrHNVuwvCUS/zGazHJ1T4XQwDONGAJdWaIarH6BAIpGYE+UP12+5661r86DVxa+45YEn58vy+DvblQOxvC/e8pyYOoi6WfI2W+7BwCn4wMm+09sD6kAhZ2yp+EfxNedN4YDHJWXd+sX5Sl5xZcBJ5nKSC+gaRMLNMDYadJpcPqen9ryJ3bnhwbw1A08MnMq9sXC54QqYmqZd1N3dLb9g8DFBBVKp1P8nhPgagKMnWJWLj68AA6fxNeISJQoQ0epsNvtVP0V51x0fmK3X40uAkKlkJpOHd8gC/qOur+lKv/I7uZFOT/IunRXPpDtM07ygNKUQA6eKNT3YABH9fTab/b9VMB0rkx0dHXM1TXtukjeuWGk1kc7GBTh5mgQBPDUcvRNaw2CZw8TAiYGTB7AcWGX/Ixmn5MEoeSY7U5J3FvZjCzKiSZ69pOHeY1muQSTtKCeJVQsZnSaZz8nL87R7sB9P79tREtU0PKyw6uCJgVOZ9xUu5ilARP8phPigzCvBqkxegZNPPrktl8v9AsBpk7fCNUdQgIETT4uJKLCnoaFh9oYNG5wdO2p8vPPbH29qbOj9tKXRVYJES+XN0w6QuG5d48A3ce66iSwPqLxpAKlU6gdCiPcqMRY/I3K81pimef2BXWfgpH4yvAlgFn+QUSOsYRgbAUwgLFNNu1G2EjfgFATwpDXl0HiUvDWUczBwCj5wKkKVsEQ4SeAkIVGTqJPb1NoTsdKldRKBPbXndezPFz8TFv9SB56kr6OSAQZO5dxUuExRgf35fH72pk2b5IY5fFSoQEdHxyJN03xbBlOh+0GtzsApqCMTTL9+bJrmu2ruGkH8yz0r3pMHfVUAc5W3T3hKCLHqRx+853+U2x7DYCqVOlcI8cNathmRtv5ERB/NZrN/HKk/Ejjt4J0nlA71z03T/AelFmNsLJVKrZU7CMRYAuVdz+Vysx977LGtyg0HxOCp3ztjLVmjzxm/Ip4a5uyB3lxOPloGTgycnItJVQ4nJ/LJAUBJ6KjThu9aJ8OdHATl7VxX3tK6N/v347m+kb+3qwdP0r8REowzcArInTccbhDRI9lsliNyFA6XYRivAZip0GTcTTFwivsMmFj/v2aa5mUTq1JZ6XPu+5CBvHUTQG+pzNL4tQn0YF2OLr7/X++XO55V/UilUoYQIlP1hqLTgMwZ8vnW1tbb1q9fnxutWwycFA+4EOJLmUzmSsVmY2vOMIz3A7gvtgJUoeOxAE7kAqcxkobXHDzV59E0700cmHD54CFm4MTAqXrASXKnZhnlpIlJ5nNy8pxZRHhyz2sYILl8b/QLrergiYFTFd4lIm3yV6Zpvj3SPaxx5wzDkF8EOZeTOt0ZOKnTMg6WrjFN8wu16Oi77jlvliCs0YCP2r9Q1egQwKAFun1wqP6qn55/V1WXDqZSqQVCiL/UqGthbkZ+vLsDwNWmaW4fryMMnMZTaOKvrzRN8+aJV+MaIynQ2dl5lmVZv2J11ClgWdaRPT09r6izGCxLdoSTB5w81wICnupn7Udiity5dqyDgRMDp2oCJ7LzODWJZMnSOtmegLPSzotyGnvXutf692Brf3Euy08evoAnBk7BugEH3xsGTorHiIGTYkEBBk7KJY20waoDp0U/OqfuhL76T0DgOgBtfqlJAq8I4NoTnllw55o1a0p/N1bmEgOn8aUkooeI6OKenp7Hxi/tlJDASSYWOaTcClxubAWEEB/NZDLfZZ3UKJBOp5cRke/bfKrpTTCsRB84ne4CpxF+fPEZPImEhcb528eJcmLgxMCpusBJfkprcROITyafU44sPLHn9cJuegfe2WT002iH6oinISHO3rM6IxMXR/JIp9MXEtGtkeycP51i4KRYdwZOigVl4KRc0IgbrCpwevfdK94pQDcJoD1AOmZ0gYv/c8W9yncZZeA05ii/AOBy0zTXTXQuMHCaqGLjlBdCnJ/JZO5SbDa25jo7Ozsty3o0tgJUp+NHmKb5anVM+2/11O95wMnzJVjgKTGjF/XTx4oIZuDEwKn6wEkjDa16UkoNrbhnnZ3Mabx8Tq/07cL2wb6SnelGvu5rAZ7yYODk/103VB4wcFI8XAycFAvKwEm5oBE3WBXg9C93r1hogb4O4O8Cqp/8aeuBfhKXPfihe15U5SMDpxGV7AVwa19f3/WbN28eb5nGiAYYOKmaoa4dBk5qBWXgpFZP11rkgZMFsVpuxz78GGW5+SjBGNXK8QTNQnP7Tgh9tNx6DJwYOFUfOMkk4g1aEg1CB4ny8zkNWDls2bvdhU3OxTPevsXVBE8MnKryHhFlowycFI8uAyfFgjJwUi5oxA0qBU7n3Hn+IVTX/3kB8SkAetC1I6AXhK9utxI3rP/I9/or9ZeB00EKPpjP5z+9adOm5yvRloFTJeqNUJeBk1pBGTip1TNOwMlTLojgKTltAPUzR9uVm4FT8IGTnF0ObHF2kvMAUeGP4mv26yVl3fLkVXIfFwEnFZaqVWOXOgmaZFvyLP9N0xvc/E1OXJP3/2j5nJ7v3YnduQEcfF2RL+BpABovqavK20RkjTJwUjy0DJwUC8rASbmgETeoDDi9++4VaU1YvwSJQ8OmGRH9KdnffOYPLvjOuAmsx+obA6eCOj2WZa3s6en5vYq5IIGTHJjpKoyxDcgkrLykTuFEYOCkUEzXlKZps7q7u7eptxwMi3JJnYxwOtCbIIEn+WW+ad4OiLqhEURj4MTAyQNYDqyy/xFguWdJuErBkQRIMmG3JUuQsM/CPXuPZXmHfRWBk7QnI5yatLoyltYR+nM5bOndYdvxAJnf4Kke2tkvcw6nYNx8w+EFAyfF48TASbGgDJyUCxpxg8qA0znfX/FbCHprWPUSFn3lRx++7zOV+M/ACfJD3nXt7e3fXLdu3XgB7GVLzcCpbKnKK8jAqTydyi3FwKlcpcovF1fg5CkUFPCktw6i8YidDJxceFEcF4HgA6fiOswwRzhJ4CSPVq0eSaGNC51kdNO+/OCwOes3eKoHGDiVf/vnkgADJ8WzgIGTYkEZOCkXNOIG1QGnu1e8DNCRodWL8NN1H7r3nyrxP8bAKSeEuIuIrjRNs6IosZH0Z+BUyawcoS4DJ7WCMnBSq6e0FnfgFCTw1HjUbuiNBy455wgnBk7OLK32kjobOBGgC4FWvQEyy9lo+Zz25obwUt/ukhvS8ORnfoEnBk7q3yMibpGBk+IBZuCkWFAGTsoFjbhBZcDpPfect1UQjgirXgL42Y8+eO8/VuJ/HIGTEOI3AFZmMpknK9FurLoSOL0BIHRrNaslSKV2GThVquDw+gyc1OoprSUSicO7urpeU285GBZPudvZpe7gSKaR/fMz4klrGELTXGeJUvFg4MTAqbbASYKnVr0e9cLJDyqcBE5OPieZUJyAZ3p3YchyEt0Pj7H2FzwliSOcgnHnDY0XDJwUDxUDJ8WCMnBSLmjEDTJwcgeYgdOEZ/oWAFeYprluwjUnWIGB0wQFG684A6fxFJrY6wycJqZXOaXjApw8LWoFnmR7o0d5jDwygjQ0HLkHiZY+Bk4FbsFL6tx0SzWLcJLASeZ8mpZsdKOcAK2YPhw7c314fWC/A6FK+NJkwdPB0Gr49TGRXe0YOJVz1+cyJQowcFI8HRg4KRaUgZNyQSNukIETA6eJTvH9QogbW1pabli/fn3FO/uV07gETq8DmFFOYS4zvgIMnMbXaCIlGDhNRK3yysYNOAUdPOkJCw3tb9pf9J2DI5w4wsmZCbVaUuclI2/SkmjUk8OW1uVAeLl3NwZtClbcS2+i4OlAWOVt7TdWRspywFOSiHM4lXfr51KOAgycFM8EBk6KBWXgpFzQiBtk4MTAqdwpLj/IPaBp2qXd3d0vlVtJRTkGTipULLHBwEmtoAyc1OoprQ0NDR32+OOPS9AcycNbUjda54IY8dQwsxfJqU4ECQMnjnDyI8LJ2QUPmJ6UuZzkPyef067BXuwcKv4Alrcjn4IDnjSSu9R1/SKSNzMA6XT6QiK6Nar986FfDJwUi24YxjMA2hWbjbO5p03TPC7KAjCkVDq6DJwYOI07oYQQGSHExd3d3Y+MW7gKBRg4KRaVgZNaQRk4qdWTgdNwPcuBT5XmeJItFr+eD1+S5Hmj6YTmo9+EnSyHI5x4lzp32VqtI5xkpJPM49SWcBKI58nCi/274QGw0qunfPAkaxXX4Y1+LThlxop4yttL/4Zfwwyc1L9HRNwiAyfFA8zASbGgHOGkXNCIG2TgxMBprCn+KhGtyWazdx7wdaSml4UETjJ58Myathrhxhg4qR1cBk5q9YwLcLIgVsu+lgOUyi1XbfBUf8gA6g7dw8BJRtCQODgflg0ahLvMzElqXUAZVMQYZNf3XnOfJ6d8gVUQlSAQ54XSZ4YDFoJVAjkcCFS0VvJn0UYpMLKLOk8U2x/ennyhtAf+RTgRiAhTEw2o0xLYMdiLfbmBYcD0wDuS3+CJgZP694iIW2TgpHiAGTgpFpSBk3JBI26QgRMDp5Gm+BCA2xKJxNVdXV3yy4WvBwMnxfIzcFIrKAMntXpKa5Zlzezp6ZG7U0bykEvqLJANnGS0kDzCAJ6EBjTP2wmRsKDbgMSBJM7iJtkH5+w9tvtGpY+d8rpbblh9m3R49W1rriYlqaFJFBJFF+oeYMsuYZMRzzcX/BR880CQ51sRDDlQx/XDJS/euEiTxTFi4OQ3cNI0DVP0erzSv6/k+rECCZ50i5fURfJGXr1OMXBSrC0DJ8WCMnBSLmjEDTJwcgeYd6lzhCCiXwO4KJvNPhWUuc/ASfFIMHBSKygDJ7V6SmvxAk6efuEAT8kpg2g4bC8DJ45wcj40OJ8c7MgpJ8eSc7bjo4hsAOSdhf3YAtnaWfauc6WPZTn3g0hJPYcCenads1NOAsBea/gCNwcKBgs8DQhx9huXcg4n9e8UkbXIwEnx0DJwUiwoAyflgkbcIAMnBk7eFH9aCLEqk8kELq+lBE7bABwW8YuxZt1j4KRWagZOavWML3AKB3jaNziEqfP2obVJfrPnCCcPfBTpCy+pqxVwyluEwZKliqV3omqCJwdpOcfwyMSRczwxcFL/HhFxiwycFA8wAyfFgjJwUi5oxA0ycGLgtAvADX19fd/YvHnzYBDnOwMnxaPCwEmtoAyc1OoZB+C07N7T18LyltSNpl/wIp4kSHhm5140tVpYuFBGljBwCi5wKiZ1imIOJ/s+QYS8jJpyI6lGupKCAJ4YOKl/j4i4RQZOigeYgZNiQRk4KRc04gYZOMUXOFlEdF8ul7ss6LuPM3BSfBdi4KRWUAZOavV0rc0wTXN7VSwHwKgETkQOcBo/d1NwwNOu/f3Y2jtgK7h4EdAyxYnz4BxO7qQKVNLweAAnOQNlpJOXfat0h7nSS91P8NTLS+oCcNcNlQsMnBQPFwMnxYIycFIuaMQNMnCKJ3DqEkJclMlkHg3D/JbA6VUAh4fB2TD4yMBJ7SgxcFKrZ9yAk6de0MFTziJs2bEHeZdjTG0Cjl+St5N4M3Bi4ORHDicvssnOEVW6vd4Y++r6Ap4Ezn6BczhV5Y0iokYZOCkeWAZOigVl4KRc0IgbZOAUL+C0VQhxRSaTuad08+Ogz3EGTopHiIGTWkEZOKnVMy7ASbgRTgdGZPgBnqTmw9t1oqpKj617erGrX+5gWjwWHkOYdigxcPJgB0c41TRp+HDgVMwp5szQYoTXSFFP5YMnacuxUHqNDE9VPry9Yg23DgOnqrxJRNgoAyfFg8vASbGgDJyUCxpxgwyc4gGc+gDc0tfXd/3mzZudLYRDdEjg9AqAWSHyOdCuMnBSOzwMnNTqKa3pun7oo48++qZ6y8GwKJfUecDJ82j0L8Wj+ax+qd2BX6rlYjl5DAzlsGXn/oMcaawDlnRYSGieL87Zi3iy61PpYyfnk04e0CrJAWXzAa++7Yn7BV/GUHmPZTSV86iQP+oAW3YJW0zPtlveLVes7/nm2XMYhYMpnNdK9ZAmi8BBAIHfpS4+S+pkhFPehkLaCEtU/QdPAhzhFIw7b2i8YOCkeKgYOCkWlIGTckEjbpCBU/GT689+9MF7/7GS8U6lUguEEH+pxEYV6j6Yz+c/vWnTpuerYLsmJhk4KZaZgZNaQRk4qdXTBhJxAE6g1SVBGAURgwieXtjRi325g2M6pNML5hIOP8JFQgWo4wElBk5SIydpd3FkScIwl4OQt98ZORoWV4bJRWolhw3DSiDSAS8Wl5R57RWtRTlpuFS1CJwAHVrJ8roDBHQf1jriiRg4qX+TiLZFBk6Kx9cwjC0A5is2G2dzT5umeVyUBTAM41kAR0e5jzXsGwOn6AKnTZZlXdzT0/P7Gs6nqjTFwEmxrAyc1ArKwEmtnrECTp50w+CB82RQwNPe3iG8tLd/1EFOJgTSHQQ9ISOAOMJJRlY5gKcYOcXAycFqwt5NzgLZ0WEWhHv2HktwZEvn7jrnnJ2wM3mWLztnp1zpkjonwkkCJ3k487AUwhUncHUjnmQ7w9GsjQk5h5P6t4koW2TgpHh0GTgpFpQjnJQLGnGDDJyiB5x2ALiuvb39m+vWrRv5F+mQTWoJnLYCOCJkfgfWXQZOaoeGgZNaPaW1urq66Rs3bpQ3s0ge9pI6GeF04BEw8CS3nH/+jf0YcL/gjzYY82ZpmD1PAgQGTgycHDBkx2MNA0e1AU4SXiVEyTLJAIAnAjFwiuSdvGqdYuCkWFoGTooFZeCkXNCIG2TgFB3glBNC3EVEV0ZtN3EGTorvQgyc1ArKwEmtnrEGTp6UAQFPb+wZwBt9g+MOcL0QWLJUoL7eKco5nDjCyT/gRBBCh27n8Bp+IfkV8ZRj4DTuPYQLDFOAgZPiCcHASbGgDJyUCxpxgwycogGcfgtgpWmaT0RxvjJwUjyqDJzUCsrASa2e8QBOp64VwGpv6c+oCvoInvrzeTy7vbfswZ01HVhwDEc4BSfCKY5Jw53lePK6SojSnRb9BU8MnMq+jXBBRwEGTopnAgMnxYIycFIuaMQNMnAKN3B6BsDnTNNcF+V5KoHTywCOjHIna9k3Bk5q1WbgpFZPaW1wcPCQJ554Yqd6y8GwmL7/1LUasNrZTU0epV+OR/DRB/C09c1+7BkampBgqRM1NLdwhFMwcjjFFzjJZAJJFzoNz4V28IV0cNST+hxPeeIldRO6kXBhBk6K5wADJ8WCMnBSLmjEDTJwCidw2i+EuLGlpeWG9evXj57MNSKTl4GT4oFk4KRWUAZOavWME3DylKsteHIAlxgBYnn+9Pbn8cKu8qObvHozWgWOP0HwkjopiO9Jw+MNnGQupwZNLu508jlVBzxJuyOl93euiLzbdp7ynMNJ/dtElC0ycFI8ugycFAvKwEm5oBE3yMApXMBJfoB8AMBlpmm+GPG5WegeAyfFI83ASa2gDJzU6hlH4OQneJJtl8InuSTpue37MZAfg0iNMeSLj9MxbZqXtFmz0+gUczo5z+tucnG5/MzBX045L9LLifcSrl8eMpCPJczybLt1D7Bll7AZgGfbLV9IaH6gbyUJpp0N0Rw/3O572ji7rBVGygZKHmooPG+/HpRd6uIOnMhOHl4nEsNmqx/gaZC0s1+4dMMv1N8pg2ExnU5fSES3BsObSHjBwEnxMDJwUiwoAyflgkbcIAOn8AAnUwhxcSaT2RDxOXlQ9yRwegnA7Lh1vFr9ZeCkVlkGTmr1lNby+fy0TZs27VJvORgWvSV1Y3njQJNaLLUrtiPByZv7BvH6voFJCzWlUWDJYh3ORmEMnKQKzhK7IuogCcNcHkQetnIjogqYiGh4ymsbhpVApGE8kFC6NMxpj4FTHoQmPVECOIvTWjV4slEjjRzxlCDt7KcYOE36nhLDigycFA86AyfFgjJwUi5oxA0ycAo+cHqViNZks9k7DwoKj/jk9LongZMM55oTk/5WvZsMnNRKzMBJrZ7SWtRzOKX+89S1CUsmDR//KGu5nZIcT0AuDzz3Rh/yJXBkfA8PLrGoXceMmZI4MXDyDzgVWnaBlzNOBWhVAF7u+LmAqgi8hgMuaaQUmXk8y4Nb0q58znLPfu5SJ3M4yUg9CZzqoKFOT9o9H2kZaS3AEwOnydxFYl2HgZPi4TcM4y8AFig2G2dzT5umeVyUBTAM41kAR0e5jzXsmzLgdO73z3uWRIjHRdAD61bcd04l2p988smH5XK5bZXYKKk7SEQ3NTY2Xr9hw4a9imyG0gwDJ8XDxsBJraAMnNTqKa1FPcJJAiedHOA0Vi6lUmVrAZ627RzArv5cxQPamNCQ6tCQ0Bk4MXBy4I+zJFGeLcj8SvIsl0iWPnZ2mCuWd+o56xw9kOWcnXKWa9eBSw46cv4uAid5fdXrur20zi1Rc/DEwKniW0rcDDBwUjziDJwUC8oRTsoFjbhBdcDpnvO+RYRPhlWvPKyP/p8P3v/dCv2XbGQPgJZK7AghfpbL5S7dtGmTBPKxPxg4KZ4CDJzUCsrmZNfRAAAgAElEQVTASa2errWppmnurorlABgtBU6eO36Dp95BCy++2adMnQWzEzhyNgMnBk7+Aye5WrFNry/M7VqDJ90CL6lTdmeJhSEGToqHmYGTYkEZOCkXNOIGlQGnt9+9onkKrNsAcV4hWWc4xBsi0NoHVtx3jZfqsxK3DcO4H8D7JmnjaQCXmKb580nWj2Q1CZxeAHBUJHvnQ6cYOKkVnYGTWj2ltThFOB2onl/g6aXtfdg/NPqOWxMd5aQGpJcmUZcs3bWOk4Y7AKoWOZwKqCvWS+rk9SSX1jUIHQ320rriUTPwpOHspy/mpOETvYfEuDwDJ8WDz8BJsaAMnJQLGnGDyoCTp9O/3PvhTiufvxmClgdfO/HrhKWt/MGHv/8nVb52dHSkNU3bCGD4zihjN7BLCHEdEX3TNM0hVb5ExQ4DJ8UjycBJraAMnNTq6VqLXYSTn+Bp9/4hbNs9qHwg58xMoP1ouQedl/ycgVPtgBMnDZegyQNOchXe1EQ9hJPNvmzwJAuW5q46qO5B+dOKTxTqMXBSfm+JuEEGTooHmIGTYkEZOCkXNOIGlQMnWy+CeM+9718B0tcK0OGB05DwNEG79IEP3f1gNXwzDOOzAL5chm35ceS7lmVd2dPT80YZ5WNZhIGT4mFn4KRWUAZOavWU1hKJxJSuri65PjmSx0hL6kbraLUjnnIW4S+v98mEOFXRunNxEi2NumubgRMDp9rncJLgSQInXdPQpteNOs/HiniaOHhyRtqux8CpKveWCBtl4KR4cBk4KRaUgZNyQSNusDrAyRVNLrNrI7pcE/gMAQ1+a0nALo1ww5ONA9/YfO469b/mlnQwlUp9XAhxK4DRPtw8CuAi0zS7/NYl6O1L4PQ8gLlBdzQs/jFwUjtSDJzU6ulai3yEkwZyk4YfHHExkqLVAk/bdw/gjf2VJwofbRbMnKbhhGO990EGTgyc/ANOEjxN0evRoGl2YvHRDtXgydKIl9RV5W0iskYZOCkeWgZOigVl4KRc0IgbrCpw8rQ7787zFvTX4UsCqGgXuArGwgLovhy0y378wXter8DOhKouXbp0nq7r5wM4001B9CaAJzRNu6u7u/uhCRmLcWEGTooHn4GTWkEZOKnVU1qLQ4STBms1ZC6fkkPu2jXeoRI8DQxZeFZGN1X5MBbWo61N9o2BEwMnf4GTDg3Tkg1wYu6cHe2qDZ4YOFX5BhM98wycFI8pAyfFgjJwUi5oxA3WBDh5Gp5z94q/JqJvCIHFNdR1vSaw8ocr7n2shm1yUwoVkMDpOQDzFNqMtSkGTmqHn4GTWj3jBZw87fwBTy+/0Y+9g2N95VYztoc0Cyw5Ue4SxsCJgZO/wEmuHJ2SqEOTVppns7rgiYGTmvtIjKwwcFI82IZhyF2ZjlFsNs7mnjZN87goC2AYxrMAjo5yH2vYt5oCJ9mvNWvWJP40f8u/EuF6AcyoWl9JvERa/qoHVtx/d9XaYMM1UYCBk2KZGTipFZSBk1o9pbWGhoa2DRs27FVvORgWZQ4nJ8LpwKN24Gl/bx4v7uyvmSCLFyQxfbrzJV+n4UnE7aTidrob53nnf2EnfJaPHFXkY7njnaeRc9YOsGWXsNdEua975d1yxfpOm8XHTsodJ+uO5w9cH5zE0cXoMrnLnCgkky48b1cW7q5wxbG0n6bS1NO8S50Fyx5PeabC2VGfiGxtnbMzKPIs8zA5Zzc3Ukm5vDsa8jWJUJ3z8KTh8rEETpYAZiYbkRDeHPMug+qAp5zgJXU1u9FEoyEGTorHkSOcFAvKEU7KBY24wVtM07zYjz6+/75PTOu39n4mQVhFo+c5mrBrAthvEW7cbiVuWP+R79Xuw/SEPeUK5SrAwKlcpcosx8CpTKHKLMbAqUyhJlAs6sBp6Q9PWasDq0dfHldd8GQR4fnXBjGQL0KQCQzPpIo21wt0LmmA3CSMgRMDJz+BkyRYDbqOqYlibtHh16Ja8MTAaVK3jDhXYuCkePQ5wkmxoAyclAsacYP/Y5rm3/nZx3O+e95xSOLrAN5RoR/yJ68H+klc9uCH7nmxQltcPUAKMHBSPBgMnNQKysBJrZ7SWlyAk6dcrcHT9t05bN8zpH7gxrF4/NwkZh2eYOAko67cTQGdWB4ZkuNAxsJegUTFv90XSp9xg3xcxZ3IHe9wIqqK1kr+lPFBbnvDTjIk6ID2pYnhRktjtLz2HduyZGkEktP28EglGSEme+v/kjrpm9Tr0PpGNAitEKkmvZ4IeJLlZcTVaNevp1dOWJw0vOZ3m1A3yMBJ8fBxhJNiQRk4KRc04gZzuVxu3mOPPbbV736e+/33n0XQboHAwkn4ktEFLv7PFfc+Mom6XCXgCkjgxOtoFQ4SAyeFYgJg4KRWT2ktbsDJU7AW4GlwyMILrw0gX8IS1I/gyBaTCYFTltShXvfy53jL3nhJHQMnCaJqs6TOAU4WkkLHjPrGwrLK0ng/leBpUIizn77497+o1XVW63bS6fSFRCS3ZeZDjQK/NU3zbWpMsRWpgGEYzwBoZzWUKcA5nJRJGQ9DRPTtbDb7b0Ho7ce//fHkzobeT0LgOgBt4/lEAq8I4NoTnllw55o1a2q3NGA8x/h1pQpI4MRvFAolZeCkUEwGTmrFdK1FHTgt++Epa/PACDmcHAGqCZ62vTGEXf25qoxbOUYXHJHAvNkygbjdU/t/zuFUjQinIlHkCCcn+srL4eQBpxwEZiYa0JRIlsaWKY94EkKc/QQDp3JuD1zGUeAF0zRlsmIffhaI3hAsXry4OZlMym3CvTee6HWy9j1i4FR7zUPfohDio5lM5rtB6cj7vv3xQ4ca918tID4l04se6JcABi3Q7YND9Vf99Py7IptXNijj4bcfDJwUjwADJ7WCcoSTWj2ltb6+vtbNmzfvU285GBYlcCIXOI31U4lq8NTXZ+GF7QO+ilAvBDoXN6ChXqYGZ+BUvSV1DJxGSxpeCpzkxXBUQ6ubqF4+KuqmKuKJgZOvt5ywNv4B0zTvD6vzQfI7nU5fSUTXB8mnCPjCwCkCg+hDF+Qb7C11dXWf27hxY58P7Y/Y5LvuOS+lEd0kIE73ChDowQFoF/3sg/c8FxQ/2Y/qKsDASbG+DJzUCsrASa2ecQFOlqDVcpcu76g2eJLw6rltAxgY8j8a+KjpSRw7v46Bk403qpXDiYFTOcApTxZmJOrRliwmEHeuSXXgSQNHOKl/l4i8Rbnr0Wfa29u/tW7dOrnxIh8TVGD58uWNAwMDVwohPlfY/HSCNrj4qAowcOLJUYkCLxDR6mw2uy4wkZwE8S/3feBvYGFRDtof/uuD92Qq6SDXDZ8CDJwUjxkDJ7WCMnBSq6e0NjQ01PL444/vV285GBZlhJMETqXeePCpWuBp1548Xts1GAwBAJxyYgNampxcTrykjpfUOcnEa5vDSS6pk8ApCQ1H1jcjqQ1PID4WeJKvFSMQx97VDgAvqQvMnSd0jvyvEOKSTCbzy9B57qPDqVTqnUKImwHIpYl8qFeAgZN6TeNo8VHLslb29PRsjGPnuc/BUoCBk+LxYOCkVlAGTmr1jCtw8lSsBngasggvvTIAeQ7KMaM1gSULnagSBk4MnPwETnIONusJzKpvLkCkg8HvyBFPZYInBk5BufGE148HAaw0TVPmNOVjFAXS6XQHgJuI6K9YpKoqwMCpqvLGyjgR0b26rq/u7u7eFquec2cDpYAETlsAzA+UVyF2hoGT2sFj4KRWT9das2mavVWxHACjI0U4HehWOcvtys3xtH37EHbsD96qjM5jGzFlqs7ASQ6+u7yygDWIhmcMJrnIq2SZ3DB2KHddK86gYpJwN2LItu+8XrBReOzW86KLPDMHtCfrFyGMk4S7YNb21XnOcs92S+QsGPTOwn4sI5mEfZZzvPSxXxFOXpclcJLgSR7etTVZ8CRtlFxxDJwCcN+NgAtDAG5LJBJXd3V17YlAf5R1YdmyZdPz+fw1AEZM/qusITbkKcDAieeCagX2CyFubGlpuWH9+vVySTEfrEBNFWDgpFhuBk5qBWXgpFZP11qkgVN6XXotSB91l7pSRSsFT4MDhK3bhjA0bO+tqozZhI1ObdBgnNQMXQgXiMhE4jLiyf7K737p19zU4vKxKGxhX0g4Tk5p77FdwqYEXkJyN0+WW86zZrdC8v9iHi352OEozmu2FfcsTRYBn/RXwpLhZZw6wjmV5OdyHpfiGq+/1czhZDdqO8i71I2+S51cUucdSU3H3IbWYSklFIEnBk4TvjtwhTEU2A7g+vb29m/GPb+TYRhyi8lPArgWwBSeNTVTgIFTzaSOXUMvCSGuymQyd8eu59xhXxWQwOkvABb46kWEGmfgpHYwGTip1dO1FnngRNBs4FQKlMZScrLgaeu2QewfCM5SugP7uOToBhw2o46BE0c4+ZbDqXROHl7XgJaEl0C8eN1UAp7yIAZOVXmbiL3RLBGtzGazD8dRic7OzrMsy7oJwAlx7L/PfWbg5PMAxKD59Zqmreru7t4Ug75yFwOgAAMnxYPAwEmtoAyc1OoprdXV1TUFactU1T2UEU4ecPJsVwM87d+Xw9Y3g7eUrlTP5qSGU5a4UU5ubBNHONnr0HhJnb0Ezwk785bqOWcHBFklS/bybryZfE3OeOdMdlSaPMsq8uwsPZRnC17S8NL5qAsN8xpaIM+lMWnF69T5ayJL7Sxi4KT6Hsr2hinwYD6f//SmTZuej4Muy5YtOzafz39dJuOPQ38D2kcGTgEdmIi5ZRHRfclk8vKurq7XItY37k7AFGDgpHhAGDipFZSBk1o94wqclIMnC3hx6yAG8sGNbvL6fPycOhx1uIwq4SV16nI4leR7chiLfXAOp7GBk3x1aqIOM+uaCje2SsETAyf17xFs8SAF+gDc0tfXd/3mzZv3RVGfk046aVpdXd1nAKySv0tFsY8h6hMDpxANVgRc3SeE+NquXbu+vGXLloEI9Ie7EEAFJHB6GsAxAfQtlC4xcFI7bAyc1OoZd+CkCjzt3GFh+x6ZYzb4h64LnHFSKxJJBk4MnIpJxp1k47WNcPKuFpnLqV7Th108kwVPOY5wCv5NKDoebhVCXJHJZO4Zlows3P3T0un0eUT0VQAzw92VyHjPwCkyQxmqjshNxK4wTXNdqLxmZ0OhAAMnxcPEwEmtoAyc1OoprbW2tjZGeZeKkZbUjabiZJba5YYs/OWVIWjBD24qdLt9ZhIL5jbbj3lJnYoldRzhNJkldd6EbNR0zLETiB98TBQ86URnZy7+/S/U3ymDYTGdTl9IRLcGwxv2wlXgUcuyVvb09GwMsyKGYbwVgMzTtDjM/Yig7wycIjioIerSb4loVTabfTxEPrOrAVeAgZPiAWLgpFZQBk5q9YwLcLKEKOxSVw5UKqeM1E6We+O1IezoOzjLjPqRUmdRF8CpJ7ahsUFj4CRlrTiHEwOnSoCTHII5dU1oTIy+cqdc8KSTxcBJ3a2CLZWvABHRvbqur+7u7t5WfjX/S3Z2ds7J5/NfFEKs8N8b9mAEBRg48bTwWwE7v1Mul7vs8ccff91vZ7j98CsggdOfARwb/q4EowcMnNSOAwMntXrGETh5CpYDlcYrM9ALvPDaoPpBqYHFI6clccKCZgZODJzspNx+LqmTQyATh89vbLPn41j4djzwxMCpBjcPbmIsBfYLIW5saWm5IeiRw4sXL26uq6u7nIhkriZvu0ge3eApwMApeGMSV492Abhh9+7dN3F+p7hOATX9ZuCkRseCFQZOagVl4KRWT2lt9+7dDVF+45BL6kojnA5UcDyoJMuPVEZ+QX9lax77h8IV3VTa/1MWtmBqS0L20N5hTC6wE3YB+VgUHsnH9qvkLMDzHtsl7O67r7tnuOU8a/bCPSpat0046YKcRX1ugJDjgwMcvL9t2yQKEKLwvF1WOFXJad81C1AplpD1vdfc593ynMMpGDmcvLE7NFmP6W4CcTn/rDHQ02jgSXCEk/o3CbY4GQWCnP9EpNPpFUS0FsDhk+kc16mpAgycaio3N1aGAjLf81Wc36kMpbjIiAowcFI8MRg4qRWUgZNaPaW1uAMnT9GJgqdduyy8vjOnfkBqaHFGcwLGohYGTrykzvcIJ2/az2+cgoTmgU0H9k4EPFnCOnvThZzDqYa3EW5qbAV+R0Qrg5L/RH6GIqKbiWg5D1xoFGDgFJqhipejRPRrTdNWZTKZJ+PVc+5tpQpI4PS/AI6r1BDXdxRg4KR2JjBwUqtnHIBT6r/SawlidTFiZmwNywFPyGn4y8sDY6/9UT9UVbGYXtCMQ6fVcYRTqbp29FVJXqZhCeEJVsljJ8Kq8F/pn0UbhQgrtxFynihGWA1vT75QGsHjFndtS89Ipp2yd5VzXpNnuctcMWJJ2I8tkAtsPHDjPZbl7ZrD6vmzS12p9G16ErMaJAQdfpQLniyRZ+BUlTsFG61AAd/znyxZsuRIXde/LIQ4rxCSWkGHuGpNFWDgVFO5ubEJKpATQtyVz+ev6unpeWOCdbl4TBVg4KR44Bk4qRWUgZNaPaW1vr6++s2bN4czEVEZcnjAySuqAjxtfz2HnftCtC3dGDq11es4+aRWJOzlcLykziNBDJw8oOXMc6sETOVdHCZhVd6FVpUmDS+dovPqW1GfkEs9Dz7GA08QODtz4e94l7oy7o1cpOYK7ASwtq+v7xu1es9dvnx54+Dg4EVy+QuAg0luzSXgBiehAAOnSYjGVWquwA4A17W2tn5r/fr14Q7/r7l08WtQAqenABwfv65Xp8cMnNTqysBJrZ5xBE6Vgqf+QcK2ly0MjZnaWP04VdPi4rlNOHJGPQMnT+QJRzjxLnUqgVOT0HFUY6uMEB71KhsVPDFwquatgm2rUUBuznOpaZo/V2NuZCupVOqdQohbAMyrZjtsu+oKMHCqusTcgEIF/iyEuCSTyUT2hx+FWsXWFAMnxUPPwEmtoAyc1OoZH+BEq+3k1CMcE4l4kkuUtm21sH8gGtFNnhyNCQ1vOWkKEjpHONmaMHAqWbJX+wgnOQSzkk2YWichqHOMlpr/IPDEwEn9mwRbrIoCMv8JEV3c09OzWWUDhmGkANwE4HSVdtmWbwowcPJNem54sgpU6/42WX+4XrAUYOCkeDwYOKkVlIGTWj1da3WmaQ5VxXIAjDpL6iRw8o7Jg6f9ewivviEXEUXvOH5WA44+spl3qZNDy8DJd+CUhIb2xinQ7ATiRdw0Lnhi4BS9m1O0eyTfe28DcI1pmrsr6eqyZcum5/P5awB8CoBeiS2uGygFGDgFajjYmQkooOz+NoE2uWgIFJDASf7SsjAEvobCRQZOaoeJgZNaPeMCnCzhAKfh0UwTA0+WRdj6ooWBfLSim7wZldQETj9xChrq5PcUYe8O5sU7ycfy0MjTzHlsl7AJgPu6e4ZbrlhfsyFO8bEHdWyrhezZ3vhIk8WxEoCd+No5Cs/bwyDcRNpO+/JwcmiXptyW9b3X3OfJKV9M2l2asYmBk5eM3Dn7E+Ekx+eQRB0Oq28tuemND5400NldnMOpKm8UbLSqCrwJ4Avt7e3fXLdu3YR+1TAMIwngkwCuBTClql6ycT8UYODkh+rcpkoFJn1/U+kE2wqOAgycFI8FAye1gjJwUqunay3yEU4ecPLUmwx4evPNPHbuiiZs8nSZN70ei46WeWUZOE0saTjncFKZw6n0Lnd0Yxsa9IQNHYcfDnw6MOKJgVNV3iPYaO0U6LEsa2VPT8/vy2mys7PzLMuyZJ4m/qG4HMHCWYaBUzjHjb0+WIGniOiSbDb7f1mceCvAwEnx+DNwUisoAye1esYVOI0MnuSzB0c9STiVGwKefSkHLdq8CXIZ06mL2tDclOAIp2L8k728rHgQrJLHTkQVA6dqAacWLYGjmtps+R2txwZPDJyq8h7BRmuvwIO6rl/06KOPPjdS0+l0+jgi+jqAd9TeNW6xxgowcKqx4Nxc1RV4EMBK0zSfqXpL3EAgFZDA6U8AFgXSuxA6xcBJ7aAxcFKrZ9yBU7ng6dVXLPT2jpY9pipj4pvRWW116Di2jYETAyf4vaTOuwhm17egLVlXuCbGAk/gJXW+3Tu4YeUK9AH4Wl9f39rNmzfvk9ZlnibLsq4logsAJJS3yAaDqAADpyCOCvtUqQIDAL7R0NDwpQ0bNuyt1BjXD5cCEjg9CeCEcLkdXG8ZOKkdGwZOavWMA3Ba+uP0Wp1odTlJMQ7esU5D/37C1lfLqV2VsfHF6GnHTsXUVhnv5EWTcA6n4kCMFOEkX3WinBwY4pQuLMsrPHatuBFRxRxSJWXd+qVZqLwAKi+aStqVz3m5luzaRPbyMu8s7McWyM5/ZdkAsfSxl5tpeD07W3rBblCAU70QmNc8FXphPnr6jhTxlOccTr7cNbjRKiqwSwjxsGVZCSHEmQAaq9gWmw6eAgycgjcm7JE6BbYJIa7MZDLfG2NDWnWtsaVAKMARToqHgYGTWkEZOKnVU1prbW1Nrl+/PqfecjAsSuCkubvUSaBUDjrywJP8Mr71RcJAZPfwG3mMZjQmkV7UhkRhoyMGTgycikAr72ZOkteHvJ6cM9kJ3eVZwjB5dpYeyrOFHATyJcncJ3p3ODTZiJn1zSN+Hh0e8cTAaaLacnlWgBUItAIMnAI9POycIgWylmWtKjd/naI22YxPCnCEk2LhGTipFZSBk1o9pbX29vbERHfFUe9F9SyWAievlXLB0+4dwJtvxmMp3YEj0DmvFYdP935IZ+A0NnDiHE7VBk4y3m5OUysaNLkhlzwOvi7dHQo5wql6t1O2zAqwArVXgIFT7TXnFv1TYMz8df65xS2rVICBk0o15V5PQpyfyWTuUmw2tuYYOKkf+jgCp3LAE+WBl58nDJVmiFYvf2AtNid1/NWJhyChSdjEwImBk78RTlL/Nj2JoxqnHICahoMnIouBU2DvKuwYK8AKTEIBBk6TEI2rhFqBQQC3NzQ0XMX5nUI9jqM6L4HTEwBOjGb3at8rBk5qNWfgpFZPaS3OwGks8PTmNsLuvRHflm6c6bTkyBYcdXgTAyfepQ5WSY4oP5bUeVN1bkMrWhP19sPhqMl5xMBJ/XsEW2QFWAFfFWDg5Kv83LiPCrxCRNdms9k7Ob+Tj6NQhaYZOCkWlYGTWkEZOKnVU1ozTVOP8o1cLqkTwlotkyaPd3hL7Qb7gZdfiudSulKNkgmBt50wA/IsD40092XnsZBpxW2Z3Ne9pM5uuWLScc1ORl187CTWdjiO85ptxT1Lk8UE7gKwE14PL+PUEW6S7uLYusuqCt0g6VMhabdrxZ0LxaTdhfTeTj3bt5JlcgycAgOc6oWO+c3T5KwpHKVXqk44e8OFv/rFeNd6WF9Pp9MXEtGtYfWf/WYFWIEJK8DAacKScYWIKWACWGma5h8i1q/YdoeBk+KhZ+CkVlAGTmr1lNaiD5yWrhVCrPagyHjgSUZvbHtRoK8/3tFN3kxbOLMRC+a0OWiIgZObBLt4HXo7x3nP8C511UkaXnrnO6KuCYfUN9og8sBDMHBS/ybBFlkBVsBPBRg4+ak+tx0UBeTHqwfy+fzqTZs2PR8Up9iPySkggdPjAE6aXHWuddCHX87hpHRSMHBSKqdtLD7AydPOjc4ZJeJp327CttcYNnlqyS3p/+qEQ9FQrzFwskXxdl9zFGLgVJtd6g688x3XPB1JL8yp5Fpm4KT+PYItsgKsgK8KMHDyVX5uPGAK9AK4ta+v7/rNmzfvC5hv7E6ZCjBwKlOocotxhFO5SpVXjoFTeTpNpJRpmvJrW2QJy9IfexFOB+Fg+4nSiKe8RXjxOSCfj6wcE5kahbLt0xpwQvsUBk4MnEBE8DOHkzcpZyTqMauxzV1qWVwqycBpUpc4V2IFWIHgKsDAKbhjw575p8BWIcQVmUzmnih/h/FP3uq2zMBJsb4MnNQKysBJrZ7SWnyBk6dlMeJp1+uE7bsYNo00y844/hBMbXKSNReWJ3IOJ45wshN1SwhFdt4teSb37GzwKCPCLOQgkCe1edGOaZyCxkSdPSMdyxbymji76984h5P6dwq2yAqwAj4pwMDJJ+G52eArQETduq6v7O7ufiT43rKHhW9ehmE8BmAxS6JGAQZOanT0rDBwUqtnHIDTkv9eulYA4yYNzw1qeOU5C0PqJY6ExVktSSw79lAGTiMuqXPASuH/QpLywh/F1+xCJWXdSsPSllPpDmwOwCnaliWd5yz3bKc4L9lFzkm6TrBkCTvhumVH8pU+luUdV2Q57+xkcvfsOmenXFB2qSu9mFq0BOY1T4FWkkJ8SCMGTpG443AnWAFWwFWAgRNPBVZgbAXs/E4ALjNN80UWK/gKyAgnBk4Kx4mBk0IxATBwUqunC5zG375NfbM1s+gBJ6/B0ZKGv/YysG9/zdwKZUOntR+CQ6fKKCfepc4bQM7h5F+EkxyD2fUtOKSusXA9aRqd/XuOcArl/YWdZgVYgREVYODEE4MVKE+BXiHEV5PJ5NqNGzf2lVeFS/mhAAMnxaozcFIrKAMntXrGETiNBJ569xFe3Rpp7qZk4kxvSOK0hYdCCAZODJw80OQvcJJJ7ec3T0NC6PaQMHBScqmzEVaAFQiOAgycgjMW7Ek4FHhZCHEl53cK7mBJ4LQJwJLguhguzxg4qR0vBk5q9YwzcPKU1CyBF54HhgbVaxtFi51zpuKIGU121wTncOIcTj7mcPKur8OSDTisoZWBUxRvONwnVoAVYODEc4AVmJwCXUS0MpvN/nFy1blWtRSQwKkHwNJqNRA3u0R0XjabvS9u/a5Wf1Op1GIhhFz2yYciBUzTjHRoz4FL6g6UbdebAjveUCRmDMy0JHScceIMJDSNgZOXuclLslR47EyEQl6m4amcOIeT4uskCQ3zmtvQoCehC15Sp1heNscKsAL+KsDAyV/9ufVwKyDTVN6VSCSu6urqepG6NQAAACAASURBVC3cXYmO9wycFI+lEOIdmUzml4rNxtZcZ2fnHMuyOCGcwhkQdeC09CdLvwiBK0aSLJcDtj4jd89SKGgMTJ10eBvaj2hh4MTACfkARDjJS65ZT9rQSRP09g3/9ptfRfUyTKfTFxLRrVHtH/eLFWAFDlIgDsDpGQDtPPasQBUV2COE+OKuXbtu3rJly0AV22HTZSjAwKkMkSZYZIFpmvJGyocCBc455xz92Wef3S2/XygwxyYAMk1Ti7IQS/87dTlgfWWkPm5/RcOePUybJjr+SU3grEWHob4uAWHvR+8EycmYJ/sgZ0oVHstdxKj0sUNqHOWd12wr7tnZZc3zSgD2DmvDyzh1hLukrRik5yTx9kpL07K+65ZnhZzyhSZo2B5xrm/FeVESwGTXskqmDCcN9zeHU+ncbW9oRX1TQ7rrY//PnOicDkt5Bk5hGSn2kxVQpkAcgBOnc1E2XdjQOAq8KIS4OpPJ3M1K+aeABE5ZAB3+uRCplneYpin3EedvtAqHNZ1OP0REf6XQZJxNRR44LfnxknOFJn544CD39Qm8+kKch76yvh83vQUL505l4GSTqxI4VUKyeEmdI4ZFFnKQkYRFEFjZ7Bu5dlLTMa+t8QjzgodfrYb9INg0DOMTAP49CL6wD6wAK1ATBZ4yTXNRTVryqZFUKvUrIcRZPjXPzcZTgd8S0apsNvt4PLvvb68ZOCnUn4juymaz5ys0yaYAGIZxCYCvsRhKFLBM03S2d4roseAXJ85vGUpsKe1eHoRXn9cx2M8suJJhP2vhYWitT3KEEwMnyGtKRqXJs5RDnp1IsNoBp4Sm53dclkl6gW+VzO2g1jUM4/0AOC9kUAeI/WIFFCtARI9ks9nTFJsNlDnDML4K4LJAOcXOxEEBi4juSyaTl3N+p9oOtwROMhQ9Vdtmo9mapmlndnd3PxTN3vnXq87OzsMty3oOQIN/XkSm5cgDJzlSS/67408CVPiFcM8uDdu3MWyqdBbPm9KIjqOnM3BywYqDV4oxrRzhVFvg1Jao+9+XL+1aWOm8DnL9dDp9JhH9Lsg+sm+sACugVIF1pmmeq9RiwIylUql3CiF+GjC32J34KLBLCHEdEX3TNM2h+HTbv54ycFKn/cOmafKyL3V6DrNkGMYtAD5dJfNxMhsL4LT4J0uv1ASulwNr5YGXnhXIy2zHfFSswJkLZmJaS71tJ745nIqUiYGTfxFOM5LJTz9zyaPfrHhSB9iAYRhTAOwsUN4A+8qusQKsgBIFPmea5g1KLAXUyIIFC+qnTJmyDcDUgLrIbsVDgaeJ6NJsNvtgPLrrXy8ZOKnRPkdEp2Sz2cgmLlUj0+StLF26dKqu608AmD15K1wTQN40zUTUlWj/kTGltd56XoCm7twmsHNX1Htcu/7NaqrDKcceFnPgxDmc/F5S16Tre7ZdlpEwJvKHYRgbAZwS+Y5yB1kBVgCapnV0d3fLpNqRPlKp1FohxOpId5I7FwoFhBC/kfmdTNOU3zP5qIICEjhlZJqcKtiOjUkiWp3NZuV6ZD6qqEAqlfpbIYSk0JEHJlWUMRYRTlK/jp91XNTfj5tfeg7QeDWd0im1fO50HD6tKcYRTgyc/AROSWhoTdR/5PlLH/me0okdUGOGYVwE4OaAusdusQKsgDoFIp8w3JOqo6NjhqZpT3OUk7rJw5YqUkAGj9xeX1//+Y0bN+6oyBJXPkgBBk6VT4rbTdOUu8jwUQMFUqnUx4UQt/PygkmLHYsIJ6nOmjVrtG8f9tPn9++hOZNWiyuOqMD0ugROX3g4dKE5r5NzLiyxg2YnNyo+dvIcOZjGeU0eMum0POReZt7fgABI2M+VlnHqCDdnkij45SxpK+6GRnZ91y3PCjnlC5iICtmWvIIy9XXR5jBA6SXDLhTlXeqIfE0afkiyfv3zl/zxrXG5PBctWtTS2Ngo8xjKXXD5YAVYgYgqQEQfyWazsQDpcggNw/gQgNj0N6LTNmrdkrBpTWtr623r16/PRa1zfvWHgVNlyq81TfNzpd9jKjPHtctRIJVKfUAIcReAunLKc5lhCsQGOMleL7xn4awdOxq29PWjieeBWgWMI6Zi3sw2l8IwcHKAVoF0HQS4hgOvkrLuC6XIzNsEz4Fp0qqTJ8lyz3ZtIhuneWdhP7ZANqyzINyz91iWc8yV1nMooGfXOTvlrJJyeRfcyddkKjTn7M8udVMSyedfSj16DN6KWH0QNAxD5jCUuQz5YAVYgWgq8Fhra2s6bl9yU6nU7UKIC6I5pNyrECuwmYguyWaz/xPiPgTGdZFOp7uJKB0Yj8LhyOtCiI9nMpn/Doe70fOys7NzqWVZ9wA4MXq9q2qPYgWcpJInfGv5glfzfZlcn4hFvpeqzp4S440JDW9feCQSuowoYuDEwMmLBJNnCzkI5Esiz1TMy+nJuqefw9aluOTlPhX2QmZDS6VSvxVCnBEyv9ldVoAVGF+Bfk3Tlschd9OBUpx55pmJvXv3fh/A+8eXiUuwAjVX4OdCiEszmcyfa95yhBpk4DSxwZRbJ/774ODgtU888YTcNYYPHxUwDCMphLiQiK7hNeBlD0TONM1k2aUjUnDBLagfrEut27+b3sn7n6ob1MWHteGYWVMZOBUCmzjCSYZMqQZOuqbRTD15358v+eMKdbM3fJbcnCePAFgQPu/ZY1aAFRhFAYuI3pfNZn8UY4Xk99HPE9GVnKc1xrMguF0fIqJvWpZ13aZNm3gbokmMk0ilUo8KITonUTduVX4B4FLTNP83bh0Pen8Nw5B5La4D8DF+oxp3tGIJnDxV5t659Oz+Xu17fX3EuVDGnSrjF6gXAn+98Ag0JR2GyTmcGDipBk6tieQLDQnx7mcu7uJdYJ2cJ0cB+CWAReNfoVyCFWAFAq7AIBGdn81m7w24nzVxr7Ozs9OyLJmnNVWTBrkRVmBiCmwHcHV7e/sd69atkxkG+ChTAQZO4wv1lLuG8/+OX5RL+KlAOp0+0bKsbwghzvLTj4C3HWvg5I3N0bcbX9jdS5/JDVHsor1Uz89jD2nBSXMcfhcf4CR76+ZEKv7JOZycpFNKIpyadH3/dFG36k+XPnKH6jkbdntLly6dquv6vwN4X9j7wv6zAjFW4FkhxAczmcyGGGswUte1dDr9YSK6HsAs1oYVCKACT1iWtaqnp+c3AfQtkC4xcBp9WOws9QDkLnS8CieQ03dkp9Lp9D8S0Y0AjgmR27Vydcg0TU62LtX+1qKWOWi8e2+v9c+WJbc242OyCpx17CxMaaxn4MRJwysGTg2anm+q0+9+flbXx3CunaOcj1EUSKfT/0REXwfQziKxAqxAaBQYIKKb+/v7v7B58+Z9ofG6xo7K3Tmbmpo+J3/0B9BQ4+a5OVagHAV+QkSXZ7PZLeUUjnMZBk4Hj35O7oCWz+ev6unpeSPOkyPMfZf5nQB80oWGU8PcF8W+M3A6QNCp31/S0bRPu29gn7ZwyN2NS7HmkTc3p7kJyxbMjBFwcpfOeXFOnMPJ3rXOqiDCKQkNLYmECa3unS+sevjVyF80ijpY8l4nl5W720YqMs5mWAFWQKkCRPRrABdls9mnlBqOsLGTTz559tDQ0JeEEOcB/ONghIc6rF2TQSm3AbjGNM3dYe1Etf1m4FSisHwjEEJcYprmE9UWnu3XRoHly5cfMjg4+HkXPiVq02qgWxk0TbM+0B765NxR31myYqBXfKtvQLT65EKom33r0TNxaFuz2wfNXnFWXGLnkBmHyzivyUO4Z6vkb/vzJIkC+vPKOHWEc6JiQJrzWFpwDrLre3+7z7vlC5iIyCviFSwuh5M2ijzJjdgpDo3THgMnCZjk2MizlKMS4DQ1mXytWWs496mVv/99qC8CH503DGOWEGKNzAcDQPfRFW6aFWAFDlbgz/L7RSaTkflg+ZiEAul0epmbNuPUSVTnKqxAtRV4E8AX2tvbv8n5nQ6WWhiG0QVgWbVHIeD2nwZwlWma6wLuJ7s3SQUMwzheLj0QQvz9JE1EpRoDp7FGkqDNuWPJjb179U8P5YgB5QRm/aH1SZx53BwImxAxcHLgl3u4gKr4WL5WQrUIJbF1DsAp1LfhmPOc5Z7t2kR2He8s7McWyIZ1FoR79h7LcrbNYfUcCujZdc5OOaukXN71Tr4m17g558qBU6Om9zclklc/t2qjXALNhwIFUqmUIYS4CcBbFJhjE6wAK1CZAnJH67V9fX3f2Lx582Blpri2/NXJMIz3APgqgLmsCCsQQAV6NE1b1d3d/VAAffPNpbgDJ/uNYPfu3Tdt2bJlwLdR4IZrpkBnZ+dZlmXdHOMdfhg4lTHbOu46fca2/n3r+vfhjPywaJcyKse4yGmzD8UR02WAGAOnAjByKE8RILkvxBk41WuCmpN1P2k6Ys57N5+7jr+Eqb9n8Jcy9ZqyRVZgIgpYRHQfEV3K6TkmIlt5ZQ3DaALwaRksAKClvFpcihWoqQIPapp2cXd397M1bTWgjckPJX8EcHJA/auWW/YbQS6Xu+zxxx9/vVqNsN1gKlCS8+JaAFOC6WXVvBowTZOTL5Yp7+y7jJNzvXR/737ipLxlaDYlkcTbFh4JXdN5SR1HOCFfstTRmz5T65JPTgH90xOr+ENYGZdURUXklzIhxGoiWg2gsSJjXJkVYAXKVeB3RLQym80+Xm4FLjc5BZYsWXKkrutf5vxOk9OPa1VdAfmD2u2JROLqrq6uPVVvLcANxA44CSF+Y1nWJfxGEOBZWSPXli1bNj2fz18D4FMxynnBwGkS82venalV+/fgSwNDxLBuHP1Ss6Zh/sxDGDgxcBoGnNqSiR1tesO/br744f+exCXIVSpQgJPuViAeV2UFylfgJSHEVZlM5u7yq3BJFQp0dnZ2yvxOAE5TYY9tsAKKFXiViNbMnz//u3HN7xQn4PQXAFdynibFl1AEzKVSqYWapn2diP4uAt0ZrwsMnMZTaLTX15yZmHf4rm/t3Sc+OpSXa8b4GEmBel3g746fizpd56ThnkAxXlLXqIvB1mTy61su7vocXzH+KtDZ2XmGZVkyv9NSfz3h1lmBSCmwXwhxY0tLyw3r16/vj1TPwtUZbynxVwDMC5fr7G1MFMi60Y8Px6S/hW7Ki3MjgFMi3PFdAG7gPE0RHmFFXUulUu8UQshfSOYrMhlEM/2mafLSigpGZultS+e9TtoP+vaJU0ZaMlSB6chUXXRoG044YkaEgZMcqpK8TIUk36XZvuOdNNzSQC26/puGtrp3/fn8DXsjM7nD3xEtnU6fR0TyS9lh4e8O94AV8E0BecN/QNO0S7u7u1/yzQtueJgCJfmdrgTAuw7z/AiiAg/qun7Ro48++lwQnauGT1EGTpynqRozJuI2Y5DfiYGTojk88zsn/G2iv+7ufX2YqchkZMzoQsPfHjsbrfV1xT45G6IVEorLv+wN7eSOaCV/AwKwd1hzDq+MU1k4JxIFu85jr7RsQ9Z3Xnb2cSuWL901blgueNu34jPeLnEFK8M3lHPtM3CSYyN3q5N6ybPl6tSYFM9OSST/8bELN/wpMpM6Yh1ZunTpVF3XPwtgJYD6iHWPu8MKVFUBIurWdX1ld3f3I1VtiI1PWgGZ3ymZTF5DRB91PnjwwQoESoE+ALc0NDR8ccOG6P8oF1Xg9FsiWsV5mgJ1YYXKmQjnd2LgpHgmzr/zpNW79iavGxok/tJWou2CKc0w5s4qPhMp4FQCpxyy5QKueEc4JXWxB8nEhS9e+Mg9ii8zNlclBZYuXXqMrutfBHBOlZpgs6xAlBR4hYiuzWazd7q/lUSpb5HsS0dHR1rTNLl64S2R7CB3KuwKxOKeItLp9CNEtDzso+X6vwXAFZynKSKjGYBupNPpDpmIUAhxRgDcUeFCn2macjtZPhQqcMS3j2jSc7Pu3d1n/TPyMsSGD6nA2+fPxrRmN886A6diDNUBEVXyhdIYLS/CyonekrFXThSR5Z7teCxy4re8s7AfWyA7OsyCcM/eY1nOMVdazxkUz65zdspZJeXyrnfytbxrQ0Y0eRFOmhB5rUH/7nOfeOTfvCA0vgLCpUBnZ+dZbn6nE8LlOXvLCtREAXu3qYaGhqviEI1QE0Vr3IibNuMWzu9UY+G5ubIUEEJkZMRxJpPZUFaFkBWKCnDaJ4T42q5du768ZcuWgZCNAbsbAgXcNyqZbLU9BO6O5SIDpyoOYPvtJx/Tnxtat28/LaliM6ExfWRTI96y4EjHXwZOkQNOclgbE9qG5sHBfzYvM7eHZmKyoyMqIJeUE9FHhBAy4ulQlokVYAVsBWKXbyWq4758+fLGwcHBi+QmUpzfKaqjHOp+2XnhLMu6vKen54VQ9+QA58MOnOw8Tclk8vKurq7XojQw3JfgKbBo0aK6xsbGTwC4DkBb8DwsyyMGTmXJVFmheXcsft+ePu22XJ+YUpml8Nc+c+7hOGxKCwOn4so7V4vhiaHCFuGEBL3apmvv2fSpjZzDJPyX6bAeLF++/JDBwcHPA/gUAD1i3ePusALlKvCUm57jf8qtwOXCoUBHR8cRuq5/nojO53tcOMYsZl7uIaKPZbPZH0Wl3yKVSm0QQpwawg79zrKsVT09PY+F0Hd2OcQKGIYxS/4CTEQfCmEiQgZONZx7R99ufGHPfvrsUI4SNWw2UE1Nr6vDW4+bA72w1kor5DwKb9Lw+OZwEgnRWw9c/vinH/n3QE00dka5Ap2dnUvz+fxNEVpSrlwjNhhJBd4QQlx99NFH37lu3Tq5ipiPiCrQ2dnZKdNmADgtol3kboVXASKi92Wz2R+GtwtFz2XS8D+E7EJ7hoguz2azP47CAHAfwqtAKpUyhBBymV2YEhH2mqbZHF7VQ+j5nbMPmTV06L3794u/i2t+p1OOnIG5h0yJ0C518QNOuoClJcQDpyZOOO87F3xnKIRXIrs8SQUMw5AJxb/CuU8mKSBXC4sCQ0KIb+VyuWs3bdq0KyxOs58VKyCDL84VQqwFMLdia2yAFVCnwN5EIrGoq6vrZXUm/bEUJuC0XwhxY0tLyw3r16/v90cubpUVOFgBN7/TzQCODoE+DJx8GqST7jjeeGOg6Ue9+ynsecAmrGCznsDfH3cUNF3uTMwRTk4+q3AsqZPJyFGHx5pziX/oumh96D/0THjycgVbgZIl5V/g3Cc8KaKmABH9WtO0VZlM5smo9Y37U54CEUmbUV5nuVSYFLjeNM2rw+TwSL5K4PRwwCM0ZGqLuxKJxFWcpyns0y26/stEhENDQ5cQ0WcBtAS4pwycfB6cebd3fmT3QP6WfD8FeZ4oV6lj5jQcc9j0iAAnKY+761vxzyJEcllSASl5O8R5qoYEOFEC2/WE+MBjF/z+/ymfEGwwlAosWbLkyEQiISMB3g/wjpyhHER2ulSBPwO41DTNn7MsrIBUIORpM3gQo6fAk6ZpnhT2bgUaOBHRQ+4vDj1hF5r9j4cCMhGhpmlfArAioPmdGDgFYSoStHnfXnrb3n3io0N5GfIT/aNeCLz9uLloTNZFIIdTxIGToMFEHa43L3hYRrPwwQocpEBHR8dyIcTNQohOlocVCKECu90NYG41TZOXCIdwAKvtskyboWna14nor6rdFttnBcZQQH5vkz9Ql4TFh0+voAKnl4QQV2UymXvCLnD4pgR7rEIBN7+TTER4ugp7Cm3sd29cCk2yqckqsPi2U2e+QX0/2rsPZ2ihfispT4GF06bgpNmHRQA4RTSHkyASCXpQ2zblveaan/WWN6pcKsYKyM+Q7wFwI4CjYqwDdz08CvDu1uEZq0B46qbNkPlaY5cOIRADwE7sNk1zathlkB8Wfh+gL8V7AXyptbX1Js7TFPapxf7L5QbpdPpfiEguPwjKh3EGTgGcmu13dr6trzf3vf19mB1A95S5lISGtx0zB2319bZN3qXOlZYAuXbcOQjuCjzn5yyS2Z6c56zCa/Ix2XW8s8y1ZMkSJOyzcM/eY1nOMVdaz17b59jV6S850t75+Cd/J5eY8MEKlK3Aaaed1trf338FgFUAnIubD1YgYAoIIeT3nZWZTIZXTQRsbILuzplnntmwd+/elQDkfa416P6yf5FS4FHTNE8Oe4+CEuEkt/67V9f11d3d3dvCLir7zwqUKiDzOw0ODl4E4MoAvFHtM02T3ywDOkXnf2fpZXv2aV8YGKKGgLpYsVtzW1tw8twjbDsMnFw5fQROQqOdAwnro4997Pf/p+LBZQOxVqCzs3NOPp//ohBCLinngxUIigIvCyGu5FUTQRmO8PqxbNmy6fl8/hoAnwKgh7cn7HmIFFhpmqbcmCrURxAinB4molXZbNYMtZLsPCswjgIy2aqu618WQpznY7JVBk5Bn6n/Ma9h7sAhd/TupfcPWNHM7/Q382ZjWksTAydvLvoAnAArl9fx7e4Lfndh0C8J9i9cCnR0dLxN0zS5BOXEcHnO3kZMAbkseG1dXd1XN27c2BexvnF3fFSgs7NzqWVZMm3GmT66wU1HX4EXE4nESV1dXXvC3lW55OchnxKiPU9En8lmsz8Ku4jsPyswEQUMw5ChkfLD+CkTqaeoLAMnRUJW28yCW4z5vRr9155eWhK1/E6HNzTg9AVzoJGwZZRLw7xoJ3vjK3s5mHMUnrdXhAl3mZlTTx7OsrPSBWmyvvea+7zbTumuccNSZh2wa5y3pK1gpaSwt8xtePteyeHb0wVxlzpn+Zz10BDt+SfzAlMmzuWDFVCuwJlnnpnYu3fvx93EzHJ7Sj5YgVopIG+9/5lIJFZ3dXW9XKtGuZ34KZBKpd4lhPgKgPnx6z33uMoK7LMs6609PT2ZKrdTE/N+AKd9Qogbksnk1/kXh5qMMTcSTAVkdOH75K9vQE3z9jBwCuZ8GNWr9jvS79jba31/oJ8ODZnrY7p7+uzDccSUNrsMA6ca5XBK0As5WO/u+tjvOKI4ShdTgPuyfPnyQwYHB9cA+ASARIBdZdcioIAQIiOEuLi7u/uRCHSHuxACBRYsWFDf1tZ2kdzsCoDzoYYPVqAyBZ4konOz2exTlZkJTu1aAif5i8MDAC4zTfPF4EjAnrAC/ilgGEYTgE/XML/TXtM0+Q3RvyGfdMtH3258YXcvfSY3RMlJGwlQxbZkEn+zYC4SmsbAqcpL6ob0/H7Shlb98fyH7gjQFGBXYqRAOp0+joi+DuAdMeo2d7V2CmwHcH17e/s3161bl69ds9wSK+AowPmdeCYoUGAHgK/s3r37pi1btgwosBcYE7UCTo9alrWyp6dnY2B6zo6wAgFSQOZ3SiaT1xDRR4Gq5u1h4BSgcZ+wK99a1DIHjXf39tE/D+XddWITNhKcCp2HzUD7odNCCJykhu6ub8U/7d3k7GP4yd5pruRp+/VCWfeFauxSl9esfE7P3f1Iy/SP4Vz+EhacmR9fTzo7O8+yLEsmQF0UXxW45woVGAJwWyKRuDoKeU4U6sKmfFIglUotBPA1IcTf++QCNxs+BQYB3J7P5z+/adOmXeFzf3yPRSqVWi+EOGP8opMqwTtDTEo2rhRXBTo6OtJustXTqqTBHtM0p1TJNputkQLzvrN06eCQuH9gn7ZwqJDtqEaNK2ymWdfwt8e0Q9e1kOVwCj5wImGZb0zZ9Q+bz+WdXxVOWTalQAHDMGSU5icBXAuA348UaBpHE0T0awAXRWnZSRzHMap9Zrge1ZFV2i979ZemaZ/t7u5+VqnlgBmrFnCSO0Pc2tfXd/3mzZv3BazP7A4rEHQFZH6n9wD4KoC5ip1l4KRYUD/NTb9jyXmJXu1bff3hzRuwZPo0HHv4jJABp2IWcSeJuDMLghDhlNPyryW0wXN+85GHHvZzbnLbrMB4CvASlPEU4tdHUeDPQohLMpnML1ghViDICpTAdZnHbmqQfWXfaq7AHzVNuzQu+eYkcPqVEOIsRTITEd2bz+c/99hjj21VZJPNsAKxVGDx4sXNyWTyMzLvGYBGRSK8aZpmpJJPK9IlvGYI2pw7ltzYu1f/9FCOQpeUt14I/M2CeWhKeqmpeJc6b5c8b0c8CbLkc/YOcy7hIiI7ts07WyLXP4jcVX84/zdfC+9kZs/jqEAqlTKEEHKZXbUie+MoaxT7LPObrGltbb1t/fr1uSh2kPsUTQU6OjpmaJp2HYCPAdCj2UvuVZkKPA3gM6Zp/qTM8pEoJiMpvgfgQ5X2hoi6dV1fGRdSV6leXJ8VKFcBmd9J1/UvCyHOs/eFr+zoMU0zVZkJrh1EBY79tnHo3rz1QP8+nJEvBuAE0dWDfDqurRVLZs9yn2fgNBHglEeeBvX8T7Y3TXnv5nPXyTwAfLACoVQglUq9UwhxC4B5oewAO10tBSwiuo+ILu3p6XmjWo2wXVag2goYhnG8zO/EmydUW+lA2o9sQvBy1JbASe6QJd/gJ3u8BOCzpmn+oLiwYLKmuB4rwAqMpkBnZ+ep+Xz+JiFE52RVIqJvZ7PZf5tsfa4XfAWOvjO9rK/f+kHvfmoPvrdFD99+9FGY2tjgMFUShcxUwoNn9lk4q9dK8qU7j0tTbsv6jl0nBqhYvsDhaFjK7oOSeHvAp2ClBOB5UUee5/4tqctjQM8/OWgl/ukP//rzSK/9D9M8Zl8rU0Du3CqEWE1EqxVG9lbmFNf2TQEhxG8ArMxkMk/65gQ3zAooVsCF6zcCOFaxaTYXPAX6iegWIcSXTNPcHTz3auOROOmkk6bV1dW9DEBuzz6Ro5eIviKE+KppmjJnEx+sACtQfQU0wzBWAPgSgCMm2Bxpmpbq7u7eNMF6XDyECsy+c+nFA3u1Lw8MkqrlmFVVYU5TE5bPm83AqbBszuVmNhwbvqRuSBvckcPAR3734d/9tKqDwsZZAZ8UMAzjKCHEV4joXAWRvT71gputQIFniOjybDb74wpscFVWILAKyPxORPQpIcQ1AKYF1lF2bLIKyN8jf2BZ1hU9PT0vTNZIVOrZGJxueAAAIABJREFUy3PS6fSFRHRrmZ2yM6rn8/nVmzZter7MOlzs/2fvXuCkKuv/gX++58zuwgKCeL8gimQJ3rhpWn/TLMvKUtlZYHdmFpQg7adieStN18zylqJYCnHbmdkFdha8p5X9IvtpmoBmRGqopZlpogJ7nznn+38NuLgo7J6ZPWfmzOxnXq/fq1/s83yf7/N+jgQfz5xDAQq4KJDlvwW+be3atd91sQ2W8rtA7SmBQ/d//2dbm2Vm0oLh93ZPHXEQ9hkymHc47bhDa9tDmnYETpakOlsDydtWh379Pb+fJfujgBsCEydOPF5V0893+rQb9VjD9wItInLr4MGDb1y9enW777tlgxToo8CJJ544vLOzM31H5yUASvtYjtP9IfCUiFy6Zs2aJ/zRTv672PE8mPHjx98kIpf18m+SnlbVOevWrXsq/62zAwpQYNy4cSMNw7gZQLCnf3ZFJK6q565duzZJtf4nMO6ucSPfMmR5W7N82ur29TO/SexdVoZTRo2EAYNfqev6jroqLLG1HZ2/LU9tPeeB857Y6rdzYz8U8FggfWfvuQB+BGA/j9di+fwIpL//HAPwvbVr176Znxa4KgXyJzBu3LgxhmHcBuBL+euCK/dRoF8+ENyJ2U4PIJ44ceJXbNuu3cUzYp4FcCuf0+SElGMokHuBiRMnfsa27ctF5GvATneyPJ/+t4Vr1qxJ/0GOn34usO+iCacbrVastVX29SvFiQfsjxHDhvk8cErrbb8NyetnOKWMzldSZuvXf1X1u7/69czYFwVyITBhwoShAK4GcBHvBMiFeG7WEJE/fvCcpj/lZkWuQgH/CqT/Lq6q6QeLpx8wzk9hCLwDIP0Wwnv4L/Z3fWC7fOPVcccd9wnDMD5pGEb6Kxgvrlmz5sXCOG92SYH+LXD88cfvlUwmjzAMY4Bpmv/405/+9Gr/FuHudyVw+MKjL2/dUvLDlqSW+U1oD7MEXxh9GLb/zw/gz4eGex84JQ1ri220X/BI9a/r/XZG7IcC+RQ4/vjjj7AsK/0XsvS/YOGncAXeUNUr161bl/49rsDerVq46Ozc/wLp5zsBOB/AtQCG+7/jftvhtgeC27b9k+eee+79fqvgYON9fcW6gyU4hAIUoAAF/CZw4PwDy83UAfHNbfZZsNKvhvPPZ/zee2PUPnv7OHD68O9Gbt/hpJKy2o3ORY9WPfqtrpfy+edk2AkF/CMwbty40wzDuB3A0f7pip04EOhM3wkwYMCAq594gl8RduDFIf1U4IMXe13B5zv57gLY9jxrwzCufOaZZ/iWYAfH46u/ZDjol0MoQAEKUMBFgVH3nPCJ9lQy0dyix7pYtk+lSgzBlw8/HGWBgE/vcHI/cLKg6DA6nxjW0nLWstmr07dn80MBCvQicMoppwS2bNlyrojcAGB7Ss2PnwUeMk3zIt597ecjYm9+E/jgrs70M+zSz2vlJ78CT4vId/lA8MwOgYFTZl4cTQEKUKAoBQ79xcRp7S323a0dmn5OSt4/Rw4bjrEH7NsvAqdOSb65pbR18u8rf5t+lgk/FKBAhgIfvOkp/fWTCwAEMpzO4d4L/E1VL1m3bt2vvF+KK1CgOAV4V2dez/XvAK5au3ZtE78CnPk5MHDK3IwzKEABChStwGH3TLj+vVa90k5q3v/S9uVRh2JI6YDt1ttuKpIPHtL94f90bf9KW/oFR13DZMfTQLTr0eO6ffyO+5JUd35giKZ/1u2upZ2eJqKwu/337eu5c4dTUpKtzWb7d/932m/uKdoLihujQA4FJkyY8CkRuV1Vv5zDZbnU7gXeTT9Md9SoUXclEgmLUBSgQN8Eut3VeT0A374Apm+79NXs9O9hN2/evHnuxo0bO3zVWQE1w8CpgA6LrVKAAhTIicDCg4cfkNw73tYsX7bt/D3f6bAhQzDxoIO6kqSiCZxs2Fa70bLs4K2Hnrtg9oJkTs6Ui1CgHwmMHz/+TBGZC2BUP9q2n7aaFJElqpq+I4BfEfbTybCXohA47rjjhpmmeWX6DY8AfPcCmCJA3vasOcuyruUDwft+mgyc+m7IChSgAAWKUmD04mPGN7cGEq0tmre/tJ024hAMH1ReJHc4KdrM9j+LaXz1ocqH3ijKi4abooBPBMaMGVM6cODA9Jue0q+r3sMnbRV9G6r6mGEYl6xZs2Z90W+WG6RAngXSb5Y3TTP9DDs+38mds+ADwd1x3KkKAycPUFmSAhSgQDEJHLLwuJqOZsxr65Ahud7XQQMG4qRDRxZ84NRhJN9qlc6pj017dHWuDbkeBfqzwIQJEw4QkVpVnQnA6M8WHu+96xknCY/XYXkKUOAjAuPHj/98+uvEAI4hTtYCfCB41nQ9T2Tg5BEsy1KAAhQoKgGFcej84+7e2iwzk1Zu/9L22QMPwgFD0lmXX57hlD7Z7c9x2v5Mp+0nveM5UDv+O5CUVGe72Xr9o1N+nX7DDD9+FVBIcGlwP9hlQzHAHpoSNQPtxmaYnZvHvjr2rdra2pRfW2dfzgTGjx8/QUTuAPAZZzM4yqFAs4j89P333/8Jn3HiUIzDKOCNgDFx4sSQqt4MYD9vlijKqnwguMfHysDJY2CWpwAFKFBMAsfcfdK+/9W2xvZmfM7a6eHa3u1yz5IATjvscIgYPnloeO+BU/pR482B1vswZOO0R77CB016d3VkV3lMY7B0TGfpaYZtnKHAOEDT/1Z4l1+7EqBdgfUqeM62jcdSqcAvHzhv8dbsVuasPAvIhAkTKgDcAmBknnsp9OVtVa0vKSm57Omnn36r0DfD/ilQLAJjxowZXF5efqmqpp/xxOc77f5g+UDwHF30DJxyBM1lKEABChSTwKiFk05ra00tbWnDwbnY1wn77IdDhg/3SeC0+7fUpd+X12G0/y2ZTJ39aPjRF3NhwzWcC0xZGD7KKrMvFeAsqAx1PvPDkR8EUI9apn37quqGx7OpwTn5FZgwYUK5iFyuqlcA+OBVmPntqcBWfxrAxWvXrk3/Jz8UoIAPBcaPHz9aRH7M5zt97HD4QPAcX68MnHIMzuUoQAEKFJPAQb8Y993OrfKjjqR6+pe2QWYApx82CqZpAvrh/3Rt/0pbOubZ/tH0S/V2fKXtg1//YPyOmEh3fPmta9KHX4dL19jpzq30vUofntj29XYdOHVI+3vNkpz52NRHVxXTGRfDXqbEQsfaqtcB8vVt38106aPQPximXttY3fA7l0qyTA4FTjjhhIOTyeSPRSTk5nWRwy3keql/ichVa9asiX34ZeJct8D1KECBTAQmTJhwKoDbAByXybwiHMsHgufpUF37Q1ee+ueyFKAABSiQb4Elhw4Y2TH8F83NWuXl852OG743Ru+zj+8CJwupZJvRctfDU379nXwfBdffWSC48LzhWtp+rUC+DcD0ykehD6XswJz7pte97NUarOudwMSJE09R1bkAjvVulYKu3ApgXltb2482bNjQXNA7YfMU6J8CXc93ugnA/v2QIH035qVr1679v36497xvmYFT3o+ADVCAAhQoDoFP/uL4w7Z2pO7d0qrHGh4836lMZNuznMoDpTvA8nmHU/o+qRaj5fcbJPmNVyof21wcp1gcu5g1f1bJe+WtMwC9ASp752hXSYXeXWa8+4P60CNbcrQml3FPoOsvZOnnO+3rXtmCr/SQZVkXPvfcc/8o+J1wAxTo5wLHHHPMoNLS0sv60deJ+UBwH1zzDJx8cAhsgQIUoEAxCRyxYOIZ77XbdR1tuo/b+/rkHkNx9P4H5T1w6jDbXtmK9rMeq3zsL27vkfX6JlBZV/UFGzJXRMb2rVLWs9+EoHbsy6MX1tbWfvh9z6zLcWIuBY477rhhpmmmH7Y7p58/cHfdB89p4h0BubwAuRYFciAwadKkEZZl3VDEXyfmA8FzcB05XYKBk1MpjqMABShAgYwEDrtnwvWbW/WKVFJLMprYy+AvjTwMQ8oGbhuV6zucktLR0hpon/PLyb9a6OaeWKvvAmfXRY4wxfqpQL7W92ouVFBda5m4eFWo/gkXqrFEjgWOP/74IyzL+ikAf1xPudv/OwB+NGrUqLsSiYSVu2W5EgUokGuB8ePHf1pEbgfw6Vyv7dF6SQB3W5Z17XPPPfe+R2uwbIYCDJwyBONwClCAAhRwLnDg/APLzdQB8dY2PStpdXvat/MSHxt58MBB+PSI7W80z1XgZEnKajHbFj08+ZHzIeBdK304P7enTl9y1rAtgcFXGoo54r9XQKcfMd9U2mlf1jCz4Z9u7531vBeYNGnSF2zbTj/fKV93zHm/ye0rbPuLWiAQ+MHTTz/Nr4TmSp3rUCD/AsXyfKeH0nemrl27ls9SzP81tVMHDJx8diBshwIUoEAxCgxeeuzYwc1mItkiRyZdyGs+f9AIDB80xPPAyYaFZrP9qQG2fXai8pf/KcazKdQ91dbWGusPfykkKrcA4utn7ijQCsUt79iBG1fPWNpeqOb9te8JEyak79K8AMB1AIYWm4OqPgbgonXr1v2t2PbG/VCAAs4ECvj5TnwguLMjztsoBk55o+fCFKAABfqfwMj5E6ra2+2729qxR192v09pGU4eeRggBqAf3nCk6Tfef/DAcu0Ktj64sWrHc8w1/bjvbh9NT/nwV9K3pKQ/bUbbWx3oCD4c/NUf+tIr57ovUBELnSKKwnurmOBfCvuqplBDDLLzZei+Eiu6LXD88cfvZVnWNQA8feuh2333UO9FEfnOmjVrfpnDNbkUBSjgY4ECer7TP0XkmjVr1sS6bnj3MWu/bo2BU78+fm6eAhSgQH4E0s932tKiVyZTGsi2g8/sdyD2HzrM9cCpQ5KtSW274r7KR+7KtjfO80Zg6uKpI6yAeQMgYW9WyFnV1YZgzopw/M85W5ELuSYwceLEcQDmqurJrhXNbaH3ANzU1tZ2+4YNGzpzuzRXowAFCkFgwoQJJ6Sf76SqJ/qsXz4Q3GcH0ls7DJx6E+LPKUABClDAE4FP1R2/1+bWzlhbs3zZttO3JmX2GRoowamHjYbZ/e6kPtzhlBJLW9F230Ytn7qhMsG/hGV2HJ6OPnP+rPKyAa2XG4IrFBjg6WK5K24DWp+Ccem9kdjbuVuWK7klMH78+DNF5A4Ah7lV0+M6tqrWq+p3n3322f96vBbLU4AChS8gEyZMqABwK4BD8rydpIgsUdWr1q5dm365AT8FIpDxH/ALZF9skwIUoAAFCkTgk4vGTdzcJitaW3RUpi2P33tfHLbn8B3TsvtKnWKr0fpnTRpn3j/t/tcz7YHjPRRQyJRYuMJWvRWS9z/serJRBd43FDeuH9hxO4NOT4g9LXriiScO7OzsvAjAVQCGeLpY34r/TlXnrFu37vm+leFsClCgvwlMmDChXEQuV9XLAWx/TXBuP3wgeG69XV2NgZOrnCxGAQpQgALZChx6z6QZLR3JOzraxfFf2koME185dBQCprlt2UwDp3bpeLfVbp7xcOVvHsi2b87zRmByNDxRYN8hkJO8WcFnVRUvwcB3EuH4wz7rjO04EBg3btyBInKjiISAzO/YdLBEtkNeF5Gr16xZE822AOdRgAIUSAuccMIJByeTyR/n8Pc5PhC8CC49Bk5FcIjcAgUoQIGiEWgMmiM2//2Oji3Gt9pTuj1F6uUzdthwfGqf7S8pcxo4dUiqs0Vaf/LQ5F/W9lafP8+twNRFUw9MlgSuNYCZAIzcru6H1eSxgG3MWTa97q9+6IY9ZCYwadKkSap6hw+ee9IiIrcOHjz4xtWrV/PNiJkdI0dTgAI9CEycOPF427ZvF/HsXwi9JiI/4APBi+MyZOBUHOfIXVCAAhQoKoHBdx++7xDdo7G9GZ+zdnql3Me3aYqBL448FINKSnsNnCykn9PU/OjbJYEpT3zjga1FhVbgmxnTGCwd21Z2PgTX+/yrSbmQTir0bmkbdE1i9oLNuViQa7gqIBMnTgyr6k0A9ne1cu/F0r9jNgG4dO3ata/1PpwjKEABCmQl0PV8p1sAjMyqwscn8YHgLkH6qQwDJz+dBnuhAAUoQIGdBI5cOO7k99ol2tqiPf5hZtTgIRh3wEE9Bk4t0vJKy8D3znzkK3/YQGZ/CUyOhs8U6FwBMn6Ol7924m43CmwSxfWJgR13oTJhuVud1bwWOOaYYwaVlpZepqpXIAcPuxeRNSJy8TPPPPOk13tjfQpQgAJpgfTznQBcCOBqAIOzVNn2QHDLsq7mCw2yFPTxNAZOPj4ctkYBClCAAtsFDl047oqtzUZtssPe7RvKTjt4JIYOLE9/r27bR2Fv+8926XivRdtnPTT5kfS/9efHRwJTouEjbdi3A/IlH7Xlv1YUz1oBe86q6obH/dccO+pNYPz48aPTX28D8I3exmb58zdU9cp169bVb/utjx8KUIACORaYNGnSCNu203coVwMIOFw+BWCFaZo/+NOf/vSqwzkcVmACDJwK7MDYLgUoQIF+K9CI0sO3HHfzlmbM7OiQQR91OGjAQJww4tAdf91qlbZNHUbqtvvPevDH/dbMpxufsTi4z5ZA2Y8M4DwAjp7VlbOtKP6WzikhOMZnvSmgjW1qXP5QTYxflcrZBeHeQpMmTfqCbdtzAYx1qWq7qv40lUr95Pnnn29xqSbLUIACFMhaYNKkSaNs264BcA6AMbt4FmP63wam7zS/1zTNJQyasqYumIkMnArmqNgoBShAAQp0CRy76NjPbu4wvtkpeixSspcNo8QQ7fjk0L0sS3VDaUnJDx6b9sizFPOXwKz5s0reL2v7H9vQawQY5q/u8L8lZuC7DdVLn0v3VbWwamSq1LhBgSo/vXVMgVYobuloL7/5wdkLWn1myHZ6ETjllFMCzc3N31LV6wAM7wNYk2VZlz333HP/6EMNTqUABSjgmcCYMWMGl5eXf0JE9kovoqqbWltb/75hw4ZmzxZlYd8JMHDy3ZGwIQpQgAIUoEDxCVTWVX3BhswVEbfu7nAHSeV1Nayrm8INu3xt/ORoeKLAvkPg2dt4styHvKFifb8p1BCD8GtUWSLmbdqJJ544vLOz8xoAswAMdNqIiPwRwPfXrFmz2ukcjqMABShAAQrkS4CBU77kuS4FKEABClCgHwicXRc5whTrpwL5mp+2K0CLrbj1HTtw4+oZS3t+bbxCpsTCFbbqrRAc4qd9QPVPhomLV4Tqn/JVX2zGkcCkSZP2t217BoAKAMfu5mucbwF4SETiDJocsXIQBShAAQr4RICBk08Ogm1QgAIUoAAFiklg+pKzhm0JDL7SUMwRoMxHe1MFmtpVLs30WUinR8OD9lC9zBBcoTl461gGZunnO8VhdV6emJH4TwbzONRHAum32pmmeaRpmvuoaplhGO8ZhvHy008//S8ftclWKEABClCAAo4FGDg5puJAClCAAhSgAAV6E6itrTXWH/5SSFRuAWTf3sbn9uf6jCkyZ3k43qfXxk9dPHWEFTBvACSc2/57Xq3rrq0DNu/5k3kXzevwU2/shQIUoAAFKECB/ifAwKn/nTl3TAEKUIACFPBEoCIWOkUU6bdwpb8a5JuPCv4twHVjXx69sLa2Nv2GHFc+vt0vsNGEfH9FJJZwZaMsQgEKUIACFKAABbIQYOCUBRqnUIACFKAABSjwoYBf7/hRoM0W3JnqLL3hgfMWb/XizHx9R5fit52mXnJ/qP4vXuydNSlAAQpQgAIUoEBPAgyceH1QgAIUoAAFKJCVwJnzZ5WXDWi93IfPNIJCH+qAcdGDkdirWW0uw0ldz6wKKC5RoDTD6Z4NV9GUqiwubSu/atnsBe94thALU4ACFKAABShAgY8IMHDiJUEBClCAAhSgQGYCvn5rG561AvacVdUNj2e2KXdG+/WtfIC+C5Ufjn119M9qa2tT7uyWVShAAQpQgAIUoMDuBRg48eqgAAUoQAEKUMCxwORoeKLAvkMgJzmelIOBCmwSxfWJgR13oTJh5WDJHpeorKv6gg2ZKyJj893LTuurvpAy5JJ7w/FHfdUXm6EABShAAQpQoOgEGDgV3ZFyQxSgAAUoQAH3BaYumnpgsiRwrQHMBGC4v0LWFZMKvVvaBl2TmL1gc9ZVPJg4a/6skvcGtF4AQ6+DylAPlsi6ZPorh6Upvbjh3IZXsi7CiRSgAAUoQAEKUKAHAQZOvDwoQAEKUIACFNitwJjGYOnYtrLzIbgewBB/UcljAduYs2x63V/91dfO3UTqzt6rVcqvEci3AZh+6VWATht6T5nx7g/qQ49s8Utf7IMCFKAABShAgeIQYOBUHOfIXVCAAhSgAAVcF5gcDZ9pqt6hgsNcL96XgoqXYOA7iXD84b6UyfXcqvrpx6VSqbTnybleu5f13oSgduzLoxfW1tbaPuuN7VCAAhSgAAUoUKACDJwK9ODYNgUoQAEKUMArgSnR8JE27NsB+ZJXa2RTV4H3DcWN6wd23L6hMtGZTQ0/zPFtkAessQydsypU/4QfnNgDBShAAQpQgAKFLcDAqbDPj91TgAIUoAAFXBMILjxvuJa2X+u3r34BsAGtT8G49N5I7G3XNpzHQj7+qqIq0NSuculDNbHX8kjEpSlAAQpQgAIUKHABBk4FfoBsnwIUoAAFKNBXga6HW6ugVoBhfa3n8vzVhmDOinD8zy7X9UU5vz6MXYFWKG55xw7cuHrG0nZfYLEJClCAAhSgAAUKSoCBU0EdF5ulAAUoQAEKuCtQWVf1BRsyV0TGulu5j9VUXlfDurop3BDtY6WCmD4lPn2SZSfnCuQkXzXcz87BV/ZshgIUoAAFKFDgAgycCvwA2T4FKEABClAgG4Gz6yJHmGL9VCBfy2a+V3P69Z01CpkSC1fYqrdCcIhXxlnWLeo7zbI04TQKUIACFKAABXoQYODEy4MCFKAABSjQjwSmLzlr2JbA4CsNxRwByny0dT476IPDOD0aHrSH6mWG4AoFBvjojIruWVo+smUrFKAABShAgaITYOBUdEfKDVGAAhSgAAU+LlBbW2usP/ylkKjcAsi+PjNaYwouXh6OP+mzvvLaztTFU0dYAfMGQMJ5beQjixfL2wL9ZMpeKEABClCAAsUowMCpGE+Ve6IABShAAQp0E6iIhU4RxVwAx/oJRgX/FuC6sS+PXlhbW2v7qTc/9VJZX3WqWsbtfjs/KF6Cge8kwvGH/eTFXihAAQpQgAIU8IcAAyd/nAO7oAAFKEABCrgu4Nc7ZATotKH3dCbLrn7gvMVbXd94ERb09x1q8hhS9sWJc+s3FCE9t0QBClCAAhSgQJYCDJyyhOM0ClCAAhSggF8Fzpw/q7xsQOvlPnwGEBT6UAeMix6MxF71q5+f++p6BldAcYkCpT7qNanQu6Vt0DWJ2Qs2+6gvtkIBClCAAhSgQJ4EGDjlCZ7LUoACFKAABVwX8PNbzhR/E5FLGiOxX7m+735YcPtbBu3bBPiqn7avwCZRXJ8Y2HEXKhOWn3pjLxSgAAUoQAEK5FaAgVNuvbkaBShAAQpQwBOBydHwRIF9h0BO8mSBrIvqu1D5IQOIrAF7nFhZV/UFGzJXRMZ6s0KWVRXPqoGLm8LxP2RZgdMoQAEKUIACFChwAQZOBX6AbJ8CFKAABfq3wNRFUw9MlgSuNYCZAAwfaWz7itVgq+XapTPue99HfRVdK7Pmzyp5b0DrBTD0OqgM9dMG01+hDFjWhctnLP+Hn/piLxSgAAUoQAEKeC/AwMl7Y65AAQpQgAIUcF1gTGOwdGxb2fkQXA9giOsL9KmgPBawjTnLptf9tU9lODkjgUjd2Xu1Svk1Avk2ADOjyR4OVqDNFtxpbtnjR4lv/7zZw6VYmgIUoAAFKEABHwkwcPLRYbAVClCAAhSggBOBydHwmabqHSo4zMn4nI1RvKQwvttUE30oZ2tyoY8JTF4WGWd22nNVcLK/eOQNFev7TaGGGATqr97YDQUoQAEKUIACbgswcHJblPUoQAEKUIACHglU1U8/rtOy5gr0cx4tkVVZBd43FDfut3nPufMumteRVRFOcl3Av8Gk/skwcfGKUP1Trm+aBSlAAQpQgAIU8I0AAyffHAUboQAFKEABCuxaILjwvOFa2n6t374qBcAGtD4F49J7I7G3eX7+Ewg2BgdKW9lFKrjKZ1+9VEDjsDovT8xI/Md/cuyIAhSgAAUoQIG+CjBw6qsg51OAAhSgAAU8Euh6GLQKagUY5tEy2ZZdbQjmrAjH/5xtAc7LnYBfHy4vQIutuPWAzXv+hHfH5e564EoUoAAFKECBXAgwcMqFMtegAAUoQAEKZCjg39fdy+tqWFfzOTwZHqhPhk+JT59k2cm5AjnJJy1ta0OBjSbk+ysisYSf+mIvFKAABShAAQpkL8DAKXs7zqQABShAAQq4LnB2XeQIU6yfCuRrrhfvQ0EFWqG45R07cOPqGUvb+1CKU/MtoJApsXCFrXorBIfku52d1lf81kjKnBUzY+t91ReboQAFKEABClAgYwEGThmTcQIFKEABClDAfYHpS84atiUw+MqA4hIFSt1fIeuKqkBTu8qlD9XEXsu6Cif6TuD0aHjQHqqXGYIrFBjglwZVNKUqi0vbyq9aNnvBO37pi31QgAIUoAAFKJCZAAOnzLw4mgIUoAAFKOCqQG1trbH+8JdConILIPu6WrzvxdZYhs5ZFap/ou+lWMGvAlMXTx1hBcwbAAn7q0d9Fyo/HPvq6J/V1tam/NUbu6EABShAAQpQoDcBBk69CfHnFKAABShAAY8EKmKhU0QxF8CxHi2RVVkV/FuA68a+PHphbW2tnVURTio4gcr6qlPtlDFXBMf4qnnVF1KGXHJvOP6or/piMxSgAAUoQAEK9CjAwIkXCAUoQAEKUCDHAn69o0SATht6T5nx7g/qQ49syTELl/OBgJ/vuFPoQ6Upvbjh3IZXfEDFFihAAQpQgAIU6EWAgRMvEQpQgAIUoECOBM6cP6u8bEDr5X57Zk56+/zLfI5ooStPAAAgAElEQVQuggJZxq/PFOsvoeiMxcF9WsySY23IEaZiPzWlPAVYAdtoEdhvWgZelC17PJv49s+bC+SSYpsUoAAFKNAPBRg49cND55YpQAEKUCDHAv5+K9jfROSSxkjsVzlW4XIFILD9rYn2bQJ81U/tFuPXPqdEw0daqiERnAngKAA9/jk9/XB1sY1nAL0X6GhI1CTe8NMZsRcKUIACFKAAAydeAxSgAAUoQAEPBSZHwxMF9h0COcnDZbIovf2BzImBHXehMmFlUYBT+pFAZV3VF2zIXBEZ67NtrzEFFy8Px5/0WV+O26mIV58mlnwPgtMcT/r4QEuBRNLQH98fqv9LH+pwKgUoQAEKUMA1AQZOrlGyEAUoQAEKUOBDgamLph6YLAlcawAzARg+sknawBK+ct5HJ1IgrcyaP6vkvQGtF8DQ66Ay1EdtqwJN7SqXPlQTe81HffXYypnR8GEDoXcott3RtJuPvg3F64CxBYISVd1DBIcBGLKbCZYtWFBmDLmqofru9wrFgn1SgAIUoEBxCjBwKs5z5a4oQAEKUCBPAmMag6Vj28rOh+D6Hv5SmKfu5DGjE5esmBlbn6cGuGwRCETqzt6rVcqvEci3AZh+2ZICrVDc8o4duHH1jKXtfulrV31UxKqqRY27P/p7hAKbVNAIlUeMztInEjMXvbur+emwagCszwFylkDOUKB0p3GK1yxTq1aF6p/wswN7owAFKECB4hZg4FTc58vdUYACFKBADgUmR8Nnmqp36PY7EPzzUfzdELlqRSSW8E9T7KTQBSYvi4wzO+25KjjZV3tReV0N6+qmcEPUV32lm1FIZTx0syou7d6bAq+Yip/su3nP2LyL5nVk0vfZ0fC+purFMPQiURncbW4SsGclIg1LM6nHsRSgAAUoQAG3BBg4uSXJOhSgAAUo0G8FquqnH9dpWXMF+jk/ISjwvqG4cb/Ne87N9C+xftoHe/G3gH+DVvldoETmLKuKPu8LQYUEY+HFgE7vHgqJ2je8bZfe1Ne7soJ1wYNglM6FSkW3+grFJYma+B2+MGATFKAABSjQrwQYOPWr4+ZmKUABClDATQG/frUIgA1ofUeHfdkD31z2lpt7Zi0K7Eog2BgcKG1lF6ngKp99lXTbPwspGJfeG4m9nc/Tq4hWp18ecNGHPcgbhmFXrAjVP+VmX8FYaJYo5nX7mp2q2NN9eceXmxtnLQpQgAIU8J0AAyffHQkbogAFKEAB3wukvxYTrZ5hi/xUgGF+6lchvy81zTkN1Uuf81Nf7KV/CJzzi+qDpQw3GZBpAHz050x9N6DmxctqovF8nERlXfW5KrJox9qKl0qS9ukNMxv+6UU/wVjoi6K4V4FB6foKdIhpfiZRXbfWi/VYkwIUoAAFKLArAR/9QYAHRAEKUIACFPC/wLavrUjpIkC+5KtuVf4ByGWJmmiTr/piM/1SYGosdJKlOheQSb4CUDyQEvlmLu92Ci4KfVJL8KwAA7dZqLxuWsnPLD93+evdbSrqqi+wDTmkJy/DtjsVxvuGgY1oLf99YvaCzbsbXxkNfwnQB7rudBLFy23t5cc8OHtBq6/OhM1QgAIUoEDRCjBwKtqj5cYoQAEKUMBtgWlLa8amxPolBD3+pdDtdXuq1/VmLhnYcVOiMtGWy7W5FgV6FFDIlFi4wla91U//zEDlH7ZtnrFyxtIXPD/B9HObouHfQvTUbVkT0KGQz66MxNZ8dO1gXfhJiJ7otKd0LQMS1c7SK3f3NrtgXeh/IJi3o6bqjYma+u85XYPjKEABClCAAn0RYODUFz3OpQAFKECBfiMwLTrtcykx7ofKUJ9sWm3ResPuvDJRk3jDJz2xDQp8TODri84dUhbo+L6KXCJAmR+IFNhkGvo1t5+f9NG9VdRFviFi39f16wq5oikSu3lXBpkGTt1q/LnU2HRyfeiRLbuqWxENPSTAV9M/E6CzVeUTD9XEXvPDObAHClCAAhQobgEGTsV9vtwdBShAAQq4IJC+sylpWP/nm+c1qa61TFy8KlT/hAvbYwkK5ERg6uKpI6yAeQMg4Zws2NsiopuNDuOzK2bG1vc2NNufB6OhZwBM/GD+hj3byo9bMHtB0uXACejhzqWpS6YeapuBvykwIL2uQn/WFKn/n2z3xHkUoAAFKEABpwIMnJxKcRwFKEABCvRLge2vGi97CoqD8w2ggn8D9veaQg0xSPrbOfxQoPAEKuLVp4kttwM4Ot/di+LV9k7rRC/e5jg5OvUEA4Edb6BT2NOaIg3Ld7fnj97hpKLLSpN6dffxbaYeaBrGTFGp6f7rCvy3KRLfd7e1Y6F5UGwLmVS0eYsa+/86EmvJtz/XpwAFKECB4hZg4FTc58vdUYACFKBAXwTSz1+JhX4F4It9KdPXuemvwdjQe8qMd3+wu6/N9HUNzqdALgVqa2uN9Ye/FBKVWwDZbVCSm57ksUQ4drrbIe7kWOjnhuL87XuQNxID2keiMmE5DZwEck9jJPbB/J1nBaOh3wL4fPdfDbSV77Ns9oJ3dlW/anHVqGTA2Nj15sCAGuF8vbEvN2fKVShAAQpQwA8CDJz8cArsgQIUoAAFfCkwOVr9LQNydz6bU+hDpSm9uOHchlfy2QfXpoAXAlX15+/Zbm+9IqC4pOttal6s01tNw8a5K6bHl/Q2LpOfV0RD/xBgZHqOJbhpVTh+ZU/zP3qHky24e2U4fsGu5lQuDV+iht7W/WdGpxzd09cDK6LVjwvk/6XnKLC8KRKflsl+OJYCFKAABSiQqQADp0zFOJ4CFKAABfqFwLT5s/ZODWx9GcAe+diwKp43AvacxuqG3+Vjfa5JgVwKBBdXj1FTbhfB6blct2stBd6XzrLDd/e2t0x7+uCOovTvH9s+Kji1KRxfnUngJIKfN4bj397VnIq60GwR3NP9Z20qI3t6GHiwLnwlRH/yQUdvJyL1+2W6L46nAAUoQAEKZCLAwCkTLY6lAAUoQIF+IxCsq/4JRHq8I8EbDH0XKj8c++ron9XW1qa8WYNVKeBPgcq6qi+oGHcAGJPrDlXt65tqGq5xY91gvPps2LJqe9ikqXdSJUNWz1jankng1NPDvStiVYtFjRkf1tO3x77yiQNqa2vt3a0xNRY6yVLseNGAJThwVTj+phv7ZQ0KUIACFKDArgQYOPG6oAAFKEABCnxEILjwvOEo7fgHgCE5xElC8PMSY8h1DdV3v5fDdbkUBXwlMKYxWDqmtewiMfVqqAzNWXOimwelWg5dOuO+9/u6ZsXS8PfE0B9vq6P4e6ImfkRvNT/6lToI7kqE4xd+dN7ZddM+WyLmb7t/BdHJV/amLzlrWIs5eMfvLQFYpyyLLPt9b33x5xSgAAUoQIFsBRg4ZSvHeRSgAAUoULQCFXXVF4rInTnboOK3RlLmePl69pzthQtRwCWBSN3Ze7VK+TUCSX+tzHSpbI9lVPXbTTX1P+/rWhWx0G2iuOSDOv+biMRP663mx95SB33SUHmga56oltsGjlXBV0UlsKOe4on29vLTH5y9oLXXNaKhzV1fEzYglSsisURvc/hzClCAAhSgQLYCDJyyleM8ClCAAhQoWoFgNPwHQD/r+QYVfzdEruJf+jyX5gIFLDB5WWSc2WnPVcHJXm9DFI831sQ/19d1KmKhX4hiZrqOAA82RuJf763mx+5w6mWCiL4FW24f8+ronzr9+m0wGv4XoAelS1uwZ66KNCzqrS/+nAIUoAAFKJCtAAOnbOU4jwIUoAAFilJg6qKpB1olgdcBGJ5tUHSzqnH9hgHt8zZUJjo9W4eFKVAsAgqZHJ8WNGzzFggO8XBbtplMjVh+3vJ/92WNymh4gUK/ub2GPJaIxL7YW70MAycbKr+3xW48+pVPLOjp2U3d1w1GQ+l9HZD+NRt6/spI/U4PHu+tR/6cAhSgAAUokIkAA6dMtDiWAhSgAAWKXiBYF6mA2F59zcQGtL6jw77sgW8ue6voMblBCrgsEGwMDpS2sotUcJVnz1hTI5ioiTb1pfUpsdBPbcV3ttVQ/VOipv6E3uplGDh9WG43z3ra1XoV0VCLAOXbf6bViUh9Q2998ecUoAAFKECBbAUYOGUrx3kUoAAFKFCUAh6+ne5pG6mLV0aWP12UcNwUBXIosP1ORPNGQELbv7Xm4kf1xkRN/ff6UrFiaehSMXDLB8HO24lI/X691dvFM5z+YKj+sGuemGLAkkNswaUAPtn16wp0SFv5fonZC9LPZ9rtJ7gkuD/Msh1vpRPT/nxjdcPveuuLP6cABShAAQpkK+Du/0Bn2wXnUYACFKAABXwiUFEX+qUIznCrHYX8xwQu4nOa3BJlHQp8KDA1FjrJUswHcJSLLo8mIvE+/R4QjIW+DsX9XT0NTnXsu+TcxH97DITqwk9C9MRuY1YmIvGKj86ZEg0faUM3dP91W6wpK8PLGnusHwt9EYpfd40xk6mD+vrVQRfNWYoCFKAABYpQgIFTER4qt0QBClCAAtkLVEZDaxUYn32FbjNF3zGT1vjl5y5PPxOKHwpQwAOB4M8uGKyDNz8lImPdKK+qzzXV1I/rS61zflF9sFkmH/5z7+Brerv4St0uA6d0XxXR0MsCjOrqUaE/aorU/6Cnniuj1T9WSNedW28mIvED+7JHzqUABShAAQr0JsDAqTch/pwCFKAABfqVQGVd6BUVHObGpm3otSsj9Tu+EuNGTdagAAU+LlARrZoqMJa5YaPAP5si8UP7WitYF3oRgiO219FYIlIf6almJoFTMBr6LYDPd6u323Cqa0ywLrQBgiPT/12A+sZIPP11RH4oQAEKUIACngkwcPKMloUpQAEKUKAQBYLR6k2ADHejd1XjrKaa6I6v1bhRkzUoQIGPC0xeMv1Thpn6mys2opsT4fphfa1VGQvdorrteUvpgKelxNh0YH3okS27q5tJ4FQRq1osaszYUUvxbKImvts7MydHp55gIPBU13gDUsmv+fb1hDmfAhSgAAV6E2Dg1JsQf04BClCAAv1KoCIaek+APv9lM41mQ766MhL7Zb8C5GYpkAeBs5bWHF5iWBvdWFpFm5vC9UP6Wusb8eqjS215vquOKK5srInf5EbgVFlXda2KUbujVi8hWbAutAqCs9PjFXj/HStwwOoZS9v7ukfOpwAFKEABCvQkwMCJ1wcFKEABClCgmwADJ14OFCg8AT8GTmnFYDSUfgvcKdtERd9Bx4BPJmYuendXwpnc4RSMVk0HjCXd6wzUlr2jNfdu+mjtsxumnRhImU90vc3PEty0Khy/svBOmR1TgAIUoEChCTBwKrQTY78UoAAFKOCpAAMnT3lZnAKeCPg1cKqIV58mtjzWtWkVLGwKx7/Z18Cpsr7qVLWM/925jpyWiMR2+rUL77yw7D/D3nsawLHbMi+gJQkZdW8k9rYnB8GiFKAABShAgW4CDJx4OVCAAhSgAAW6CTBw4uXglcCs+bNKmgebg9tbtwwaYGppq1EiJSUffn0zIJqU9lRzev0tppnaIzB4616bAq3zLprX4VVPxVLXr4FT2jcYDd0L4Kwu6909PymTO5yqFleNSgaMl7ufn2HrD1dMr7+2+69VRKvvEMhFXb/W29f6iuV64D4oQAEKUMAfAgyc/HEO7IICFKAABXwiwMDJJwdRaG00Bs2q5pKRbSXGEaatnzDE+ISqHgyRfQBN/9++gOyZzbbSd6WoYpNC3xWRd1X0LYX8y7DwasrEq4FOvLp/y57/6M/BlJ8Dp6/VhQ8ZIPrnrmfDpc/TQuq0lZHl6TuPdnwq6qovsA05pOsXymxj/bKaaHxX18yYxmDpUW1ll3T/mQnjje7jg0tD58PAz7uN+fNfB3Qcv6Ey0ZnNdcg5FKAABShAgUwFGDhlKsbxFKAABShQ1AIMnIr6eN3ZnEKmxMKfsmGdoGJ8WhSfFuBIBUrdWSCrKqrAy1CsM4B1gL1WkwPX7e55QVmt4ONJfg6c0mzBePXZsGVl13OUAH3XMPDVFaH6HW+Oc5N3crT6WwbkLgDmB3W3ptSYeG9N9CU312EtClCAAhSgQE8CDJx4fVCAAhSgAAW6CTBw4uWwK4Fp82ftnRrYfIaq8TUR/WK2dyvlQXeDCn5lAb9OtZY//uDsBa156MHzJf0eOKUBKpeGr1ZDr+/C2HbnGnRWIlLf4BZQ+mubm8tbb7QV3+lWM2lDzuIbM91SZh0KUIACFHAqwMDJqRTHUYACFKBAvxBg4JTZMYcWhkZ3lOpdCvl/ApRnNhtIv4JeVB6DdvxPoibxRqbzvRwfXHjecJR0hFW0UiAndLtbxMtlPastQLuteByGXS9bhq1KfPvn254XVQyfQgictoVO0epbFfLdnc01loJxaV8f5H1OLDTeVL0HkEld9VU0JYoaN0OtYrheuAcKUIACFMiNAAOn3DhzFQpQgAIUKBABBk7ODyrYGByo7WXPCzDa+azdjlyTGNDxaVQmLBdqZV9CIcFY+FQVeyZUzhGgLPti/p2ZDvoMNVYpUJcIx34Hgfq32947K5TAaVvoVBe6QgU/+fDrden/TzerrXcOsZLzlpyb+G/vO/5wxLSlNWM7zdSVhsq07qHotjAXMjURjj+cST2OpQAFKEABCrglwMDJLUnWoQAFKECBohBg4OT8GIPR8OcB/a3zGT2P7DT0mPtD9X9xq15GdRRSEQufDdVrRXBMRnMLf/CfbbF+fPTLn2yqra21C3E7hRQ4pX3PjoW+bCqiAuzzEe+kAI/aiodNkceHtg3cuGD2gmT3MadHw4P2NOyj1ZLPK/QbEDl+F2f2F9sKVK6csfSFQjxP9kwBClCAAsUhwMCpOM6Ru6AABShAAZcEGDg5hwxGq8KAEXU+o+eRNuSr+XjOTEU0fE4/DZp2PhDVFyD647GvHFFfaMFToQVO20KnaHhfU6wbRY3pO93ttPOpJKF4U6FbRSSggiGiOHB3/yQp0Gao8ZP9Ng+9uT+/tdCt35NYhwIUoAAF+ibAwKlvfpxNAQpQgAJFJsDAyfmBFnrgdGY0fNgA2HcD8iXnuy7+kQp9MmngW3m72ywL4kIMnLq2WVU//bhOK/V9Ac7J9jlh6QeQ29BFop03++1ZaFkcJ6dQgAIUoECRCDBwKpKD5DYoQAEKUMAdAQZOzh0LNnBqDJoVrWWXwMB12Tzo3LlQQY9Miq23t3UMuq4Q3mxXyIFT11VyTix0gNiYZkDSb0I8UYEBPV1BCrwv0N+L4t72VNmqB85bvLWgrzg2TwEKUIACRSfAwKnojpQbogAFKECBvggwcHKuV4iB07T5s/ZODWhdDsFpznfaf0eq4vmUmufcN73uZT8rFEPg1N33wjsvLNu019YjO+yOI0wN7APVwemfW6KbRc03JWW/kBjSsTHvD9n380XB3ihAAQpQIO8CDJzyfgRsgAIUoAAF/CTAwMn5aRRa4DR5WWSc2WmvVMFhznfJkQC2iKCmMRy/z68axRY4+dWZfVGAAhSgAAUyEWDglIkWx1KAAhSgQNELMHByfsSFFDhV1EW+Zoid6O1rSs533+9G2lB8J1ETv8OPO2fg5MdTYU8UoAAFKNDfBRg49fcrgPunAAUoQIGdBBg4Ob8gCiVwqohXn2HYsophk/Oz3d1IhVzRFInd3PdK7lZg4OSuJ6tRgAIUoAAF3BBg4OSGImtQgAIUoEDRCDBwcn6UhRA4BWOhr4oiHTaVOt8ZR/YgoKp6cVNN/Tw/KTFw8tNpsBcKUIACFKDAdgEGTrwSKEABClCAAt0EGDg5vxz8HjgFF1eP0RI8LSrbHrjMj2sCKoJgYzi+0rWKfSzEwKmPgJxOAQpQgAIU8ECAgZMHqCxJAQpQgAKFK8DAyfnZ+Tlw+vqic4eUlXQ+BWCM8x1xpFMBFW021Th+RST2N6dzvBzHwMlLXdamAAUoQAEKZCfAwCk7N86iAAUoQIEiFWDg5Pxg/Rw4BWPVCahUON8NR2Yh8Jf2tvJPPzh7QWsWc12dwsDJVU4WowAFKEABCrgiwMDJFUYWoQAFKECBYhFg4OT8JP0aOKXfSCdiP+h8JxyZrYBC72yK1F+c7Xy35jFwckuSdShAAQpQgALuCTBwcs+SlShAAQpQoAgEGDg5P0Q/Bk6nLJk+YF8jtV4Fhzvfidcj9T2o/BfQd1VkE4BWiN2saiTTKxuCTltRakLEhg5L/5pA9wAMU2GXC2SIiO6rKvukh3vdbSb1VTRVYpoTllVFn89knttjGTi5Lcp6FKAABShAgb4LMHDquyErUIACFKBAEQkwcHJ+mH4MnCrrQt9XwQ3Od+HiSMVrEF2jtrHGMPVvpmm80tIWePWB8xZvdWWVxqB5TkfZvgYw2rQw2hY9QiHjRXQSIHu6skYWRUTxeGMkfko6JctiuitTGDi5wsgiFKAABShAAVcFGDi5ysliFKAABShQ6AIMnJyfoN8Cp/TdTXubqdcESN8J5PlHgE4Av7IVD5cm7UcbZjb80/NFd7PAlGj4yJTqGYbIGSr2KaISyGUvtlhTVoaXNeZyze5rMXDKlzzXpQAFKEABCuxegIETrw4KUIACFKBANwEGTs4vB78FTudEq84zYSx0voMsRwr+pRbusAyJ3huJvZ1lFc+mnRMLHWDaUgPo+RAc4tlC3Qurrk3U1E/MyVq7WISBU77kuS4FKEABClCAgROvAQpQgAIUoIAjAQZOjpi2DfJV4KSQYCyUfo7QUc53kPHIrWLLtW+reffqGUvbM56d4wljGoOlR7UP+CbE/oGq7Of18pZpf25VdcPjXq+zq/oMnPKhzjUpQAEKUIACPQvwDideIRSgAAUoQIFuAgycnF8OfgqcpsRCx9qK55x3n+FIlT+2C6ofjMRezXBm3odH6s7eq0XK7zQgVR43c18iEj/b4zV2WZ6BUz7UuSYFKEABClCAgROvAQpQgAIUoIBjAQZOjql8dYeTpw8LV9z7XztQVQh3NfV0ehV11ReIyJ0ATOennNFI2xIcvCocfzOjWS4MZuDkAiJLUIACFKAABVwW4B1OLoOyHAUoQAEKFLYAAyfn5+enO5wqotVPCOQk5907G5l+A9v6gR1f3FCZSD8gvOA/FXWRb8Cwmjx7qLiNCxLT43fnGoqBU67FuR4FKEABClCgdwEGTr0bcQQFKEABCvQjAQZOzg/bL4FTcP6soRjYusn1O3dEN8PuHJuoSbzhXMX/I4PRqumAsRiAB38OlMcSkdgXc63AwCnX4lyPAhSgAAUo0LuAB3/Q6H1RjqAABShAAQr4VYCBk/OT8UvgNDUWOslSPOG8c4cjVb6XqInd6HB0QQ2rjIbvVOiFbjetoinpGLBfYuaid92u3VM9Bk651OZaFKAABShAAWcCDJycOXEUBShAAQr0EwEGTs4P2i+B0+Ro9TcNyALnnfc+UoD2gDnkwIbqu9/rfXThjQg2BgeivWwNgDFud2+LNWVleFmj23UZOOVSlGtRgAIUoAAF+i7AwKnvhqxAAQpQgAJFJMDAyflh+iVwCsZCc6G42HnnvY9U4OGmSPxrvY8s3BFT4tWn27b8yu0dqOD2pnD8O27XZeCUS1GuRQEKUIACFOi7AAOnvhuyAgUoQAEKFJEAAyfnh+mbwKkudD8EX3feee8jRXFVY038x72PLOwRwWjo1wBcfeaSQp9sitR/Jpcy/EpdLrW5FgUoQAEKUMCZAAMnZ04cRQEKUIAC/USAgZPzg/ZN4BQN/Q7AKc47732kpcbUVTXRFb2PLOwRwVjoi1CkQyfXPumvI64f0DE0l2/2Y+Dk2vGxEAUoQAEKUMA1AQZOrlGyEAUoQAEKFIMAAyfnp+ibwKmueg1EJjjvvPeRAvlyYyTm+tfNel85xyMUEoyF1rv9LKcSMzCuoXrpc7naDQOnXElzHQpQgAIUoIBzAQZOzq04kgIUoAAF+oEAAyfnh+yfwCn0IgRHOO+895Gm4DPLw/Enex9Z+CMqouHLBXqTmztRyOSmSGyVmzV7qsXAKVfSXIcCFKAABSjgXICBk3MrjqQABShAgX4gwMDJ+SH7JXCqrAttVMHhzjvvfaQa+pWmUP0jvY8s/BFnRsOHDYC+DMC1Pxfaiu+urInflisdBk65kuY6FKAABShAAecCrv3BwvmSHEkBClCAAhTwrwADJ+dn45fAqaKu+lkROc55505G2pFEpCHmZGQxjAnWhdZBMM6tvQhkXmMkdpFb9Xqrw8CpNyH+nAIUoAAFKJB7AQZOuTfnihSgAAUo4GMBBk7OD8cvgVMwGv4DoJ913nnvI1Xt65tqGq7pfWRxjKiMhW5RxaVu7UaABxsjcVffHNhTbwyc3Do51qEABShAAQq4J8DAyT1LVqIABShAgSIQYODk/BD9EjhV1IV+KYIznHfuaORfEuH4sRCoo9EFPqgiXn2G2PJLt7ahikeaauJfcateb3UYOPUmxJ9TgAIUoAAFci/AwCn35lyRAhSgAAV8LMDAyfnh+CVwqoyG6xQacd65s5G2bVatnF63zNnowh51ypLpA/Yxk28AMtyNndiQq1dGYje4UctJDQZOTpQ4hgIUoAAFKJBbAQZOufXmahSgAAUo4HMBBk7OD8gvgVPF0vD3xNAfO+/c4UjRzYaUfHFFaOkzDmcU9LBgvPpstaVegIF92ojK7zCw/auJykRbn+pkMJmBUwZYHEoBClCAAhTIkQADpxxBcxkKUIACFCgMAQZOzs/JN4FTXeQbIvZ9zjt3PlJFmw0bFzdG6pf0h6/XBeuCBwUw8NSUYZc7V9o+0lZVEfn7US+Pfry2ttbOdH5fxjNw6ose51KAAhSgAAW8EWDg5I0rq1KAAhSgQIEKMHByfnB+CZwmL6n6hGEaLznvPIuRKn+0BT9aGY490h+CpyyE8jqFgVNe+bk4BShAAQpQYJcCDJx4YVCAAhSgAAW6CTBwcn45+CVwqq2tNf466u9vArKv8+6zG6nARkPtuG8cI94AACAASURBVGWXrlg5Y+kL2VXhLLcFGDi5Lcp6FKAABShAgb4LMHDquyErUIACFKBAEQkwcHJ+mH4JnNIdV8Sql4pKjfPu+z5SFC+rgUcs2/i/UqvzyeXnLn+971VZIRsBBk7ZqHEOBShAAQpQwFsBBk7e+rI6BShAAQoUmAADJ+cH5qfAaUo0HLShjc6792KkvAGx/2jb8ke7xPpjIJB6LpcPzvZiR4VSk4FToZwU+6QABShAgf4kwMCpP50290oBClCAAr0KMHDqlWjHAD8FTtXxM/bosPd6U4CMH3btfMcZj7QVeEWgfxVggwLrS8ySDXttGvK3eRfN68i4GifsVoCBEy8OClCAAhSggP8EGDj570zYEQUoQAEK5FGAgZNzfD8FTumug7HQPCj+x/kO8jbSguJliK4XGxstAxtNUzcaHfbG5TOW/4sPJc/8XBg4ZW7GGRSgAAUoQAGvBRg4eS3M+hSgAAUoUFACDJycH5ffAqeqxVWjkoFtb6szne/CXyMFaLdVXxbBRgE2WsBGU3WjYdsbP/XPT71WW1tr+6tjf3TDwMkf58AuKEABClCAAt0FGDjxeqAABShAAQp0E2Dg5Pxy8FvglO68IlbdICrTnO+icEZuD6Pwkhj6ktryEgz7RVX7xTJzz5caqu9+r3B24n6nDJzcN2VFClCAAhSgQF8FGDj1VZDzKUABClCgqAQYODk/Tj8GTlMXTT3QKjU3QGWo850U/kgF/gvoCxB5UWy8ZIv8VUWfXRWOv1n4u+t9BwycejfiCApQgAIUoECuBRg45Vqc61GAAhSggK8FGDg5Px4/Bk7p7oOx0Cwo5jvfSfGOVMh/oPosgGfF1DUdbfaTD3xz2VvFtmMGTsV2otwPBShAAQoUgwADp2I4Re6BAhSgAAVcE2Dg5JzSr4ETFFIRDT0sgjOc76YfjVT8HSJPWLD+b0AKv2s4t+GVQt89A6dCP0H2TwEKUIACxSjAwKkYT5V7ogAFKECBrAUYODmn823gBODri84dUhroeFxEjnO+o346UvGSij4KA49KaefqRGWirdAkGDgV2omxXwpQgAIU6A8CDJz6wylzjxSgAAUo4FiAgZNjKvg5cErvIlgXPAgY8EeIjnC+q/49UkWbDZX7bTWWD28f8KsFsxckC0GEgVMhnBJ7pAAFKECB/ibAwKm/nTj3SwEKUIACPQowcHJ+gfg9cErvpGph1chkqfFLAGOc74wj0wIKbBLBspRtzLu3JvqSn1UYOPn5dNgbBShAAQr0VwEGTv315LlvClCAAhTYpQADJ+cXRiEETundTF9y1rAWY8gqiJ7qfHcc2U3ABvCoYegdK0L1v/ajDAMnP54Ke6IABShAgf4uwMCpv18B3D8FKEABCuwkwMDJ+QVRKIFTekdjGoOlR7WX1tqCy0Ql4HyXHLmTgOIJw9RLV4Tqn/KTDAMnP50Ge6EABShAAQpsF2DgxCuBAhSgAAUo0E2AgZPzy6GQAqeuXU2OTj3BQKAOwCed75QjPyKgCjQFUqnvLj93+et+0GHg5IdTYA8UoAAFKECBnQUYOPGKoAAFKEABCjBwyuoaKMTAKb3RU5ZMH7C3aX0b0O8JsFdWm+ek9DOe3gfs85siDcvzzcHAKd8nwPUpQAEKUIACHxdg4MSrggIUoAAFKMDAKatroFADp67NBufPGqoDWy4VwYVQGZoVAifBFo0bZZ2zEpWJtnxxMHDKlzzXpQAFKEABCuxegIETrw4KUIACFKAAA6esroFCD5y6Nr3tjqdAZyVs47siOCYrDE56eqC2fDVac++mfFAwcMqHOtekAAUoQAEK9CzAwIlXCAUoQAEKUICBU1bXQLEETt03XxEL/T8FppnQc1Rlv6xg+u+kv1iCL60Kx9/MNQEDp1yLcz0KUIACFKBA7wIMnHo34ggKUIACFOhHAnxouPPDLsbAacfuG4NmZbLkZLWNc6D4Ih8y7vC6UF3b3j7o5AdnL2h1OMOVYQycXGFkEQpQgAIUoICrAgycXOVkMQpQgAIUKHQBBk7OT7CoA6ePMExdPHWEGoEvqIHTbOBEAUY5l+pvI3VFIlw/DZJ+rnhuPgyccuPMVShAAQpQgAKZCDBwykSLYylAAQpQoOgFGDg5P+L+FDh9VGXa/Fl7dw5sO15UjzcE421grACHAjCcCxbvSIFc3BiJ3ZmrHTJwypU016EABShAAQo4F2Dg5NyKIylAAQpQoB8IMHByfsj9OXDaldLp0fCgIcCRBqyjYMto28RIQ41DoRgJ0QMBmM51C37kFkvwqVw9z4mBU8FfL9wABShAAQoUoQADpyI8VG6JAhSgAAWyF2Dg5NyOgZNzq1nzZ5U0lzSPSJVhpFoYKYqRKua2MEpFRwAYIUCZ84r+H6miy5rC9VW56JSBUy6UuQYFKEABClAgMwEGTpl5cTQFKEABChS5AAMn5wfMwMm5lZORwSXB/VFacojYxghRHWHBGCnQEVAdAZF0KHWAkzp+GmN0ytErZsbWe90TAyevhVmfAhSgAAUokLkAA6fMzTiDAhSgAAWKWICBk/PDZeDk3MqNkRfeeWHZO3tsGd1pdo4VW44SMcZAcbQaOkpUAm6s4XYNgdzTGImd73bdj9Zj4OS1MOtTgAIUoAAFMhdg4JS5GWdQgAIUoEARCzBwcn64DJycW3k5Mh1Ebdpr65FJKzlGgKMUMhHACQD28HJdJ7VVtFlaBx2cmL1gs5Px2Y5h4JStHOdRgAIUoAAFvBNg4OSdLStTgAIUoEABCjBwcn5oDJycW+V8ZGPQnJYaODaZtD4rgtNVcJqoDM55H9sWtGckIg1LvVybgZOXuqxNAQpQgAIUyE6AgVN2bpxFAQpQgAJFKsDAyfnBMnBybpXvkWMag6VHtZWcbBvGFFGdDMieuerJhjasjNRXe7keAycvdVmbAhSgAAUokJ0AA6fs3DiLAhSgAAWKVICBk/ODZeDk3MpPI9Ph05Gt5ZMNw/oOgPTX7zz+6NuJcP3+EKhXCzFw8kqWdSlAAQpQgALZCzBwyt6OMylAAQpQoAgFGDg5P1QGTs6t/DqyIl59hli4DSKf8rJHr99Wx8DJy9NjbQpQgAIUoEB2AgycsnPjLApQgAIUKFIBBk7OD5aBk3MrP4+cNX9WybvlrTeJYg4AT/5saIs1ZWV4WaNXDgycvJJlXQpQgAIUoED2Ap78oSL7djiTAhSgAAUokF8BBk7O/fMZONXW1hp/HfVStYpxMhRDnXf9wUixmwXGU3u2li9ZMHtBMuP5RTihoq76AhG5y4vQyYZcvTISu8ErNgZOXsmyLgUoQAEKUCB7AQZO2dtxJgUoQAEKFKEAAyfnh5rPwKkiGmoUIOi8292O/M3YV0Z/pba2NuVCrYIvEYyF5kJxsdsbEUi0MRKrcbtuVz0GTl7Jsi4FKEABClAgewEGTtnbcSYFKEABChShAAMn54ear8Bpaix0kqV4wnmnPY+0IV9fGYk96Fa9Qq5z5vxZ5QPKW/4Jlb1d3sfqRCR+qss1d5Rj4OSVLOtSgAIUoAAFshdg4JS9HWdSgAIUoEARCjBwcn6o+QqcgrHQLCjmO++055EquL0pHE+/sY0fABXR8O0CTT/Pyb2P6tpETb1nb8Rj4OTeUbESBShAAQpQwC0BBk5uSbIOBShAAQoUhQADJ+fHmK/AqbKu+lwVWeS8015H/iYRiZ/e66h+MiAYC30divtd3a7qC4ma+iNdrdmtGAMnr2RZlwIUoAAFKJC9AAOn7O04kwIUoAAFilCAgZPzQ81X4DR5ac00w7AanHfa80iF/KcpEjvArXqFXidYXzMBlrXG1X0I/pUIx0e4WpOBk1ecrEsBClCAAhRwRYCBkyuMLEIBClCAAsUiwMDJ+UnmK3CqjIXOUsW9zjvtfWTSNkffN73u5d5HFv+IqUumHmqZgVfd3KkC/22KxPd1s2b3WrzDyStZ1qUABShAAQpkL8DAKXs7zqQABShAgSIUYODk/FDzFTi5/dDw7Tu2ZyQiDUud7754RwbrggdByv7l5g5F8WpjTXyUmzUZOHmlyboUoAAFKEABdwQYOLnjyCoUoAAFKFAkAgycnB9k3gKnxVNHWIHAa8477X2kKhqbauJTeh9Z/COmRMNH2tANbu5UVZ9rqqkf52ZNBk5eabIuBShAAQpQwB0BBk7uOLIKBShAAQoUiQADJ+cHma/Aqba2NrD+8L+3iUrAebc9j1TR5ndSJfusnrG03a2ahVpnWnTa51IwV7vZv0L/0BSpP9nNmgycvNJkXQpQgAIUoIA7Agyc3HFkFQpQgAIUKBIBBk7ODzJfgVO6w8q60EYVHO68295H2rZZtXJ63bLeRxb3iIq66gtE5Gdu7lKABxsj8a+7WZOBk1earEsBClCAAhRwR4CBkzuOrEIBClCAAkUiwMDJ+UHmM3CqiIYaBQg679bBSNWnEjX1JzoYWdRDKmLVS0Wlxs1NCvSnjZH6S92sycDJK03WpQAFKEABCrgjwMDJHUdWoQAFKECBIhFg4OT8IPMbOIUvF+hNzrt1OlJOS0Ri/+t0dLGN2/Z1xVEb/yPAXm7uTVTPa6ypX+xmTQZOXmmyLgUoQAEKUMAdAQZO7jiyCgUoQAEKFIkAAyfnB5nPwCkYDX8e0N8679bZSFU83zSwYzwqE5azGcU1qjIWmqyKJrd3ZSP16ZWR5U+7Xber3llLaw4vMayNbtRPP8+rKVw/xI1arEEBClCAAhTozwIMnPrz6XPvFKAABSjwMQEGTs4vinwGThfeeWHZf4a9918ArgcDosY1jTXR651LFMfI2tpaY8Oojc8oMN7lHVkdydI9Hzhv8VaX6+4ox8DJK1nWpQAFKEABCmQvwMApezvOpAAFKECBIhRg4OT8UPMZOKW7DEZD6TtxJjvv2PFIS9T+cmNNw2OOZxTBwMql4UvU0Nvc34r8XyIS+3/u1/2wIgMnL3VZmwIUoAAFKJCdAAOn7Nw4iwIUoAAFilSAgZPzg8134FQRq4qIGnXOO85o5FbL0DNWheqfyGhWgQ4+J179mYAtjykwwO0tiOLKxpq4B8/bYuDk9lmxHgUoQAEKUMBNAQZObmqyFgUoQAEKFLwAAyfnR5jvwGn6krOGtZqD/6XAIOddZzRyKwTTEuH4wxnNKrDBk6PhiQL9jQDDvGjd6JSjV8yMrfeidldN3uHkpS5rU4ACFKAABbITYOCUnRtnUYACFKBAkQowcHJ+sPkOnNKdVkbDdyv0W867znikWoKbXyjruGZDZaIz49k+nzCtLhJKir1AgIEetfpiIhL/lEe1d5Rl4OS1MOtTgAIUoAAFMhdg4JS5GWdQgAIUoEARCzBwcn64fgicgourxyAg6btnvP0zjeI1NewfNIUbos6F/Dty6qKpB1ol5o2AhL3sUlW/3VRT/3Mv10jXZuDktTDrU4ACFKAABTIX8PYPZ5n3wxkUoAAFKECBvAowcHLO74fAKd1tMFr9KCBfct559iMFWAfVO/fbPHz5vIvmdWRfKT8z08FMqWl9x1ZMF6Dc2y70vc0wRvw6Emvxdh0GTl77sj4FKEABClAgGwEGTtmocQ4FKEABChStAAMn50frl8BpWkPkmFTKXgfAdN5930YqsAmQ+xW4b5Nl/mb1jKXtfavo3ewZi4P7tJpl37AhVRD9HADDu9U+rCy23tw4vf6KXKzFO5xyocw1KEABClCAApkJMHDKzIujKUABClCgyAUYODk/YL8ETumOK2Khe0Qx23n37o0UoN2GPiOKJ2wxnuwE1k945fB/1tbW2u6t4rCSQiYvrRqNgI4LwDzBsvXzInKs5185/Gh7ou8MtFs/Fa25d5PDzvs0jIFTn/g4mQIUoAAFKOCJAAMnT1hZlAIUoAAFClWAgZPzk/NT4JS+i6c5UPoiIHs634F3I7eFUKoviMjLCn3DUPm3iv1vw5C3bNH3Dcvcamv7llKzeWt96JEtu+2kMWhWJffeI9nWKSVG27a3yLWXGMMMYA+1zAMMsfYV1QPVxCjYcjgEowEM8W5nzipbsGeuijQscja676MYOPXdkBUoQAEKUIACbgswcHJblPUoQAEKUKCgBRg4OT8+PwVO6a4rY6HJqmhyvgP/jUwHVQptU0GJqAz2X4cOOlL549hXD/9sLu/wYuDk4Fw4hAIUoAAFKJBjAQZOOQbnchSgAAUo4G8BBk7Oz8dvgVO682AsNA+K/3G+C450WWCrbQWOXzlj6Qsu1+2xHAOnXGpzLQr8//buPE6uusz3+Pc5Vd2dsERAgYFRZFOUOOIy3hmdl47ccVcUSKoTOlXV2QwXEAjIKiCFAiIIJEZhwGzd1d2QroQwigM6IwM6XJ1RuToKOmrEBUVlCSSQpLurzjOvJuKNmpDq6nOqTlV98m//fs/yfk5ehsfqUwgggAAC1QmwcKrOiVMIIIAAAm0iwMKp+kEnceF0+qdP7/rNC564T2avr74TTkYk4Ap8Rik7uD6ieFWHYeFUNRUHEUAAAQQQqJsAC6e6UZMIAQQQQKAZBFg4VT+lJC6cxqs/oT93QNr9HpleWX03nJysgMsvX5sfvGSycWq5z8KpFjXuIIAAAgggEK8AC6d4fYmOAAIIINBkAiycqh9YUhdO4x3MXjn7JZVUx1dlfmj1HXGyVgE373vVhpfNr+d7m3aslYVTrZPjHgIIIIAAAvEJsHCKz5bICCCAAAJNKMDCqfqhJXnhNN5Fz8qew8dSqXtk/pLqu+LkRAXctPxVG448uVHLpvF6WThNdGqcRwABBBBAIH4BFk7xG5MBAQQQQKCJBFg4VT+spC+cxjs5sZg9KBXaOpm/sfrOOFmtQGi6cV124DSZvNo7cZxj4RSHKjERQAABBBCYnAALp8n5cRsBBBBAoMUEWDhVP9BmWDiNdzP+IvHf7fPkZ0P5guq74+TzCbh5OQjt4uHegU8mQYqFUxKmQA0IIIAAAgj8sQALJ54IBBBAAAEEdhBg4VT949AsC6fnOprZN+fUwOxql/asvktO/pmA6eHAPLMmO/iNpOiwcErKJKgDAQQQQACB/y/AwomnAQEEEEAAARZONT0DzbZwGm9y9qrZh1ZS6c9Kek9NTbf5JXcN710Z+dCq+aVHk0TBwilJ06AWBBBAAAEEtguwcOJJQAABBBBAgIVTTc9AMy6cnmt0Rn/uuMD8BrleXFPzbXbJXBvGAn1ofW7griS2zsIpiVOhJgQQQACBdhdg4dTuTwD9I4AAAgj8kQC/Ulf9A9HMC6fxLt+/Yv7enR1jpwQWnu1uB1bfeTud9CdCBdcd/OQ+n1p2xrKRpHbOwimpk6EuBBBAAIF2FmDh1M7Tp3cEEEAAgT8TYOFU/UPR7Aun5zodf6n4I/s+PkseXGLSkdULtO5Jlx6V64a9wqeXrJ53+5NJ75SFU9InRH0IIIAAAu0owMKpHadOzwgggAACuxRg4VT9w9EqC6fnOl5006KOJ6Y+PcMU5Nz8HeaWrl6jNU66+3cCC5b7lG0rS92lrc3SFQunZpkUdSKAAAIItJMAC6d2mja9IoAAAgjsVoCF026J/nCg1RZOO3aeWb5gP3WNzFSovExvau33XvrGUFYKUqmbS3P6vl39E5CckyyckjMLKkEAAQQQQOA5ARZOPAsIIIAAAgjsIMDCqfrHoZUXTjsq9KzsOXysI3ibu44NzI9thfc9ufsDQWB3huZ37ffMnl+9+eSbx6qffPJOsnBK3kyoCAEEEEAAARZOPAMIIIAAAgiwcKrpGWiXhdMf4bjspL7eo8es/L9l9mZzHSPTEZJSNSHW51LF3X9oFnxT5l/vGAm/NLRw6Of1SV2fLCyc6uNMFgQQQAABBCYiwMJpIlqcRQABBBBoeQE+4VT9iNty4bQTnvGXjv96/6eO7hzV9LIq0930KnMdqUAHye0F1YtO+qTL9Ct325CSflIJ/YcdQeWbz4xNvf/zC1ZunnT0BAdg4ZTg4VAaAggggEDbCrBwatvR0zgCCCCAwM4EWDhV/1ywcNq9VWY4MzX1TOpApdMHh9IBYegHp1wHjqWsKy3tXXGlZb6HuXWZvFMK9pQ87dIhz0Z332RSRdKYLHha7lvc7LHQ/NHA7dHAw8dCpR5PjfnPwmnbNjTTi753r1f9CRZO1VtxEgEEEEAAgXoJsHCqlzR5EEAAAQSaQiDTP+dxyfaLpFjTB0q5gc9HEiuBQVg4JXAobVpSZkX2KHXohxG1v6mUH6jnJ9MiKpswCCCAAAIIJEuAhVOy5kE1CCCAAAINFujuy/7UTYdFUYaFdsnw3OLlUcRKYgwWTkmcSnvWlOnLz5SFpUi6d/tlqbe4/RNm/EEAAQQQQACBmgVYONVMx0UEEEAAgVYU6O7Pftul10XRm0uPpsvl1986/9ZfRhEvaTFYOCVtIu1Zz1tXzZ1yQKp8X1R/byV9t5QfeE17atI1AggggAAC0QmwcIrOkkgIIIAAAi0gkOnP3inpXVG1Yua/rVTSZ63r7btVJo8qbhLisHBKwhTau4bMYO/rVS7fJLPXRyXhri+v7R14Z1TxiIMAAggggEC7CrBwatfJ0zcCCCCAwE4FuvvnXOmyC6Pn8W+W0+GZ63tu+Xr0sRsTkYVTY9zJKuX7TnjhFtvjoyY7TVIqShML/erhuYPnRxmTWAgggAACCLSjAAundpw6PSOAAAII7FKgu5id4a61MRG55AOqjJ5Xmlf6TUw56haWhVPdqEn0e4FFNy3q2Dhly6kK/DK5xfJi79Aqs9blbhkGHQEEEEAAAQQmJ8DCaXJ+3EYAAQQQaDGB2StmH1zpSI+/cymIsbVNcl3+wNSRpQ92l0ZjzBNraBZOsfIS/E8EMsXs+911rUlHxojjlRE/5LYPDj4cYw5CI4AAAggg0BYCLJzaYsw0iQACCCAwEYGZ/XO+arI3T+ROLWdd+klK9pE1+WI0365VSxGTuMPCaRJ4XK1aILMie5Q6dJ2k91R9qeaD9u+lfDH2v/s1l8dFBBBAAAEEmkiAhVMTDYtSEUAAAQTqI9DdnzvN5Z+pT7Zns9w9Gvjif8oOfq+OOSedioXTpAkJ8DwCPYOn7Lst3Hx+2nWWS511wXKdXuodqOff/bq0RRIEEEAAAQQaIcDCqRHq5EQAAQQQSLRAZvmC/dQ58pCkafUq1M3LgQc3+mhnobRwxRP1yjuZPJn+nrlSsGoyMXa8Wza9e31u4K6o4hGnOQUKhUL6wcM3nBzKLzPphXXsYvNUf+aw/t71j9cxJ6kQQAABBBBoWQEWTi07WhpDAAEEEJiMQHzfVre7qnyj3C6b/tCRny0UCuXdnW7kz7tX587ywMd/1SmSP2lV3npL/pZ7IwlGkKYU6B7sOTYsB0vM9Oq6N+B+Val3MIZvqKx7JyREAAEEEEAgEQIsnBIxBopAAAEEEEiawEk3LXpReeqWDfX8lNOfGHxPssWlfPHupNk8V8+sYvba0HV2ZPWlwr8pzRn6z8jiEahpBI5f3XtER1D5lKTjG1T05r3KI0esml96tEH5SYsAAggggEDLCbBwarmR0hACCCCAQFQCmWJ2kVw3RRWvpjiu9R2V8Jyh+UM/rel+jJcyfbm7ZX5sVClGA391s73HKqre2zXO+1fM3zvdOXpR4FpsUlejHEL5Kevyg//YqPzkRQABBBBAoBUFWDi14lTpCQEEEEAgGgGXZfqz/yLTP0QTsLYoLo0E8ut88wuuLJ12w9O1RYn21viiYErH6O9cmhJV5I7R8NChhUM/jyoecZIrUCgUgh8c+pPeMNAVkg5qaKWur5TyA2+XyRtaB8kRQAABBBBoMQEWTi02UNpBAAEEEIhWINOX+UsFXd+Q68XRRq4p2iPmfuFwfrC/0f9xPLPYkzcP+mrqYueXwgemjEx9sLs0GmFMQiVQYHYx+6aKa6mkv254eaaHFY78bam39KuG10IBCCCAAAIItJgAC6cWGyjtIIAAAghEL3DS6t7p5VT5Prm9IProNUR0/3YlpTNvyw7eV8PtSK5k+rL3y/TaSIJtD/JIKT9wcITxCJUwgWeXt9b5CcmykpLwb9DNgenNa3ID300YFeUggAACCCDQEgJJ+B/7loCkCQQQQACB1hYY//YsrwS3N/Al4n8K7KH5YBCOXlDvT2ec1JfPli0sRjzxb5XyA2+IOCbhEiCQGc5MDbd1nmuy803aIwEljZewyU0fWJsbuCch9VAGAggggAACLSfAwqnlRkpDCCCAAAJxCfQMzn3NaFj+orkS80kck56pyD7xeCV17T3zVm+Lq/fn4s5eMfvgckf6v0x6YZS5QvOBdbnBXJQxidV4gRnFk7rNU1eb9NLGV7O9Ajf9OiW9h082JWUi1IEAAggg0KoCLJxadbL0hQACCCAQi8DslbNfUkl19EX57WxRFGquhxTo3OHcwLoo4u0sxnE3LdpjytQt98bx7h0L7ezhucXr46qduPUVmHFL/rU2VllqsjfXN/Nusrn9W6oy1nvr/Ft/mai6KAYBBBBAAIEWFGDh1IJDpSUEEEAAgZgFtn973WlmusqlPWPONtHw9wSmxVF/eqNn8JR9y+XNt7vpLRMtqJrzbjqWX2+qRirZZ07ozx2QMr/CXPMlBUmp1qUtgezC4VxxWaNfuJ8UE+pAAAEEEEAgbgEWTnELEx8BBBBAoGUFTvzcnBdblz4ZyE5KyEuQn7OuhPI1UnD9unzxW5MdwKyBuW8IK2P9MnvFZGPt4v5YZ/D4iwazd26KKT5hYxY4ejjTefSWrjMs5Rcn5uX623t2yYe3enDeHb3FX8TMQHgEEEAAAQQQ2EGAhROPAwIIIIAAApMU2P41775EssS99NrlXwtcK9LpaZ8fmnPjxom02rO856XlruC8UL7I3NITuTuRsy67d22++NaJ3OFscgRm9uXfZwqvlenlyanq2a/Buz80LV6bG/hakuqiFgQQQAABBNpFgIVTZm0EvQAAEnZJREFUu0yaPhFAAAEEYhUoFArBA4f/KC8FV0o6KNZkNQQ3adSlu+V2r6Ur/+Fbp363tHDFEzuGGv+UystGO4/qdHujhzreTG+T1FFDuoldcbuw1Fu8amKXON1ogVn9uVeGCq+X7J2NrmXH/Gb+Wwvt4lc+dOTKQqEQJqk2akEAAQQQQKCdBFg4tdO06RUBBBBAIHaB96+Yv3dXeuQjbnaWSV2xJ5xEApO2uet3biqb+TSX9onzk0y7KjUYtb9as7D4/Um0wtU6Coy/z2ss3HypXKfWZSFZZW/jS1WZPu1b9ri8dPLNT1V5jWMIIIAAAgggEJMAC6eYYAmLAAIIINDeAs9+m106dYVkufaW2F33/s1SfvB/7e4UP2+8wPin+L5/xI+y5naNZAc0vqIdK7B/VTk8szR/8MFk1UU1CCCAAAIItK8AC6f2nT2dI4AAAgjUQWBmMftWcy2RdEwd0jVdivH3Q63LD36u6Qpvs4K7B3uODcvBEjO9OlGtu36kQGeXcgNfTFRdFIMAAggggAAC4+9T5A8CCCCAAAIIxCownEnN2Nb5wcD0cbm9KNZcTRTcpSdHxzoP+fyClZubqOy2KrVnZc/hY+lnP9F0YrIa941yu2zfbXvccPPJN48lqzaqQQABBBBAAIFxARZOPAcIIIAAAgjUSWDuquP32ZTe64LAtTjp73eqB0kou3hdvnhFPXKRY2IC7+jP7TnN/dzAdL5LUyZ2O9bToeSDZQXnrM8XfxdrJoIjgAACCCCAwKQEWDhNio/LCCCAAAIITFzghL78y1NWudZk75v47Ra5Yf7YyGjX4Xy6KWHzdNmsYm5m6P4pmQ5JWHX3BKbFa3ID301YXZSDAAIIIIAAAjsRYOHEY4EAAggggECDBGb0594TyK+TdFSDSmhcWtPJpdzAzY0rgMx/KjBrYM7fhhUtlVmiXuJurodCs3PW5ou3MTUEEEAAAQQQaB4BFk7NMysqRQABBBBoQYFFNy3q2LjHlnmSX9FG73e6u5QbeJtM3oIjbbqWZq+YffBYR/rSQFooKUhKAy5tkeuax8L0VffMW70tKXVRBwIIIIAAAghUJ8DCqTonTiGAAAIIIBCrwLyVmf03d3R93PzZ/+hPxZqskcHNn+oY8WOGFg79vJFlkFvKDGem2pYpH1bgF7i0Z4JM3GTFYGzswlsX3PrrBNVFKQgggAACCCAwAQEWThPA4igCCCCAAAJxC8zqz70y3P5rdu+KO1cD4lfcg+PX9vbf0YDcpNxBYEZ/7riU+1I3HZYwmG+lTGfemhv4vwmri3IQQAABBBBAYIICLJwmCMZxBBBAAAEE6iEwvhAw+RKTDq9HvrrkcJ1e6h34TF1ykWSnAtsXmuH1kr0zSURu+rVJl03fcOTyQqEQJqk2akEAAQQQQACB2gRYONXmxi0EEEAAAQRiFzh6ONM5fWvXKTJ9TNK02BPGmKBi+uRtuYELYkxB6OcRyCxfsJ93brvUZKcl6Vc2TRoN5f/YFTxxyWD2zk0MEQEEEEAAAQRaR4CFU+vMkk4QQAABBFpU4MRi9iBzFZL2UucquV2us0q9A0urPM+xCAWefSn9lC2nuqlg0j4Rhp50KJff0Vn2M4fmD/100sEIgAACCCCAAAKJE2DhlLiRUBACCCCAAAI7F5i1PPeqsDM8T7LZkjqS7uTSoxVTfn1u4K6k19qK9XX39bwtlC0xs+mJ6s/1AzM7azhf/FKi6qIYBBBAAAEEEIhUgIVTpJwEQwABBBBAIH6B2atmH1pJpz/srgUmTY0/Yy0Z/EuqjM4tzSv9ppbb3KldYMaqua+woHydmd5de5QYbpo/FrouWTdl9HPqLlViyEBIBBBAAAEEEEiQAAunBA2DUhBAAAEEEJiIwLyVmf03pacsCtwXyXTIRO7GddZcGzzl55ayg+vjykHcnQvMXXX8Pk+n9/qouT6UsE/Ajcl0Q0ew92VDc27cyPwQQAABBBBAoD0EWDi1x5zpEgEEEECglQWGM6mZW6e+z6xyimRvlxTUvV33H7psyUFP7bt62RnLRuqev50TPjv/roUyfdyk/ZNF4V8KFJy1Jl/8QbLqohoEEEAAAQQQiFuAhVPcwsRHAAEEEECgjgKzV8w+2DtS3eH29zz9TcypN7n5F2Uqrp0zeJdMHnM+wv+JwMxi9q3mWiLpmEThuH7kCj68trf/jkTVRTEIIIAAAgggUDcBFk51oyYRAggggAAC9RWYvXL2S8JU6u2h2dtN+ntJB02mApe2mOx+U/gfYaCvHPTEfnfzaabJiNZ+97j+3GFTLLxabjNrjxLDTfOn3IOPPzhl27IHu0ujMWQgJAIIIIAAAgg0iQALpyYZFGUigAACCCAwWYET+nMHpM2P8VCHp9wPrqTsQHeZzPcwt64/xDc9FUijXvGNYaCHLdDPU2Hws1f+9IgfFwqF8mTr4H7tAu/oz+35gjC80AL7sEtTao8U+c3QTSsrbhetzxd/F3l0AiKAAAIIIIBA0wmwcGq6kVEwAggggAACCLSdgMtmFXMzQ/dPJeUF8X+Ygft/BimduSY7+I22mwsNI4AAAggggMAuBVg48XAggAACCCCAAAIJFpjRn/vrwH2JTH+XqDJND7vCi9Zmh4q8vytRk6EYBBBAAAEEEiHAwikRY6AIBBBAAAEEEEDgjwXGXwA/1pG+NJAWNuSbB3cxkPF3eYWmZalN0y4vnXbD08wNAQQQQAABBBDYmQALJ54LBBBAAAEEEEAgQQJHD2c6p2/tOkWmj0malqDS5PI70pXK6bfOu/VnSaqLWhBAAAEEEEAgeQIsnJI3EypCAAEEEEAAgTYVmNGfO87kS0w6PEkEJt0fmhavzQ18LUl1UQsCCCCAAAIIJFeAhVNyZ0NlCCCAAAIItJ1AZvmC/SpdI+el3P7OzP8rKJevaYdP05w0lH91eWz8PU1+bJKG7rLfBB5edPRDL1tdKBTCJNVGLQgggAACCCCQbAEWTsmeD9UhgAACCCDQFgLP/hrZSNdcd11u0v7PNe3SVrmufixMX3XPvNXbWg1jfMHmndsuNdlpklIJ6m/M5Tfa1j0/Wjr55qcSVBelIIAAAggggECTCLBwapJBUSYCCCCAAAItKeCyWcXczIr8quf9NbLnvhEtN9TfCg6FQiH9wBE/mS/5FXJ7UbJ6sn8NpDPW5Is/SFZdVIMAAggggAACzSTAwqmZpkWtCCCAAAIItIqAyzKDc45XxS6R6bXVtuWuOz0Mz1w3b+jH1d5J2rkTitl3pUO/XmavSFJt7v6ABXZWKTfwL0mqi1oQQAABBBBAoDkFWDg159yoGgEEEEAAgeYUGM6kMlunniALL5Z0TC1NuDRi7tc/ZcHlX84Xn6klRiPunNCXf3nKwutMem8j8u86pz/hrsKrHnrZjYVCoZys2qgGAQQQQAABBJpVgIVTs06OuhFAAAEEEGgigcyqzF9Y0NXrsv8j80OjKN1Nv5bCC9dmh4oyeRQx44iR+eype/lem86R6QKTuuLIUWPMUPLBvcqjH141v/RojTG4hgACCCCAAAII7FSAhRMPBgIIIIAAAgjEInD6p0/vemSfJ99r8py2f6qnI5ZEbv8WjOmMNQuL348lfo1BC4VC8L3Df7wgkC6X7IAaw8RzzfWVYMwWJ80snmaJigACCCCAAAKNEGDh1Ah1ciKAAAIIINDCAjOL2TcHbrlQnjFpn3q06uZlefAZ2zq1kIRvVTtxsOctQdmWmtlr6tF/tTnMtUGBzhnODdxe7R3OIYAAAggggAACtQiwcKpFjTsIIIAAAggg8GcCJ/Wf9PdlpW6QdHSjeMz8twp1/nB+sL8Rv2bXs7znpaOdwTUmZRplsIu8m+V25V88tc/1y85YNpKw2igHAQQQQAABBFpQgIVTCw6VlhBAAAEEEGiEwMz+OfeZ7E2NyP1nOd2+Xgn8Q7flBu6vRz3v6M/tOc0r58uCc0yaWo+cVeYIJeuvmH/kttzAI1Xe4RgCCCCAAAIIIDBpARZOkyYkAAIIIIAAAgiMC8zsy3/ALCzF9q6miTOHbvrcHuEzF/X3rn984teruOGymQM9PabgKrleXMWN+h1x+3qQSp25Jrv6m/VLSiYEEEAAAQQQQGC7AAsnngQEEEAAAQQQiEyge7DnWC+nVkb1TXRRFObS4y6/eN2U0c+pu1SJIuZ4jFkDc98QVipLZf7GqGJGE8d+5VY5f212aKgRv1YYTQ9EQQABBBBAAIFmF2Dh1OwTpH4EEEAAAQQSJjD+62V7m18auBYn6NNO4/8v2/1j6cqH1vfc8vXJkJ1YzB6UcrtS8rykYDKxorzr0lbJr92k4Kov54vPRBmbWAgggAACCCCAwEQFWDhNVIzzCCCAAAIIIFCVwIxVPS+zIFhqpndXdaE+h1zyAVVGzyvNK/1mIikX3bSoY+OULafK9DFJ0yZyN+6zLr9jRMEZX8gXH4o7F/ERQAABBBBAAIFqBFg4VaPEGQQQQAABBBCoWWBGf+64lPtSNx1Wc5CIL5r0TOj61INTR658sLs0urvwv+/hejcdsbuz9fy5u3+nw8LFt+RvubeeecmFAAIIIIAAAgjsToCF0+6E+DkCCCCAAAIITFogM5yZalu7zpDpEpf2nHTA6AL8t8nOHM4Xv7SzkDNWzX2FBeXrEvYpLUn+hNw+Vpo68pko30sVHSuREEAAAQQQQKDdBVg4tfsTQP8IIIAAAgjUUeC4/txhU+TXSTq+jmmrSOVrtnpw3h29xV+MH563MrP/Mx1dhVC+yNzSVQSo15ExN31mr/LTH1s97/Yn65WUPAgggAACCCCAwEQFWDhNVIzzCCCAAAIIIDBpge7+3DtdvlTSUZMOFl2A8W+w+39yG3Pz15nUFV3oSCL9s8Z0dmnBwH9HEo0gCCCAAAIIIIBAjAIsnGLEJTQCCCCAAAII7FogyS/hTtTcXD92BWev7e2/I1F1UQwCCCCAAAIIIPA8AiyceDwQQAABBBBAoKECJxazB6XcPylZVhL/Nvn9NFx6MnBddeBT+y5ZdsaykYYOieQIIIAAAggggMAEBfhH3QTBOI4AAggggAAC8QicONjzlqAcLDPTq+PJ0DRRQ8kHR0bCcz//wVt+2zRVUygCCCCAAAIIILCDAAsnHgcEEEAAAQQQSIxAoVAIvn/Ej7Imu1ZuL0pMYXUqxGX3dqZSi4fmrP5OnVKSBgEEEEAAAQQQiEWAhVMsrARFAAEEEEAAgckIZJYv2M87t11qstMkpSYTqynumh52hRetzQ4VZfKmqJkiEUAAAQQQQACB5xFg4cTjgQACCCCAAAKJFTixmH1d4L7MZG9KbJGTKMylLXJdY1NHPlnqLm2dRCiuIoAAAggggAACiRJg4ZSocVAMAggggAACCPyZgMtmDvTkAtnV7nZgiwi5S2s7R8NzhxYO/bxFeqINBBBAAAEEEEDgDwIsnHgYEEAAAQQQQKApBOauOn6fTem9Lki7znKpsymK3lmR7t8uK1y8vveWf2/aHigcAQQQQAABBBDYjQALJx4RBBBAAAEEEGgqgcyK7FGe1qfN9I6mKlx6RKbC9A1HLi8UCmGT1U65CCCAAAIIIIDAhARYOE2Ii8MIIIAAAgggkBSBGf2540zj73fSS5NS0y7qGHP5jV3BE5cMZu/clPBaKQ8BBBBAAAEEEIhEgIVTJIwEQQABBBBAAIFGCBx306I9uqZsOS8wne/SlEbU8Hw5XX5HOUwvvn1u34ak1UY9CCCAAAIIIIBAnAIsnOLUJTYCCCCAAAII1EUguzx75LZOLTHpvXVJuLsk7j/0lM5emx28c3dH+TkCCCCAAAIIINCKAiycWnGq9IQAAggggECbCnT39bzNZctk9orGEPhGuV02/aEjP1soFMqNqYGsCCCAAAIIIIBA4wVYODV+BlSAAAIIIIAAAhEKHD2c6Zy+tesUD/xyc9srwtC7DOXmZXdbOa08cvGq+aVH65GTHAgggAACCCCAQJIFWDgleTrUhgACCCCAAAI1C2T6Mn8p6/yEZLmag1R38e7RwBf/U3bwe9Ud5xQCCCCAAAIIIND6AiycWn/GdIgAAggggEBbC8wcmPMPFmp88fSGKCHc/TtuwUfX5YtfiDIusRBAAAEEEEAAgVYQYOHUClOkBwQQQAABBBDYrcAJxey7Um4XmPwtkmr9N5BLdp/MryllB74gk+82MQcQQAABBBBAAIE2FKj1H1ttSEXLCCCAAAIIINAKAu/ryx0yxZQJ3N/vptdK2vv5+/KNUvBtl+7a5ird0Vv8RSs40AMCCCCAAAIIIBCnwP8A8qL6WSxrKtQAAAAASUVORK5CYII=", + "created": 1656332656088 + } + } +} \ No newline at end of file diff --git a/quarkus-quinoa/dev/_images/quinoa-proxy-dev.png b/quarkus-quinoa/dev/_images/quinoa-proxy-dev.png new file mode 100644 index 0000000000..011f65fd27 Binary files /dev/null and b/quarkus-quinoa/dev/_images/quinoa-proxy-dev.png differ diff --git a/quarkus-quinoa/dev/_images/quinoa-runtime-prod.excalidraw b/quarkus-quinoa/dev/_images/quinoa-runtime-prod.excalidraw new file mode 100644 index 0000000000..ea8f363a2e --- /dev/null +++ b/quarkus-quinoa/dev/_images/quinoa-runtime-prod.excalidraw @@ -0,0 +1,1863 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "https://excalidraw.com", + "elements": [ + { + "type": "rectangle", + "version": 877, + "versionNonce": 2031568458, + "isDeleted": false, + "id": "3j_0I4u4zP8yuIBoHDrnW", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 608.3282470703125, + "y": 203.0885467529297, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 729.3008422851562, + "height": 73, + "seed": 933898858, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656334352290, + "link": null, + "locked": false + }, + { + "type": "ellipse", + "version": 778, + "versionNonce": 1000250198, + "isDeleted": false, + "id": "Kghk9hssmFQrtaiS4tLOR", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 476.44294266091515, + "y": 214.65574170164768, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 14.600721975655537, + "height": 11.322729695985394, + "seed": 1446352490, + "groupIds": [ + "miQxeL54s6V0WWGng7QUz" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1656334352290, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 827, + "versionNonce": 1202449674, + "isDeleted": false, + "id": "Rgq-WBuPjNMj50jfUvhbM", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 484.76284274983584, + "y": 227.0587378517704, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 0.8979611339198464, + "height": 33.67290171953199, + "seed": 40164662, + "groupIds": [ + "miQxeL54s6V0WWGng7QUz" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1656334352290, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0.8979611339198464, + 33.67290171953199 + ] + ] + }, + { + "type": "line", + "version": 860, + "versionNonce": 1260175510, + "isDeleted": false, + "id": "ftZc7D1hUbvaMZZq6ynb5", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 468.7207312169671, + "y": 233.81237412399423, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 32.71960924359078, + "height": 0.5100473544603152, + "seed": 1758148906, + "groupIds": [ + "miQxeL54s6V0WWGng7QUz" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1656334352290, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 32.71960924359078, + -0.5100473544603152 + ] + ] + }, + { + "type": "line", + "version": 841, + "versionNonce": 310229962, + "isDeleted": false, + "id": "RGKYuxkH_-ZLYTSalksCg", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 471.59288851303126, + "y": 272.52333068619686, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 13.201224184961875, + "height": 12.28114182455434, + "seed": 1199556214, + "groupIds": [ + "miQxeL54s6V0WWGng7QUz" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1656334352290, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 13.201224184961875, + -12.28114182455434 + ] + ] + }, + { + "type": "line", + "version": 865, + "versionNonce": 707018198, + "isDeleted": false, + "id": "nJrGFgjsH3JHGaVRXBqRg", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 484.9379018680138, + "y": 260.6169901036939, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 12.063843734925756, + "height": 11.331366360100283, + "seed": 1176404970, + "groupIds": [ + "miQxeL54s6V0WWGng7QUz" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1656334352290, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 12.063843734925756, + 11.331366360100283 + ] + ] + }, + { + "type": "image", + "version": 821, + "versionNonce": 665301642, + "isDeleted": false, + "id": "RyjdvsxubnKadhqwer03E", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 627.7505798339844, + "y": 215.73594665527344, + "strokeColor": "transparent", + "backgroundColor": "transparent", + "width": 24.350448608398448, + "height": 24.350448608398448, + "seed": 1715200874, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1656334352290, + "link": null, + "locked": false, + "status": "saved", + "fileId": "efbc8b2b54a0d8ee4db318559e1c660a2957a8f9", + "scale": [ + 1, + 1 + ] + }, + { + "type": "text", + "version": 605, + "versionNonce": 1305088790, + "isDeleted": false, + "id": "qA2h94AGfdvjYbZUQsjV7", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 466.488525390625, + "y": 173.13739013671875, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 46, + "height": 25, + "seed": 416543862, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656334352290, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "User", + "baseline": 18, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "User" + }, + { + "type": "rectangle", + "version": 893, + "versionNonce": 1867845952, + "isDeleted": false, + "id": "jVUwPPEStAq2o-TkYXhwS", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 30, + "angle": 0, + "x": 661.8060302734375, + "y": 297.47779846191406, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 14.770141601562507, + "height": 403.43630981445307, + "seed": 2100527808, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "DlCzYsfvYxmpkur8AMSN6", + "type": "arrow" + }, + { + "id": "48B8HRzaw2HP4FsLNjKWS", + "type": "arrow" + }, + { + "id": "wYIU3lzunfjIKf9xTUgty", + "type": "arrow" + }, + { + "id": "XYKWKpVy9J7UzPAxq_0TA", + "type": "arrow" + }, + { + "id": "salLP2LACKgAhATv3aKnC", + "type": "arrow" + }, + { + "id": "-U3W_ws5R8hGXmS34DQn8", + "type": "arrow" + }, + { + "id": "68Tf1A841n4yIofRoo6-G", + "type": "arrow" + }, + { + "id": "UzHG5tBa8NHP4HCeUjR7j", + "type": "arrow" + }, + { + "id": "cAEzQWcteqGxEz8D2rZKC", + "type": "arrow" + }, + { + "id": "7ikE7piZ2wAUmR2SsA7Em", + "type": "arrow" + } + ], + "updated": 1656332299625, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 434, + "versionNonce": 1508168010, + "isDeleted": false, + "id": "gNfa1eVqKmDVb9i6KivsL", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 668.7158813476562, + "y": 268.0572052001953, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 1.904296875, + "height": 29.10211181640625, + "seed": 946450346, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1656334352290, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -1.904296875, + 29.10211181640625 + ] + ] + }, + { + "type": "rectangle", + "version": 847, + "versionNonce": 279792320, + "isDeleted": false, + "id": "QEO0dLbLv1IHOlQoIri2d", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 833.3820190429688, + "y": 358.35565185546875, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 18.216369628906236, + "height": 81.99710083007812, + "seed": 135988726, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "DUUNk8Jte4E3cuNB-gnOj", + "type": "arrow" + }, + { + "id": "XYKWKpVy9J7UzPAxq_0TA", + "type": "arrow" + }, + { + "id": "wYIU3lzunfjIKf9xTUgty", + "type": "arrow" + } + ], + "updated": 1656332299625, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 511, + "versionNonce": 1082343510, + "isDeleted": false, + "id": "1063HDbG9mygIQfjcnJqg", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 843.1293334960938, + "y": 266.01153564453125, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 2.8442011706531503, + "height": 85.32051601335405, + "seed": 1601764458, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1656334352290, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -2.8442011706531503, + 85.32051601335405 + ] + ] + }, + { + "type": "line", + "version": 547, + "versionNonce": 171307712, + "isDeleted": false, + "id": "Ja_-Ia3qVq_mpFE8yDdk_", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 843.881103515625, + "y": 543.370361328125, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 2.4730428688228585, + "height": 146.36873940303917, + "seed": 770889526, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1656332299625, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 2.4730428688228585, + 146.36873940303917 + ] + ] + }, + { + "type": "rectangle", + "version": 646, + "versionNonce": 1821382666, + "isDeleted": false, + "id": "jZQxVuNFituLPMpaWsAeP", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 775.0885009765625, + "y": 211.345947265625, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 143.85095214843747, + "height": 52.509155273437486, + "seed": 11657002, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656334352290, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 571, + "versionNonce": 1982121366, + "isDeleted": false, + "id": "_zVxO04Eegxnuz0iX__iP", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 783.0320434570312, + "y": 225.2306671142578, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 131, + "height": 20, + "seed": 1819603382, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656334352290, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Quinoa extension", + "baseline": 14, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "Quinoa extension" + }, + { + "type": "text", + "version": 437, + "versionNonce": 2045264576, + "isDeleted": false, + "id": "ACQlr3TSP4cf3SIbVsd4z", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 514.04931640625, + "y": 299.7951354980469, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 53, + "height": 20, + "seed": 1822705258, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "48B8HRzaw2HP4FsLNjKWS", + "type": "arrow" + } + ], + "updated": 1656332299625, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "GET /", + "baseline": 14, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "GET /" + }, + { + "type": "text", + "version": 497, + "versionNonce": 2141488842, + "isDeleted": false, + "id": "zp-nrIvlBcWOZrDLQcFEt", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 638.2770385742188, + "y": 219.94577026367188, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 112, + "height": 40, + "seed": 1783154858, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656334352290, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Quarkus\nVert.x Routing", + "baseline": 34, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "Quarkus\nVert.x Routing" + }, + { + "type": "rectangle", + "version": 752, + "versionNonce": 535012054, + "isDeleted": false, + "id": "-cdmcHzpDTZLsLtoZXUR5", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 929.9967346191406, + "y": 212.69427490234375, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 188, + "height": 53, + "seed": 157524672, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "type": "text", + "id": "zuIEPekUU6n2-1vTqRkIG" + } + ], + "updated": 1656334352290, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 248, + "versionNonce": 2075991434, + "isDeleted": false, + "id": "zuIEPekUU6n2-1vTqRkIG", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 934.9967346191406, + "y": 229.19427490234375, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 178, + "height": 20, + "seed": 348682944, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656334352290, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "META-INF/resources", + "baseline": 14, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "-cdmcHzpDTZLsLtoZXUR5", + "originalText": "META-INF/resources" + }, + { + "type": "rectangle", + "version": 780, + "versionNonce": 5560342, + "isDeleted": false, + "id": "N-zszdFn1WSBHnPXZfOTL", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1133.3094787597656, + "y": 214.2135009765625, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 188, + "height": 53, + "seed": 1326041408, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "rP9DTffjfcqvQaufIhQ3p", + "type": "text" + }, + { + "type": "text", + "id": "rP9DTffjfcqvQaufIhQ3p" + } + ], + "updated": 1656334352290, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 310, + "versionNonce": 2115296330, + "isDeleted": false, + "id": "rP9DTffjfcqvQaufIhQ3p", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1138.3094787597656, + "y": 230.7135009765625, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 178, + "height": 20, + "seed": 539431616, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656334352290, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "REST", + "baseline": 14, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "N-zszdFn1WSBHnPXZfOTL", + "originalText": "REST" + }, + { + "type": "rectangle", + "version": 863, + "versionNonce": 1064133974, + "isDeleted": false, + "id": "j0anMp3n_jzUy1BHdQuCB", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1013.9770202636719, + "y": 501.3372802734375, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 13.235595703125, + "height": 43.43890380859374, + "seed": 1219385664, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "DlCzYsfvYxmpkur8AMSN6", + "type": "arrow" + }, + { + "id": "DUUNk8Jte4E3cuNB-gnOj", + "type": "arrow" + }, + { + "id": "kcWWUvCQ3xUXWhjlS-tIp", + "type": "arrow" + }, + { + "id": "salLP2LACKgAhATv3aKnC", + "type": "arrow" + } + ], + "updated": 1656334352290, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 707, + "versionNonce": 1149682442, + "isDeleted": false, + "id": "yGbooa3XWqy2In8B1X3I0", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1020.9847717285156, + "y": 270.03607177734375, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 0.9330254077910922, + "height": 220.5056625843048, + "seed": 586078912, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1656334352290, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -0.9330254077910922, + 220.5056625843048 + ] + ] + }, + { + "type": "line", + "version": 620, + "versionNonce": 180644544, + "isDeleted": false, + "id": "hzhYiqOwZY0xs1FoV1mO8", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1022.0299987792969, + "y": 547.2970581054688, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 1.1233283758162997, + "height": 147.9068401098251, + "seed": 1813066048, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1656332299626, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -1.1233283758162997, + 147.9068401098251 + ] + ] + }, + { + "type": "rectangle", + "version": 1116, + "versionNonce": 1109172544, + "isDeleted": false, + "id": "oGyWGYXCUhgnsIIkGcWhF", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1212.7053527832031, + "y": 537.0511779785156, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 10.235595703125014, + "height": 28.504364013671797, + "seed": 645441856, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "DlCzYsfvYxmpkur8AMSN6", + "type": "arrow" + }, + { + "id": "DUUNk8Jte4E3cuNB-gnOj", + "type": "arrow" + }, + { + "id": "kcWWUvCQ3xUXWhjlS-tIp", + "type": "arrow" + } + ], + "updated": 1656332299626, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 743, + "versionNonce": 1048726166, + "isDeleted": false, + "id": "BJ3Hagib2xkW5aOMVG-z1", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1224.017522957802, + "y": 278.2905292272568, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 4.650975540161198, + "height": 265.3149177551269, + "seed": 1007780160, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1656334352290, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -4.650975540161198, + 265.3149177551269 + ] + ] + }, + { + "type": "line", + "version": 1026, + "versionNonce": 590940874, + "isDeleted": false, + "id": "gqhcSPRMTh8gUpvZIDgyl", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 485.68084716796875, + "y": 271.76495361328125, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 3.112240195274353, + "height": 419.9340088129044, + "seed": 781349568, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1656334362601, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 3.112240195274353, + 419.9340088129044 + ] + ] + }, + { + "type": "arrow", + "version": 1912, + "versionNonce": 742249622, + "isDeleted": false, + "id": "48B8HRzaw2HP4FsLNjKWS", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 507.9241251786555, + "y": 331.667939661554, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 145.17169916227004, + "height": 6.319889159511945, + "seed": 596263616, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1656334359018, + "link": null, + "locked": true, + "startBinding": null, + "endBinding": { + "elementId": "jVUwPPEStAq2o-TkYXhwS", + "focus": 0.7944352997176918, + "gap": 8.71020593251194 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 145.17169916227004, + 6.319889159511945 + ] + ] + }, + { + "type": "arrow", + "version": 1413, + "versionNonce": 1471936832, + "isDeleted": false, + "id": "UzHG5tBa8NHP4HCeUjR7j", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 812.5672641906244, + "y": 412.58155694703555, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 123.92908277248682, + "height": 11.277052775120467, + "seed": 1890495168, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656332299626, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": { + "elementId": "jVUwPPEStAq2o-TkYXhwS", + "focus": -0.363494619989472, + "gap": 12.062009543137606 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + -123.92908277248682, + 11.277052775120467 + ] + ] + }, + { + "type": "text", + "version": 616, + "versionNonce": 626385600, + "isDeleted": false, + "id": "4KgMy1u5TvHf9ys-Z-CQG", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 6.252216014575305, + "x": 560.3514709472656, + "y": 369.93865966796875, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 182, + "height": 40, + "seed": 692234560, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "wYIU3lzunfjIKf9xTUgty", + "type": "arrow" + }, + { + "id": "cAEzQWcteqGxEz8D2rZKC", + "type": "arrow" + }, + { + "id": "48B8HRzaw2HP4FsLNjKWS", + "type": "arrow" + } + ], + "updated": 1656332299626, + "link": null, + "locked": true, + "fontSize": 16, + "fontFamily": 1, + "text": "Web resource found\nRespond with index.html", + "baseline": 34, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "Web resource found\nRespond with index.html" + }, + { + "type": "arrow", + "version": 1235, + "versionNonce": 1837017408, + "isDeleted": false, + "id": "wYIU3lzunfjIKf9xTUgty", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 691.6040423672059, + "y": 346.7056012003567, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 134.60389546494252, + "height": 16.4616811986092, + "seed": 584057536, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656332299626, + "link": null, + "locked": false, + "startBinding": { + "elementId": "jVUwPPEStAq2o-TkYXhwS", + "focus": -0.7661157567965873, + "gap": 15.02787049220592 + }, + "endBinding": { + "elementId": "QEO0dLbLv1IHOlQoIri2d", + "focus": 0.812007832114409, + "gap": 7.1740812108203045 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 134.60389546494252, + 16.4616811986092 + ] + ] + }, + { + "type": "arrow", + "version": 2515, + "versionNonce": 844595520, + "isDeleted": false, + "id": "XYKWKpVy9J7UzPAxq_0TA", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 684.6220823910281, + "y": 494.68980502221507, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 134.38179342673277, + "height": 10.805298218304188, + "seed": 628363584, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1656332299626, + "link": null, + "locked": false, + "startBinding": { + "elementId": "jVUwPPEStAq2o-TkYXhwS", + "focus": -0.028405619369689366, + "gap": 8.04591051602813 + }, + "endBinding": { + "elementId": "mo24wbx6xPwsZSBQnbkGa", + "focus": -0.032662732774685385, + "gap": 15.52523795177035 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 134.38179342673277, + 10.805298218304188 + ] + ] + }, + { + "type": "arrow", + "version": 1607, + "versionNonce": 657971904, + "isDeleted": false, + "id": "salLP2LACKgAhATv3aKnC", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 871.1614114349748, + "y": 509.5879369527448, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 132.53213569819206, + "height": 6.531045317649841, + "seed": 10924352, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656332299626, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": { + "elementId": "j0anMp3n_jzUy1BHdQuCB", + "focus": 0.27692061911431853, + "gap": 10.283473130505058 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 132.53213569819206, + 6.531045317649841 + ] + ] + }, + { + "type": "arrow", + "version": 1321, + "versionNonce": 514320330, + "isDeleted": false, + "id": "cAEzQWcteqGxEz8D2rZKC", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 648.4143547887901, + "y": 430.10390498834556, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 149.94697315624165, + "height": 8.361297928636134, + "seed": 1762916672, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656334359018, + "link": "", + "locked": true, + "startBinding": { + "elementId": "jVUwPPEStAq2o-TkYXhwS", + "focus": 0.34755465088110354, + "gap": 13.391675484647408 + }, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + -149.94697315624165, + 8.361297928636134 + ] + ] + }, + { + "type": "arrow", + "version": 662, + "versionNonce": 1569729216, + "isDeleted": false, + "id": "68Tf1A841n4yIofRoo6-G", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1195.6036883395652, + "y": 556.6414310146617, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 509.5803208127419, + "height": 46.477545717100384, + "seed": 729868608, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656332299627, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": { + "elementId": "jVUwPPEStAq2o-TkYXhwS", + "focus": 0.521060089360989, + "gap": 9.447195651823336 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + -509.5803208127419, + 46.477545717100384 + ] + ] + }, + { + "type": "arrow", + "version": 705, + "versionNonce": 1845678550, + "isDeleted": false, + "id": "-U3W_ws5R8hGXmS34DQn8", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 646.575322508812, + "y": 600.5598714855523, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 137.57785546779633, + "height": 9.144389448600691, + "seed": 643955392, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656334359018, + "link": null, + "locked": true, + "startBinding": { + "elementId": "jVUwPPEStAq2o-TkYXhwS", + "focus": -0.49384338440320397, + "gap": 15.23070776462555 + }, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + -137.57785546779633, + 9.144389448600691 + ] + ] + }, + { + "type": "text", + "version": 876, + "versionNonce": 222214464, + "isDeleted": false, + "id": "COAwAhgKAInp7WQMn3RMM", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0.09744818021990387, + "x": 885.8936674355597, + "y": 452.31574651990974, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 98, + "height": 40, + "seed": 1584536256, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "qAJyNrlcyxTvy6syqxI7G", + "type": "arrow" + }, + { + "id": "salLP2LACKgAhATv3aKnC", + "type": "arrow" + } + ], + "updated": 1656332299627, + "link": null, + "locked": true, + "fontSize": 16, + "fontFamily": 1, + "text": "not found\nnext handler", + "baseline": 34, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "not found\nnext handler" + }, + { + "type": "arrow", + "version": 1152, + "versionNonce": 456598208, + "isDeleted": false, + "id": "pjaxhaAf1fPmqh0ouHcJ1", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1045.996425048879, + "y": 529.3376998959972, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 147.09971102799705, + "height": 19.174734184239128, + "seed": 567048896, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656332299627, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 147.09971102799705, + 19.174734184239128 + ] + ] + }, + { + "type": "text", + "version": 965, + "versionNonce": 827418944, + "isDeleted": false, + "id": "zbyeLIGBFxBnlzT2rqXLO", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0.09744818021990387, + "x": 1065.1666222701772, + "y": 479.6565205483887, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 98, + "height": 40, + "seed": 190681408, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "qAJyNrlcyxTvy6syqxI7G", + "type": "arrow" + }, + { + "id": "pjaxhaAf1fPmqh0ouHcJ1", + "type": "arrow" + } + ], + "updated": 1656332299627, + "link": null, + "locked": true, + "fontSize": 16, + "fontFamily": 1, + "text": "not found\nnext handler", + "baseline": 34, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "not found\nnext handler" + }, + { + "type": "text", + "version": 518, + "versionNonce": 1438960320, + "isDeleted": false, + "id": "s01_p5lhPzpTQkkGwJGjx", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 6.252216014575305, + "x": 579.5988464355469, + "y": 543.5919494628905, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 181, + "height": 40, + "seed": 294472384, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "wYIU3lzunfjIKf9xTUgty", + "type": "arrow" + }, + { + "id": "UzHG5tBa8NHP4HCeUjR7j", + "type": "arrow" + }, + { + "id": "cAEzQWcteqGxEz8D2rZKC", + "type": "arrow" + }, + { + "id": "48B8HRzaw2HP4FsLNjKWS", + "type": "arrow" + }, + { + "id": "68Tf1A841n4yIofRoo6-G", + "type": "arrow" + } + ], + "updated": 1656332299627, + "link": null, + "locked": true, + "fontSize": 16, + "fontFamily": 1, + "text": "REST resource found\nRespond with /api/hello", + "baseline": 34, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "REST resource found\nRespond with /api/hello" + }, + { + "type": "rectangle", + "version": 982, + "versionNonce": 1842495808, + "isDeleted": false, + "id": "mo24wbx6xPwsZSBQnbkGa", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 834.5291137695312, + "y": 488.44775390625, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 16.539794921874964, + "height": 36.67980957031252, + "seed": 783472960, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "DUUNk8Jte4E3cuNB-gnOj", + "type": "arrow" + }, + { + "id": "wYIU3lzunfjIKf9xTUgty", + "type": "arrow" + }, + { + "id": "XYKWKpVy9J7UzPAxq_0TA", + "type": "arrow" + }, + { + "id": "UzHG5tBa8NHP4HCeUjR7j", + "type": "arrow" + }, + { + "id": "salLP2LACKgAhATv3aKnC", + "type": "arrow" + } + ], + "updated": 1656332299627, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 766, + "versionNonce": 1079866048, + "isDeleted": false, + "id": "QNdejofKKrgRF7LVNmUc3", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 840.7820668462665, + "y": 451.24999955259267, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 0.35341088697316536, + "height": 31.391859162598735, + "seed": 1727189312, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1656332299627, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0.35341088697316536, + 31.391859162598735 + ] + ] + }, + { + "type": "line", + "version": 740, + "versionNonce": 343415104, + "isDeleted": false, + "id": "DwZ1a9xNJET9kqfGpy8xs", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1218.1409183382987, + "y": 568.5846964001656, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 0.6583057403563544, + "height": 126.15512580871575, + "seed": 590498496, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1656332299627, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -0.6583057403563544, + 126.15512580871575 + ] + ] + }, + { + "type": "text", + "version": 290, + "versionNonce": 564206272, + "isDeleted": false, + "id": "GQgCwBsNoiTXy6ih0RnYB", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0.06071332475389113, + "x": 517.8744812011719, + "y": 465.8735046386719, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 117, + "height": 20, + "seed": 1923863232, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "cAEzQWcteqGxEz8D2rZKC", + "type": "arrow" + } + ], + "updated": 1656332299627, + "link": null, + "locked": true, + "fontSize": 16, + "fontFamily": 1, + "text": "GET /api/hello", + "baseline": 14, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "GET /api/hello" + }, + { + "type": "arrow", + "version": 940, + "versionNonce": 95182474, + "isDeleted": false, + "id": "7ikE7piZ2wAUmR2SsA7Em", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 508.6821677930237, + "y": 491.64092939056275, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 139.18970928121792, + "height": 8.317473992478313, + "seed": 802480832, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1656334359018, + "link": null, + "locked": true, + "startBinding": null, + "endBinding": { + "elementId": "jVUwPPEStAq2o-TkYXhwS", + "focus": -0.010073284681227332, + "gap": 13.934153199195862 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 139.18970928121792, + 8.317473992478313 + ] + ] + } + ], + "appState": { + "gridSize": null, + "viewBackgroundColor": "#ffffff" + }, + "files": { + "efbc8b2b54a0d8ee4db318559e1c660a2957a8f9": { + "mimeType": "image/svg+xml", + "id": "efbc8b2b54a0d8ee4db318559e1c660a2957a8f9", + "dataURL": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGlkPSJMYXllcl8xIiBkYXRhLW5hbWU9IkxheWVyIDEiIHZpZXdCb3g9IjAgMCAxMDI0IDEwMjQiIHdpZHRoPSIxMDI0IiBoZWlnaHQ9IjEwMjQiPjxkZWZzPjxzdHlsZT4uY2xzLTF7ZmlsbDojNDY5NWViO30uY2xzLTJ7ZmlsbDojZmYwMDRhO30uY2xzLTN7ZmlsbDojMDkxMzEzO308L3N0eWxlPjwvZGVmcz48dGl0bGU+cXVhcmt1c19pY29uX3JnYl8xMDI0cHhfZGVmYXVsdDwvdGl0bGU+PHBvbHlnb24gY2xhc3M9ImNscy0xIiBwb2ludHM9IjY2OS4zNCAxODAuNTcgNTEyIDI3MS40MSA2NjkuMzQgMzYyLjI1IDY2OS4zNCAxODAuNTciLz48cG9seWdvbiBjbGFzcz0iY2xzLTIiIHBvaW50cz0iMzU0LjY2IDE4MC41NyAzNTQuNjYgMzYyLjI1IDUxMiAyNzEuNDEgMzU0LjY2IDE4MC41NyIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtMyIgcG9pbnRzPSI2NjkuMzQgMzYyLjI1IDUxMiAyNzEuNDEgMzU0LjY2IDM2Mi4yNSA1MTIgNDUzLjA5IDY2OS4zNCAzNjIuMjUiLz48cG9seWdvbiBjbGFzcz0iY2xzLTEiIHBvaW50cz0iMTg4Ljc2IDQ2Ny45MyAzNDYuMSA1NTguNzYgMzQ2LjEgMzc3LjA5IDE4OC43NiA0NjcuOTMiLz48cG9seWdvbiBjbGFzcz0iY2xzLTIiIHBvaW50cz0iMzQ2LjEgNzQwLjQ0IDUwMy40MyA2NDkuNiAzNDYuMSA1NTguNzYgMzQ2LjEgNzQwLjQ0Ii8+PHBvbHlnb24gY2xhc3M9ImNscy0zIiBwb2ludHM9IjM0Ni4xIDM3Ny4wOSAzNDYuMSA1NTguNzYgNTAzLjQzIDY0OS42IDUwMy40MyA0NjcuOTMgMzQ2LjEgMzc3LjA5Ii8+PHBvbHlnb24gY2xhc3M9ImNscy0xIiBwb2ludHM9IjY3Ny45IDc0MC40NCA2NzcuOSA1NTguNzYgNTIwLjU3IDY0OS42IDY3Ny45IDc0MC40NCIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtMiIgcG9pbnRzPSI4MzUuMjQgNDY3LjkzIDY3Ny45IDM3Ny4wOSA2NzcuOSA1NTguNzYgODM1LjI0IDQ2Ny45MyIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtMyIgcG9pbnRzPSI1MjAuNTcgNjQ5LjYgNjc3LjkgNTU4Ljc2IDY3Ny45IDM3Ny4wOSA1MjAuNTcgNDY3LjkzIDUyMC41NyA2NDkuNiIvPjxwYXRoIGNsYXNzPSJjbHMtMSIgZD0iTTg1My40NywxSDE3MC41M0M3Ny4yOSwxLDEsNzcuMjksMSwxNzAuNTNWODUzLjQ3QzEsOTQ2LjcxLDc3LjI5LDEwMjMsMTcwLjUzLDEwMjNoNDY3LjdMNTEyLDcxNi4zOSw0MjAuNDIsOTEwSDE3MC41M0MxMzkuOSw5MTAsMTE0LDg4NC4xLDExNCw4NTMuNDdWMTcwLjUzQzExNCwxMzkuOSwxMzkuOSwxMTQsMTcwLjUzLDExNEg4NTMuNDdDODg0LjEsMTE0LDkxMCwxMzkuOSw5MTAsMTcwLjUzVjg1My40N0M5MTAsODg0LjEsODg0LjEsOTEwLDg1My40Nyw5MTBINzA1LjI4bDQ2LjUyLDExM0g4NTMuNDdjOTMuMjQsMCwxNjkuNTMtNzYuMjksMTY5LjUzLTE2OS41M1YxNzAuNTNDMTAyMyw3Ny4yOSw5NDYuNzEsMSw4NTMuNDcsMVoiLz48L3N2Zz4=", + "created": 1654618699002 + } + } +} \ No newline at end of file diff --git a/quarkus-quinoa/dev/_images/quinoa-runtime-prod.png b/quarkus-quinoa/dev/_images/quinoa-runtime-prod.png new file mode 100644 index 0000000000..0e05dc24b8 Binary files /dev/null and b/quarkus-quinoa/dev/_images/quinoa-runtime-prod.png differ diff --git a/quarkus-quinoa/dev/advanced-guides.html b/quarkus-quinoa/dev/advanced-guides.html new file mode 100644 index 0000000000..0503cbf6df --- /dev/null +++ b/quarkus-quinoa/dev/advanced-guides.html @@ -0,0 +1,1333 @@ + + + + + + Quarkus Quinoa - Advanced Guides :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Quinoa - Advanced Guides

+
+

How to use the extension.

+
+
+

Configure the build

+
+

Add a build script in the package.json to generate your web application index.html, scripts and assets (styles, images, …​) in some build directory (configurable Build Dir).

+
+
+
+
 "scripts": {
+    "start": "[start the Web UI live coding server]",
+    "build": "[build the Web UI]",
+    "test": "[test the Web UI]"
+  },
+
+
+
+ + + + + +
+ + +The build directory will automatically be moved by Quinoa to target/quinoa-build when using Maven (build/quinoa-build with Gradle) in order to be served. +
+
+
+

You can differentiate development from production builds using the environment variable NODE_ENV (production/development). by-node-env can help you if you have different build commands:

+
+
+
+
"scripts": {
+  "build": "by-node-env",
+  "build:development": "...",
+  "build:production": "...",
+},
+"devDependencies": {
+  "by-node-env": "~2.0.1"
+}
+
+
+
+
+

Package manager

+
+

Quinoa can be configured to install NodeJS and NPM in the project directory:

+
+
+
+
quarkus.quinoa.package-manager-install=true (1)
+quarkus.quinoa.package-manager-install.node-version=20.10.0 (2)
+quarkus.quinoa.package-manager-install.npm-version=10.2.3 (3)
+
+
+
+ + + + + + + + + + + + + +
1Enable package manager install
2Define the version of NodeJS to install
3Define the version of NPM to install
+
+
+ + + + + +
+ + +By default, NodeJS and NPM will be installed in {project-dir}/.quinoa/ (can be configured). If not specified, it will use the NPM version provided by NodeJS. +
+
+
+

If NodeJS and NPM are not installed by Quinoa, it is possible to override the package manager (NPM, Yarn or PNPM), otherwise, it will be auto-detected depending on the project lockfile (NPM is the fallback):

+
+
+
    +
  • +

    Use quarkus.quinoa.package-manager if present

    +
  • +
  • +

    Else if yarn.lock then Yarn

    +
  • +
  • +

    Else if pnpm-lock.yaml then PNPM

    +
  • +
  • +

    Else NPM

    +
  • +
+
+
+ + + + + +
+ + +By default, Quinoa is configured with the commands to call depending on the chosen package manager (to always keep the same behavior and make it easy to switch). +
+
+
+
+

Node packages installation (node_modules)

+
+

By default, Quinoa will call the appropriate package manager install command (before building or starting) only if the node_modules directory doesn’t exist.

+
+
+

You may force a new installation using -Dquarkus.quinoa.force-install=true.

+
+
+ + + + + +
+ + +Quinoa will use the appropriate package manager frozen-lockfile command when installing, if the environment CI=true, or if quarkus.quinoa.frozen-lockfile=true. In this mode, the lockfile have to be present in the project. +
+
+
+
+

Package manager commands

+
+

By default, the following commands and environment variables are used in the different faces for each of the supported package managers.

+
+
+

Install:

+
+
+
    +
  • +

    npm install (npm ci if quarkus.quinoa.frozen-lockfile=true).

    +
  • +
  • +

    pnpm install (pnpm install --frozen-lockfile if quarkus.quinoa.frozen-lockfile=true).

    +
  • +
  • +

    yarn install (yarn install --frozen-lockfile if quarkus.quinoa.frozen-lockfile=true).

    +
  • +
+
+
+

Build:

+
+
+

(npm|pnpm|yarn) run build, with environment MODE=${mode} (dev, test or prod)

+
+
+

Test:

+
+
+

(npm|pnpm|yarn) test, with environment CI=true

+
+
+

Dev:

+
+
+

(npm|pnpm|yarn) start, with environment BROWSER=none

+
+
+
+

Override package manager commands

+
+

By default, Quinoa uses sensible default commands when executing the different phases, install, build, test, dev. +It is possible to override one or more of them from the package manager command configuration:

+
+
+
+
quarkus.quinoa.package-manager-command.install=npm ci --cache $CACHE_DIR/.npm --prefer-offline (1)
+quarkus.quinoa.package-manager-command.build-env.BUILD=value (2)
+
+
+
+ + + + + + + + + +
1This makes npm ci --cache $CACHE_DIR/.npm --prefer-offline the command executed in the install phase. +(overriding quarkus.quinoa.package-manager and quarkus.quinoa.frozen-lockfile=true).
2set environment variable BUILD with value value. Environment variables set in config can be added to the listed commands.
+
+
+ + + + + +
+ + +Using custom commands will override quarkus.quinoa.package-manager and quarkus.quinoa.frozen-lockfile. +
+
+
+ + + + + +
+ + +if NodeJS is installed by Quinoa, you need to enable: quarkus.quinoa.package-manager-command.prepend-binary and adapt the command to only specify the arguments (the binary to call will be prepended by Quinoa). +
+
+
+
+

UI live-coding dev server (proxy mode)

+
+

Quinoa provides two options for live-coding:

+
+
+
    +
  • +

    Delegate to the UI live-coding dev server (proxy mode). To enable it, configure the port of the UI server. By convention Quinoa will call the start script from the package.json to start the UI server process. Then it will transparently proxy relevant requests to the given port.

    +
  • +
  • +

    Quarkus watches the files and Quinoa triggers a new Web UI build on changes (you can configure different builds for dev and prod).

    +
  • +
+
+
+

To enable the UI live-coding dev server, set a start script and set the port in the app config. Quinoa will transparently proxy relevant requests to the given port:

+
+
+
+
quarkus.quinoa.dev-server.port=3000
+
+
+
+ + + + + +
+ + +Quinoa relies on the dev server returning a 404 when the file is not found (See How it works). This is not the case on some dev servers configured with SPA routing. Make sure it is disabled in the dev server configuration (for React Create App, see #91). Another option, when possible, is to use Ignored Path Prefixes. +
+
+
+
+

Single Page application routing

+
+

Client-side/Browser/SPA routing is the internal handling of a route from the javascript in the browser. It uses the HTML5 History API

+
+
+

When enabled, to allow SPA routing, all relevant requests will be internally re-routed to index.html, this way the javascript can take care of the route inside the web-application.

+
+
+

To enable Single Page application routing:

+
+
+
+
quarkus.quinoa.enable-spa-routing=true
+
+
+
+ + + + + +
+ + +By default, Quinoa will ignore quarkus.resteasy-reactive.path, quarkus.resteasy.path and quarkus.http.non-application-root-path path prefixes. You can specify different path prefixes to ignore using quarkus.quinoa.ignored-path-prefixes. +
+
+
+ + + + + +
+ + +Currently, for technical reasons, the Quinoa SPA routing configuration won’t work with RESTEasy Classic. Instead, you may use a workaround (if your app has all the rest resources under the same path prefix): +
+
+
+
+
@ApplicationScoped
+public class SPARouting {
+    // Vite in dev mode requests /@vite/client and /@reactrefresh so add "/@" if you use Vite
+    private static final String[] PATH_PREFIXES = {"/q/", "/api/", "/@"};
+    private static final Predicate<String> FILE_NAME_PREDICATE = Pattern.compile(".+\\.[a-zA-Z0-9]+$").asMatchPredicate();
+
+    public void init(@Observes Router router) {
+        router.get("/*").handler(rc -> {
+            final String path = rc.normalizedPath();
+            if (!path.equals("/")
+                    && Stream.of(PATH_PREFIXES).noneMatch(path::startsWith)
+                    && !FILE_NAME_PREDICATE.test(path)) {
+                rc.reroute("/");
+            } else {
+                rc.next();
+            }
+        });
+    }
+}
+
+
+
+
+

Http Headers

+
+

It’s very common to set up headers for caching on static resources, for example React proposes this configuration:

+
+
+

To configure Quarkus with those headers :

+
+
+
+
quarkus.http.filter.others.header.Cache-Control=no-cache
+quarkus.http.filter.others.matches=/.*
+quarkus.http.filter.others.methods=GET
+quarkus.http.filter.others.order=0
+quarkus.http.filter.static.header.Cache-Control=max-age=31536000
+quarkus.http.filter.static.matches=/static/.+
+quarkus.http.filter.static.methods=GET
+quarkus.http.filter.static.order=1
+
+
+
+
+

Http Compression

+
+

To enable server Http compression:

+
+
+
+
quarkus.http.enable-compression=true
+
+
+
+
+

OpenAPI Code Generation

+
+

Many Quinoa projects commonly utilize REST services, specifying their requirements with OpenAPI support in Quarkus. If you wish to streamline the process of generating TypeScript code for your React/Vue/Angular web application using the OpenAPI spec, you can now achieve it effortlessly in a single step.

+
+
+

Start by configuring OpenAPI to consistently generate code in the designated directory, such as /src/main/webui, where your Quinoa UI is intended to reside.

+
+
+
+
quarkus.smallrye-openapi.store-schema-directory=src/main/webui/
+
+
+
+

Whenever you execute mvn quarkus:dev, it automatically produces the openapi.json in the specified directory. Following this, it is essential to notify your JavaScript application about the changes and facilitate the automatic generation of new TypeScript code from your OpenAPI. A solution like Orval can be incredibly helpful in this scenario!

+
+
+
+
"scripts": {
+  "dev": "orval --config ./orval.config.ts && vite",
+  "build": "orval --config ./orval.config.ts && vite build",
+},
+"devDependencies": {
+  "orval": "6.24.0",
+}
+
+
+
+
+

Continuous Integration (CI)

+
+

Most CI images already include NodeJS. if they don’t, just make sure to install it alongside Maven/Gradle (and Yarn/PNPM if needed). Then you can use it like any Maven/Gradle project.

+
+
+

Quinoa can be configured to install packages with a frozen lockfile.

+
+
+

On compatible CIs, don’t forget to enable the Maven/Gradle and NPM/Yarn repository caching.

+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-quinoa/dev/config-reference.html b/quarkus-quinoa/dev/config-reference.html new file mode 100644 index 0000000000..a33dd22f2e --- /dev/null +++ b/quarkus-quinoa/dev/config-reference.html @@ -0,0 +1,1696 @@ + + + + + + Quarkus Quinoa - Configuration Reference :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Quinoa - Configuration Reference

+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Indicate if the extension should be enabled.

+
+
+

Environment variable: QUARKUS_QUINOA

+
+
+

boolean

enabled (disabled in test mode)

+
+
+
+

Indicate if Quinoa should just do the build part. If true, Quinoa will NOT serve the Web UI built resources. This is handy when the output of the build is used to be served via something else (nginx, cdn, …​) Quinoa put the built files in 'target/quinoa/build' (or 'build/quinoa/build with Gradle).

+
+
+

Environment variable: QUARKUS_QUINOA_JUST_BUILD

+
+
+

boolean

false

+
+
+
+

Path to the Web UI (NodeJS) root directory (relative to the project root).

+
+
+

Environment variable: QUARKUS_QUINOA_UI_DIR

+
+
+

string

src/main/webui

+
+
+
+

This the Web UI internal build system (webpack, …​) output directory. After the build, Quinoa will take the files from this directory, move them to 'target/quinoa/build' (or build/quinoa/build with Gradle) and serve them at runtime. The path is relative to the Web UI path.

+
+
+

Environment variable: QUARKUS_QUINOA_BUILD_DIR

+
+
+

string

framework detection with fallback to 'build/'

+
+
+
+

Name of the package manager binary. Only npm, pnpm and yarn are supported for the moment.

+
+
+

Environment variable: QUARKUS_QUINOA_PACKAGE_MANAGER

+
+
+

string

auto-detected based on lockfile falling back to 'npm'

+
+
+
+

Enable Package Manager Installation. This will override "package-manager" config. Set "quarkus.quinoa.package-manager-command.prepend-binary=true" when using with custom commands

+
+
+

Environment variable: QUARKUS_QUINOA_PACKAGE_MANAGER_INSTALL

+
+
+

boolean

false

+
+
+
+

The directory where NodeJS should be installed (relative to the project root), It will be installed in a 'node/' subdirectory of this.

+
+
+

Environment variable: QUARKUS_QUINOA_PACKAGE_MANAGER_INSTALL_INSTALL_DIR

+
+
+

string

.quinoa/

+
+
+
+

The NodeJS Version to install locally to the project. Required when package-manager-install is enabled.

+
+
+

Environment variable: QUARKUS_QUINOA_PACKAGE_MANAGER_INSTALL_NODE_VERSION

+
+
+

string

+
+
+
+

The NPM version to install and use. By default, the version is provided by NodeJS.

+
+
+

Environment variable: QUARKUS_QUINOA_PACKAGE_MANAGER_INSTALL_NPM_VERSION

+
+
+

string

'provided' means it will use the NPM embedded in NodeJS

+
+
+
+

Where to download NPM from.

+
+
+

Environment variable: QUARKUS_QUINOA_PACKAGE_MANAGER_INSTALL_NPM_DOWNLOAD_ROOT

+
+
+

string

https://registry.npmjs.org/npm/-/

+
+
+
+

Where to download NodeJS from.

+
+
+

Environment variable: QUARKUS_QUINOA_PACKAGE_MANAGER_INSTALL_NODE_DOWNLOAD_ROOT

+
+
+

string

https://nodejs.org/dist/

+
+
+
+

Install and use Yarn as package manager with this version. This is ignored if the npm-version is defined.

+
+
+

Environment variable: QUARKUS_QUINOA_PACKAGE_MANAGER_INSTALL_YARN_VERSION

+
+
+

string

+
+
+
+

Where to download YARN from.

+
+
+

Environment variable: QUARKUS_QUINOA_PACKAGE_MANAGER_INSTALL_YARN_DOWNLOAD_ROOT

+
+
+

string

https://github.com/yarnpkg/yarn/releases/download/

+
+
+
+

Install and use PNPM as package manager with this version. This is ignored if the npm-version or the yarn-version is defined.

+
+
+

Environment variable: QUARKUS_QUINOA_PACKAGE_MANAGER_INSTALL_PNPM_VERSION

+
+
+

string

+
+
+
+

Where to download PNPM from.

+
+
+

Environment variable: QUARKUS_QUINOA_PACKAGE_MANAGER_INSTALL_PNPM_DOWNLOAD_ROOT

+
+
+

string

https://registry.npmjs.org/pnpm/-/

+
+
+
+

The basic authentication username to use for node download.

+
+
+

Environment variable: QUARKUS_QUINOA_PACKAGE_MANAGER_INSTALL_BASIC_AUTH_USERNAME

+
+
+

string

+
+
+
+

The basic authentication password to use for node download.

+
+
+

Environment variable: QUARKUS_QUINOA_PACKAGE_MANAGER_INSTALL_BASIC_AUTH_PASSWORD

+
+
+

string

+
+
+
+

Custom command for installing all packages. e.g. «ci --cache $CACHE_DIR/.npm --prefer-offline»

+
+
+

Environment variable: QUARKUS_QUINOA_PACKAGE_MANAGER_COMMAND_INSTALL

+
+
+

string

install

+
+
+
+

Custom command for installing all the packages without generating a lockfile (frozen lockfile) and failing if an update is needed (useful in CI).

+
+
+

Environment variable: QUARKUS_QUINOA_PACKAGE_MANAGER_COMMAND_CI

+
+
+

string

Detected based on package manager

+
+
+
+

Custom command for building the application.

+
+
+

Environment variable: QUARKUS_QUINOA_PACKAGE_MANAGER_COMMAND_BUILD

+
+
+

string

run build

+
+
+
+

Custom command for running tests for the application.

+
+
+

Environment variable: QUARKUS_QUINOA_PACKAGE_MANAGER_COMMAND_TEST

+
+
+

string

run test

+
+
+
+

Custom command for starting the application in development mode.

+
+
+

Environment variable: QUARKUS_QUINOA_PACKAGE_MANAGER_COMMAND_DEV

+
+
+

string

framework detection with fallback to 'start'

+
+
+
+

Name of the index page.

+
+
+

Environment variable: QUARKUS_QUINOA_INDEX_PAGE

+
+
+

string

index.html

+
+
+
+

Indicate if the Web UI should also be tested during the build phase (i.e: npm test). To be used in a io.quarkus.test.junit.QuarkusTestProfile to have Web UI test running during a io.quarkus.test.junit.QuarkusTest

+
+
+

Environment variable: QUARKUS_QUINOA_RUN_TESTS

+
+
+

boolean

false

+
+
+
+

Install the packages without generating a lockfile (frozen lockfile) and failing if an update is needed (useful in CI).

+
+
+

Environment variable: QUARKUS_QUINOA_CI

+
+
+

boolean

true if environment CI=true

+
+
+
+

Force install packages before building. It will install packages only if the node_modules directory is absent or when the package.json is modified in dev-mode.

+
+
+

Environment variable: QUARKUS_QUINOA_FORCE_INSTALL

+
+
+

boolean

false

+
+
+
+

When true, the UI Framework will be auto-detected if possible

+
+
+

Environment variable: QUARKUS_QUINOA_FRAMEWORK_DETECTION

+
+
+

boolean

true

+
+
+
+

Enable SPA (Single Page Application) routing, all relevant requests will be re-routed to the index page. Currently, for technical reasons, the Quinoa SPA routing configuration won’t work with RESTEasy Classic.

+
+
+

Environment variable: QUARKUS_QUINOA_ENABLE_SPA_ROUTING

+
+
+

boolean

false

+
+
+
+

List of path prefixes to be ignored by Quinoa.

+
+
+

Environment variable: QUARKUS_QUINOA_IGNORED_PATH_PREFIXES

+
+
+

list of string

ignore values configured by 'quarkus.resteasy-reactive.path', 'quarkus.resteasy.path' and 'quarkus.http.non-application-root-path'

+
+
+
+

Enable external dev server (live coding). If the "dev-server.port" config is not detected or defined it will be disabled.

+
+
+

Environment variable: QUARKUS_QUINOA_DEV_SERVER

+
+
+

boolean

true

+
+
+
+

When set to true, Quinoa will manage the Web UI dev server When set to false, the Web UI dev server have to be started before running Quarkus dev

+
+
+

Environment variable: QUARKUS_QUINOA_DEV_SERVER_MANAGED

+
+
+

boolean

true

+
+
+
+

Port of the server to forward requests to. The dev server process (i.e npm start) is managed like a dev service by Quarkus. If the external server responds with a 404, it is ignored by Quinoa and processed like any other backend request.

+
+
+

Environment variable: QUARKUS_QUINOA_DEV_SERVER_PORT

+
+
+

int

framework detection or fallback to empty

+
+
+
+

Host of the server to forward requests to.

+
+
+

Environment variable: QUARKUS_QUINOA_DEV_SERVER_HOST

+
+
+

string

localhost

+
+
+
+

After start, Quinoa wait for the external dev server. by sending GET requests to this path waiting for a 200 status. If forced empty, Quinoa will not check if the dev server is up.

+
+
+

Environment variable: QUARKUS_QUINOA_DEV_SERVER_CHECK_PATH

+
+
+

string

/

+
+
+
+

By default, Quinoa will handle request upgrade to websocket and act as proxy with the dev server. If set to false, Quinoa will pass websocket upgrade request to the next Vert.x route handler.

+
+
+

Environment variable: QUARKUS_QUINOA_DEV_SERVER_WEBSOCKET

+
+
+

boolean

true

+
+
+
+

Timeout in ms for the dev server to be up and running.

+
+
+

Environment variable: QUARKUS_QUINOA_DEV_SERVER_CHECK_TIMEOUT

+
+
+

int

30000

+
+
+
+

Enable external dev server live coding logs. This is not enabled by default because most dev servers display compilation errors directly in the browser.

+
+
+

Environment variable: QUARKUS_QUINOA_DEV_SERVER_LOGS

+
+
+

boolean

false

+
+
+
+

Set this value if the index page is different for the dev-server

+
+
+

Environment variable: QUARKUS_QUINOA_DEV_SERVER_INDEX_PAGE

+
+
+

string

auto-detected falling back to the quinoa.index-page

+
+
+
+

Quinoa deals with SPA routing by itself (see quarkus.quinoa.enable-spa-routing), some dev-server have this feature enabled by default. This is a problem for proxying as it prevents other Quarkus resources (REST, …​) to answer. By default, Quinoa will try to detect when the dev server is answering with a html page for non-existing resources (SPA-Routing) in which case it will instead allow other Quarkus resources (REST, …​) to answer. Set this to true (direct) when the other Quarkus resources use a specific path prefix (and marked as ignored by Quinoa) or if the dev-server is configured without SPA routing.

+
+
+

Environment variable: QUARKUS_QUINOA_DEV_SERVER_DIRECT_FORWARDING

+
+
+

boolean

false

+
+
+
+

Environment variables for install command execution.

+
+
+

Environment variable: QUARKUS_QUINOA_PACKAGE_MANAGER_COMMAND_INSTALL_ENV

+
+
+

Map<String,String>

+
+
+
+

Environment variables for ci command execution.

+
+
+

Environment variable: QUARKUS_QUINOA_PACKAGE_MANAGER_COMMAND_CI_ENV

+
+
+

Map<String,String>

+
+
+
+

Environment variables for build command execution.

+
+
+

Environment variable: QUARKUS_QUINOA_PACKAGE_MANAGER_COMMAND_BUILD_ENV

+
+
+

Map<String,String>

+
+
+
+

Environment variables for test command execution.

+
+
+

Environment variable: QUARKUS_QUINOA_PACKAGE_MANAGER_COMMAND_TEST_ENV

+
+
+

Map<String,String>

+
+
+
+

Environment variables for development command execution.

+
+
+

Environment variable: QUARKUS_QUINOA_PACKAGE_MANAGER_COMMAND_DEV_ENV

+
+
+

Map<String,String>

+
+
+
+
+ + + + + + + diff --git a/quarkus-quinoa/dev/includes/attributes.html b/quarkus-quinoa/dev/includes/attributes.html new file mode 100644 index 0000000000..7aaf3c69fd --- /dev/null +++ b/quarkus-quinoa/dev/includes/attributes.html @@ -0,0 +1,927 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-quinoa/dev/includes/quarkus-quinoa.html b/quarkus-quinoa/dev/includes/quarkus-quinoa.html new file mode 100644 index 0000000000..90ccf54615 --- /dev/null +++ b/quarkus-quinoa/dev/includes/quarkus-quinoa.html @@ -0,0 +1,1691 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Indicate if the extension should be enabled.

+
+
+

Environment variable: QUARKUS_QUINOA

+
+
+

boolean

enabled (disabled in test mode)

+
+
+
+

Indicate if Quinoa should just do the build part. If true, Quinoa will NOT serve the Web UI built resources. This is handy when the output of the build is used to be served via something else (nginx, cdn, …​) Quinoa put the built files in 'target/quinoa/build' (or 'build/quinoa/build with Gradle).

+
+
+

Environment variable: QUARKUS_QUINOA_JUST_BUILD

+
+
+

boolean

false

+
+
+
+

Path to the Web UI (NodeJS) root directory (relative to the project root).

+
+
+

Environment variable: QUARKUS_QUINOA_UI_DIR

+
+
+

string

src/main/webui

+
+
+
+

This the Web UI internal build system (webpack, …​) output directory. After the build, Quinoa will take the files from this directory, move them to 'target/quinoa/build' (or build/quinoa/build with Gradle) and serve them at runtime. The path is relative to the Web UI path.

+
+
+

Environment variable: QUARKUS_QUINOA_BUILD_DIR

+
+
+

string

framework detection with fallback to 'build/'

+
+
+
+

Name of the package manager binary. Only npm, pnpm and yarn are supported for the moment.

+
+
+

Environment variable: QUARKUS_QUINOA_PACKAGE_MANAGER

+
+
+

string

auto-detected based on lockfile falling back to 'npm'

+
+
+
+

Enable Package Manager Installation. This will override "package-manager" config. Set "quarkus.quinoa.package-manager-command.prepend-binary=true" when using with custom commands

+
+
+

Environment variable: QUARKUS_QUINOA_PACKAGE_MANAGER_INSTALL

+
+
+

boolean

false

+
+
+
+

The directory where NodeJS should be installed (relative to the project root), It will be installed in a 'node/' subdirectory of this.

+
+
+

Environment variable: QUARKUS_QUINOA_PACKAGE_MANAGER_INSTALL_INSTALL_DIR

+
+
+

string

.quinoa/

+
+
+
+

The NodeJS Version to install locally to the project. Required when package-manager-install is enabled.

+
+
+

Environment variable: QUARKUS_QUINOA_PACKAGE_MANAGER_INSTALL_NODE_VERSION

+
+
+

string

+
+
+
+

The NPM version to install and use. By default, the version is provided by NodeJS.

+
+
+

Environment variable: QUARKUS_QUINOA_PACKAGE_MANAGER_INSTALL_NPM_VERSION

+
+
+

string

'provided' means it will use the NPM embedded in NodeJS

+
+
+
+

Where to download NPM from.

+
+
+

Environment variable: QUARKUS_QUINOA_PACKAGE_MANAGER_INSTALL_NPM_DOWNLOAD_ROOT

+
+
+

string

https://registry.npmjs.org/npm/-/

+
+
+
+

Where to download NodeJS from.

+
+
+

Environment variable: QUARKUS_QUINOA_PACKAGE_MANAGER_INSTALL_NODE_DOWNLOAD_ROOT

+
+
+

string

https://nodejs.org/dist/

+
+
+
+

Install and use Yarn as package manager with this version. This is ignored if the npm-version is defined.

+
+
+

Environment variable: QUARKUS_QUINOA_PACKAGE_MANAGER_INSTALL_YARN_VERSION

+
+
+

string

+
+
+
+

Where to download YARN from.

+
+
+

Environment variable: QUARKUS_QUINOA_PACKAGE_MANAGER_INSTALL_YARN_DOWNLOAD_ROOT

+
+
+

string

https://github.com/yarnpkg/yarn/releases/download/

+
+
+
+

Install and use PNPM as package manager with this version. This is ignored if the npm-version or the yarn-version is defined.

+
+
+

Environment variable: QUARKUS_QUINOA_PACKAGE_MANAGER_INSTALL_PNPM_VERSION

+
+
+

string

+
+
+
+

Where to download PNPM from.

+
+
+

Environment variable: QUARKUS_QUINOA_PACKAGE_MANAGER_INSTALL_PNPM_DOWNLOAD_ROOT

+
+
+

string

https://registry.npmjs.org/pnpm/-/

+
+
+
+

The basic authentication username to use for node download.

+
+
+

Environment variable: QUARKUS_QUINOA_PACKAGE_MANAGER_INSTALL_BASIC_AUTH_USERNAME

+
+
+

string

+
+
+
+

The basic authentication password to use for node download.

+
+
+

Environment variable: QUARKUS_QUINOA_PACKAGE_MANAGER_INSTALL_BASIC_AUTH_PASSWORD

+
+
+

string

+
+
+
+

Custom command for installing all packages. e.g. «ci --cache $CACHE_DIR/.npm --prefer-offline»

+
+
+

Environment variable: QUARKUS_QUINOA_PACKAGE_MANAGER_COMMAND_INSTALL

+
+
+

string

install

+
+
+
+

Custom command for installing all the packages without generating a lockfile (frozen lockfile) and failing if an update is needed (useful in CI).

+
+
+

Environment variable: QUARKUS_QUINOA_PACKAGE_MANAGER_COMMAND_CI

+
+
+

string

Detected based on package manager

+
+
+
+

Custom command for building the application.

+
+
+

Environment variable: QUARKUS_QUINOA_PACKAGE_MANAGER_COMMAND_BUILD

+
+
+

string

run build

+
+
+
+

Custom command for running tests for the application.

+
+
+

Environment variable: QUARKUS_QUINOA_PACKAGE_MANAGER_COMMAND_TEST

+
+
+

string

run test

+
+
+
+

Custom command for starting the application in development mode.

+
+
+

Environment variable: QUARKUS_QUINOA_PACKAGE_MANAGER_COMMAND_DEV

+
+
+

string

framework detection with fallback to 'start'

+
+
+
+

Name of the index page.

+
+
+

Environment variable: QUARKUS_QUINOA_INDEX_PAGE

+
+
+

string

index.html

+
+
+
+

Indicate if the Web UI should also be tested during the build phase (i.e: npm test). To be used in a io.quarkus.test.junit.QuarkusTestProfile to have Web UI test running during a io.quarkus.test.junit.QuarkusTest

+
+
+

Environment variable: QUARKUS_QUINOA_RUN_TESTS

+
+
+

boolean

false

+
+
+
+

Install the packages without generating a lockfile (frozen lockfile) and failing if an update is needed (useful in CI).

+
+
+

Environment variable: QUARKUS_QUINOA_CI

+
+
+

boolean

true if environment CI=true

+
+
+
+

Force install packages before building. It will install packages only if the node_modules directory is absent or when the package.json is modified in dev-mode.

+
+
+

Environment variable: QUARKUS_QUINOA_FORCE_INSTALL

+
+
+

boolean

false

+
+
+
+

When true, the UI Framework will be auto-detected if possible

+
+
+

Environment variable: QUARKUS_QUINOA_FRAMEWORK_DETECTION

+
+
+

boolean

true

+
+
+
+

Enable SPA (Single Page Application) routing, all relevant requests will be re-routed to the index page. Currently, for technical reasons, the Quinoa SPA routing configuration won’t work with RESTEasy Classic.

+
+
+

Environment variable: QUARKUS_QUINOA_ENABLE_SPA_ROUTING

+
+
+

boolean

false

+
+
+
+

List of path prefixes to be ignored by Quinoa.

+
+
+

Environment variable: QUARKUS_QUINOA_IGNORED_PATH_PREFIXES

+
+
+

list of string

ignore values configured by 'quarkus.resteasy-reactive.path', 'quarkus.resteasy.path' and 'quarkus.http.non-application-root-path'

+
+
+
+

Enable external dev server (live coding). If the "dev-server.port" config is not detected or defined it will be disabled.

+
+
+

Environment variable: QUARKUS_QUINOA_DEV_SERVER

+
+
+

boolean

true

+
+
+
+

When set to true, Quinoa will manage the Web UI dev server When set to false, the Web UI dev server have to be started before running Quarkus dev

+
+
+

Environment variable: QUARKUS_QUINOA_DEV_SERVER_MANAGED

+
+
+

boolean

true

+
+
+
+

Port of the server to forward requests to. The dev server process (i.e npm start) is managed like a dev service by Quarkus. If the external server responds with a 404, it is ignored by Quinoa and processed like any other backend request.

+
+
+

Environment variable: QUARKUS_QUINOA_DEV_SERVER_PORT

+
+
+

int

framework detection or fallback to empty

+
+
+
+

Host of the server to forward requests to.

+
+
+

Environment variable: QUARKUS_QUINOA_DEV_SERVER_HOST

+
+
+

string

localhost

+
+
+
+

After start, Quinoa wait for the external dev server. by sending GET requests to this path waiting for a 200 status. If forced empty, Quinoa will not check if the dev server is up.

+
+
+

Environment variable: QUARKUS_QUINOA_DEV_SERVER_CHECK_PATH

+
+
+

string

/

+
+
+
+

By default, Quinoa will handle request upgrade to websocket and act as proxy with the dev server. If set to false, Quinoa will pass websocket upgrade request to the next Vert.x route handler.

+
+
+

Environment variable: QUARKUS_QUINOA_DEV_SERVER_WEBSOCKET

+
+
+

boolean

true

+
+
+
+

Timeout in ms for the dev server to be up and running.

+
+
+

Environment variable: QUARKUS_QUINOA_DEV_SERVER_CHECK_TIMEOUT

+
+
+

int

30000

+
+
+
+

Enable external dev server live coding logs. This is not enabled by default because most dev servers display compilation errors directly in the browser.

+
+
+

Environment variable: QUARKUS_QUINOA_DEV_SERVER_LOGS

+
+
+

boolean

false

+
+
+
+

Set this value if the index page is different for the dev-server

+
+
+

Environment variable: QUARKUS_QUINOA_DEV_SERVER_INDEX_PAGE

+
+
+

string

auto-detected falling back to the quinoa.index-page

+
+
+
+

Quinoa deals with SPA routing by itself (see quarkus.quinoa.enable-spa-routing), some dev-server have this feature enabled by default. This is a problem for proxying as it prevents other Quarkus resources (REST, …​) to answer. By default, Quinoa will try to detect when the dev server is answering with a html page for non-existing resources (SPA-Routing) in which case it will instead allow other Quarkus resources (REST, …​) to answer. Set this to true (direct) when the other Quarkus resources use a specific path prefix (and marked as ignored by Quinoa) or if the dev-server is configured without SPA routing.

+
+
+

Environment variable: QUARKUS_QUINOA_DEV_SERVER_DIRECT_FORWARDING

+
+
+

boolean

false

+
+
+
+

Environment variables for install command execution.

+
+
+

Environment variable: QUARKUS_QUINOA_PACKAGE_MANAGER_COMMAND_INSTALL_ENV

+
+
+

Map<String,String>

+
+
+
+

Environment variables for ci command execution.

+
+
+

Environment variable: QUARKUS_QUINOA_PACKAGE_MANAGER_COMMAND_CI_ENV

+
+
+

Map<String,String>

+
+
+
+

Environment variables for build command execution.

+
+
+

Environment variable: QUARKUS_QUINOA_PACKAGE_MANAGER_COMMAND_BUILD_ENV

+
+
+

Map<String,String>

+
+
+
+

Environment variables for test command execution.

+
+
+

Environment variable: QUARKUS_QUINOA_PACKAGE_MANAGER_COMMAND_TEST_ENV

+
+
+

Map<String,String>

+
+
+
+

Environment variables for development command execution.

+
+
+

Environment variable: QUARKUS_QUINOA_PACKAGE_MANAGER_COMMAND_DEV_ENV

+
+
+

Map<String,String>

+
+
+
+
+ + + + + + + diff --git a/quarkus-quinoa/dev/index.html b/quarkus-quinoa/dev/index.html new file mode 100644 index 0000000000..5f163fa4e0 --- /dev/null +++ b/quarkus-quinoa/dev/index.html @@ -0,0 +1,1108 @@ + + + + + + Quarkus Quinoa - Getting Started :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Quinoa - Getting Started

+
+
+
+

Quinoa is a Quarkus extension which eases the development, the build and serving single page apps or web components (built with NodeJS : React, Angular, Vue, Lit, Svelte, Astro, SolidJS …) alongside other Quarkus services (REST, GraphQL, Security, Events, …​).

+
+
+

Live code the backend and frontend together with close to no configuration. When enabled in development mode, Quinoa will start the UI live coding server provided by the target framework and forward relevant requests to it. In production mode, Quinoa will run the build and process the generated files to serve them at runtime.

+
+
+
+
+

Prerequisite

+
+
+
    +
  • +

    Create or use an existing Quarkus application

    +
  • +
  • +

    Add the Quinoa extension

    +
  • +
  • +

    Install NodeJS (https://nodejs.org/) or make sure Quinoa is configured to install it, see the following example.

    +
  • +
+
+
+
+
quarkus.quinoa.package-manager-install.node-version=20.10.0
+quarkus.quinoa.package-manager-install.npm-version=10.2.3
+
+
+
+
+
+

Installation

+
+
+

Create a new Quinoa project (with a base Quinoa starter code):

+
+
+ +
+
+
+
quarkus create app quinoa-app -x=io.quarkiverse.quinoa:quarkus-quinoa
+
+
+
+

Then start the live-coding:

+
+
+
+
quarkus dev
+
+
+ +
+

You could also just add the extension (but you won’t get the starter code):

+
+
+ +
+
+
+
quarkus ext add io.quarkiverse.quinoa:quarkus-quinoa
+
+
+
+
    +
  • +

    In your pom.xml file, add this dependency:

    +
  • +
+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.quinoa</groupId>
+    <artifactId>quarkus-quinoa</artifactId>
+    <version>2.3.4</version>
+</dependency>
+
+
+
+
+
+

Getting Started

+
+
+

If not yet created by the tooling, you will need a Web UI directory in src/main/webui. This directory will contain your NodeJS Web application code with a package.json.

+
+
+ + + + + +
+ + +The location is configurable, the directory could be outside the Quarkus project as long as the files are available at build time. +
+
+
+

You may use an existing Web UI or generate a starter application from any existing Node based Web Framework. Some Web Frameworks are detected and preconfigured with sensible defaults. If your Web Framework is not part of the detected frameworks or if you changed the configuration, you can always configure Quinoa to work with it.

+
+
+

The key points for Quinoa are:

+
+
+
    +
  • +

    the package.json scripts: build, optionally start/dev and test

    +
  • +
  • +

    the directory where the web files (index.html, scripts, …​) are generated: dist, build, …​

    +
  • +
  • +

    the port used by the dev-server

    +
  • +
+
+
+
application.properties
+
+
quarkus.quinoa.dev-server.port=3000
+quarkus.quinoa.build-dir=dist
+
+
+
+

Start the Quarkus live coding:

+
+
+
+
$ quarkus dev
+
+
+
+

Build your app:

+
+
+
+
$ quarkus build
+$ java -jar target/quarkus-app/quarkus-run.jar
+
+
+
+

It’s done! The web application is now built alongside Quarkus, dev-mode is available, and the generated files will be automatically copied to the right place and be served by Quinoa if you hit http://localhost:8080

+
+
+ + + + + +
+ + +With Quinoa, you don’t need to manually copy the files to META-INF/resources. Quinoa has its own system and will provide another Vert.x route for it. If you have conflicting files with META-INF/resources, Quinoa will have priority over them. +
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-quinoa/dev/main-concepts.html b/quarkus-quinoa/dev/main-concepts.html new file mode 100644 index 0000000000..f5a61ee3d4 --- /dev/null +++ b/quarkus-quinoa/dev/main-concepts.html @@ -0,0 +1,1011 @@ + + + + + + Quarkus Quinoa - Main Concepts :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Quinoa - Main Concepts

+
+

How it works

+
+
+

The Quinoa build (using npm)

+
+
+Quinoa Build +
+
+
+ + + + + +
+ + +packages are installed by Quinoa before the build when needed (i.e npm install). See Packages installation. Quinoa is pre-configured to work with your favorite package manager (npm, yarn or pnpm). +
+
+
+
+

Runtime for production mode

+
+

When running jar or binary in production mode:

+
+
+
+Quinoa Runtime Production +
+
+
+
+

Runtime for full Quarkus live-coding

+
+

Quinoa (using Quarkus live-coding watch feature) will watch the Web UI directory and trigger a new build on changes. It works the same as the production mode. This option is perfect for small/fast builds.

+
+
+ + + + + +
+ + +You can differentiate the build for dev mode. e.g to disable minification. +
+
+
+
+

Runtime for proxied live-coding

+
+

When running dev-mode (e.g with npm on port 3000):

+
+
+
+Quinoa Proxy Dev +
+
+
+ + + + + +
+ + +Quarkus live-coding will keep watching for the backend changes as usual. +
+
+ +
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-quinoa/dev/testing.html b/quarkus-quinoa/dev/testing.html new file mode 100644 index 0000000000..b549ef1d05 --- /dev/null +++ b/quarkus-quinoa/dev/testing.html @@ -0,0 +1,1023 @@ + + + + + + Quarkus Quinoa - Testing :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Quinoa - Testing

+
+

By default, the Web UI is not build/served in @QuarkusTest. The goal is to be able to test your api without having to wait for the Web UI build.

+
+
+

Quinoa features a testing library to make it easier to test your Web UI (it also includes Quarkus Playwright) :

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.quinoa</groupId>
+    <artifactId>quarkus-quinoa-testing</artifactId>
+    <version>2.3.4</version>
+    <scope>test</scope>
+</dependency>
+
+
+
+

In order to enable the Web UI (build and serve) in a particular test, you can use the Enable test profile:

+
+
+
+
@QuarkusTest
+@TestProfile(QuinoaTestProfiles.Enable.class)
+public class MyWebUITest {
+    @Test
+    public void someTest() {
+      // your test logic here
+    }
+}
+
+
+
+

If you also want to run the tests included in your Web UI (i.e npm test) alongside this class, you can use the EnableAndRunTests test profile:

+
+
+
+
@QuarkusTest
+@TestProfile(QuinoaTestProfiles.EnableAndRunTests.class)
+public class AllWebUITest {
+    @Test
+    public void runTest() {
+        // you don't need anything here, it will run your package.json "test"
+    }
+}
+
+
+
+

The library also brings a very elegant way to do e2e testing using Quarkus Playwright:

+
+
+
+
import com.microsoft.playwright.BrowserContext;
+import com.microsoft.playwright.Page;
+import com.microsoft.playwright.Response;
+import io.quarkiverse.playwright.WithPlaywright;
+import io.quarkiverse.playwright.InjectPlaywright;
+import io.quarkus.test.common.http.TestHTTPResource;
+import io.quarkus.test.junit.QuarkusTest;
+import io.quarkus.test.junit.TestProfile;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import java.net.URL;
+
+@QuarkusTest
+@TestProfile(QuinoaTestProfiles.Enable.class)
+@WithPlaywright
+public class MyWebUITest {
+    @InjectPlaywright
+    BrowserContext context;
+
+    @TestHTTPResource("/")
+    URL url;
+
+    @Test
+    void name() {
+        final Page page = context.newPage();
+        Response response = page.navigate(url.toString());
+        Assertions.assertEquals("OK", response.statusText());
+
+        page.waitForLoadState();
+
+        String title = page.title();
+        Assertions.assertEquals("My App", title);
+
+        // Make sure the app content is ok
+        String greeting = page.innerText(".quinoa");
+        Assertions.assertEquals("Hello World", greeting);
+    }
+}
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-quinoa/dev/web-frameworks.html b/quarkus-quinoa/dev/web-frameworks.html new file mode 100644 index 0000000000..08ae02d620 --- /dev/null +++ b/quarkus-quinoa/dev/web-frameworks.html @@ -0,0 +1,1359 @@ + + + + + + Quarkus Quinoa - Web Frameworks :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Quinoa - Web Frameworks

+
+
+
+

Quinoa attempts to automatically determine which framework you are using by reading your package.json file and auto-configure settings for that framework. When possible, if some changes are required in the Web UI, it will try to help you configure it.

+
+
+

For developers, this provides more "convention over configuration" approach for a smoother experience.

+
+
+
+
+

Detected Frameworks

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NamePreconfiguredStarterGuidesConfig
+

React

+ +

+
+
npx create-react-app my-app
+
+
+

Vue

+ +

+
+
npm create vue@latest
+
+
+ +
+

Angular

+ +

✓*

+
+
npm install -g @angular/cli
+ng new my-first-project
+
+
+
    +
  • +

    ng

    +
  • +
+

Angular Test Configuration

+

Next.js

+ +

~

+
+
npx create-next-app@latest
+
+
+ +

Next.js Configuration

+

Vite

+ +

+
+
npm create vite@latest
+
+
+ +

Vite Configuration

+

Svelte Kit

+ +

~

+
+
npm create svelte@latest webui
+
+
+ +

Svelte Kit Configuration

+

Nuxt

+ +

+
+
npm init nuxt-app <project-name>
+
+
+ +
+

Solid Start

+ +

+
+
mkdir my-app && cd my-app
+npm init solid@latest
+
+
+ +
+

Astro

+ +

+
+
npm create astro@latest
+
+
+ +
+

Gatsby

+ +

+
+
npm init gatsby@latest
+
+
+ +
+

Ember

+ +

+
+
npm install -g ember-cli
+ember new ember-quickstart
+
+
+ +
+

Midway.js

+ +

No

+ +
+
+
+
+

Required Configuration

+
+
+

Angular Test Configuration

+
+

If you want to use the Angular tests (instead of Playwright from the @QuarkusTest):

+
+
+
karma.conf.js:
+
+
  browsers: ['Chrome', 'ChromeHeadless', 'ChromeHeadlessCI'],
+  customLaunchers: {
+    ChromeHeadlessCI: {
+      base: 'ChromeHeadless',
+      flags: ['--no-sandbox']
+    }
+},
+
+
+
+
+

Next.js Configuration

+
+

This will configure the build to export the static files: +.package.json:

+
+
+
+
  "scripts": {
+    ...
+    "build": "next build",
+  }
+
+
+
+

In Next.js 14+ you need to add the following property in next.config.js file:

+
+
+
+
const nextConfig = {
+  output: 'export',
+}
+
+
+
+
+

Vite Configuration

+
+

Configure vite.config.ts file with the following changes:

+
+
+
+
  export default defineConfig({
+    // depending on your application, base can also be "/"
+    base: '',
+    plugins: [react(), viteTsconfigPaths()],
+    server: {
+        // this ensures that the browser opens upon server start
+        open: true,
+        // this sets a default port to 3000, you can change this
+        port: 3000,
+    },
+})
+
+
+
+
+

Svelte Kit Configuration

+
+

SvelteKit needs to be configured to create a single page application. +You will not be able to use any of its server-side only functionality. +See also SvelteKit documentation on Single-page apps.

+
+
+

Disable server side rendering at the root layout (src/routes/+layout.js):

+
+
+
+
export const ssr = false;
+
+
+
+

Install Svelte Static adapter:

+
+
+
+
npm i -D @sveltejs/adapter-static
+
+
+
+

Configure svelte.config.js file with the following changes:

+
+
+
+
import adapter from '@sveltejs/adapter-static';
+
+// In projects using Sveltekit v1
+import { vitePreprocess } from '@sveltejs/kit/vite';
+
+// In projects using SvelteKit v2
+import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'
+
+/** @type {import('@sveltejs/kit').Config} */
+const config = {
+    preprocess: vitePreprocess(),
+    kit: {
+        adapter: adapter({
+            fallback: 'index.html'
+        }),
+        // Mark path non-relative, otherwise SvelteKit assumes it works in a sub-directory
+        paths: {
+            relative: false
+        }
+    }
+};
+
+export default config;
+
+
+
+

In application.properties add:

+
+
+
+
quarkus.quinoa.build-dir=build
+quarkus.quinoa.enable-spa-routing=true
+%dev.quarkus.quinoa.dev-server.index-page=/
+
+
+
+ + + + + +
+ + +Currently, for technical reasons, the Quinoa SPA routing configuration won’t work with RESTEasy Classic. See SPA routing for a workaround. +
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-qute-web/dev/includes/attributes.html b/quarkus-qute-web/dev/includes/attributes.html new file mode 100644 index 0000000000..140a0bceb6 --- /dev/null +++ b/quarkus-qute-web/dev/includes/attributes.html @@ -0,0 +1,912 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-qute-web/dev/includes/quarkus-qute-web.html b/quarkus-qute-web/dev/includes/quarkus-qute-web.html new file mode 100644 index 0000000000..8fd938db5e --- /dev/null +++ b/quarkus-qute-web/dev/includes/quarkus-qute-web.html @@ -0,0 +1,1037 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The root path. All templates will be served relative to this path which is relative to the HTTP root path.

+
+
+

If the template name ends with a suffix listed in the quarkus.qute.suffixes config property then the suffix may be +omitted.

+
+
+

For example, a template located in src/main/resource/templates/foo.html will be served from the paths /foo and +/foo.html by default.

+
+
+

Environment variable: QUARKUS_QUTE_WEB_ROOT_PATH

+
+
+

string

/

+
+
+
+

The directory from which the templates are served. The path is relative to a template root directroy, i.e. relative to +src/main/resource/templates by default. For example, the value ping could be translated to +src/main/resource/templates/ping.

+
+
+

By default, the templates located in the src/main/resource/templates/pub directory are served.

+
+
+

Environment variable: QUARKUS_QUTE_WEB_PUBLIC_DIR

+
+
+

string

pub

+
+
+
+

This regular expression is used to hide template files from the web templates path. Hidden templates are not exposed.

+
+
+

All template file paths are matched, including the versions without suffixes. The matched input is the file path relative +from the web templates path (for example templates/web) and the / is used as a path separator. For example, a +template located in src/main/resource/templates/web/foo.html will be matched for foo.tml and foo.

+
+
+

By default, no templates are hidden.

+
+
+

Environment variable: QUARKUS_QUTE_WEB_HIDDEN_TEMPLATES

+
+
+

Pattern

+
+
+
+

The order of the route which handles the templates.

+
+
+

By default, the route is executed before the default routes (static resources, etc.).

+
+
+

Environment variable: QUARKUS_QUTE_WEB_ROUTE_ORDER

+
+
+

int

1000

+
+
+
+

If set to true then the route should use a blocking handler.

+
+
+

Environment variable: QUARKUS_QUTE_WEB_USE_BLOCKING_HANDLER

+
+
+

boolean

true

+
+
+
+
+ + + + + + + diff --git a/quarkus-qute-web/dev/index.html b/quarkus-qute-web/dev/index.html new file mode 100644 index 0000000000..6297b3292f --- /dev/null +++ b/quarkus-qute-web/dev/index.html @@ -0,0 +1,1215 @@ + + + + + + Quarkus Qute Web :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Qute Web

+
+
+
+

The goal of this extension is to expose Qute templates located in the src/main/resource/templates/pub directory via HTTP. +Automatically, no controllers needed. +For example, the template src/main/resource/templates/pub/foo.html will be served from the paths /foo and /foo.html by default.

+
+
+ + + + + +
+ + +The index.html and index.qute.html pages are handled specifically, i.e. they are also served as a "default page" of the containing directory. For example, the template src/main/resource/templates/pub/index.html will be served from the paths /index, /index.html and / by default. +
+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.qute.web:quarkus-qute-web extension first to your build file.

+
+
+

For instance, with Maven, add the following dependency to your POM file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.qute.web</groupId>
+    <artifactId>quarkus-qute-web</artifactId>
+    <version>3.0.1</version>
+</dependency>
+
+
+
+
+
+

Accessing Data

+
+
+

In a template you can access:

+
+
+ +
+
+
+
+

Compression Support

+
+
+

If the HTTP compression support is enabled by means of quarkus.http.enable-compression=true then the response body is compressed if the Content-Type header derived from the template file name is a compressed media type as configured via quarkus.http.compress-media-types.

+
+
+
+
+

Template Fragments

+
+
+

It is possible to specify the template fragment via the frag query param. +For example, if there is a template foo.html that defines a fragment with id bar then the fragment is served from the path /foo?frag=bar.

+
+
+
+
+

Content Negotiation

+
+
+

This extension attempts to serve the appropriate template and set the HTTP Content-type header based on the selected template variant and the value of Accept header. +For example, if there are templates src/main/resource/templates/pub/foo.html and src/main/resource/templates/pub/foo.txt and the client sends the Accept: text/html, text/plain;q=0.9 header then foo.html is rendeder and the Content-type: text/html header is set.

+
+
+
+
+

http: Namespace

+
+
+

Some useful template extension methods that handle the http namespace are registered automatically.

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionExample

http:request

Returns the current io.vertx.core.http.HttpServerRequest

{http:request.path}

http:param

Returns the first HTTP request query param value with the specified name

{http:param('page')} or {http:param('name', 'default value')}

http:header

Return the first HTTP request header value with the specified name

{http:header('HX-Request')}

http:headers

Makes it possible to access HTTP header values like properties

{http:headers.Accept-Encoding} or {http:headers.accept-encoding}

+
+ + + + + +
+ + +HTTP header names are case-insensitive. +
+
+
+ + + + + +
+ + +If you need to obtain all values of a specific HTTP header then you can use something similar to {http:request.headers.getAll('My-Header')}. +
+
+
+
+
+

Extension Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The root path. All templates will be served relative to this path which is relative to the HTTP root path.

+
+
+

If the template name ends with a suffix listed in the quarkus.qute.suffixes config property then the suffix may be +omitted.

+
+
+

For example, a template located in src/main/resource/templates/foo.html will be served from the paths /foo and +/foo.html by default.

+
+
+

Environment variable: QUARKUS_QUTE_WEB_ROOT_PATH

+
+
+

string

/

+
+
+
+

The directory from which the templates are served. The path is relative to a template root directroy, i.e. relative to +src/main/resource/templates by default. For example, the value ping could be translated to +src/main/resource/templates/ping.

+
+
+

By default, the templates located in the src/main/resource/templates/pub directory are served.

+
+
+

Environment variable: QUARKUS_QUTE_WEB_PUBLIC_DIR

+
+
+

string

pub

+
+
+
+

This regular expression is used to hide template files from the web templates path. Hidden templates are not exposed.

+
+
+

All template file paths are matched, including the versions without suffixes. The matched input is the file path relative +from the web templates path (for example templates/web) and the / is used as a path separator. For example, a +template located in src/main/resource/templates/web/foo.html will be matched for foo.tml and foo.

+
+
+

By default, no templates are hidden.

+
+
+

Environment variable: QUARKUS_QUTE_WEB_HIDDEN_TEMPLATES

+
+
+

Pattern

+
+
+
+

The order of the route which handles the templates.

+
+
+

By default, the route is executed before the default routes (static resources, etc.).

+
+
+

Environment variable: QUARKUS_QUTE_WEB_ROUTE_ORDER

+
+
+

int

1000

+
+
+
+

If set to true then the route should use a blocking handler.

+
+
+

Environment variable: QUARKUS_QUTE_WEB_USE_BLOCKING_HANDLER

+
+
+

boolean

true

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-rabbitmq-client/dev/includes/attributes.html b/quarkus-rabbitmq-client/dev/includes/attributes.html new file mode 100644 index 0000000000..6cc2c0faf0 --- /dev/null +++ b/quarkus-rabbitmq-client/dev/includes/attributes.html @@ -0,0 +1,912 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-rabbitmq-client/dev/includes/quarkus-rabbitmqclient.html b/quarkus-rabbitmq-client/dev/includes/quarkus-rabbitmqclient.html new file mode 100644 index 0000000000..f7e2079e71 --- /dev/null +++ b/quarkus-rabbitmq-client/dev/includes/quarkus-rabbitmqclient.html @@ -0,0 +1,1804 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Disables health check

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_HEALTH_ENABLED

+
+
+

boolean

true

+
+
+
+

Disables metrics

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_METRICS_ENABLED

+
+
+

boolean

true

RabbitMQ clients

Type

Default

+ +
+
+
+

Disable the client.

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_ENABLED

+
+
+

boolean

true

+ +
+
+
+

URI for connecting, formatted as amqp://userName:password@hostName:portNumber/virtualHost

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_URI

+
+
+

string

+ +
+
+
+

Username for authentication

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_USERNAME

+
+
+

string

guest

+ +
+
+
+

Password for authentication

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_PASSWORD

+
+
+

string

guest

+ +
+
+
+

Hostname for connecting

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_HOSTNAME

+
+
+

string

localhost

+ +
+
+
+

Virtual host

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_VIRTUAL_HOST

+
+
+

string

/

+ +
+
+
+

Port number for connecting

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_PORT

+
+
+

int

-1

+ +
+
+
+

Connection timeout in milliseconds

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_CONNECTION_TIMEOUT

+
+
+

int

60000

+ +
+
+
+

Connection close timeout in milliseconds

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_CONNECTION_CLOSE_TIMEOUT

+
+
+

int

-1

+ +
+
+
+

Heartbeat interval in seconds

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_REQUESTED_HEARTBEAT

+
+
+

int

60

+ +
+
+
+

Handshake timeout in milliseconds

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_HANDSHAKE_TIMEOUT

+
+
+

int

10000

+ +
+
+
+

Shutdown timeout in milliseconds

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_SHUTDOWN_TIMEOUT

+
+
+

int

10000

+ +
+
+
+

Maximum number of channels per connection

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_REQUESTED_CHANNEL_MAX

+
+
+

int

2047

+ +
+
+
+

Maximum frame size

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_REQUESTED_FRAME_MAX

+
+
+

int

0

+ +
+
+
+

Network recovery interval in milliseconds

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_NETWORK_RECOVERY_INTERVAL

+
+
+

int

5000

+ +
+
+
+

Channel RPC timeout in milliseconds

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_CHANNEL_RPC_TIMEOUT

+
+
+

int

600000

+ +
+
+
+

Validate channel RPC response type

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_CHANNEL_RPC_RESPONSE_TYPE_CHECK

+
+
+

boolean

false

+ +
+
+
+

Recover connection on failure

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_CONNECTION_RECOVERY

+
+
+

boolean

true

+ +
+
+
+

Recover topology on failure

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_TOPOLOGY_RECOVERY

+
+
+

boolean

true

+ +
+
+
+

SASL authentication mechanisms

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_SASL

+
+
+
+

plain, external

+

plain

+ +
+
+
+

Client properties

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_PROPERTIES

+
+
+

Map<String,String>

Broker addresses for creating connections

Type

Default

+ +
+
+
+

Hostname for connecting

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_ADDRESSES__BROKER_NAME__HOSTNAME

+
+
+

string

required

+ +
+
+
+

Port number for connecting

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_ADDRESSES__BROKER_NAME__PORT

+
+
+

int

0

Tls configuration

Type

Default

+ +
+
+
+

Enables TLS

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_TLS_ENABLED

+
+
+

boolean

false

+ +
+
+
+

TLS Algorithm to use

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_TLS_ALGORITHM

+
+
+

string

TLSv1.2

+ +
+
+
+

Trust store file

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_TLS_TRUST_STORE_FILE

+
+
+

string

+ +
+
+
+

Trust store type

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_TLS_TRUST_STORE_TYPE

+
+
+

string

JKS

+ +
+
+
+

Trust store algorithm

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_TLS_TRUST_STORE_ALGORITHM

+
+
+

string

SunX509

+ +
+
+
+

Trust store password

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_TLS_TRUST_STORE_PASSWORD

+
+
+

string

+ +
+
+
+

Key store file

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_TLS_KEY_STORE_FILE

+
+
+

string

+ +
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_TLS_KEY_STORE_PASSWORD

+
+
+

string

+ +
+
+
+

Key store type

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_TLS_KEY_STORE_TYPE

+
+
+

string

PKCS12

+ +
+
+
+

Key store algorithm

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_TLS_KEY_STORE_ALGORITHM

+
+
+

string

SunX509

+ +
+
+
+

Validate server certificate

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_TLS_VALIDATE_SERVER_CERTIFICATE

+
+
+

boolean

true

+ +
+
+
+

Verify hostname

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_TLS_VERIFY_HOSTNAME

+
+
+

boolean

true

Non-blocking IO configuration

Type

Default

+ +
+
+
+

Enables non blocking IO

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_NIO_ENABLED

+
+
+

boolean

false

+ +
+
+
+

Read buffer size in bytes

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_NIO_READ_BYTE_BUFFER_SIZE

+
+
+

int

32768

+ +
+
+
+

Write buffer size in bytes

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_NIO_WRITE_BYTE_BUFFER_SIZE

+
+
+

int

32768

+ +
+
+
+

Number of non blocking IO threads

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_NIO_THREADS

+
+
+

int

1

+ +
+
+
+

Write enqueuing timeout in milliseconds

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_NIO_WRITE_ENQUEUING_TIMEOUT

+
+
+

int

10000

+ +
+
+
+

Write queue capacity.

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_NIO_WRITE_QUEUE_CAPACITY

+
+
+

int

10000

+
+
+
+
+ + + + + + + diff --git a/quarkus-rabbitmq-client/dev/index.html b/quarkus-rabbitmq-client/dev/index.html new file mode 100644 index 0000000000..c1ef13db11 --- /dev/null +++ b/quarkus-rabbitmq-client/dev/index.html @@ -0,0 +1,1985 @@ + + + + + + Quarkus RabbitMQ Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus RabbitMQ Client

+
+
+
+

RabbitMQ is a popular message broker. This Quarkus extension provides a client for RabbitMQ which is configurable using the application.properties.

+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the quarkus-rabbitmq-client extension first. +In your pom.xml file, add:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse</groupId>
+    <artifactId>quarkus-rabbitmq-client</artifactId>
+    <version>3.0.1</version>
+</dependency>
+
+
+
+
+
+

Usage

+
+
+

Assuming you have RabbitMQ running on localhost:5672 you should add the following properties to your application.properties and fill in the values for <username> and <password>.

+
+
+
+
quarkus.rabbitmqclient.virtual-host=/
+quarkus.rabbitmqclient.username=<username>
+quarkus.rabbitmqclient.password=<password>
+quarkus.rabbitmqclient.hostname=localhost
+quarkus.rabbitmqclient.port=5672
+
+
+
+

Once you have configured the properties, you can start using the RabbitMQ client.

+
+
+
+
package org.acme.rabbitmqclient;
+
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.enterprise.event.Observes;
+import jakarta.inject.Inject;
+
+import java.io.IOException;
+import java.io.UncheckedIOException;
+import java.nio.charset.StandardCharsets;
+
+import com.rabbitmq.client.*;
+import io.quarkiverse.rabbitmqclient.RabbitMQClient;
+import io.quarkus.runtime.StartupEvent;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@ApplicationScoped
+public class MessageService {
+    private static final Logger log = LoggerFactory.getLogger(MessageService.class);
+    @Inject
+    RabbitMQClient rabbitMQClient;
+    private Channel channel;
+    public void onApplicationStart(@Observes StartupEvent event) {
+        // on application start prepare the queus and message listener
+        setupQueues();
+        setupReceiving();
+    }
+
+    private void setupQueues() {
+        try {
+            // create a connection
+            Connection connection = rabbitMQClient.connect();
+            // create a channel
+            channel = connection.createChannel();
+            // declare exchanges and queues
+            channel.exchangeDeclare("test", BuiltinExchangeType.TOPIC, true);
+            channel.queueDeclare("sample.queue", true, false, false, null);
+            channel.queueBind("sample.queue", "test", "#");
+        } catch (IOException e) {
+            throw new UncheckedIOException(e);
+        }
+    }
+
+    private void setupReceiving() {
+        try {
+            // register a consumer for messages
+            channel.basicConsume("sample.queue", true, new DefaultConsumer(channel) {
+                @Override
+                public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
+                    // just print the received message.
+                    log.info("Received: " + new String(body, StandardCharsets.UTF_8));
+                }
+            });
+        } catch (IOException e) {
+            throw new UncheckedIOException(e);
+        }
+    }
+
+    public void send(String message) {
+        try {
+            // send a message to the exchange
+            channel.basicPublish("test", "#", null, message.getBytes(StandardCharsets.UTF_8));
+        } catch (IOException e) {
+            throw new UncheckedIOException(e);
+        }
+    }
+}
+
+
+
+

You do not need to worry about closing connections as the RabbitMQClient will close them for you on application shutdown.

+
+
+

Multiple RabbitMQ Clients

+
+

The extension supports having multiple RabbitMQ clients. You can add named RabbitMQ clients as follows.

+
+
+
+
quarkus.rabbitmqclient.<name>.virtual-host=/
+quarkus.rabbitmqclient.<name>.username=<username>
+quarkus.rabbitmqclient.<name>.password=<password>
+quarkus.rabbitmqclient.<name>.hostname=localhost
+quarkus.rabbitmqclient.<name>.port=5672
+
+
+
+

All configuration options that are available on the default non named RabbitMQ client are available. Injecting a named RabbitMQ client, e.g. foo, can be achieved as follows.

+
+
+
+
@ApplicationScoped
+public class MessageService {
+
+    @Inject
+    @NamedRabbitMQClient("foo")
+    RabbitMQClient fooClient;
+}
+
+
+
+

It is possible to use multiple RabbitMQ clients in the same class as long as they are all named, or in combination with the default client. The name default is reserved for the default client and if used will trigger a deployment exception.

+
+
+
+

Disabling Clients

+
+

It is possible to disable clients using the quarkus.rabbitmqclient.<client-nane>.enabled=false configuration property. To disable the default client, use quarkus.rabbitmqclient.enabled=false.

+
+
+
+
+
+

Metrics

+
+
+

Both Micrometer and SmallRye Metrics are supported and enabled by default if the quarkus-micrometer or quarkus-smallrye-metrics dependency is included in the project. If both are present micrometer will be used.

+
+
+

Metrics are gathered on a per-client basis and tagged with name=<client-name> of the client. The default clients is tagged with name=default and are all prefixed with rabbitmq.

+
+
+

It is possible to opt-out of metrics by specifying quarkus.rabbitmqclient.metrics.enabled=false. This will disable all metrics gathering.

+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Disables health check

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_HEALTH_ENABLED

+
+
+

boolean

true

+
+
+
+

Disables metrics

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_METRICS_ENABLED

+
+
+

boolean

true

RabbitMQ clients

Type

Default

+ +
+
+
+

Disable the client.

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_ENABLED

+
+
+

boolean

true

+ +
+
+
+

URI for connecting, formatted as amqp://userName:password@hostName:portNumber/virtualHost

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_URI

+
+
+

string

+ +
+
+
+

Username for authentication

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_USERNAME

+
+
+

string

guest

+ +
+
+
+

Password for authentication

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_PASSWORD

+
+
+

string

guest

+ +
+
+
+

Hostname for connecting

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_HOSTNAME

+
+
+

string

localhost

+ +
+
+
+

Virtual host

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_VIRTUAL_HOST

+
+
+

string

/

+ +
+
+
+

Port number for connecting

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_PORT

+
+
+

int

-1

+ +
+
+
+

Connection timeout in milliseconds

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_CONNECTION_TIMEOUT

+
+
+

int

60000

+ +
+
+
+

Connection close timeout in milliseconds

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_CONNECTION_CLOSE_TIMEOUT

+
+
+

int

-1

+ +
+
+
+

Heartbeat interval in seconds

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_REQUESTED_HEARTBEAT

+
+
+

int

60

+ +
+
+
+

Handshake timeout in milliseconds

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_HANDSHAKE_TIMEOUT

+
+
+

int

10000

+ +
+
+
+

Shutdown timeout in milliseconds

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_SHUTDOWN_TIMEOUT

+
+
+

int

10000

+ +
+
+
+

Maximum number of channels per connection

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_REQUESTED_CHANNEL_MAX

+
+
+

int

2047

+ +
+
+
+

Maximum frame size

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_REQUESTED_FRAME_MAX

+
+
+

int

0

+ +
+
+
+

Network recovery interval in milliseconds

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_NETWORK_RECOVERY_INTERVAL

+
+
+

int

5000

+ +
+
+
+

Channel RPC timeout in milliseconds

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_CHANNEL_RPC_TIMEOUT

+
+
+

int

600000

+ +
+
+
+

Validate channel RPC response type

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_CHANNEL_RPC_RESPONSE_TYPE_CHECK

+
+
+

boolean

false

+ +
+
+
+

Recover connection on failure

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_CONNECTION_RECOVERY

+
+
+

boolean

true

+ +
+
+
+

Recover topology on failure

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_TOPOLOGY_RECOVERY

+
+
+

boolean

true

+ +
+
+
+

SASL authentication mechanisms

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_SASL

+
+
+
+

plain, external

+

plain

+ +
+
+
+

Client properties

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_PROPERTIES

+
+
+

Map<String,String>

Broker addresses for creating connections

Type

Default

+ +
+
+
+

Hostname for connecting

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_ADDRESSES__BROKER_NAME__HOSTNAME

+
+
+

string

required

+ +
+
+
+

Port number for connecting

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_ADDRESSES__BROKER_NAME__PORT

+
+
+

int

0

Tls configuration

Type

Default

+ +
+
+
+

Enables TLS

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_TLS_ENABLED

+
+
+

boolean

false

+ +
+
+
+

TLS Algorithm to use

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_TLS_ALGORITHM

+
+
+

string

TLSv1.2

+ +
+
+
+

Trust store file

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_TLS_TRUST_STORE_FILE

+
+
+

string

+ +
+
+
+

Trust store type

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_TLS_TRUST_STORE_TYPE

+
+
+

string

JKS

+ +
+
+
+

Trust store algorithm

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_TLS_TRUST_STORE_ALGORITHM

+
+
+

string

SunX509

+ +
+
+
+

Trust store password

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_TLS_TRUST_STORE_PASSWORD

+
+
+

string

+ +
+
+
+

Key store file

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_TLS_KEY_STORE_FILE

+
+
+

string

+ +
+
+
+

Key store password

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_TLS_KEY_STORE_PASSWORD

+
+
+

string

+ +
+
+
+

Key store type

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_TLS_KEY_STORE_TYPE

+
+
+

string

PKCS12

+ +
+
+
+

Key store algorithm

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_TLS_KEY_STORE_ALGORITHM

+
+
+

string

SunX509

+ +
+
+
+

Validate server certificate

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_TLS_VALIDATE_SERVER_CERTIFICATE

+
+
+

boolean

true

+ +
+
+
+

Verify hostname

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_TLS_VERIFY_HOSTNAME

+
+
+

boolean

true

Non-blocking IO configuration

Type

Default

+ +
+
+
+

Enables non blocking IO

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_NIO_ENABLED

+
+
+

boolean

false

+ +
+
+
+

Read buffer size in bytes

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_NIO_READ_BYTE_BUFFER_SIZE

+
+
+

int

32768

+ +
+
+
+

Write buffer size in bytes

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_NIO_WRITE_BYTE_BUFFER_SIZE

+
+
+

int

32768

+ +
+
+
+

Number of non blocking IO threads

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_NIO_THREADS

+
+
+

int

1

+ +
+
+
+

Write enqueuing timeout in milliseconds

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_NIO_WRITE_ENQUEUING_TIMEOUT

+
+
+

int

10000

+ +
+
+
+

Write queue capacity.

+
+
+

Environment variable: QUARKUS_RABBITMQCLIENT_NIO_WRITE_QUEUE_CAPACITY

+
+
+

int

10000

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-reactive-messaging-http/dev/_images/reactive-messaging-websocket.png b/quarkus-reactive-messaging-http/dev/_images/reactive-messaging-websocket.png new file mode 100644 index 0000000000..2106726883 Binary files /dev/null and b/quarkus-reactive-messaging-http/dev/_images/reactive-messaging-websocket.png differ diff --git a/quarkus-reactive-messaging-http/dev/includes/attributes.html b/quarkus-reactive-messaging-http/dev/includes/attributes.html new file mode 100644 index 0000000000..ac98518f17 --- /dev/null +++ b/quarkus-reactive-messaging-http/dev/includes/attributes.html @@ -0,0 +1,918 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-reactive-messaging-http/dev/index.html b/quarkus-reactive-messaging-http/dev/index.html new file mode 100644 index 0000000000..6a5b8c592a --- /dev/null +++ b/quarkus-reactive-messaging-http/dev/index.html @@ -0,0 +1,985 @@ + + + + + + Quarkus - Reactive Messaging HTTP :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus - Reactive Messaging HTTP

+
+
+
+

Quarkus Reactive Messaging HTTP is a Quarkus extension that brings in +support for HTTP and WebSocket for Reactive Messaging.

+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.reactive-messaging-http:quarkus-reactive-messaging-http extension first. +In your pom.xml file, add:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.reactive-messaging-http</groupId>
+    <artifactId>quarkus-reactive-messaging-http</artifactId>
+    <version>2.2.0</version>
+</dependency>
+
+
+
+
+
+

Using the extension

+
+
+

The extension contains two Reactive Messaging connectors, specific pages describe how to use each of them:

+
+ +
+
+
+

Extension Configuration Reference

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

For now, the configuration reference is not automatically generated.

+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-reactive-messaging-http/dev/reactive-messaging-http.html b/quarkus-reactive-messaging-http/dev/reactive-messaging-http.html new file mode 100644 index 0000000000..dd5d18cb53 --- /dev/null +++ b/quarkus-reactive-messaging-http/dev/reactive-messaging-http.html @@ -0,0 +1,1382 @@ + + + + + + Using HTTP with Reactive Messaging :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Using HTTP with Reactive Messaging

+
+
+
+

This guide demonstrates how your Quarkus application can utilize SmallRye Reactive Messaging to +consume and produce HTTP messages.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    less than 15 minutes

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    JDK 11+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    GraalVM, Docker or Podman installed if you want to run in native mode.

    +
  • +
+
+
+
+
+

Architecture

+
+
+

In this guide we will implement a service, namely CostConverter that consumes HTTP messages +with costs in multiple currencies and converts each cost to its value in Euro.

+
+
+

To let a user easily try out the service, we will implement an HTTP resource summing up the costs +(CostCollector), and a simple web page to add new costs and watch the sum.

+
+
+
+
+

Solution

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step. +However, you can go right to the completed example.

+
+
+

Clone the Git repository: git clone https://github.com/quarkusio/quarkus-quickstarts.git, or download an archive.

+
+
+

The solution is located in the reactive-messaging-http-quickstart directory.

+
+
+
+
+

Creating the Maven Project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.8.0:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=reactive-messaging-http-quickstart \
+    -Dextensions="reactive-messaging-http,reasteasy-reactive-jackson" \
+    -DnoCode
+cd reactive-messaging-http-quickstart
+
+
+
+

This command generates a Maven project, importing the Reactive Messaging and HTTP connector extensions.

+
+
+
+
+

The Converter

+
+
+

Create the src/main/java/org/acme/reactivehttp/CostConverter.java file, with the following content:

+
+
+
+
package org.acme.reactivehttp;
+
+import org.eclipse.microprofile.reactive.messaging.Incoming;
+import org.eclipse.microprofile.reactive.messaging.Outgoing;
+import org.jboss.logging.Logger;
+
+import jakarta.enterprise.context.ApplicationScoped;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * A bean consuming costs in multiple currencies and producing prices in EUR from them
+ */
+@ApplicationScoped
+public class CostConverter {
+
+    private static final Logger log = Logger.getLogger(CostConverter.class);
+
+    private static final Map<String, Double> conversionRatios = new HashMap<>();
+
+    static {
+        conversionRatios.put("CHF", 0.93);
+        conversionRatios.put("USD", 0.84);
+        conversionRatios.put("PLN", 0.22);
+        conversionRatios.put("EUR", 1.);
+    }
+
+    @Incoming("incoming-costs") (1)
+    @Outgoing("outgoing-costs") (2)
+    double convert(Cost cost) { (3)
+        Double conversionRatio = conversionRatios.get(cost.getCurrency().toUpperCase());
+        if (conversionRatio == null) {
+            return 0.;
+        }
+        return conversionRatio * cost.getValue();
+    }
+}
+
+
+
+ + + + + + + + + + + + + +
1Consume messages from the incoming-costs stream.
2Dispatch returned values to the outgoing-costs stream.
3Consume an event with payload of type Cost and produce a double. +In the case of consuming an arbitrary object, the reactive-messaging-http extension will attempt +to deserialize the request body as a JSON object.
+
+
+

Let’s define the Cost class:

+
+
+
+
package org.acme.reactivehttp;
+
+public class Cost {
+    private double value;
+    private String currency;
+
+    public double getValue() {
+        return value;
+    }
+
+    public void setValue(double value) {
+        this.value = value;
+    }
+
+    public String getCurrency() {
+        return currency;
+    }
+
+    public void setCurrency(String currency) {
+        this.currency = currency;
+    }
+}
+
+
+
+

In the next step, we will create configurations for both streams in the application.properties file.

+
+
+
+
+

Configuring the HTTP connector

+
+
+

We need to configure the HTTP connector. This is done in the application.properties file. +The keys are structured as follows:

+
+
+

mp.messaging.[outgoing|incoming].<channel-name>.<property}=value

+
+
+

The channel-name segment must match the value set in the @Incoming and @Outgoing annotation:

+
+
+
    +
  • +

    incoming-costs → a source that receives costs

    +
  • +
  • +

    outgoing-costs → a sink that receives converted costs

    +
  • +
+
+
+
+
mp.messaging.outgoing.outgoing-costs.connector=quarkus-http
+
+# here we are using a URL pointing to an endpoint
+# you can use e.g. an environment variable to change it
+mp.messaging.outgoing.outgoing-costs.url=http://localhost:${quarkus.http.port}/cost-collector
+
+# we need to use a different port for tests:
+%test.mp.messaging.outgoing.outgoing-costs.url=http://localhost:${quarkus.http.test-port}/cost-collector
+
+# POST is the default method. Another possibility is PUT
+mp.messaging.outgoing.outgoing-costs.method=POST
+
+
+mp.messaging.incoming.incoming-costs.connector=quarkus-http
+
+# the incoming-costs channel will be fed via an endpoint on the `/costs` path
+mp.messaging.incoming.incoming-costs.path=/costs
+
+# POST is the default method. Another possibility is PUT
+mp.messaging.incoming.incoming-costs.method=POST
+
+
+
+

Broadcast to multiple subscribers

+
+

In case single channel should deliver message to multiple subscribers (methods annotated with @Incoming) +then additional property needs to be set

+
+
+
+
mp.messaging.incoming.incoming-costs.broadcast=true
+
+
+
+

This will allow to deliver single message to all subscribers of that channel.

+
+
+
+
+
+

The CostCollector

+
+
+

To illustrate that converting messages and passing them through works, let’s add an endpoint that will +receive the outgoing costs and sum them up. +This is a usual JAX-RS endpoint.

+
+
+
+
package org.acme.reactivehttp;
+
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+
+@Path("/cost-collector")
+@ApplicationScoped
+public class CostCollector {
+
+    private double sum = 0;
+
+    @POST
+    public void consumeCost(String valueAsString) {
+        sum += Double.parseDouble(valueAsString);
+    }
+
+    @GET
+    public double getSum() {
+        return sum;
+    }
+
+}
+
+
+
+
+
+

The HTML page

+
+
+

To conveniently interact with the application, let’s create a simple web page.

+
+
+

The page will provide a form to add costs, and an info of the current sum of costs. +The page periodically updates the sum by requesting the current sum from /cost-collector.

+
+
+

Create the src/main/resources/META-INF/resources/index.html file, with the following content:

+
+
+
+
<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Costs</title>
+
+    <link rel="stylesheet" type="text/css"
+          href="https://cdnjs.cloudflare.com/ajax/libs/patternfly/3.24.0/css/patternfly.min.css">
+    <link rel="stylesheet" type="text/css"
+          href="https://cdnjs.cloudflare.com/ajax/libs/patternfly/3.24.0/css/patternfly-additions.min.css">
+</head>
+<body>
+<div class="container">
+
+    <h2>Add a cost</h2>
+    <div>
+        <div>
+            <label for="value">Value</label>
+            <input type="text" id="value">
+        </div>
+        <div>
+            <label for="currency">Currency</label>
+            <select id="currency">
+                <option value="CHF">Swiss franc</option>
+                <option value="USD">United States dollar</option>
+                <option value="CHF">Polish złoty</option>
+            </select>
+        </div>
+        <input type="button" onclick="add()" value="Add">
+    </div>
+
+
+    <h2>Last cost</h2>
+    <div class="row">
+        <p class="col-md-12">The total cost is <strong><span id="content">N/A</span>&nbsp;&euro;</strong>.</p>
+    </div>
+</div>
+</body>
+<script>
+    add = function() {
+        var value = document.getElementById('value').value;
+        var currency = document.getElementById('currency').value;
+
+        var cost = {
+            value: document.getElementById('value').value,
+            currency: document.getElementById('currency').value
+        };
+
+        fetch('costs', { method: 'POST', body: JSON.stringify(cost) });
+    }
+
+    updateCost = function() {
+        fetch('cost-collector').then(response => response.text()).then(sum =>
+            document.getElementById('content').textContent=sum
+        );
+    }
+
+    window.setInterval(updateCost, 500);
+</script>
+</html>
+
+
+
+
+
+

Get it running

+
+
+

Run the application using:

+
+
+
+
./mvnw quarkus:dev
+
+
+
+

Open http://localhost:8080/index.html in your browser.

+
+
+
+
+

Running Native

+
+
+

You can build the native executable with:

+
+
+
+
./mvnw package -Pnative
+
+
+
+
+
+

Going further

+
+
+

HTTP connector options

+
+

All quarkus-http connector options:

+
+
+
+
# OUTGOING
+
+# The target URL
+mp.messaging.outgoing.<channelName>.url=http://localhost:8213
+
+# Message payload serializer, optional, implementation of `io.quarkus.reactivemessaging.http.runtime.serializers.Serializer`
+mp.messaging.outgoing.<channelName>.serializer=com.example.MySerializer
+
+# The number of attempts to make for sending a request to a remote endpoint. Must not be less than zero
+# Zero by default
+mp.messaging.outgoing.<channelName>.maxRetries=3
+
+# Configures the random factor when using back-off with maxRetries > 0. 0.5 by default
+mp.messaging.outgoing.<channelName>.jitter=0.3
+
+# Configures a back-off delay between attempts to send a request.
+# A random factor (jitter) is applied to increase the delay when several failures happen.
+mp.messaging.outgoing.<channelName>.delay=1s
+
+#The HTTP method (either `POST` or `PUT`), `POST` by default
+mp.messaging.outgoing.<channelName>.method=PUT
+
+#INCOMING
+# The HTTP method (either `POST` or `PUT`, `POST` by default
+mp.messaging.incoming.<channelName>.method=POST
+
+# The path of the endpoint
+mp.messaging.incoming.<channelName>.path=/my-reactive-ws-endpoint
+
+# HTTP endpoint buffers messages if a consumer is not able to keep up. This setting specifies the size of the buffer.
+# 8 by default.
+mp.messaging.incoming.<channelName>.buffer-size=13
+
+
+
+
+

Cloud Event support

+
+

The HTTP connector supports binary-mode [cloud event] messages through Metadata.

+
+
+

If incoming HTTP request contains headers of the form ce- or ce_, a CloudEventMetadata instance is included in the Message metadata

+
+
+

If outgoing Message metadata includes a CloudEventMetadata instance, the information contained there will be added as headers prefixed with ce- in the outgoing HTTP request.

+
+
+
+

Reactive Messaging

+
+

This extension utilizes SmallRye Reactive Messaging to build data streaming applications.

+
+
+

If you want to go further check the documentation of SmallRye Reactive Messaging, the implementation used in Quarkus.

+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-reactive-messaging-http/dev/reactive-messaging-websocket.html b/quarkus-reactive-messaging-http/dev/reactive-messaging-websocket.html new file mode 100644 index 0000000000..6f82187d96 --- /dev/null +++ b/quarkus-reactive-messaging-http/dev/reactive-messaging-websocket.html @@ -0,0 +1,1384 @@ + + + + + + Using WebSockets with Reactive Messaging :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Using WebSockets with Reactive Messaging

+
+
+
+

This guide demonstrates how your Quarkus application can utilize SmallRye Reactive Messaging to +consume and produce messages via WebSockets. +WebSockets support is a part of the Reactive Messaging HTTP extension (quarkus-reactive-messaging-http).

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    less than 15 minutes

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    JDK 11+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    GraalVM, Docker or Podman installed if you want to run in native mode.

    +
  • +
+
+
+
+
+

Architecture

+
+
+

In this guide we will implement a service, namely CostConverter that consumes messages +with costs in multiple currencies and converts each cost to its value in Euro.

+
+
+

To let a user easily try out the service, we will implement an HTTP resource summing up the costs +(CostCollector), and a simple web page to add new costs and watch the sum.

+
+
+
+Architecture +
+
+
+
+
+

Solution

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step. +However, you can go right to the completed example.

+
+
+

Clone the Git repository: git clone https://github.com/quarkusio/quarkus-quickstarts.git, or download an archive.

+
+
+

The solution is located in the reactive-messaging-websockets-quickstart directory.

+
+
+
+
+

Creating the Maven Project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus:quarkus-maven-plugin:3.8.0:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=reactive-messaging-websockets-quickstart \
+    -Dextensions="reactive-messaging-http,resteasy-reactive-jackson" \
+    -DnoCode
+cd reactive-messaging-websockets-quickstart
+
+
+
+

This command generates a Maven project with Reactive Messaging HTTP connector and RESTEasy Reactive with Jackson support extensions.

+
+
+
+
+

The Converter

+
+
+

Create the src/main/java/org/acme/reactivews/CostConverter.java file, with the following content:

+
+
+
+
package org.acme.reactivews;
+
+import org.eclipse.microprofile.reactive.messaging.Incoming;
+import org.eclipse.microprofile.reactive.messaging.Outgoing;
+
+import jakarta.enterprise.context.ApplicationScoped;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * A bean consuming costs in multiple currencies and producing prices in EUR from them
+ */
+@ApplicationScoped
+public class CostConverter {
+
+    private static final Map<String, Double> conversionRatios = new HashMap<>();
+
+    static {
+        conversionRatios.put("CHF", 0.93);
+        conversionRatios.put("USD", 0.84);
+        conversionRatios.put("PLN", 0.22);
+        conversionRatios.put("EUR", 1.0);
+    }
+
+    @Incoming("incoming-costs") (1)
+    @Outgoing("outgoing-costs") (2)
+    Cost convert(Cost cost) { (3)
+        Double conversionRatio = conversionRatios.get(cost.getCurrency().toUpperCase());
+        if (conversionRatio == null) {
+            return cost;
+        }
+        return new Cost(conversionRatio * cost.getValue(), "EUR");
+    }
+}
+
+
+
+ + + + + + + + + + + + + +
1Consume messages from the incoming-costs stream.
2Dispatch returned values to the outgoing-costs stream.
3Consume an event with payload of type Cost and produce another Cost, with value converted +to Euro if we know the conversion ratio. +In the case of consuming an arbitrary object, the reactive-messaging-http extension will attempt +to deserialize the request body as a JSON object.
+
+
+ + + + + +
+ + +Unlike the outbound HTTP connector, the outbound WebSocket connector does not check if the message is +consumed by the remote endpoint. It may happen that a failure to receive a message is not reported, +e.g. if the remote side closes the WebSocket connection in a crucial moment. +
+
+
+

Let’s define the Cost class:

+
+
+
+
package org.acme.reactivews;
+
+public class Cost {
+    private double value;
+    private String currency;
+
+    public Cost(double value, String currency) {
+        this.value = value;
+        this.currency = currency;
+    }
+
+    public Cost() {
+    }
+
+    public void setValue(double value) {
+        this.value = value;
+    }
+
+    public void setCurrency(String currency) {
+        this.currency = currency;
+    }
+
+    public double getValue() {
+        return value;
+    }
+
+    public String getCurrency() {
+        return currency;
+    }
+}
+
+
+
+

In the next step, we will create configurations for both streams in the application.properties file.

+
+
+
+
+

Configuring the Web Socket connector

+
+
+

We need to configure the Web Socket connector. This is done in the application.properties file. +The keys are structured as follows:

+
+
+

mp.messaging.[outgoing|incoming].{channel-name}.{property}=value

+
+
+

The channel-name segment must match the value set in the @Incoming and @Outgoing annotation:

+
+
+
    +
  • +

    incoming-costs → an inbound WebSocket that receives costs

    +
  • +
  • +

    outgoing-costs → an outbound WebSocket that pushes converted costs

    +
  • +
+
+
+
+
mp.messaging.outgoing.outgoing-costs.connector=quarkus-websocket
+
+# the WebSockets are exposed on the same port as HTTP
+# for non-test profiles, it is quarkus.http.port...
+mp.messaging.outgoing.outgoing-costs.url=ws://localhost:${quarkus.http.port}/cost-collector
+
+# for the test profile it is quarkus.http.test-port
+%test.mp.messaging.outgoing.outgoing-costs.url=ws://localhost:${quarkus.http.test-port}/cost-collector
+
+
+mp.messaging.incoming.incoming-costs.connector=quarkus-websocket
+# the incoming-costs channel will be fed via a Web Socket endpoint on the `/costs` path
+mp.messaging.incoming.incoming-costs.path=/costs
+
+mp.messaging.incoming.collector.path=/cost-collector
+mp.messaging.incoming.collector.connector=quarkus-websocket
+
+
+
+
+
+

The CostCollector

+
+
+

To illustrate that converting messages and passing them through works, let’s add a CostCollector class that consumes the Web Socket messages and exposes information about the sum of collected costs via REST:

+
+
+
+
package org.acme.reactivews;
+
+import org.eclipse.microprofile.reactive.messaging.Incoming;
+
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+
+@Path("/collected-costs")
+@ApplicationScoped
+public class CostCollector {
+    private double sum;
+
+    @GET
+    // expose the sum of the collected costs
+    public synchronized double getCosts() {
+        return sum;
+    }
+
+    @Incoming("collector")
+    // consume costs from collector channel
+    synchronized void collect(Cost cost) {
+        if ("EUR".equals(cost.getCurrency())) {
+            sum += cost.getValue();
+        }
+    }
+}
+
+
+
+

One more thing we have to do is to configure the collector channel in application.properties:

+
+
+
+
mp.messaging.incoming.collector.path=/cost-collector
+mp.messaging.incoming.collector.connector=quarkus-websocket
+
+
+
+
+
+

The HTML page

+
+
+

To conveniently interact with the application, let’s create a simple web page.

+
+
+

The page will provide a form to add costs, and an info of the current sum of costs. +The page periodically updates the sum by requesting the current sum from /cost-collector.

+
+
+

Change the src/main/resources/META-INF/resources/index.html file, with the following content:

+
+
+
+
<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Costs</title>
+
+    <link rel="stylesheet" type="text/css"
+          href="https://cdnjs.cloudflare.com/ajax/libs/patternfly/3.24.0/css/patternfly.min.css">
+    <link rel="stylesheet" type="text/css"
+          href="https://cdnjs.cloudflare.com/ajax/libs/patternfly/3.24.0/css/patternfly-additions.min.css">
+</head>
+<body>
+<div class="container">
+
+    <h2>Add a cost</h2>
+    <div>
+        <div>
+            <label for="value">Value</label>
+            <input type="text" id="value">
+        </div>
+        <div>
+            <label for="currency">Currency</label>
+            <select id="currency">
+                <option value="CHF">Swiss franc</option>
+                <option value="USD">United States dollar</option>
+                <option value="PLN">Polish złoty</option>
+                <option value="EUR">Euro</option>
+            </select>
+        </div>
+        <input type="button" onclick="add()" value="Add">
+    </div>
+
+
+    <h2>Summary</h2>
+    <div class="row">
+        <p class="col-md-12">The total cost is <strong><span id="content">N/A</span>&nbsp;&euro;</strong>.</p>
+    </div>
+</div>
+</body>
+<script>
+    var webSocket = new WebSocket(`ws://${document.location.host}/costs`);
+    add = function() {
+        const cost = {
+            value: document.getElementById('value').value,
+            currency: document.getElementById('currency').value
+        };
+
+        webSocket.send(JSON.stringify(cost));
+    }
+
+    updateCost = function() {
+        fetch('collected-costs').then(response => response.text()).then(sum =>
+            document.getElementById('content').textContent=sum
+        );
+    }
+
+    window.setInterval(updateCost, 500);
+</script>
+</html>
+
+
+
+
+
+

Get it running

+
+
+

Run the application using:

+
+
+
+
./mvnw quarkus:dev
+
+
+
+

Open http://localhost:8080/index.html in your browser.

+
+
+
+
+

Running Native

+
+
+

You can build the native executable with:

+
+
+
+
./mvnw package -Pnative
+
+
+
+
+
+

Going further

+
+
+

WebSockets

+
+

All quarkus-websocket connector options:

+
+
+
+
# OUTGOING
+
+# The target URL
+mp.messaging.outgoing.<channelName>.url=ws://localhost:8234/
+
+# Message serializer, optional, implementation of `io.quarkus.reactivemessaging.http.runtime.serializers.Serializer`
+mp.messaging.outgoing.<channelName>.serializer=com.example.MySerializer
+
+# The number of retries to make for sending a message to a remote websocket endpoint.
+# A value greater than 0 is advised. Otherwise, a web socket timeout can result in a dropped message
+# The default value is 1
+mp.messaging.outgoing.<channelName>.maxRetries=1
+
+# Configures the random factor when using back-off with maxAttempts > 1, 0.5 by default
+mp.messaging.outgoing.<channelName>.jitter=0.7
+
+# Configures a back-off delay between attempts to send a request.
+# A random factor (jitter) is applied to increase the delay when several failures happen.
+mp.messaging.outgoing.<channelName>.delay=2s
+
+
+# INCOMING
+
+# The path of the endpoint
+mp.messaging.incoming.<channelName>.path=/my-ws-endpoint
+
+# Web socket endpoint buffers messages if a consumer is not able to keep up.
+# This setting specifies the size of the buffer. 8 by default
+mp.messaging.incoming.<channelName>.buffer-size=3
+
+
+
+
+

Reactive Messaging

+
+

This extension utilizes SmallRye Reactive Messaging to build data streaming applications.

+
+
+

If you want to go further check the documentation of SmallRye Reactive Messaging, the implementation used in Quarkus.

+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-reactive-messsaging-nats-jetstream/dev/includes/attributes.html b/quarkus-reactive-messsaging-nats-jetstream/dev/includes/attributes.html new file mode 100644 index 0000000000..8f756b761e --- /dev/null +++ b/quarkus-reactive-messsaging-nats-jetstream/dev/includes/attributes.html @@ -0,0 +1,912 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-reactive-messsaging-nats-jetstream/dev/includes/config.html b/quarkus-reactive-messsaging-nats-jetstream/dev/includes/config.html new file mode 100644 index 0000000000..04596605ee --- /dev/null +++ b/quarkus-reactive-messsaging-nats-jetstream/dev/includes/config.html @@ -0,0 +1,912 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-reactive-messsaging-nats-jetstream/dev/index.html b/quarkus-reactive-messsaging-nats-jetstream/dev/index.html new file mode 100644 index 0000000000..86bca2cefa --- /dev/null +++ b/quarkus-reactive-messsaging-nats-jetstream/dev/index.html @@ -0,0 +1,1212 @@ + + + + + + Quarkus Reactive Messsaging Nats Jetstream :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Reactive Messsaging Nats Jetstream

+
+
+
+

This extension allow usage of NATS JetStream inside a Quarkus App, in JVM and Native mode.

+
+
+

The extension implements a new connector type quarkus-jetstream in SmallRye Reactive Messaging that will use the NATS client.

+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.reactivemessaging.nats-jetstream:quarkus-reactive-messsaging-nats-jetstream extension first to your build file.

+
+
+

For instance, with Maven, add the following dependency to your POM file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.reactivemessaging.nats-jetstream</groupId>
+    <artifactId>quarkus-reactive-messsaging-nats-jetstream</artifactId>
+    <version>1.4.0</version>
+</dependency>
+
+
+
+

Then configure your application by adding the NATS JetStream connector type:

+
+
+
+
# Inbound
+mp.messaging.incoming.[channel-name].connector=quarkus-jetstream
+
+# Outbound
+mp.messaging.outgoing.[channel-name].connector=quarkus-jetstream
+
+
+
+
+
+

Receiving messages from NATS JetStream

+
+
+

Let’s imagine you have a NATS JetStream broker running, and accessible using the localhost:4242 address. Configure your application to receive NATS messages on the data channel from the stream named: test and the subject named: data as follows:

+
+
+
+
quarkus.reactive-messaging.nats.servers=nats://localhost:4242
+quarkus.reactive-messaging.nats.username=guest
+quarkus.reactive-messaging.nats.password=guest
+quarkus.reactive-messaging.nats.ssl-enabled=false
+
+# Streams and subjects are auto-created by default based on channel configuration
+quarkus.reactive-messaging.nats.jet-stream.auto-configure=true
+
+mp.messaging.incoming.data.connector=quarkus-jetstream
+mp.messaging.incoming.data.stream=test
+mp.messaging.incoming.data.subject=data
+
+
+
+

Then, your application receives Message<Data>. You can consumes the payload directly:

+
+
+
+
package inbound;
+
+import org.eclipse.microprofile.reactive.messaging.Incoming;
+
+import jakarta.enterprise.context.ApplicationScoped;
+
+@ApplicationScoped
+public class DataConsumer {
+
+    @Incoming("data")
+    public void consume(Data data) {
+        // process your data.
+    }
+
+}
+
+
+
+

If you want more examples, please take a look at the tests of the extension.

+
+
+
+
+

Configuration

+
+ + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1. NATS configuration

quarkus.reactive-messaging.nats.servers

A comma-separated list of URI’s nats://{host}:{port} to use for establishing the initial connection to the NATS cluster.

quarkus.reactive-messaging.nats.username

The username to connect to the NATS server

quarkus.reactive-messaging.nats.password

The password to connect to the NATS server

quarkus.reactive-messaging.nats.ssl-enabled

Whether to enable SSL/TLS secure connections to the NATS server

quarkus.reactive-messaging.nats.max-reconnects

The maximum number of reconnect attempts

quarkus.reactive-messaging.nats.connection-timeout

The connection timeout in milliseconds

quarkus.reactive-messaging.nats.error-listener

The classname for the error listener

quarkus.reactive-messaging.nats.buffer-size

The size in bytes to make buffers for connections

+ + ++++ + + + + + + + + + + + + + + + + + + +
Table 2. NATS JetStream configuration

quarkus.reactive-messaging.nats.jet-stream.auto-configure

Autoconfigure stream and subjects based on channel configuration

quarkus.reactive-messaging.nats.jet-stream.replicas

The number of replicas a message must be stored. Default value is 1

quarkus.reactive-messaging.nats.jet-stream.storage-type

The storage type for stream data (File or Memory)

quarkus.reactive-messaging.nats.jet-stream.retention-policy

Declares the retention policy for the stream (Limits or Interest)

+
+

Channel configuration

+ + ++++ + + + + + + + + + + + + + + + + + + +
Table 3. Subscriber processor attributes

mp.messaging.outgoing.[channel-name].stream

The stream to subscribe messages to

mp.messaging.outgoing.[channel-name].subject

The subject to subscribe messages to

mp.messaging.outgoing.[channel-name].trace-enabled

Enable traces for subscriber

mp.messaging.outgoing.[channel-name].auto-configure

Auto configure subject on NATS

+ + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 4. Publisher processor attributes

mp.messaging.incoming.[channel-name].stream

The stream to publish messages from

mp.messaging.incoming.[channel-name].subject

The subject to publish messages from

mp.messaging.incoming.[channel-name].trace-enabled

Enable traces for publisher

mp.messaging.incoming.[channel-name].auto-configure

Auto configure subject on NATS

mp.messaging.incoming.[channel-name].ordered

Flag indicating whether this subscription should be ordered

mp.messaging.incoming.[channel-name].deliver-group

The optional deliver group to join

mp.messaging.incoming.[channel-name].durable

Sets the durable name for the consumer

mp.messaging.incoming.[channel-name].max-deliver

The maximum number of times a specific message delivery will be attempted

mp.messaging.incoming.[channel-name].back-off

The timing of re-deliveries as a comma-separated list of durations

mp.messaging.incoming.[channel-name].payload-type

The class name of the payload type

mp.messaging.incoming.[channel-name].pull

The subscription type

mp.messaging.incoming.[channel-name].pull.batch-size

The size of batch of messages to be pulled in pull mode

mp.messaging.incoming.[channel-name].pull.repull-at

The point in the current batch to tell the server to start the next batch

mp.messaging.incoming.[channel-name].pull.poll-timeout

The poll timeout in milliseconds

use 0 to wait indefinitely

mp.messaging.incoming.[channel-name].retry-backoff

The retry backoff in milliseconds for retry publishing messages

mp.messaging.incoming.[channel-name].exponential-backoff

calculation a exponential backoff using deliveredCount metadata (NB back-off must undefined to work properly)

mp.messaging.incoming.[channel-name].exponential-backoff-max-duration

+
+
+
+
+

NATS JetStream

+
+
+

This extension utilizes the NATS JetStream client to connect to a NATS JetStream broker.

+
+
+
Further documentation can be found at:
+ +
+
+
+
+

Reactive Messaging

+
+
+

This extension utilizes SmallRye Reactive Messaging to build data streaming applications.

+
+
+

If you want to go further check the documentation of SmallRye Reactive Messaging, the implementation used in Quarkus.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-renarde/1.x/_images/oidc-apple-1.png b/quarkus-renarde/1.x/_images/oidc-apple-1.png new file mode 100644 index 0000000000..984e71462b Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-apple-1.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-apple-10.png b/quarkus-renarde/1.x/_images/oidc-apple-10.png new file mode 100644 index 0000000000..96c8977999 Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-apple-10.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-apple-11.png b/quarkus-renarde/1.x/_images/oidc-apple-11.png new file mode 100644 index 0000000000..2182c11e55 Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-apple-11.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-apple-12.png b/quarkus-renarde/1.x/_images/oidc-apple-12.png new file mode 100644 index 0000000000..d7cfb8717f Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-apple-12.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-apple-13.png b/quarkus-renarde/1.x/_images/oidc-apple-13.png new file mode 100644 index 0000000000..084ba635f9 Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-apple-13.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-apple-14.png b/quarkus-renarde/1.x/_images/oidc-apple-14.png new file mode 100644 index 0000000000..526ae9cf23 Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-apple-14.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-apple-15.png b/quarkus-renarde/1.x/_images/oidc-apple-15.png new file mode 100644 index 0000000000..3188d816ee Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-apple-15.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-apple-16.png b/quarkus-renarde/1.x/_images/oidc-apple-16.png new file mode 100644 index 0000000000..470c4d7f0d Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-apple-16.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-apple-17.png b/quarkus-renarde/1.x/_images/oidc-apple-17.png new file mode 100644 index 0000000000..e08e7a11dd Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-apple-17.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-apple-18.png b/quarkus-renarde/1.x/_images/oidc-apple-18.png new file mode 100644 index 0000000000..e56e0633d4 Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-apple-18.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-apple-19.png b/quarkus-renarde/1.x/_images/oidc-apple-19.png new file mode 100644 index 0000000000..35f6841768 Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-apple-19.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-apple-2.png b/quarkus-renarde/1.x/_images/oidc-apple-2.png new file mode 100644 index 0000000000..045ec05eeb Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-apple-2.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-apple-20.png b/quarkus-renarde/1.x/_images/oidc-apple-20.png new file mode 100644 index 0000000000..995b058ea3 Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-apple-20.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-apple-21.png b/quarkus-renarde/1.x/_images/oidc-apple-21.png new file mode 100644 index 0000000000..75236c8d8a Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-apple-21.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-apple-22.png b/quarkus-renarde/1.x/_images/oidc-apple-22.png new file mode 100644 index 0000000000..33380e8d4f Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-apple-22.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-apple-3.png b/quarkus-renarde/1.x/_images/oidc-apple-3.png new file mode 100644 index 0000000000..868440a5a6 Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-apple-3.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-apple-4.png b/quarkus-renarde/1.x/_images/oidc-apple-4.png new file mode 100644 index 0000000000..95c8e1125a Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-apple-4.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-apple-5.png b/quarkus-renarde/1.x/_images/oidc-apple-5.png new file mode 100644 index 0000000000..5fd241e2d4 Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-apple-5.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-apple-6.png b/quarkus-renarde/1.x/_images/oidc-apple-6.png new file mode 100644 index 0000000000..86ffd3348c Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-apple-6.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-apple-7.png b/quarkus-renarde/1.x/_images/oidc-apple-7.png new file mode 100644 index 0000000000..3129b8bada Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-apple-7.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-apple-8.png b/quarkus-renarde/1.x/_images/oidc-apple-8.png new file mode 100644 index 0000000000..053ea35b3a Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-apple-8.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-apple-9.png b/quarkus-renarde/1.x/_images/oidc-apple-9.png new file mode 100644 index 0000000000..972daafd66 Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-apple-9.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-facebook-1.png b/quarkus-renarde/1.x/_images/oidc-facebook-1.png new file mode 100644 index 0000000000..4a5b67ab09 Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-facebook-1.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-facebook-2.png b/quarkus-renarde/1.x/_images/oidc-facebook-2.png new file mode 100644 index 0000000000..e3836f96d5 Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-facebook-2.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-facebook-3.png b/quarkus-renarde/1.x/_images/oidc-facebook-3.png new file mode 100644 index 0000000000..ee57845e06 Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-facebook-3.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-facebook-4.png b/quarkus-renarde/1.x/_images/oidc-facebook-4.png new file mode 100644 index 0000000000..08199d4e7d Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-facebook-4.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-facebook-5.png b/quarkus-renarde/1.x/_images/oidc-facebook-5.png new file mode 100644 index 0000000000..82bf435d7a Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-facebook-5.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-facebook-6.png b/quarkus-renarde/1.x/_images/oidc-facebook-6.png new file mode 100644 index 0000000000..92ef83325e Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-facebook-6.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-github-1.png b/quarkus-renarde/1.x/_images/oidc-github-1.png new file mode 100644 index 0000000000..41edce4ce6 Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-github-1.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-github-2.png b/quarkus-renarde/1.x/_images/oidc-github-2.png new file mode 100644 index 0000000000..62a304bc58 Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-github-2.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-github-3.png b/quarkus-renarde/1.x/_images/oidc-github-3.png new file mode 100644 index 0000000000..407d184454 Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-github-3.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-google-1.png b/quarkus-renarde/1.x/_images/oidc-google-1.png new file mode 100644 index 0000000000..dabe55dfa7 Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-google-1.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-google-2.png b/quarkus-renarde/1.x/_images/oidc-google-2.png new file mode 100644 index 0000000000..9d57c81919 Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-google-2.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-google-3.png b/quarkus-renarde/1.x/_images/oidc-google-3.png new file mode 100644 index 0000000000..a2c17240bd Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-google-3.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-google-4.png b/quarkus-renarde/1.x/_images/oidc-google-4.png new file mode 100644 index 0000000000..49906b8ecc Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-google-4.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-google-5.png b/quarkus-renarde/1.x/_images/oidc-google-5.png new file mode 100644 index 0000000000..fdf9e0df6c Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-google-5.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-google-6.png b/quarkus-renarde/1.x/_images/oidc-google-6.png new file mode 100644 index 0000000000..0810343ec2 Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-google-6.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-google-7.png b/quarkus-renarde/1.x/_images/oidc-google-7.png new file mode 100644 index 0000000000..32a7a6c157 Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-google-7.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-google-8.png b/quarkus-renarde/1.x/_images/oidc-google-8.png new file mode 100644 index 0000000000..87be4462cd Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-google-8.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-google-9.png b/quarkus-renarde/1.x/_images/oidc-google-9.png new file mode 100644 index 0000000000..0da8d5f488 Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-google-9.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-microsoft-1.png b/quarkus-renarde/1.x/_images/oidc-microsoft-1.png new file mode 100644 index 0000000000..9a6216eb45 Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-microsoft-1.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-microsoft-2.png b/quarkus-renarde/1.x/_images/oidc-microsoft-2.png new file mode 100644 index 0000000000..2db15f1865 Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-microsoft-2.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-microsoft-3.png b/quarkus-renarde/1.x/_images/oidc-microsoft-3.png new file mode 100644 index 0000000000..7c32b5931f Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-microsoft-3.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-microsoft-4.png b/quarkus-renarde/1.x/_images/oidc-microsoft-4.png new file mode 100644 index 0000000000..fdb1140af7 Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-microsoft-4.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-microsoft-5.png b/quarkus-renarde/1.x/_images/oidc-microsoft-5.png new file mode 100644 index 0000000000..e6adf4a5a0 Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-microsoft-5.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-microsoft-6.png b/quarkus-renarde/1.x/_images/oidc-microsoft-6.png new file mode 100644 index 0000000000..fb2ee6282d Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-microsoft-6.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-microsoft-7.png b/quarkus-renarde/1.x/_images/oidc-microsoft-7.png new file mode 100644 index 0000000000..9349461a98 Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-microsoft-7.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-twitter-1.png b/quarkus-renarde/1.x/_images/oidc-twitter-1.png new file mode 100644 index 0000000000..ae2eb97522 Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-twitter-1.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-twitter-2.png b/quarkus-renarde/1.x/_images/oidc-twitter-2.png new file mode 100644 index 0000000000..0121c76bc5 Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-twitter-2.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-twitter-3.png b/quarkus-renarde/1.x/_images/oidc-twitter-3.png new file mode 100644 index 0000000000..d149d25789 Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-twitter-3.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-twitter-4.png b/quarkus-renarde/1.x/_images/oidc-twitter-4.png new file mode 100644 index 0000000000..9eed1257f0 Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-twitter-4.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-twitter-5.png b/quarkus-renarde/1.x/_images/oidc-twitter-5.png new file mode 100644 index 0000000000..dc66e972e9 Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-twitter-5.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-twitter-6.png b/quarkus-renarde/1.x/_images/oidc-twitter-6.png new file mode 100644 index 0000000000..6469ef8466 Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-twitter-6.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-twitter-7.png b/quarkus-renarde/1.x/_images/oidc-twitter-7.png new file mode 100644 index 0000000000..2cd3aeb6df Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-twitter-7.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-twitter-8.png b/quarkus-renarde/1.x/_images/oidc-twitter-8.png new file mode 100644 index 0000000000..ffcfb1a0db Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-twitter-8.png differ diff --git a/quarkus-renarde/1.x/_images/oidc-twitter-9.png b/quarkus-renarde/1.x/_images/oidc-twitter-9.png new file mode 100644 index 0000000000..e1b70c1838 Binary files /dev/null and b/quarkus-renarde/1.x/_images/oidc-twitter-9.png differ diff --git a/quarkus-renarde/1.x/_images/renarde-head.svg b/quarkus-renarde/1.x/_images/renarde-head.svg new file mode 100644 index 0000000000..6b8945c6d0 --- /dev/null +++ b/quarkus-renarde/1.x/_images/renarde-head.svg @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/quarkus-renarde/1.x/_images/renarde.svg b/quarkus-renarde/1.x/_images/renarde.svg new file mode 100644 index 0000000000..8b8f27259f --- /dev/null +++ b/quarkus-renarde/1.x/_images/renarde.svg @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/quarkus-renarde/1.x/includes/attributes.html b/quarkus-renarde/1.x/includes/attributes.html new file mode 100644 index 0000000000..e9de38488e --- /dev/null +++ b/quarkus-renarde/1.x/includes/attributes.html @@ -0,0 +1,919 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-renarde/1.x/index.html b/quarkus-renarde/1.x/index.html new file mode 100644 index 0000000000..bdaaac96f0 --- /dev/null +++ b/quarkus-renarde/1.x/index.html @@ -0,0 +1,2224 @@ + + + + + + Renarde Web Framework :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Renarde renarde head Web Framework

+
+
+
+
+
+
+Renarde +
+
+
+

Renarde renarde head is a server-side Web Framework based on Quarkus, Qute, +Hibernate and RESTEasy Reactive.

+
+
+
+
<dependency>
+  <groupId>io.quarkiverse.renarde</groupId>
+  <artifactId>quarkus-renarde</artifactId>
+  <version>1.0.5</version>
+</dependency>
+
+
+
+
+
+
+
+

First: an example

+
+
+

Let’s see how you can quickly build a Web Application with Renarde. Let’s start with a Controller:

+
+
+
+
package rest;
+
+import javax.ws.rs.Path;
+
+import io.quarkus.qute.CheckedTemplate;
+import io.quarkus.qute.TemplateInstance;
+import io.quarkiverse.renarde.Controller;
+
+public class Application extends Controller {
+
+    @CheckedTemplate
+    static class Templates {
+        public static native TemplateInstance index();
+    }
+
+    @Path("/")
+    public TemplateInstance index() {
+        return Templates.index();
+    }
+}
+
+
+
+

A Controller is the logic class that binds URIs to actions and views. They are almost like regular +JAX-RS endpoints, +but you opt-in to special magic by extending the Controller class, which gives you nice methods, +but also super friendly behaviour.

+
+
+

In this Controller we declare a Qute template, and map the / to it.

+
+
+

We can then define the main page in src/main/resources/templates/Application/index.html:

+
+
+
+
<!DOCTYPE html>
+<html lang="en">
+  <body>
+    Hello, World!
+  </body>
+</html>
+
+
+
+

Now if you navigate to your application at http://localhost:8080 you will see Hello, World! rendered.

+
+
+
+
+

Models

+
+
+

By convention, you can place your model classes in the model package, but anywhere else works just as well. We +recommend using Hibernate ORM with Panache. Here’s an example entity for our sample Todo application:

+
+
+
+
package model;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.Entity;
+import javax.persistence.ManyToOne;
+
+import io.quarkus.hibernate.orm.panache.PanacheEntity;
+
+@Entity
+public class Todo extends PanacheEntity {
+
+    @ManyToOne
+    public User owner;
+
+    public String task;
+
+    public boolean done;
+
+    public Date doneDate;
+
+    public static List<Todo> findByOwner(User user) {
+        return find("owner = ?1 ORDER BY id", user).list();
+    }
+}
+
+
+
+
+
+

Controllers

+
+
+

By convention, you can place your controllers in the rest package, but anywhere else works just as well. You +have to extend the Controller class in order to benefit from extra easy endpoint declarations and reverse-routing, +but that superclass also gives you useful methods. We usually have one controller per model class, so we tend to use +the plural entity name for the corresponding controller:

+
+
+
+
package rest;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.validation.constraints.NotBlank;
+import javax.ws.rs.POST;
+
+import org.jboss.resteasy.reactive.RestForm;
+import org.jboss.resteasy.reactive.RestPath;
+
+import io.quarkus.qute.CheckedTemplate;
+import io.quarkus.qute.TemplateInstance;
+import model.Todo;
+
+public class Todos extends Controller {
+
+    @CheckedTemplate
+    static class Templates {
+        public static native TemplateInstance index(List<Todo> todos);
+    }
+
+    public TemplateInstance index() {
+        // list every todo
+        List<Todo> todos = Todo.listAll();
+        // render the index template
+        return Templates.index(todos);
+    }
+
+    @POST
+    public void delete(@RestPath Long id) {
+        // find the Todo
+        Todo todo = Todo.findById(id);
+        notFoundIfNull(todo);
+        // delete it
+        todo.delete();
+        // send loving message
+        flash("message", "Task deleted");
+        // redirect to index page
+        index();
+    }
+
+    @POST
+    public void done(@RestPath Long id) {
+        // find the Todo
+        Todo todo = Todo.findById(id);
+        notFoundIfNull(todo);
+        // switch its done state
+        todo.done = !todo.done;
+        if(todo.done)
+            todo.doneDate = new Date();
+        // send loving message
+        flash("message", "Task updated");
+        // redirect to index page
+        index();
+    }
+
+    @POST
+    public void add(@NotBlank @RestForm String task) {
+        // check if there are validation issues
+        if(validationFailed()) {
+            // go back to the index page
+            index();
+        }
+        // create a new Todo
+        Todo todo = new Todo();
+        todo.task = task;
+        todo.persist();
+        // send loving message
+        flash("message", "Task added");
+        // redirect to index page
+        index();
+    }
+}
+
+
+
+

Methods

+
+

Every public method is a valid endpoint. If it has no HTTP method annotation (@GET, @HEAD, @POST, @PUT, @DELETE) then +it is assumed to be a @GET method.

+
+
+

Most @GET methods will typically return a TemplateInstance for rendering an HTML server-side template, and should not +modify application state.

+
+
+

Controller methods annotated with @POST, @PUT and @DELETE will typically return void and trigger a redirect to a @GET +method after they do their action. This is not mandatory, you can also return a TemplateInstance if you want, but it is good form +to use a redirect to avoid involuntary actions when browsers reload the page. Those methods also get an implicit @Transactional +annotation so you don’t need to add it.

+
+
+

If your controller is not annotated with @Path it will default to a path using the class name. If your controller method is not +annotated with @Path it will default to a path using the method name. The exception is if you have a @Path annotation on the +method with an absolute path, in which case the class path part will be ignored. Here’s a list of example annotations and how they +result:

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Class declarationMethod declarationURI

class Foo

public TemplateInstance bar()

Foo/bar

@Path("f") class Foo

public TemplateInstance bar()

f/bar

class Foo

@Path("b") public TemplateInstance bar()

Foo/b

@Path("f") class Foo

@Path("b") public TemplateInstance bar()

f/b

class Foo

@Path("/bar") public TemplateInstance bar()

bar

@Path("f") class Foo

@Path("/bar") public TemplateInstance bar()

f/bar

+
+

Furthermore, if you specify path parameters that are not present in your path annotations, they will be automatically +appended to your path:

+
+
+
+
public class Orders extends Controller {
+
+    // The URI will be Orders/get/{owner}/{id}
+    public TemplateInstance get(@RestPath String owner, @RestPath Long id) {
+    }
+
+    // The URI will be /orders/{owner}/{id}
+    @Path("/orders")
+    public TemplateInstance otherGet(@RestPath String owner, @RestPath Long id) {
+    }
+}
+
+
+
+
+
+
+

Views

+
+
+

You can place your Qute views in the src/main/resources/templates folder, +using the {className}/{methodName}.html naming convention.

+
+
+

Every controller that has views should declare them with a nested static class annotated with @CheckedTemplate:

+
+
+
+
public class Todos extends Controller {
+
+    @CheckedTemplate
+    static class Templates {
+        public static native TemplateInstance index(List<Todo> todos);
+    }
+
+    public TemplateInstance index() {
+        // list every todo
+        List<Todo> todos = Todo.listAll();
+        // render the index template
+        return Templates.index(todos);
+    }
+}
+
+
+
+

Here we’re declaring the Todos/index.html template, specifying that it takes a todos parameter of type +List<Todo> which allows us to validate the template at build-time.

+
+
+

Templates are written in Qute, and you can also declare imported templates in order to validate them using a +toplevel class, such as the main.html template:

+
+
+
+
package rest;
+
+import io.quarkus.qute.CheckedTemplate;
+import io.quarkus.qute.TemplateInstance;
+
+@CheckedTemplate
+public class Templates {
+    public static native TemplateInstance main();
+}
+
+
+
+

Template composition

+
+

Typical web applications will have a main template for their layout and use composition in every method. For example, we +can declare the following main template in main.html:

+
+
+
+
<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <title>{#insert title /}</title>
+        <meta charset="UTF-8">
+        <link rel="stylesheet" media="screen" href="/stylesheets/main.css">
+        {#insert moreStyles /}
+        <script src="/javascripts/main.js" type="text/javascript" charset="UTF-8"></script>
+        {#insert moreScripts /}
+    </head>
+    <body>
+        {#insert /}
+    </body>
+</html>
+
+
+
+

And then use it in our Todos/index.html template to list the todo items:

+
+
+
+
{#include main.html }
+{#title}Todos{/title}
+
+<table class="table">
+  <thead>
+    <tr>
+      <th>#</th>
+      <th>Task</th>
+    </tr>
+  </thead>
+  <tbody>
+    {#for todo in todos}
+    <tr>
+      <th>{todo.id}</th>
+      <td>{todo.task}</td>
+    </tr>
+    {/for}
+  </tbody>
+</table>
+
+{/include}
+
+
+
+
+

Standard tags

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TagDescription

for/each

Iterate over collections

if/else

Conditional statement

switch/case

Switch statement

with

Adds value members to the local scope

let

Declare local variables

include/insert

Template composition

+
+
+

User tags

+
+

If you want to declare additional tags in order to be able to repeat them in your templates, simply place them in the +templates/tags folder. For example, here is our user.html tag:

+
+
+
+
<span class="user-link" title="{it.userName}">
+{#if img??}
+{#gravatar it.email size=size.or(20) default='mm' /}
+{/if}
+{it.userName}</span>
+
+
+
+

Which allows us to use it in every template:

+
+
+
+
{#if inject:user}
+    {#if inject:user.isAdmin}<span class="bi-star-fill" title="You are an administrator"></span>{/if}
+    {#user inject:user img=true size=20/}
+{/if}
+
+
+
+

You can pass parameters to your template with name=value pairs, and the first unnamed parameter value becomes available +as the it parameter.

+
+
+

See the Qute documentation for more information.

+
+
+
+

Renarde tags

+
+

Renarde comes with a few extra tags to make your life easier:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TagDescription

{#authenticityToken/}

Generate a hidden HTML form element containing a CRSF token to be matched in the next request.

{#error 'field'/}

Inserts the error message for the given field name

{#form uri method='POST' class='css' id='id'}…​{/form}

Generates an HTML form for the given URI, method (defaults to POST) and optional CSS classes and IDs. Includes a CRSF token.

{#gravatar email size='mm'/}

Inserts a gravatar image for the given email, with optional size (defaults to mm)

{#ifError 'field'}…​{/ifError}

Conditional statement executed if there is an error for the given field

+
+
+

Extension methods

+
+

If you need additional methods to be registered to be used on your template expressions, you can declare static methods in +a class annotated with @TemplateExtension:

+
+
+
+
package util;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+
+import io.quarkus.qute.TemplateExtension;
+
+@TemplateExtension
+public class JavaExtensions {
+
+    public static boolean isRecent(Date date){
+        Date now = new Date();
+        Calendar cal = new GregorianCalendar();
+        cal.add(Calendar.MONTH, -6);
+        Date sixMonthsAgo = cal.getTime();
+        return date.before(now) && date.after(sixMonthsAgo);
+    }
+
+}
+
+
+
+

This one declares an additional method on the Date type, allowing you to test whether a date is recent or not:

+
+
+
+
{#if todo.done && todo.doneDate.isRecent()}
+    This was done recently!
+{/if}
+
+
+
+
+

Renarde extension methods

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Target typeMethodDescription

Date

format()

Formats the date to the dd/MM/yyyy format

Date

internetFormat()

Formats the date to the yyyy-MM-dd format

Date

future()

Returns true if the date is in the future

Date

since()

Formats the date in terms of X seconds/minutes/hours/days/months/years ago

String

md5()

Returns an MD5 hash of the given string

Object

instanceOf(className)

Returns true if the given object is exactly of the specified class name

+
+
+

External CSS, JavaScript libraries

+
+

You can use webjars to provide third-party JavaScript or CSS. For example, here is how you can import Bootstrap +and Bootstrap-icons in your pom.xml:

+
+
+
+
<dependency>
+  <groupId>org.webjars</groupId>
+  <artifactId>bootstrap</artifactId>
+  <version>5.1.3</version>
+</dependency>
+<dependency>
+  <groupId>org.webjars.npm</groupId>
+  <artifactId>bootstrap-icons</artifactId>
+  <version>1.7.0</version>
+</dependency>
+<dependency>
+  <groupId>io.quarkus</groupId>
+  <artifactId>quarkus-webjars-locator</artifactId>
+</dependency>
+
+
+
+

After that, you can include them in your Qute templates with:

+
+
+
+
<head>
+    <link rel="stylesheet" media="screen" href="/webjars/bootstrap/css/bootstrap.min.css">
+    <link rel="stylesheet" media="screen" href="/webjars/bootstrap-icons/font/bootstrap-icons.css">
+    <script src="/webjars/bootstrap/js/bootstrap.min.js" type="text/javascript" charset="UTF-8"></script>
+</head>
+
+
+
+

Look at https://mvnrepository.com/artifact/org.webjars for the list of available options.

+
+
+
+
+
+

Forms

+
+
+

A lot of the time, you need to send data from the browser to your endpoints, which is often done with forms.

+
+
+

The HTML form

+
+

Creating forms in Renarde is easy: let’s see an example of how to do it in Qute:

+
+
+
+
{#form uri:Login.complete(newUser.confirmationCode)}
+
+<fieldset>
+    <legend>Complete registration for {newUser.email}</legend>
+    {#formElement name="userName" label="User Name"}
+        {#input name="userName"/}
+    {/formElement}
+    {#formElement name="password" label="Password"}
+        {#input name="password" type="password"/}
+    {/formElement}
+    {#formElement name="password2" label="Password Confirmation"}
+        {#input name="password2" type="password"/}
+    {/formElement}
+    {#formElement name="firstName" label="First Name"}
+        {#input name="firstName"/}
+    {/formElement}
+    {#formElement name="lastName" label="Last Name"}
+        {#input name="lastName"/}
+    {/formElement}
+    <button type="submit" class="btn btn-primary">Complete registration</button>
+</fieldset>
+
+{/form}
+
+
+
+

Here we’re defining a form whose action will go to Register.complete(newUser.confirmationCode) and +which contains several form elements, which are just tags to make composition easier. For example formElement is +a custom Qute tag for Bootstrap which defines layout for the form element and displays any associated error:

+
+
+
+
<div class="mb-3">
+    <label class="form-label" for="{name}">{label}</label>
+    {nested-content}
+    {#ifError name}
+        <span class="invalid-feedback">​{#error name/}</span>​
+    {/ifError}
+</div>
+
+
+
+

The input user tag is also designed for Bootstrap as an abstraction:

+
+
+
+
<input name="{name}"
+ type="{type ?: 'text'}"
+ placeholder="{placeholder ?: ''}"
+ class="form-control {#ifError name}is-invalid{/ifError}"
+ maxlength="{global:VARCHAR_SIZE}"
+ value="{inject:flash.get(name)}"/>
+
+
+
+

As you can see, we have default values for certain attributes, a special error class if there is a validation +error, and we default the value to the one preserved in the flash scope, which is filled whenever validation +fails, so that the user can see the validation error without losing their form values.

+
+
+

As for the form Renarde tag, it is also fairly simple, and only includes an authenticity token for CRSF protection.

+
+
+
+
<form action="{it}" method="{method ?: 'POST'}" class="{klass ?: ''}">
+ {#authenticityToken/}
+ {nested-content}
+</form>
+
+
+
+
+

The endpoint

+
+

Most forms will be a @POST endpoint, with each form element having a corresponding parameter annotated with @RestForm.

+
+
+
+
@POST
+public void complete(@RestQuery String confirmationCode,
+        @RestForm String userName,
+        @RestForm String password,
+        @RestForm String password2,
+        @RestForm String firstName,
+        @RestForm String lastName) {
+    // do something with the form parameters
+}
+
+
+
+

You can also group parameters in a POJO, but for now you have to add a special +@Consumes(MediaType.MULTIPART_FORM_DATA) annotation:

+
+
+
+
@Consumes(MediaType.MULTIPART_FORM_DATA)
+@POST
+public void complete(@RestQuery String confirmationCode,
+        FormData form) {
+    // do something with the form parameters
+}
+
+public static class FormData {
+    @RestForm String userName;
+    @RestForm String password;
+    @RestForm String password2;
+    @RestForm String firstName;
+    @RestForm String lastName;
+}
+
+
+
+

Check out the RESTEasy Reactive documentation +for more information about form parameters and multi-part.

+
+
+
+

Validation

+
+

You can place your usual Hibernate Validation annotations on the controller methods that receive user data, but +keep in mind that you have to check for validation errors in your method before you do any action that modifies your state. +This allows you to check more things than you can do with just annotations, with richer logic:

+
+
+
+
@POST
+public Response complete(@RestQuery String confirmationCode,
+        @RestForm @NotBlank @Length(max = Util.VARCHAR_SIZE) String userName,
+        @RestForm @NotBlank @Length(min = 8, max = Util.VARCHAR_SIZE) String password,
+        @RestForm @NotBlank @Length(max = Util.VARCHAR_SIZE) String password2,
+        @RestForm @NotBlank @Length(max = Util.VARCHAR_SIZE) String firstName,
+        @RestForm @NotBlank @Length(max = Util.VARCHAR_SIZE) String lastName) {
+    // Find the user for this confirmation code
+    User user = User.findForContirmation(confirmationCode);
+    if(user == null){
+        validation.addError("confirmationCode", "Invalid confirmation code");
+    }
+
+    // Make sure the passwords match
+    validation.equals("password", password, password2);
+
+    // Make sure the username is free
+    if(User.findByUserName(userName) != null){
+        validation.addError("userName", "User name already taken");
+    }
+
+    // If validation failed, redirect to the confirm page
+    if(validationFailed()){
+        confirm(confirmationCode);
+    }
+
+    // Now proceed to complete user registration
+    ...
+}
+
+
+
+

You can use the validation object to trigger additional validation logic and collect errors.

+
+
+

Those errors are then placed in the flash scope by a call to validationFailed() if there +are any errors, and thus preserved when you redirect from your action method to the @GET method +that holds the submitted form, which you can then access in your views using the {#ifError field}{/ifError} +conditional tag, or the {#error field/} tag which accesses the error message for the given field.

+
+
+
+
+
+

Routing, URI mapping, redirects

+
+
+

We have seen how to declare endpoints and how URIs map to them, but very often we need to map from endpoints to +URIs, which Renarde makes easy.

+
+
+

Redirects after POST

+
+

When handling a @POST, @PUT or @DELETE endpoint, it’s good form to redirect to a @GET endpoint after +the action has been done, in order to allow the user to reload the page without triggering the action a second +time, and such redirects are simply done by calling the corresponding @GET endpoint. In reality, the endpoint +will not be called and will be replaced by a redirect that points to the endpoint in question.

+
+
+
+
package rest;
+
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+
+import io.quarkus.qute.CheckedTemplate;
+import io.quarkus.qute.TemplateInstance;
+import io.quarkiverse.renarde.Controller;
+
+public class Application extends Controller {
+
+    @CheckedTemplate
+    static class Templates {
+        public static native TemplateInstance index();
+    }
+
+    @Path("/")
+    public TemplateInstance index() {
+        return Templates.index();
+    }
+
+    @POST
+    public void someAction() {
+        // do something
+        ...
+        // redirect to the index page
+        index();
+    }
+}
+
+
+
+

If there are any parameters that form the URI, you must pass them along:

+
+
+
+
package rest;
+
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+
+import org.jboss.resteasy.reactive.RestPath;
+import org.jboss.resteasy.reactive.RestQuery;
+
+import io.quarkus.qute.CheckedTemplate;
+import io.quarkus.qute.TemplateInstance;
+import io.quarkiverse.renarde.Controller;
+
+public class Application extends Controller {
+
+    @CheckedTemplate
+    static class Templates {
+        public static native TemplateInstance index();
+    }
+
+    @Path("/")
+    public TemplateInstance index() {
+        return Templates.index();
+    }
+
+    public TemplateInstance somePage(@RestPath String id, @RestQuery String q) {
+        // do something with the id and q
+        return Templates.index();
+    }
+
+    @POST
+    public void someAction() {
+        // do something
+        ...
+        // redirect to the somePage page
+        somePage("foo", "bar");
+    }
+}
+
+
+
+

If you want to redirect to another controller, you can use the redirect(Class) method:

+
+
+
+
package rest;
+
+import javax.ws.rs.POST;
+
+import io.quarkiverse.renarde.Controller;
+
+public class Application extends Controller {
+
+    @POST
+    public void someAction() {
+        // do something
+        ...
+        // redirect to the Todos.index() endpoint
+        redirect(Todos.class).index();
+    }
+}
+
+
+
+
+

Obtaining a URI in endpoints

+
+

If you don’t want a redirect but need a URI to a given endpoint, you can use the Router.getURI +or Router.getAbsoluteURI methods, by +passing them a method reference to the endpoint you want and the required parameters:

+
+
+
+
package rest;
+
+import java.net.URI;
+
+import org.jboss.resteasy.reactive.RestPath;
+import org.jboss.resteasy.reactive.RestQuery;
+
+import io.quarkus.qute.CheckedTemplate;
+import io.quarkus.qute.TemplateInstance;
+import io.quarkiverse.renarde.Controller;
+import io.quarkiverse.renarde.router.Router;
+
+public class Application extends Controller {
+
+    @CheckedTemplate
+    public static class Templates {
+        public static native TemplateInstance somePage();
+        public static native TemplateInstance otherPage(URI uri);
+    }
+
+    public TemplateInstance somePage(@RestPath String foo, @RestQuery Long bar) {
+        return Templates.somePage();
+    }
+
+    public TemplateInstance otherPage() {
+        // Obtain a URI to somePage
+        URI uri = Router.getURI(Login::somePage, "something", 23l);
+        // pass it on to our view
+        return Templates.otherPage(uri);
+    }
+}
+
+
+
+ + + + + +
+ + +If you plan on using Response.seeOther or Controller.seeOther, make sure to use the Router.getAbsoluteURI +variant, especially if you use the quarkus.http.root-path configuration, otherwise your URIs contain that prefix twice. +
+
+
+
+

Obtaining a URI in Qute views

+
+

If you want a URI to an endpoint in a Qute view, you can use the uri and uriabs namespace with a +call to the endpoint you want to point to:

+
+
+
+
<a class="navbar-brand" href="{uri:Application.index()}">Todo</a>
+
+
+
+

Naturally, you can also pass any required parameters.

+
+
+
+
+
+

Emails

+
+
+
+
<dependency>
+  <groupId>io.quarkus</groupId>
+  <artifactId>quarkus-mailer</artifactId>
+</dependency>
+
+
+
+

Often you will need your actions to send email notifications. You can use Qute for this too, by declaring your +emails in an Emails class:

+
+
+
+
package email;
+
+import io.quarkus.mailer.MailTemplate.MailTemplateInstance;
+import io.quarkus.qute.CheckedTemplate;
+import model.User;
+
+public class Emails {
+
+    private static final String FROM = "Todos <todos@example.com>";
+    private static final String SUBJECT_PREFIX = "[Todos] ";
+
+    @CheckedTemplate
+    static class Templates {
+        public static native MailTemplateInstance confirm(User user);
+    }
+
+    public static void confirm(User user) {
+        Templates.confirm(user)
+        .subject(SUBJECT_PREFIX + "Please confirm your email address")
+        .to(user.email)
+        .from(FROM)
+        .send().await().indefinitely();
+    }
+}
+
+
+
+

You can then send the email from your endpoint by calling Emails.confirm(user).

+
+
+

You can use composition for emails too, by having a pair of base templates for HTML in +src/main/resources/templates/email.html:

+
+
+
+
<!DOCTYPE html>
+
+<html>
+    <head>
+        <meta charset="UTF-8">
+    </head>
+    <body>
+        {#insert /}
+        <p>
+            This is an automated email, you should not reply to it: your mail will be ignored.
+        </p>
+    </body>
+</html>
+
+
+
+

And for text in src/main/resources/templates/email.txt:

+
+
+
+
{#insert /}
+
+This is an automated email, you should not reply to it: your mail will be ignored.
+
+
+
+

You can then use those templates in your emails in src/main/resources/templates/Emails/confirm.html:

+
+
+
+
{#include email.html }
+
+<p>
+ Welcome to Todos.
+</p>
+
+<p>
+ You received this email because someone (hopefully you) wants to register on Todos.
+</p>
+
+<p>
+ If you don't want to register, you can safely ignore this email.
+</p>
+
+<p>
+ If you want to register, <a href="{uriabs:Login.confirm(user.confirmationCode)}">complete your registration</a>.
+</p>
+{/include}
+
+
+
+

And for text in src/main/resources/templates/Emails/confirm.txt:

+
+
+
+
{#include email.txt}
+
+Welcome to Todos.
+
+You received this email because someone (hopefully you) wants to register on Todos.
+
+If you don't want to register, you can safely ignore this email.
+
+If you want to register, complete your registration by going to the following address:
+
+{uriabs:Login.confirm(user.confirmationCode)}
+{/include}
+
+
+
+

Note that in emails you will want to use the uriabs namespace for absolute URIs and not relative ones, +otherwise the links won’t work for your email recipients.

+
+
+

You can find more information in the Quarkus mailer documentation.

+
+
+
+
+

Localisation / Internationalisation

+
+
+

You can declare your default language and supported languages in src/main/resources/application.properties:

+
+
+
+
# This is the default locale for your application
+quarkus.default-locale=en
+# These are the supported locales (should include the default locale, but order is not important)
+quarkus.locales=en,fr
+
+
+
+

Next, you can declare your default language messages in the src/main/resources/message.properties file:

+
+
+
+
# A simple message
+hello=Hello World
+# A parameterised message for your view
+views_Application_index_greet=Hello %s
+
+
+
+

Declare your other language translations in the src/main/resources/message_fr.properties file:

+
+
+
+
hello=Bonjour Monde
+views_Application_index_greet=Salut %s
+
+
+
+

Now you can use these translated messages in your controller:

+
+
+
+
public static class Application extends Controller {
+
+    @CheckedTemplate
+    public static class Templates {
+        public static native TemplateInstance index(String name);
+    }
+
+    public TemplateInstance index() {
+        return Templates.index("Stef");
+    }
+
+    public String hello() {
+		return i18n.formatMessage("hello");
+    }
+}
+
+
+
+

Or in your template:

+
+
+
+
With no parameter:
+{m:hello}
+With parameters:
+{m:views_Application_index_greet(name)}
+
+
+
+

Selecting the language

+
+

The current language for a request will depend on the following (in order):

+
+
+
    +
  1. +

    The _renarde_language cookie, if set

    +
  2. +
  3. +

    The Accept-Language HTTP header, if set, +which defines an ordered list of languages by user preference. We will select a best matching language from the set +of quarkus.locales.

    +
  4. +
  5. +

    If nothing else, we default to the default language as set by quarkus.default-locale, which defaults to en_US.

    +
  6. +
+
+
+

You can override the user’s language with a cookie by calling i18n.set(language):

+
+
+
+
public static class Application extends Controller {
+
+    @CheckedTemplate
+    public static class Templates {
+        public static native TemplateInstance index();
+    }
+
+    public void index() {
+        return Templates.index();
+    }
+
+    @POST
+    public void french() {
+        i18n.set("fr");
+        index();
+    }
+
+    @POST
+    public void english() {
+        i18n.set("en");
+        index();
+    }
+}
+
+
+
+
+
+
+

Flash scope

+
+
+

If you need to pass values from one endpoint to another request after a redirect, you can use the Flash scope. +Usually this is done in a @POST endpoint, by filling the Flash scope with either errors or messages, +before trigerring a redirect to the right @GET endpoint.

+
+
+

You can push values in the Flash scope in an endpoint using the flash(name, value) method, or using the +Flash injectable component.

+
+
+

You can read values from the Flash scope in your Qute views using the {flash:name} namespace.

+
+
+

The Flash scope only lasts from one request to the next and is cleared at each request.

+
+
+
+
+

Security

+ +
+
+

Extension Configuration Reference

+
+ +
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-renarde/1.x/security.html b/quarkus-renarde/1.x/security.html new file mode 100644 index 0000000000..c7fc44ec90 --- /dev/null +++ b/quarkus-renarde/1.x/security.html @@ -0,0 +1,2326 @@ + + + + + + Renarde Web Framework Security guide :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Renarde renarde head Web Framework Security guide

+
+
+
+

Renarde renarde head can help you deal with security and user registration, either manually, using OIDC, or +a mix of both.

+
+
+
+
+

Custom authentication with JWT

+
+
+

In order to handle your own authentication by storing users in your database, you can use JWT tokens. +Start with importing the renarde-security module:

+
+
+
+
<dependency>
+  <groupId>io.quarkiverse.renarde</groupId>
+  <artifactId>quarkus-renarde-security</artifactId>
+  <version>1.0.5</version>
+</dependency>
+
+
+
+

And set those configuration values:

+
+
+
+
# Must be set to get proper error reporting
+quarkus.http.auth.proactive=false
+
+
+
+

Your entity should extend RenardeUser and can look like this:

+
+
+
+
package model;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.Table;
+
+import io.quarkiverse.renarde.security.RenardeUser;
+import io.quarkus.hibernate.orm.panache.PanacheEntity;
+
+@Entity
+@Table(name = "user_table")
+public class User extends PanacheEntity implements RenardeUser {
+
+    @Column(nullable = false)
+    public String email;
+    @Column(unique = true)
+    public String userName;
+    public String password;
+    public String firstName;
+    public String lastName;
+    public boolean isAdmin;
+
+    @Column(unique = true)
+    public String confirmationCode;
+
+    @Column(nullable = false)
+    @Enumerated(EnumType.STRING)
+    public UserStatus status;
+
+    public boolean isRegistered(){
+        return status == UserStatus.REGISTERED;
+    }
+
+    @Override
+    public Set<String> getRoles() {
+        Set<String> roles = new HashSet<>();
+        if(isAdmin) {
+            roles.add("admin");
+        }
+        return roles;
+    }
+
+    @Override
+    public String getUserId() {
+        return userName;
+    }
+
+    //
+    // Helpers
+
+    public static User findUnconfirmedByEmail(String email) {
+        return find("LOWER(email) = ?1 AND status = ?2", email.toLowerCase(), UserStatus.CONFIRMATION_REQUIRED).firstResult();
+    }
+
+    public static User findRegisteredByUserName(String username) {
+        return find("LOWER(userName) = ?1 AND status = ?2", username.toLowerCase(), UserStatus.REGISTERED).firstResult();
+    }
+
+    public static User findByUserName(String username) {
+        return find("LOWER(userName) = ?1", username.toLowerCase()).firstResult();
+    }
+
+    public static User findForContirmation(String confirmationCode) {
+        return find("confirmationCode = ?1 AND status = ?2", confirmationCode, UserStatus.CONFIRMATION_REQUIRED).firstResult();
+    }
+}
+
+
+
+

Now tell Renarde how to map the JWT cookies to your user model by implementing RenardeUserProvider:

+
+
+
+
package util;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+
+import io.quarkiverse.renarde.security.RenardeSecurity;
+import io.quarkiverse.renarde.security.RenardeUser;
+import io.quarkiverse.renarde.security.RenardeUserProvider;
+import model.User;
+
+@ApplicationScoped
+public class MySecuritySetup implements RenardeUserProvider {
+
+    @Inject
+    RenardeSecurity security;
+
+    @Override
+    public RenardeUser findUser(String tenantId, String id) {
+        return User.findByUserName(id);
+    }
+}
+
+
+
+

With this, Renarde will make sure that we produce a user named bean containing the current user if there is a +logged-in user. You can then use it in your views with inject:user or by injecting it in +your endpoints.

+
+
+

Renarde also provides a ControllerWithUser class which you can extend to access the current user for all controllers +that need a user.

+
+
+

Now you can write your login and registration page like this:

+
+
+
+
{#include main.html }
+{#title}Login{/title}
+
+<div class="row">
+  <div class="col-md-5">
+    {#form uri:Login.manualLogin()}
+        <fieldset>
+            <legend>Login</legend>
+            {#formElement name="userName" label="User Name"}
+                {#input name="userName"/}
+            {/formElement}
+            {#formElement name="password" label="Password"}
+                {#input name="password" type="password"/}
+            {/formElement}
+            <button type="submit" class="btn btn-primary">Login</button>
+        </fieldset>
+    {/form}
+  </div>
+  <div class="col-md-5">
+    {#form uri:Login.register()}
+        <fieldset>
+            <legend>Register</legend>
+            {#formElement name="email" label="Email"}
+                {#input name="email"/}
+            {/formElement}
+            <button type="submit" class="btn btn-primary">Register</button>
+        </fieldset>
+    {/form}
+  </div>
+</div>
+
+{/include}
+
+
+
+

As for your registration page, it can look like this:

+
+
+
+
{#include main.html }
+{#title}Complete registration{/title}
+
+{#form uri:Login.complete(newUser.confirmationCode)}
+
+<fieldset>
+    <legend>Complete registration for {newUser.email}</legend>
+    {#formElement name="userName" label="User Name"}
+        {#input name="userName" value=newUser.userName/}
+    {/formElement}
+    {#formElement name="password" label="Password"}
+        {#input name="password" type="password"/}
+    {/formElement}
+    {#formElement name="password2" label="Password Confirmation"}
+        {#input name="password2" type="password"/}
+    {/formElement}
+    {#formElement name="firstName" label="First Name"}
+        {#input name="firstName" value=newUser.firstName/}
+    {/formElement}
+    {#formElement name="lastName" label="Last Name"}
+        {#input name="lastName" value=newUser.lastName/}
+    {/formElement}
+    <button type="submit" class="btn btn-primary">Complete registration</button>
+</fieldset>
+
+{/form}
+{/include}
+
+
+
+

And your login and registration endpoint can look like this to handle user registration and login:

+
+
+
+
package rest;
+
+import java.util.UUID;
+
+import javax.inject.Inject;
+import javax.validation.constraints.Email;
+import javax.validation.constraints.NotBlank;
+import javax.ws.rs.POST;
+import javax.ws.rs.core.NewCookie;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.ResponseBuilder;
+
+import org.hibernate.validator.constraints.Length;
+import org.jboss.resteasy.reactive.RestForm;
+import org.jboss.resteasy.reactive.RestQuery;
+
+import email.Emails;
+import io.quarkiverse.renarde.security.RenardeSecurity;
+import io.quarkiverse.renarde.router.Router;
+import io.quarkiverse.renarde.util.StringUtils;
+import io.quarkus.elytron.security.common.BcryptUtil;
+import io.quarkus.qute.CheckedTemplate;
+import io.quarkus.qute.TemplateInstance;
+import io.quarkus.security.Authenticated;
+import model.User;
+import model.UserStatus;
+
+public class Login extends ControllerWithUser<User> {
+
+    @Inject
+    RenardeSecurity security;
+
+    @CheckedTemplate
+    static class Templates {
+        public static native TemplateInstance login();
+        public static native TemplateInstance register(String email);
+        public static native TemplateInstance confirm(User newUser);
+        public static native TemplateInstance logoutFirst();
+        public static native TemplateInstance welcome();
+    }
+
+    /**
+     * Login page
+     */
+    public TemplateInstance login() {
+        return Templates.login();
+    }
+
+    /**
+     * Welcome page at the end of registration
+     */
+    @Authenticated
+    public TemplateInstance welcome() {
+        return Templates.welcome();
+    }
+
+    /**
+     * Manual login form
+     */
+    @POST
+    public Response manualLogin(@NotBlank @RestForm String userName,
+            @NotBlank @RestForm String password) {
+        if(validationFailed()) {
+            login();
+        }
+        User user = User.findRegisteredByUserName(userName);
+        if(user == null
+                || !BcryptUtil.matches(password, user.password)) {
+            validation.addError("userName", "Invalid username/pasword");
+            prepareForErrorRedirect();
+            login();
+        }
+        NewCookie cookie = security.makeUserCookie(user);
+        return Response.seeOther(Router.getURI(Application::index)).cookie(cookie).build();
+    }
+
+
+    /**
+     * Manual registration form, sends confirmation email
+     */
+    @POST
+    public TemplateInstance register(@RestForm @NotBlank @Email String email) {
+        if(validationFailed())
+            login();
+        User newUser = User.findUnconfirmedByEmail(email);
+        if(newUser == null) {
+            newUser = new User();
+            newUser.email = email;
+            newUser.status = UserStatus.CONFIRMATION_REQUIRED;
+            newUser.confirmationCode = UUID.randomUUID().toString();
+            newUser.persist();
+        }
+        // send the confirmation code again
+        Emails.confirm(newUser);
+        return Templates.register(email);
+    }
+
+
+    /**
+     * Confirmation form, once email is verified, to add user info
+     */
+    public TemplateInstance confirm(@RestQuery String confirmationCode){
+        checkLogoutFirst();
+        User newUser = checkConfirmationCode(confirmationCode);
+        return Templates.confirm(newUser);
+    }
+
+    private void checkLogoutFirst() {
+        if(getUser() != null) {
+            logoutFirst();
+        }
+    }
+
+    /**
+     * Link to logout page
+     */
+    public TemplateInstance logoutFirst() {
+        return Templates.logoutFirst();
+    }
+
+    private User checkConfirmationCode(String confirmationCode) {
+        // can't use error reporting as those are query parameters and not form fields
+        if(StringUtils.isEmpty(confirmationCode)){
+            flash("message", "Missing confirmation code");
+            flash("messageType", "error");
+            redirect(Application.class).index();
+        }
+        User user = User.findForContirmation(confirmationCode);
+        if(user == null){
+            flash("message", "Invalid confirmation code");
+            flash("messageType", "error");
+            redirect(Application.class).index();
+        }
+        return user;
+    }
+
+    @POST
+    public Response complete(@RestQuery String confirmationCode,
+            @RestForm @NotBlank String userName,
+            @RestForm @Length(min = 8) String password,
+            @RestForm @Length(min = 8) String password2,
+            @RestForm @NotBlank String firstName,
+            @RestForm @NotBlank String lastName) {
+        checkLogoutFirst();
+        User user = checkConfirmationCode(confirmationCode);
+
+        if(validationFailed())
+            confirm(confirmationCode);
+
+        validation.required("password", password);
+        validation.required("password2", password2);
+        validation.equals("password", password, password2);
+
+        if(User.findRegisteredByUserName(userName) != null)
+            validation.addError("userName", "User name already taken");
+        if(validationFailed())
+            confirm(confirmationCode);
+
+        user.userName = userName;
+        user.password = BcryptUtil.bcryptHash(password);
+        user.firstName = firstName;
+        user.lastName = lastName;
+        user.confirmationCode = null;
+        user.status = UserStatus.REGISTERED;
+
+        ResponseBuilder responseBuilder = Response.seeOther(Router.getURI(Login::welcome));
+        NewCookie cookie = security.makeUserCookie(user);
+        responseBuilder.cookie(cookie);
+        return responseBuilder.build();
+    }
+}
+
+
+
+

You can now use the @Authenticated and @RolesAllowed("admin") annotations on your endpoints.

+
+
+

Private/public keys

+
+

In DEV mode, your private/public keys will be generated for you at startup if they do not exist and +are not specified. Cleaning your project will remove those keys, so previous JWT tokens won’t be valid +anymore on restart.

+
+
+

In production environments you will need to generate and specify your private and public keys using the following +commands:

+
+
+
+
$ openssl genrsa -out rsaPrivateKey.pem 2048
+$ openssl rsa -pubout -in rsaPrivateKey.pem -out src/main/resources/publicKey.pem
+$ openssl pkcs8 -topk8 -nocrypt -inform pem -in rsaPrivateKey.pem -outform pem -out src/main/resources/privateKey.pem
+
+
+
+

You can then point to those files in your application.properties Quarkus configuration:

+
+
+
+
mp.jwt.verify.publickey.location=publicKey.pem
+mp.jwt.decrypt.key.location=privateKey.pem
+smallrye.jwt.sign.key.location=privateKey.pem
+smallrye.jwt.encrypt.key.location=publicKey.pem
+
+quarkus.native.resources.includes=publicKey.pem
+quarkus.native.resources.includes=privateKey.pem
+
+
+
+
+
+
+

Using OIDC for login

+
+
+

OIDC (Open ID Connect) is a way to delegate user login to external services, such as:

+
+
+ +
+
+

If you use OIDC, you can skip the email validation phase, and avoid storing passwords for your users, but you may +likely still need to store a user representation in your data store, and associate it to the external identity provider +using the provider name and its own ID.

+
+
+

The recommended set up is to place each provider in its own tenant, and disable the default tenant if you want to leave +it free for the manual user registration and authentication we already covered:

+
+
+
+
# Google
+quarkus.oidc.google.provider=google
+quarkus.oidc.google.client-id=SECRET
+quarkus.oidc.google.credentials.secret=SECRET
+
+# Github
+quarkus.oidc.github.provider=github
+quarkus.oidc.github.client-id=SECRET
+quarkus.oidc.github.credentials.secret=SECRET
+
+# Manual context
+quarkus.oidc.manual.tenant-enabled=false
+
+# Default is just disabled
+quarkus.oidc.tenant-enabled=false
+
+# Get rid of keycloak dev services
+quarkus.keycloak.devservices.enabled=false
+
+# Must be set to get proper error reporting
+quarkus.http.auth.proactive=false
+
+
+
+

Make sure you import the renarde-oidc module in your pom.xml:

+
+
+
+
<dependency>
+  <groupId>io.quarkiverse.renarde</groupId>
+  <artifactId>quarkus-renarde-oidc</artifactId>
+  <version>1.0.5</version>
+</dependency>
+
+
+
+

We first adapt our User model to handle OIDC users by adding tenantId and authId fields:

+
+
+
+
package model;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.Table;
+import javax.persistence.UniqueConstraint;
+
+import io.quarkiverse.renarde.security.RenardeUser;
+import io.quarkus.hibernate.orm.panache.PanacheEntity;
+
+@Entity
+@Table(name = "user_table", uniqueConstraints = @UniqueConstraint(columnNames = {"tenantId", "authId"}))
+public class User extends PanacheEntity implements RenardeUser {
+
+    @Column(nullable = false)
+    public String email;
+    @Column(unique = true)
+    public String userName;
+    public String password;
+    public String firstName;
+    public String lastName;
+    public boolean isAdmin;
+
+    @Column(unique = true)
+    public String confirmationCode;
+
+    public String tenantId;
+    public String authId;
+
+    @Column(nullable = false)
+    @Enumerated(EnumType.STRING)
+    public UserStatus status;
+
+    public boolean isRegistered(){
+        return status == UserStatus.REGISTERED;
+    }
+
+    @Override
+    public Set<String> getRoles() {
+        Set<String> roles = new HashSet<>();
+        if(isAdmin) {
+            roles.add("admin");
+        }
+        return roles;
+    }
+
+    @Override
+    public String getUserId() {
+        return userName;
+    }
+
+    public boolean isOidc() {
+        return tenantId != null;
+    }
+
+    //
+    // Helpers
+
+    public static User findUnconfirmedByEmail(String email) {
+        return find("LOWER(email) = ?1 AND status = ?2", email.toLowerCase(), UserStatus.CONFIRMATION_REQUIRED).firstResult();
+    }
+
+    public static User findRegisteredByUserName(String username) {
+        return find("LOWER(userName) = ?1 AND status = ?2", username.toLowerCase(), UserStatus.REGISTERED).firstResult();
+    }
+
+    public static User findByUserName(String username) {
+        return find("LOWER(userName) = ?1", username.toLowerCase()).firstResult();
+    }
+
+    public static User findByAuthId(String tenantId, String authId) {
+        return find("tenantId = ?1 AND authId = ?2", tenantId, authId).firstResult();
+    }
+
+    public static User findForContirmation(String confirmationCode) {
+        return find("confirmationCode = ?1 AND status = ?2", confirmationCode, UserStatus.CONFIRMATION_REQUIRED).firstResult();
+    }
+}
+
+
+
+

Now you need to provide implementations of RenardeUserProvider and RenardeOidcHandler which you can group:

+
+
+
+
package util;
+
+import java.net.URI;
+import java.util.UUID;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+import javax.transaction.Transactional;
+import javax.ws.rs.core.Response;
+
+import io.quarkiverse.renarde.oidc.RenardeOidcHandler;
+import io.quarkiverse.renarde.oidc.RenardeOidcSecurity;
+import io.quarkiverse.renarde.security.RenardeSecurity;
+import io.quarkiverse.renarde.security.RenardeUser;
+import io.quarkiverse.renarde.security.RenardeUserProvider;
+import io.quarkiverse.renarde.router.Router;
+import io.quarkiverse.renarde.util.Flash;
+import io.quarkiverse.renarde.util.RedirectException;
+import model.User;
+import model.UserStatus;
+import rest.Application;
+import rest.Login;
+
+@ApplicationScoped
+public class MySecuritySetup implements RenardeUserProvider, RenardeOidcHandler {
+
+    @Inject
+    RenardeSecurity security;
+
+    @Inject
+    RenardeOidcSecurity oidcSecurity;
+
+    @Inject
+    Flash flash;
+
+    /**
+     * This allows us to map tenant/id to our users: manually or via OIDC
+     */
+    @Override
+    public RenardeUser findUser(String tenantId, String id) {
+        if(tenantId == null || tenantId.equals("manual")) {
+            return User.findByUserName(id);
+        } else {
+            return User.findByAuthId(tenantId, id);
+        }
+    }
+
+    /**
+     * This will be called on every successful OIDC authentication,
+     * be it a first-time user registration, or existing user login
+     */
+    @Transactional
+    @Override
+    public void oidcSuccess(String tenantId, String authId) {
+        User user = User.findByAuthId(tenantId, authId);
+        URI uri;
+        if(user == null) {
+            // registration
+            user = new User();
+            user.tenantId = tenantId;
+            user.authId = authId;
+
+            user.email = oidcSecurity.getOidcEmail();
+            user.firstName = oidcSecurity.getOidcFirstName();
+            user.lastName = oidcSecurity.getOidcLastName();
+            user.userName = oidcSecurity.getOidcUserName();
+
+            user.status = UserStatus.CONFIRMATION_REQUIRED;
+            user.confirmationCode = UUID.randomUUID().toString();
+            user.persist();
+
+            // go to registration
+            uri = Router.getURI(Login::confirm, user.confirmationCode);
+        } else if(!user.isRegistered()) {
+            // user exists, but not fully registered yet
+            // go to registration
+            uri = Router.getURI(Login::confirm, user.confirmationCode);
+        } else {
+            // regular login
+            uri = Router.getURI(Application::index);
+        }
+        throw new RedirectException(Response.seeOther(uri).build());
+    }
+
+    /**
+     * This will be called if the existing user has a valid OIDC session,
+     * and attemps to login again, so we check if the user exists, and is
+     * fully registered.
+     */
+    @Override
+    public void loginWithOidcSession(String tenantId, String authId) {
+        RenardeUser user = findUser(tenantId, authId);
+        // old cookie, no such user
+        if(user == null) {
+            flash.flash("message", "Invalid user: "+authId);
+            throw new RedirectException(security.makeLogoutResponse());
+        }
+        // redirect to registration
+        URI uri;
+        if(!user.isRegistered()) {
+            uri = Router.getURI(Login::confirm, ((User)user).confirmationCode);
+        } else {
+            flash.flash("message", "Already logged in");
+            uri = Router.getURI(Application::index);
+        }
+        throw new RedirectException(Response.seeOther(uri).build());
+    }
+}
+
+
+
+

We have to adapt our registration page to account for users coming in from OIDC, by skipping the password +if the user is an OIDC user:

+
+
+
+
{#include main.html }
+{#title}Complete registration{/title}
+
+{#form uri:Login.complete(newUser.confirmationCode)}
+
+<fieldset>
+    <legend>Complete registration for {newUser.email}</legend>
+    {#formElement name="userName" label="User Name"}
+        {#input name="userName" value=newUser.userName/}
+    {/formElement}
+    {#if !newUser.authId}
+        {#formElement name="password" label="Password"}
+            {#input name="password" type="password"/}
+        {/formElement}
+        {#formElement name="password2" label="Password Confirmation"}
+            {#input name="password2" type="password"/}
+        {/formElement}
+    {/if}
+    {#formElement name="firstName" label="First Name"}
+        {#input name="firstName" value=newUser.firstName/}
+    {/formElement}
+    {#formElement name="lastName" label="Last Name"}
+        {#input name="lastName" value=newUser.lastName/}
+    {/formElement}
+    <button type="submit" class="btn btn-primary">Complete registration</button>
+</fieldset>
+
+{/form}
+{/include}
+
+
+
+

And the corresponding controller:

+
+
+
+
    @POST
+    public Response complete(@RestQuery String confirmationCode,
+            @RestForm @NotBlank String userName,
+            @RestForm @Length(min = 8) String password,
+            @RestForm @Length(min = 8) String password2,
+            @RestForm @NotBlank String firstName,
+            @RestForm @NotBlank String lastName) {
+        checkLogoutFirst();
+        User user = checkConfirmationCode(confirmationCode);
+
+        if(validationFailed())
+            confirm(confirmationCode);
+
+        // is it OIDC?
+        if(!user.isOidc()) {
+            validation.required("password", password);
+            validation.required("password2", password2);
+            validation.equals("password", password, password2);
+        }
+
+        if(User.findRegisteredByUserName(userName) != null)
+            validation.addError("userName", "User name already taken");
+        if(validationFailed())
+            confirm(confirmationCode);
+
+        user.userName = userName;
+        if(!user.isOidc()) {
+            user.password = BcryptUtil.bcryptHash(password);
+        }
+        user.firstName = firstName;
+        user.lastName = lastName;
+        user.confirmationCode = null;
+        user.status = UserStatus.REGISTERED;
+
+        ResponseBuilder responseBuilder = Response.seeOther(Router.getURI(Login::welcome));
+        if(!user.isOidc()) {
+            NewCookie cookie = security.makeUserCookie(user);
+            responseBuilder.cookie(cookie);
+        }
+        return responseBuilder.build();
+    }
+
+
+
+

And finally we can add the OIDC login options to the login page:

+
+
+
+
{#include main.html }
+{#title}Login{/title}
+
+<div class="row">
+  <div class="col-md-2">
+    <fieldset>
+        <legend>Login/Register</legend>
+        <div class="d-grid gap-2">
+          <a class="btn btn-block btn-light" href="{uri:RenardeSecurityController.loginUsingOidc('github')}" role="button"><img src="/images/signin-github.svg" height="16px" style="vertical-align: text-top"/> GitHub</a>
+          <a class="btn btn-block btn-light" href="{uri:RenardeSecurityController.loginUsingOidc('google')}" role="button"><img src="/images/signin-google.svg" height="16px" style="vertical-align: text-top"/> Google</a>
+          <a class="btn btn-block btn-light" href="{uri:RenardeSecurityController.loginUsingOidc('microsoft')}" role="button"><img src="/images/signin-microsoft.svg" height="16px" style="vertical-align: text-top"/> Microsoft</a>
+          <a class="btn btn-block btn-light" href="{uri:RenardeSecurityController.loginUsingOidc('facebook')}" role="button"><img src="/images/signin-facebook.svg" height="16px" style="vertical-align: text-top"/> Facebook</a>
+          <a class="btn btn-block btn-light" href="{uri:RenardeSecurityController.loginUsingOidc('apple')}" role="button"><img src="/images/signin-apple.svg" height="16px" style="vertical-align: text-top"/> Apple</a>
+          <a class="btn btn-block btn-light" href="{uri:RenardeSecurityController.loginUsingOidc('twitter')}" role="button"><img src="/images/signin-twitter.svg" height="16px" style="vertical-align: text-top"/> Twitter</a>
+        </div>
+     </fieldset>
+  </div>
+  <-- ... Manual login and registration ... -->
+</div>
+
+{/include}
+
+
+
+

Setting up OIDC for Github

+
+

In order to set up OIDC for Github you need to create a new OAuth application in your GitHub developer settings:

+
+
+
+oidc github 1 +
+
+
+

Make sure to fill in the appropriate details, but more importantly the Authorization Callback URL, set to http://localhost:8080/_renarde/security/github-success +(if you intend to test this using the Quarkus DEV mode).

+
+
+

Now click on Register application and you’ll be shown your application page:

+
+
+
+oidc github 2 +
+
+
+

You need to click on Generate a new client secret, confirm your credentials, and write down +your Client ID and Client secret (especially that one, because you will not be able to see it again +later from that page, but you can always recreate one, do don’t worry too much):

+
+
+
+oidc github 3 +
+
+
+

Now add the following configuration to your application.properties:

+
+
+
+
quarkus.oidc.github.provider=github
+quarkus.oidc.github.client-id=<Client ID>
+quarkus.oidc.github.credentials.secret=<Secret>
+
+
+
+
+

Setting up OIDC for Google

+
+

In order to set up OIDC for Google you need to create a new project in your Google Cloud Platform console:

+
+
+

Pick a project name and click on CREATE.

+
+
+
+oidc google 1 +
+
+
+

Now make sure you select your project in the top selector, and click on the left-hand bar menu on APIs and Services > OAuth consent screen:

+
+
+
+oidc google 2 +
+
+
+

Select External to authorise any Google user to log in to your application and press CREATE:

+
+
+
+oidc google 3 +
+
+
+

Now you can fill in your application name, your support email, your developer contact information and press SAVE AND CONTINUE:

+
+
+
+oidc google 4 +
+
+
+

Do not add any scopes on the next page, and press SAVE AND CONTINUE:

+
+
+
+oidc google 5 +
+
+
+

Do not add any test user on the next page, and press SAVE AND CONTINUE:

+
+
+
+oidc google 6 +
+
+
+

Click on the top menu CREATE CREDENTIALS > OAuth client ID:

+
+
+
+oidc google 7 +
+
+
+

Select Web application as Application type, and add http://localhost:8080/_renarde/security/oidc-success in +the Authorised redirect URIs list, then press CREATE:

+
+
+
+oidc google 8 +
+
+
+

Copy your Client ID and Client Secret:

+
+
+
+oidc google 9 +
+
+
+

You can now configure your application.properties:

+
+
+
+
quarkus.oidc.google.provider=google
+quarkus.oidc.google.client-id=<Client ID>
+quarkus.oidc.google.credentials.secret=<Secret>
+
+
+
+
+

Setting up OIDC for Microsoft

+
+

In order to set up OIDC for Microsoft you need to go to your Microsoft Azure Portal, +and search for Azure Active Directory, then click on it:

+
+
+
+oidc microsoft 1 +
+
+
+

Once there, on the left side under Manage, click on App registrations then click on New registration:

+
+
+
+oidc microsoft 2 +
+
+
+

Fill in your application name, select Accounts in any organizational directory (Any Azure AD directory - Multitenant) and personal Microsoft accounts (e.g. Skype, Xbox) to allow anyone to log in, and add a Web Redirect URI as http://localhost:8080/_renarde/security/oidc-success, +then click on Register:

+
+
+
+oidc microsoft 3 +
+
+
+

On that resulting page, copy the Client Id (under Application (client) ID, then click on Add a certificate or secret:

+
+
+
+oidc microsoft 4 +
+
+
+

Now, under Client secrets (0), click on New client secret:

+
+
+
+oidc microsoft 5 +
+
+
+

Click on Add in that dialog without changing anything:

+
+
+
+oidc microsoft 6 +
+
+
+

On the resulting page, copy your Secret ID:

+
+
+
+oidc microsoft 7 +
+
+
+

You can now configure your application.properties:

+
+
+
+
quarkus.oidc.microsoft.provider=microsoft
+quarkus.oidc.microsoft.client-id=<Client ID>
+quarkus.oidc.microsoft.credentials.secret=<Secret>
+
+
+
+
+

Setting up OIDC for Apple

+
+

In order to set up OIDC for Apple you need to create a developer account, and sign up for the 99€/year program, but you cannot test your application on localhost like most other OIDC providers: +you will need to run it over https and make it publicly accessible, so for development purposes +you may want to use a service such as https://ngrok.com.

+
+
+

Go to Create a new identifier and press +

+
+
+
+oidc apple 1 +
+
+
+

Dont touch anything, keep App IDs selected, and press Continue:

+
+
+
+oidc apple 2 +
+
+
+

Dont touch anything, keep App selected, and press Continue:

+
+
+
+oidc apple 3 +
+
+
+

Enter a description and a Bundle ID (use your application package name):

+
+
+
+oidc apple 4 +
+
+
+

Then scroll down to find the Sign in with Apple Capability, select it, and press Continue:

+
+
+
+oidc apple 5 +
+
+
+

Write down your App ID Prefix, then press Register:

+
+
+
+oidc apple 6 +
+
+
+

Back on the Identifiers page, press +:

+
+
+
+oidc apple 7 +
+
+
+

Select Service IDs and press Continue:

+
+
+
+oidc apple 8 +
+
+
+

Enter a description and Bundle ID (use your application package name), then press Continue:

+
+
+
+oidc apple 9 +
+
+
+

Now press Register:

+
+
+
+oidc apple 10 +
+
+
+

Back on the service list, click on your newly created service:

+
+
+
+oidc apple 11 +
+
+
+

Enable Sign in with Apple and press Configure:

+
+
+
+oidc apple 12 +
+
+
+

Add your domain and return URL (set to <host>/_renarde/security/oidc-success) and press Next:

+
+
+
+oidc apple 13 +
+
+
+

Now press Done:

+
+
+
+oidc apple 14 +
+
+
+

Now press Continue:

+
+
+
+oidc apple 15 +
+
+
+

And now press Save:

+
+
+
+oidc apple 16 +
+
+
+

Go to the Keys page on the left menu, and press +:

+
+
+
+oidc apple 17 +
+
+
+

Fill in a key name, enable Sign in with Apple, and press Configure:

+
+
+
+oidc apple 18 +
+
+
+

Select your Primary App ID and press Save:

+
+
+
+oidc apple 19 +
+
+
+

Back on the key page, press Continue:

+
+
+
+oidc apple 20 +
+
+
+

Now press Register:

+
+
+
+oidc apple 21 +
+
+
+

Write down your Key ID, download your key and save it to your Quarkus application in src/main/resources/AuthKey_<KEYID>.p8:

+
+
+
+oidc apple 22 +
+
+
+

You can now configure your your application.properties:

+
+
+
+
quarkus.oidc.apple.provider=apple
+quarkus.oidc.apple.client-id=<Bundle ID>
+quarkus.oidc.apple.credentials.jwt.key-file=AuthKey_<Key ID>.p8
+quarkus.oidc.apple.credentials.jwt.token-key-id=<Key ID>
+quarkus.oidc.apple.credentials.jwt.issuer=<App ID Prefix>
+quarkus.oidc.apple.credentials.jwt.subject=<Bundle ID}
+
+
+
+
+

Setting up OIDC for Facebook

+
+

Facebook you will not be let you test your application on localhost like most other OIDC providers: +you will need to run it over https and make it publicly accessible, so for development purposes +you may want to use a service such as https://ngrok.com.

+
+
+

In order to set up OIDC for Facebook start by Creating an application, select None as an app type, and press Next:

+
+
+
+oidc facebook 1 +
+
+
+

Now enter an application name, and contact email, and press Create app:

+
+
+
+oidc facebook 2 +
+
+
+

On the app page, click Set up on the Facebook login product:

+
+
+
+oidc facebook 3 +
+
+
+

Quick the Quickstarts page and click on Facebook login > Settings on the left menu:

+
+
+
+oidc facebook 4 +
+
+
+

Enter your Redirect URIs (set to <host>/_renarde/security/oidc-success) and press Save changes:

+
+
+
+oidc facebook 5 +
+
+
+

Now go to Settings > Basic on the left hand menu, and write down your App ID and App secret:

+
+
+
+oidc facebook 6 +
+
+
+

You can now configure your your application.properties:

+
+
+
+
quarkus.oidc.facebook.provider=facebook
+quarkus.oidc.facebook.client-id=<App ID>
+quarkus.oidc.facebook.credentials.secret=<App secret>
+
+
+
+
+

Setting up OIDC for Twitter

+
+

You can use Twitter for OIDC login, but at the moment, it restricts access to the user’s email, which means you +will have to obtain it and verify it yourself.

+
+
+

In order to set up OIDC for Twitter start by Creating a project, enter a project name, and press Next:

+
+
+
+oidc twitter 1 +
+
+
+

Enter a use case, and press Next:

+
+
+
+oidc twitter 2 +
+
+
+

Enter a project description, and press Next:

+
+
+
+oidc twitter 3 +
+
+
+

Now enter an application name, and press Next:

+
+
+
+oidc twitter 4 +
+
+
+

Write down your keys, because they will not be displayed again, and press App Settings:

+
+
+
+oidc twitter 5 +
+
+
+

Navigate down to the User authentication settings section and press Set up:

+
+
+
+oidc twitter 6 +
+
+
+

Check the OAuth 2.0 check box:

+
+
+
+oidc twitter 7 +
+
+
+

Select Web App as application type, then fill in your application details (use <host>/_renarde/security/twitter-success +for the Callback URI).

+
+
+ + + + + +
+ + +Twitter doesn’t require https usage in practice, but won’t accept your Website URL without it, so +you can still use ngrok for it. +
+
+
+

Now press Save:

+
+
+
+oidc twitter 8 +
+
+
+

You can now copy your Client ID and Client Secret and press Done:

+
+
+
+oidc twitter 9 +
+
+
+

You can now configure your your application.properties:

+
+
+
+
quarkus.oidc.twitter.provider=twitter
+quarkus.oidc.twitter.client-id=<Client ID>
+quarkus.oidc.twitter.credentials.secret=<Client Secret>
+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-renarde/dev/_images/backoffice-entity-edit.png b/quarkus-renarde/dev/_images/backoffice-entity-edit.png new file mode 100644 index 0000000000..e848034c0d Binary files /dev/null and b/quarkus-renarde/dev/_images/backoffice-entity-edit.png differ diff --git a/quarkus-renarde/dev/_images/backoffice-entity-list.png b/quarkus-renarde/dev/_images/backoffice-entity-list.png new file mode 100644 index 0000000000..4a8154a6c5 Binary files /dev/null and b/quarkus-renarde/dev/_images/backoffice-entity-list.png differ diff --git a/quarkus-renarde/dev/_images/backoffice-index.png b/quarkus-renarde/dev/_images/backoffice-index.png new file mode 100644 index 0000000000..b9b2dc9153 Binary files /dev/null and b/quarkus-renarde/dev/_images/backoffice-index.png differ diff --git a/quarkus-renarde/dev/_images/oidc-apple-1.png b/quarkus-renarde/dev/_images/oidc-apple-1.png new file mode 100644 index 0000000000..984e71462b Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-apple-1.png differ diff --git a/quarkus-renarde/dev/_images/oidc-apple-10.png b/quarkus-renarde/dev/_images/oidc-apple-10.png new file mode 100644 index 0000000000..96c8977999 Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-apple-10.png differ diff --git a/quarkus-renarde/dev/_images/oidc-apple-11.png b/quarkus-renarde/dev/_images/oidc-apple-11.png new file mode 100644 index 0000000000..2182c11e55 Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-apple-11.png differ diff --git a/quarkus-renarde/dev/_images/oidc-apple-12.png b/quarkus-renarde/dev/_images/oidc-apple-12.png new file mode 100644 index 0000000000..d7cfb8717f Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-apple-12.png differ diff --git a/quarkus-renarde/dev/_images/oidc-apple-13.png b/quarkus-renarde/dev/_images/oidc-apple-13.png new file mode 100644 index 0000000000..084ba635f9 Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-apple-13.png differ diff --git a/quarkus-renarde/dev/_images/oidc-apple-14.png b/quarkus-renarde/dev/_images/oidc-apple-14.png new file mode 100644 index 0000000000..526ae9cf23 Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-apple-14.png differ diff --git a/quarkus-renarde/dev/_images/oidc-apple-15.png b/quarkus-renarde/dev/_images/oidc-apple-15.png new file mode 100644 index 0000000000..3188d816ee Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-apple-15.png differ diff --git a/quarkus-renarde/dev/_images/oidc-apple-16.png b/quarkus-renarde/dev/_images/oidc-apple-16.png new file mode 100644 index 0000000000..470c4d7f0d Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-apple-16.png differ diff --git a/quarkus-renarde/dev/_images/oidc-apple-17.png b/quarkus-renarde/dev/_images/oidc-apple-17.png new file mode 100644 index 0000000000..e08e7a11dd Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-apple-17.png differ diff --git a/quarkus-renarde/dev/_images/oidc-apple-18.png b/quarkus-renarde/dev/_images/oidc-apple-18.png new file mode 100644 index 0000000000..e56e0633d4 Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-apple-18.png differ diff --git a/quarkus-renarde/dev/_images/oidc-apple-19.png b/quarkus-renarde/dev/_images/oidc-apple-19.png new file mode 100644 index 0000000000..35f6841768 Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-apple-19.png differ diff --git a/quarkus-renarde/dev/_images/oidc-apple-2.png b/quarkus-renarde/dev/_images/oidc-apple-2.png new file mode 100644 index 0000000000..045ec05eeb Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-apple-2.png differ diff --git a/quarkus-renarde/dev/_images/oidc-apple-20.png b/quarkus-renarde/dev/_images/oidc-apple-20.png new file mode 100644 index 0000000000..995b058ea3 Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-apple-20.png differ diff --git a/quarkus-renarde/dev/_images/oidc-apple-21.png b/quarkus-renarde/dev/_images/oidc-apple-21.png new file mode 100644 index 0000000000..75236c8d8a Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-apple-21.png differ diff --git a/quarkus-renarde/dev/_images/oidc-apple-22.png b/quarkus-renarde/dev/_images/oidc-apple-22.png new file mode 100644 index 0000000000..33380e8d4f Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-apple-22.png differ diff --git a/quarkus-renarde/dev/_images/oidc-apple-3.png b/quarkus-renarde/dev/_images/oidc-apple-3.png new file mode 100644 index 0000000000..868440a5a6 Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-apple-3.png differ diff --git a/quarkus-renarde/dev/_images/oidc-apple-4.png b/quarkus-renarde/dev/_images/oidc-apple-4.png new file mode 100644 index 0000000000..95c8e1125a Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-apple-4.png differ diff --git a/quarkus-renarde/dev/_images/oidc-apple-5.png b/quarkus-renarde/dev/_images/oidc-apple-5.png new file mode 100644 index 0000000000..5fd241e2d4 Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-apple-5.png differ diff --git a/quarkus-renarde/dev/_images/oidc-apple-6.png b/quarkus-renarde/dev/_images/oidc-apple-6.png new file mode 100644 index 0000000000..86ffd3348c Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-apple-6.png differ diff --git a/quarkus-renarde/dev/_images/oidc-apple-7.png b/quarkus-renarde/dev/_images/oidc-apple-7.png new file mode 100644 index 0000000000..3129b8bada Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-apple-7.png differ diff --git a/quarkus-renarde/dev/_images/oidc-apple-8.png b/quarkus-renarde/dev/_images/oidc-apple-8.png new file mode 100644 index 0000000000..053ea35b3a Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-apple-8.png differ diff --git a/quarkus-renarde/dev/_images/oidc-apple-9.png b/quarkus-renarde/dev/_images/oidc-apple-9.png new file mode 100644 index 0000000000..972daafd66 Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-apple-9.png differ diff --git a/quarkus-renarde/dev/_images/oidc-facebook-1.png b/quarkus-renarde/dev/_images/oidc-facebook-1.png new file mode 100644 index 0000000000..4a5b67ab09 Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-facebook-1.png differ diff --git a/quarkus-renarde/dev/_images/oidc-facebook-2.png b/quarkus-renarde/dev/_images/oidc-facebook-2.png new file mode 100644 index 0000000000..e3836f96d5 Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-facebook-2.png differ diff --git a/quarkus-renarde/dev/_images/oidc-facebook-3.png b/quarkus-renarde/dev/_images/oidc-facebook-3.png new file mode 100644 index 0000000000..ee57845e06 Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-facebook-3.png differ diff --git a/quarkus-renarde/dev/_images/oidc-facebook-4.png b/quarkus-renarde/dev/_images/oidc-facebook-4.png new file mode 100644 index 0000000000..08199d4e7d Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-facebook-4.png differ diff --git a/quarkus-renarde/dev/_images/oidc-facebook-5.png b/quarkus-renarde/dev/_images/oidc-facebook-5.png new file mode 100644 index 0000000000..82bf435d7a Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-facebook-5.png differ diff --git a/quarkus-renarde/dev/_images/oidc-facebook-6.png b/quarkus-renarde/dev/_images/oidc-facebook-6.png new file mode 100644 index 0000000000..92ef83325e Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-facebook-6.png differ diff --git a/quarkus-renarde/dev/_images/oidc-github-1.png b/quarkus-renarde/dev/_images/oidc-github-1.png new file mode 100644 index 0000000000..41edce4ce6 Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-github-1.png differ diff --git a/quarkus-renarde/dev/_images/oidc-github-2.png b/quarkus-renarde/dev/_images/oidc-github-2.png new file mode 100644 index 0000000000..62a304bc58 Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-github-2.png differ diff --git a/quarkus-renarde/dev/_images/oidc-github-3.png b/quarkus-renarde/dev/_images/oidc-github-3.png new file mode 100644 index 0000000000..407d184454 Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-github-3.png differ diff --git a/quarkus-renarde/dev/_images/oidc-google-1.png b/quarkus-renarde/dev/_images/oidc-google-1.png new file mode 100644 index 0000000000..dabe55dfa7 Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-google-1.png differ diff --git a/quarkus-renarde/dev/_images/oidc-google-2.png b/quarkus-renarde/dev/_images/oidc-google-2.png new file mode 100644 index 0000000000..9d57c81919 Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-google-2.png differ diff --git a/quarkus-renarde/dev/_images/oidc-google-3.png b/quarkus-renarde/dev/_images/oidc-google-3.png new file mode 100644 index 0000000000..a2c17240bd Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-google-3.png differ diff --git a/quarkus-renarde/dev/_images/oidc-google-4.png b/quarkus-renarde/dev/_images/oidc-google-4.png new file mode 100644 index 0000000000..49906b8ecc Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-google-4.png differ diff --git a/quarkus-renarde/dev/_images/oidc-google-5.png b/quarkus-renarde/dev/_images/oidc-google-5.png new file mode 100644 index 0000000000..fdf9e0df6c Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-google-5.png differ diff --git a/quarkus-renarde/dev/_images/oidc-google-6.png b/quarkus-renarde/dev/_images/oidc-google-6.png new file mode 100644 index 0000000000..0810343ec2 Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-google-6.png differ diff --git a/quarkus-renarde/dev/_images/oidc-google-7.png b/quarkus-renarde/dev/_images/oidc-google-7.png new file mode 100644 index 0000000000..32a7a6c157 Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-google-7.png differ diff --git a/quarkus-renarde/dev/_images/oidc-google-8.png b/quarkus-renarde/dev/_images/oidc-google-8.png new file mode 100644 index 0000000000..87be4462cd Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-google-8.png differ diff --git a/quarkus-renarde/dev/_images/oidc-google-9.png b/quarkus-renarde/dev/_images/oidc-google-9.png new file mode 100644 index 0000000000..0da8d5f488 Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-google-9.png differ diff --git a/quarkus-renarde/dev/_images/oidc-microsoft-1.png b/quarkus-renarde/dev/_images/oidc-microsoft-1.png new file mode 100644 index 0000000000..9a6216eb45 Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-microsoft-1.png differ diff --git a/quarkus-renarde/dev/_images/oidc-microsoft-2.png b/quarkus-renarde/dev/_images/oidc-microsoft-2.png new file mode 100644 index 0000000000..2db15f1865 Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-microsoft-2.png differ diff --git a/quarkus-renarde/dev/_images/oidc-microsoft-3.png b/quarkus-renarde/dev/_images/oidc-microsoft-3.png new file mode 100644 index 0000000000..7c32b5931f Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-microsoft-3.png differ diff --git a/quarkus-renarde/dev/_images/oidc-microsoft-4.png b/quarkus-renarde/dev/_images/oidc-microsoft-4.png new file mode 100644 index 0000000000..fdb1140af7 Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-microsoft-4.png differ diff --git a/quarkus-renarde/dev/_images/oidc-microsoft-5.png b/quarkus-renarde/dev/_images/oidc-microsoft-5.png new file mode 100644 index 0000000000..e6adf4a5a0 Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-microsoft-5.png differ diff --git a/quarkus-renarde/dev/_images/oidc-microsoft-6.png b/quarkus-renarde/dev/_images/oidc-microsoft-6.png new file mode 100644 index 0000000000..fb2ee6282d Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-microsoft-6.png differ diff --git a/quarkus-renarde/dev/_images/oidc-microsoft-7.png b/quarkus-renarde/dev/_images/oidc-microsoft-7.png new file mode 100644 index 0000000000..9349461a98 Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-microsoft-7.png differ diff --git a/quarkus-renarde/dev/_images/oidc-spotify-1.png b/quarkus-renarde/dev/_images/oidc-spotify-1.png new file mode 100644 index 0000000000..87f0eb2d50 Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-spotify-1.png differ diff --git a/quarkus-renarde/dev/_images/oidc-spotify-2.png b/quarkus-renarde/dev/_images/oidc-spotify-2.png new file mode 100644 index 0000000000..037d48d52d Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-spotify-2.png differ diff --git a/quarkus-renarde/dev/_images/oidc-spotify-3.png b/quarkus-renarde/dev/_images/oidc-spotify-3.png new file mode 100644 index 0000000000..d48a21ed0c Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-spotify-3.png differ diff --git a/quarkus-renarde/dev/_images/oidc-twitter-1.png b/quarkus-renarde/dev/_images/oidc-twitter-1.png new file mode 100644 index 0000000000..ae2eb97522 Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-twitter-1.png differ diff --git a/quarkus-renarde/dev/_images/oidc-twitter-2.png b/quarkus-renarde/dev/_images/oidc-twitter-2.png new file mode 100644 index 0000000000..0121c76bc5 Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-twitter-2.png differ diff --git a/quarkus-renarde/dev/_images/oidc-twitter-3.png b/quarkus-renarde/dev/_images/oidc-twitter-3.png new file mode 100644 index 0000000000..d149d25789 Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-twitter-3.png differ diff --git a/quarkus-renarde/dev/_images/oidc-twitter-4.png b/quarkus-renarde/dev/_images/oidc-twitter-4.png new file mode 100644 index 0000000000..9eed1257f0 Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-twitter-4.png differ diff --git a/quarkus-renarde/dev/_images/oidc-twitter-5.png b/quarkus-renarde/dev/_images/oidc-twitter-5.png new file mode 100644 index 0000000000..dc66e972e9 Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-twitter-5.png differ diff --git a/quarkus-renarde/dev/_images/oidc-twitter-6.png b/quarkus-renarde/dev/_images/oidc-twitter-6.png new file mode 100644 index 0000000000..6469ef8466 Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-twitter-6.png differ diff --git a/quarkus-renarde/dev/_images/oidc-twitter-7.png b/quarkus-renarde/dev/_images/oidc-twitter-7.png new file mode 100644 index 0000000000..2cd3aeb6df Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-twitter-7.png differ diff --git a/quarkus-renarde/dev/_images/oidc-twitter-8.png b/quarkus-renarde/dev/_images/oidc-twitter-8.png new file mode 100644 index 0000000000..ffcfb1a0db Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-twitter-8.png differ diff --git a/quarkus-renarde/dev/_images/oidc-twitter-9.png b/quarkus-renarde/dev/_images/oidc-twitter-9.png new file mode 100644 index 0000000000..e1b70c1838 Binary files /dev/null and b/quarkus-renarde/dev/_images/oidc-twitter-9.png differ diff --git a/quarkus-renarde/dev/_images/renarde-head.svg b/quarkus-renarde/dev/_images/renarde-head.svg new file mode 100644 index 0000000000..6b8945c6d0 --- /dev/null +++ b/quarkus-renarde/dev/_images/renarde-head.svg @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/quarkus-renarde/dev/_images/renarde.svg b/quarkus-renarde/dev/_images/renarde.svg new file mode 100644 index 0000000000..8b8f27259f --- /dev/null +++ b/quarkus-renarde/dev/_images/renarde.svg @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/quarkus-renarde/dev/advanced.html b/quarkus-renarde/dev/advanced.html new file mode 100644 index 0000000000..4c9aef3e9c --- /dev/null +++ b/quarkus-renarde/dev/advanced.html @@ -0,0 +1,2290 @@ + + + + + + Renarde Web Framework - Advanced :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Renarde renarde head Web Framework - Advanced

+
+

Forms

+
+
+

A lot of the time, you need to send data from the browser to your endpoints, which is often done with forms.

+
+
+

The HTML form

+
+

Creating forms in Renarde is easy: let’s see an example of how to do it in Qute:

+
+
+
+
{#form uri:Login.complete(newUser.confirmationCode)}
+
+<fieldset>
+    <legend>Complete registration for {newUser.email}</legend>
+    {#formElement name="userName" label="User Name"}
+        {#input name="userName"/}
+    {/formElement}
+    {#formElement name="password" label="Password"}
+        {#input name="password" type="password"/}
+    {/formElement}
+    {#formElement name="password2" label="Password Confirmation"}
+        {#input name="password2" type="password"/}
+    {/formElement}
+    {#formElement name="firstName" label="First Name"}
+        {#input name="firstName"/}
+    {/formElement}
+    {#formElement name="lastName" label="Last Name"}
+        {#input name="lastName"/}
+    {/formElement}
+    <button type="submit" class="btn btn-primary">Complete registration</button>
+</fieldset>
+
+{/form}
+
+
+
+

Here we’re defining a form whose action will go to Register.complete(newUser.confirmationCode) and +which contains several form elements, which are just tags to make composition easier. For example formElement is +a custom Qute tag for Bootstrap which defines layout for the form element and displays any associated error:

+
+
+
+
<div class="mb-3">
+    <label class="form-label" for="{name}">{label}</label>
+    {nested-content}
+    {#ifError name}
+        <span class="invalid-feedback">​{#error name/}</span>​
+    {/ifError}
+</div>
+
+
+
+

The input user tag is also designed for Bootstrap as an abstraction:

+
+
+
+
<input name="{name}"
+ type="{type ?: 'text'}"
+ placeholder="{placeholder ?: ''}"
+ class="form-control {#ifError name}is-invalid{/ifError}"
+ maxlength="{global:VARCHAR_SIZE}"
+ value="{inject:flash.get(name)}"/>
+
+
+
+

As you can see, we have default values for certain attributes, a special error class if there is a validation +error, and we default the value to the one preserved in the flash scope, which is filled whenever validation +fails, so that the user can see the validation error without losing their form values.

+
+
+

As for the form Renarde tag, it is also fairly simple, and only includes an authenticity token for CSRF protection.

+
+
+
+
<form action="{it}" method="{method ?: 'POST'}" class="{klass ?: ''}">
+ {#authenticityToken/}
+ {nested-content}
+</form>
+
+
+
+
+

The endpoint

+
+

Most forms will be a @POST endpoint, with each form element having a corresponding parameter annotated with @RestForm.

+
+
+
+
@POST
+public void complete(@RestQuery String confirmationCode,
+        @RestForm String userName,
+        @RestForm String password,
+        @RestForm String password2,
+        @RestForm String firstName,
+        @RestForm String lastName) {
+    // do something with the form parameters
+}
+
+
+
+

You can also group parameters in a POJO, but for now you have to add a special +@Consumes(MediaType.MULTIPART_FORM_DATA) annotation:

+
+
+
+
@Consumes(MediaType.MULTIPART_FORM_DATA)
+@POST
+public void complete(@RestQuery String confirmationCode,
+        FormData form) {
+    // do something with the form parameters
+}
+
+public static class FormData {
+    @RestForm String userName;
+    @RestForm String password;
+    @RestForm String password2;
+    @RestForm String firstName;
+    @RestForm String lastName;
+}
+
+
+
+

Check out the RESTEasy Reactive documentation +for more information about form parameters and multi-part.

+
+
+
+

Validation

+
+

You can place your usual Hibernate Validation annotations on the controller methods that receive user data, but +keep in mind that you have to check for validation errors in your method before you do any action that modifies your state. +This allows you to check more things than you can do with just annotations, with richer logic:

+
+
+
+
@POST
+public Response complete(@RestQuery String confirmationCode,
+        @RestForm @NotBlank @Length(max = Util.VARCHAR_SIZE) String userName,
+        @RestForm @NotBlank @Length(min = 8, max = Util.VARCHAR_SIZE) String password,
+        @RestForm @NotBlank @Length(max = Util.VARCHAR_SIZE) String password2,
+        @RestForm @NotBlank @Length(max = Util.VARCHAR_SIZE) String firstName,
+        @RestForm @NotBlank @Length(max = Util.VARCHAR_SIZE) String lastName) {
+    // Find the user for this confirmation code
+    User user = User.findForContirmation(confirmationCode);
+    if(user == null){
+        validation.addError("confirmationCode", "Invalid confirmation code");
+    }
+
+    // Make sure the passwords match
+    validation.equals("password", password, password2);
+
+    // Make sure the username is free
+    if(User.findByUserName(userName) != null){
+        validation.addError("userName", "User name already taken");
+    }
+
+    // If validation failed, redirect to the confirm page
+    if(validationFailed()){
+        confirm(confirmationCode);
+    }
+
+    // Now proceed to complete user registration
+    ...
+}
+
+
+
+

You can use the validation object to trigger additional validation logic and collect errors.

+
+
+

Those errors are then placed in the flash scope by a call to validationFailed() if there +are any errors, and thus preserved when you redirect from your action method to the @GET method +that holds the submitted form, which you can then access in your views using the {#ifError field}{/ifError} +conditional tag, or the {#error field/} tag which accesses the error message for the given field.

+
+
+
+
+
+

Routing, URI mapping, redirects

+
+
+

We have seen how to declare endpoints and how URIs map to them, but very often we need to map from endpoints to +URIs, which Renarde makes easy.

+
+
+

Redirects after POST

+
+

When handling a @POST, @PUT or @DELETE endpoint, it’s good form to redirect to a @GET endpoint after +the action has been done, in order to allow the user to reload the page without triggering the action a second +time, and such redirects are simply done by calling the corresponding @GET endpoint. In reality, the endpoint +will not be called and will be replaced by a redirect that points to the endpoint in question.

+
+
+
+
package rest;
+
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+
+import io.quarkus.qute.CheckedTemplate;
+import io.quarkus.qute.TemplateInstance;
+import io.quarkiverse.renarde.Controller;
+
+public class Application extends Controller {
+
+    @CheckedTemplate
+    static class Templates {
+        public static native TemplateInstance index();
+    }
+
+    @Path("/")
+    public TemplateInstance index() {
+        return Templates.index();
+    }
+
+    @POST
+    public void someAction() {
+        // do something
+        ...
+        // redirect to the index page
+        index();
+    }
+}
+
+
+
+

If there are any parameters that form the URI, you must pass them along:

+
+
+
+
package rest;
+
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+
+import org.jboss.resteasy.reactive.RestPath;
+import org.jboss.resteasy.reactive.RestQuery;
+
+import io.quarkus.qute.CheckedTemplate;
+import io.quarkus.qute.TemplateInstance;
+import io.quarkiverse.renarde.Controller;
+
+public class Application extends Controller {
+
+    @CheckedTemplate
+    static class Templates {
+        public static native TemplateInstance index();
+    }
+
+    @Path("/")
+    public TemplateInstance index() {
+        return Templates.index();
+    }
+
+    public TemplateInstance somePage(@RestPath String id, @RestQuery String q) {
+        // do something with the id and q
+        return Templates.index();
+    }
+
+    @POST
+    public void someAction() {
+        // do something
+        ...
+        // redirect to the somePage page
+        somePage("foo", "bar");
+    }
+}
+
+
+
+

If you want to redirect to another controller, you can use the redirect(Class) method:

+
+
+
+
package rest;
+
+import jakarta.ws.rs.POST;
+
+import io.quarkiverse.renarde.Controller;
+
+public class Application extends Controller {
+
+    @POST
+    public void someAction() {
+        // do something
+        ...
+        // redirect to the Todos.index() endpoint
+        redirect(Todos.class).index();
+    }
+}
+
+
+
+
+

Obtaining a URI in endpoints

+
+

If you don’t want a redirect but need a URI to a given endpoint, you can use the Router.getURI +or Router.getAbsoluteURI methods, by +passing them a method reference to the endpoint you want and the required parameters:

+
+
+
+
package rest;
+
+import java.net.URI;
+
+import org.jboss.resteasy.reactive.RestPath;
+import org.jboss.resteasy.reactive.RestQuery;
+
+import io.quarkus.qute.CheckedTemplate;
+import io.quarkus.qute.TemplateInstance;
+import io.quarkiverse.renarde.Controller;
+import io.quarkiverse.renarde.router.Router;
+
+public class Application extends Controller {
+
+    @CheckedTemplate
+    public static class Templates {
+        public static native TemplateInstance somePage();
+        public static native TemplateInstance otherPage(URI uri);
+    }
+
+    public TemplateInstance somePage(@RestPath String foo, @RestQuery Long bar) {
+        return Templates.somePage();
+    }
+
+    public TemplateInstance otherPage() {
+        // Obtain a URI to somePage
+        URI uri = Router.getURI(Login::somePage, "something", 23l);
+        // pass it on to our view
+        return Templates.otherPage(uri);
+    }
+}
+
+
+
+ + + + + +
+ + +If you plan on using Response.seeOther or Controller.seeOther, make sure to use the Router.getAbsoluteURI +variant, especially if you use the quarkus.http.root-path configuration, otherwise your URIs contain that prefix twice. +
+
+
+
+

Obtaining a URI in Qute views

+
+

If you want a URI to an endpoint in a Qute view, you can use the uri and uriabs namespace with a +call to the endpoint you want to point to:

+
+
+
+
<a class="navbar-brand" href="{uri:Application.index()}">Todo</a>
+
+
+
+

Naturally, you can also pass any required parameters.

+
+
+
+
+
+

Emails

+
+
+
+
<dependency>
+  <groupId>io.quarkus</groupId>
+  <artifactId>quarkus-mailer</artifactId>
+</dependency>
+
+
+
+

Often you will need your actions to send email notifications.You can use Qute for this too, by declaring your +emails in an Emails class:

+
+
+
+
package email;
+
+import io.quarkus.mailer.MailTemplate.MailTemplateInstance;
+import io.quarkus.qute.CheckedTemplate;
+import model.User;
+
+public class Emails {
+
+    private static final String FROM = "Todos <todos@example.com>";
+    private static final String SUBJECT_PREFIX = "[Todos] ";
+
+    @CheckedTemplate
+    static class Templates {
+        public static native MailTemplateInstance confirm(User user);
+    }
+
+    public static void confirm(User user) {
+        Templates.confirm(user)
+        .subject(SUBJECT_PREFIX + "Please confirm your email address")
+        .to(user.email)
+        .from(FROM)
+        .send().await().indefinitely();
+    }
+}
+
+
+
+

You can then send the email from your endpoint by calling Emails.confirm(user).

+
+
+

You can use composition for emails too, by having a pair of base templates for HTML in +src/main/resources/templates/email.html:

+
+
+
+
<!DOCTYPE html>
+
+<html>
+    <head>
+        <meta charset="UTF-8">
+    </head>
+    <body>
+        {#insert /}
+        <p>
+            This is an automated email, you should not reply to it: your mail will be ignored.
+        </p>
+    </body>
+</html>
+
+
+
+

And for text in src/main/resources/templates/email.txt:

+
+
+
+
{#insert /}
+
+This is an automated email, you should not reply to it: your mail will be ignored.
+
+
+
+

You can then use those templates in your emails in src/main/resources/templates/Emails/confirm.html:

+
+
+
+
{#include email.html }
+
+<p>
+ Welcome to Todos.
+</p>
+
+<p>
+ You received this email because someone (hopefully you) wants to register on Todos.
+</p>
+
+<p>
+ If you don't want to register, you can safely ignore this email.
+</p>
+
+<p>
+ If you want to register, <a href="{uriabs:Login.confirm(user.confirmationCode)}">complete your registration</a>.
+</p>
+{/include}
+
+
+
+

And for text in src/main/resources/templates/Emails/confirm.txt:

+
+
+
+
{#include email.txt}
+
+Welcome to Todos.
+
+You received this email because someone (hopefully you) wants to register on Todos.
+
+If you don't want to register, you can safely ignore this email.
+
+If you want to register, complete your registration by going to the following address:
+
+{uriabs:Login.confirm(user.confirmationCode)}
+{/include}
+
+
+
+

Note that in emails you will want to use the uriabs namespace for absolute URIs and not relative ones, +otherwise the links won’t work for your email recipients.

+
+
+

You can find more information in the Quarkus mailer documentation.

+
+
+
+
+

Localisation / Internationalisation

+
+
+

You can declare your default language and supported languages in src/main/resources/application.properties:

+
+
+
+
# This is the default locale for your application
+quarkus.default-locale=en
+# These are the supported locales (should include the default locale, but order is not important)
+quarkus.locales=en,fr
+
+
+
+

Next, you can declare your default language messages in the src/main/resources/messages.properties file:

+
+
+
+
# A simple message
+hello=Hello World
+# A parameterised message for your view
+views_Application_index_greet=Hello %s
+
+
+
+

Declare your other language translations in the src/main/resources/messages_fr.properties file:

+
+
+
+
hello=Bonjour Monde
+views_Application_index_greet=Salut %s
+
+
+
+

Now you can use these translated messages in your controller:

+
+
+
+
public static class Application extends Controller {
+
+    @CheckedTemplate
+    public static class Templates {
+        public static native TemplateInstance index(String name);
+    }
+
+    public TemplateInstance index() {
+        return Templates.index("Stef");
+    }
+
+    public String hello() {
+		return i18n.formatMessage("hello");
+    }
+}
+
+
+
+

Or in your template:

+
+
+
+
With no parameter:
+{m:hello}
+With parameters:
+{m:views_Application_index_greet(name)}
+
+
+
+

Selecting the language

+
+

The current language for a request will depend on the following (in order):

+
+
+
    +
  1. +

    The _renarde_locale cookie, if set

    +
  2. +
  3. +

    The Accept-Language HTTP header, if set, +which defines an ordered list of languages by user preference. We will select a best matching language from the set +of quarkus.locales.

    +
  4. +
  5. +

    If nothing else, we default to the default language as set by quarkus.default-locale, which defaults to en_US.

    +
  6. +
+
+
+

You can override the user’s language with a cookie by calling i18n.set(locale):

+
+
+
+
public static class Application extends Controller {
+
+    @CheckedTemplate
+    public static class Templates {
+        public static native TemplateInstance index();
+    }
+
+    public void index() {
+        return Templates.index();
+    }
+
+    @POST
+    public void french() {
+        i18n.set("fr");
+        index();
+    }
+
+    @POST
+    public void english() {
+        i18n.set("en");
+        index();
+    }
+}
+
+
+
+
+
+
+

Flash scope

+
+
+

If you need to pass values from one endpoint to another request after a redirect, you can use the Flash scope. +Usually this is done in a @POST endpoint, by filling the Flash scope with either errors or messages, +before trigerring a redirect to the right @GET endpoint.

+
+
+

You can push values in the Flash scope in an endpoint using the flash(name, value) method, or using the +Flash injectable component.

+
+
+

You can read values from the Flash scope in your Qute views using the {flash:name} namespace.

+
+
+

The Flash scope only lasts from one request to the next and is cleared at each request.

+
+
+
+
+

htmx

+
+
+

If you want to use htmx with Renarde, we added an extra layer to make things more convenient:

+
+
+
+
public class Application extends HxController {
+
+    @CheckedTemplate
+    public static class Templates {
+        public static native TemplateInstance foo(int a, int b);
+        public static native TemplateInstance foo$sectionA(int a); (1)
+        public static native TemplateInstance foo$sectionB(int b); (1)
+
+        public static native TemplateInstance bar();
+    }
+
+    public TemplateInstance foo() {
+        if (isHxRequest()) { (2)
+            return  concatTemplates( (3)
+                    Templates.foo$sectionA(1),
+                    Templates.foo$sectionB(2)
+            );
+        }
+        return Templates.foo(1, 2);
+    }
+
+    public TemplateInstance bar() {
+        onlyHxRequest(); (4)
+        this.hx(HxResponseHeader.TRIGGER, "refresh"); (5)
+        return Templates.bar();
+    }
+}
+
+
+
+ + + + + + + + + + + + + + + + + + + + + +
1Qute fragments declarations
2Check if this is a htmx request by looking for the HX-Request header or using flash data for redirects
3Out of band swap with different templates or fragments
4Only Hx requests are allowed, else it will fail with a BAD_REQUEST error
5Flag the response with an htmx response header
+
+
+

For CSRF Security, you need a form parameter with the CSRF Token. By adding this 👇 when doing a hx-post/put/delete, The Hx requests will be sent with the CSRF parameter:

+
+
+
+
<div hx-post"/hello" hx-vals='{"{inject:csrf.parameterName}": "{inject:csrf.token}"}'>
+
+
+
+

Alternatively, you can use hx-headers on the <body> to make all hx requests secured with CSRF by adding a custom header:

+
+
+
+
<body hx-headers='{"{inject:csrf.headerName}":"{inject:csrf.token}"}'>
+</body>
+
+
+
+

Some example projects with Quarkus Renarde and htmx: +- a demo note-taking web app +- a board game

+
+
+
+
+

Generating barcodes

+
+
+

If you import the optional quarkus-renarde-barcode module, you can generate barcodes in your views or controllers.

+
+
+
+
<dependency>
+  <groupId>io.quarkiverse.renarde</groupId>
+  <artifactId>quarkus-renarde-barcode</artifactId>
+  <version>3.0.9</version>
+</dependency>
+
+
+
+

We support the following barcode types, with custom Qute tags:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TagDescription

{#ean13 value/}

Generate an EAN 13 barcode.

{#ean8 value/}

Generate an EAN 8 barcode.

{#upca value/}

Generate an UPC A barcode.

{#upce value/}

Generate an UPC E barcode.

{#code39 value/}

Generate a Code 39 barcode.

{#code93 value/}

Generate a Code 93 barcode.

{#code128 value/}

Generate a Code 128 barcode.

{#qrcode value/}

Generate a QR Code barcode.

{#datamatrix value/}

Generate a Data Matrix barcode.

+
+

All these tags accept an optional size parameter that sets both the width and height of the barcode +in pixels, or width and height parameters to specify different values.These values all default +to 200 pixels.

+
+
+

The generated barcodes will be inline HTML images using the Data URI +scheme as an embedded PNG image.

+
+
+

If you wish to generate barcode images as PNG bytes or other formats, you can use the io.quarkiverse.renarde.barcode.Barcode +helper class which allows you to generate bytecodes from your controllers.

+
+
+
+
+

Generating PDF documents

+
+
+

If you import the optional quarkus-renarde-pdf module, you can generate PDF documents in your views.

+
+
+
+
<dependency>
+  <groupId>io.quarkiverse.renarde</groupId>
+  <artifactId>quarkus-renarde-pdf</artifactId>
+  <version>3.0.9</version>
+</dependency>
+
+
+
+

There are lots of complicated ways to generate PDFs, but the simplest is to use the versatility of HTML for rendering +and its printing support. So, very much like you can print HTML files using your browser, and there are special rendering +rules in CSS, you do the same in Renarde PDF: you render your page in HTML, and simply add @Produces(Pdf.APPLICATION_PDF) +to your controller to produce a PDF file:

+
+
+
+
public class Application extends Controller {
+
+    @CheckedTemplate
+    public static class Templates {
+        public static native TemplateInstance page();
+    }
+
+    // This will return a PDF file to the caller
+    @Produces(Pdf.APPLICATION_PDF)
+    public TemplateInstance pdf() {
+        return Templates.page();
+    }
+
+    // This will return HTML to the caller
+    public TemplateInstance html() {
+        return Templates.page();
+    }
+}
+
+
+
+

This way, the http://localhost:8080/Application/pdf and http://localhost:8080/Application/html +pages will render the same document in either PDF or HTML, which allows you to use your browser and its +developer tools to fine-tweak your document, until you’re ready to turn it into a PDF, which is +much harder to fine-tweak.

+
+
+

As for the templates/Application/page.html template, it’s regular HTML, but you can also +take advantage of the CSS print support +to set things like document page size, odd/even page margins, etc…:

+
+
+
+
<!DOCTYPE html>
+<html>
+  <head>
+    <title>This is the PDF document title</title>
+    <style>
+/* Override page size, and set page margin */
+@page {
+  size: 15cm 9cm;
+  margin: 1cm;
+}
+    </style>
+  </head>
+  <body>
+    Some PDF text.
+  </body>
+</html>
+
+
+
+

Note that the default page size is A4.

+
+
+
+
+

Backoffice

+
+
+ + + + + +
+ + +This is an experimental API and feature, subject to change. +
+
+
+

Renarde can automatically generate a UI for editing your entities. This can be useful to expose +access to your entities to authenticated users who are trained enough to understand how to navigate +your model.

+
+
+

You must import the optional quarkus-renarde-backoffice module.

+
+
+
+
<dependency>
+  <groupId>io.quarkiverse.renarde</groupId>
+  <artifactId>quarkus-renarde-backoffice</artifactId>
+  <version>3.0.9</version>
+</dependency>
+
+
+
+

Now, you can opt-in to specify which of your entities will be exposed via the generated backoffice by +implementing the BackofficeController<X> type for each entity type X to expose:

+
+
+
+
package rest;
+
+import io.quarkiverse.renarde.backoffice.BackofficeController;
+import io.quarkus.security.Authenticated;
+import model.User;
+
+@Authenticated
+public class Users extends BackofficeController<User> {
+
+}
+
+
+
+ + + + + +
+ + +This allows you to place authentication restrictions to your entities, but any other annotation +works too. +
+
+
+ + + + + +
+ + +Make sure to secure your backoffice, otherwise everyone will have access to your database! +
+
+
+

In order to also secure the backoffice index page, you may extend the BackofficeIndexController:

+
+
+
+
package rest;
+
+import io.quarkiverse.renarde.backoffice.BackofficeIndexController;
+import io.quarkus.security.Authenticated;
+
+@Authenticated
+public class Backoffice extends BackofficeIndexController {
+
+}
+
+
+
+

This is all you have to do!

+
+
+

Now you can sit back, relax and head over to http://localhost:8080/_renarde/backoffice/index and +see the list of entity types you have enlisted in the backoffice:

+
+
+
+backoffice index +
+
+
+

If you select an entity type, you are presented with the list of entities of this type:

+
+
+
+backoffice entity list +
+
+
+

From there, you can either create or edit one entity:

+
+
+
+backoffice entity edit +
+
+
+

The generated forms and controllers support the following attribute types:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Type/AnnotationForm element

boolean,Boolean

Checkbox

byte,short,int,Integer,long,Long,double,float

Number input

char

Text field of length 1

String with @Column(length > 255), or @Length(max > 255) or @Size(max > 255) or @JdbcTypeCode(Types.LONGVARCHAR) or @Lob

Text area

String (otherwise)

Text input

byte[], Blob, NamedBlob

File input

@JdbcTypeCode(SqlTypes.JSON)

Text area

Date, LocalDateTime

DateTime input

LocalDate

Date input

LocalTime

Time input

Timestamp

Timestamp input

Enum subtype, @Enumerated

Select input with enum values

@OneToMany

Multiple-select input with possible values

@ManyToMany

Multiple-select input with possible values

@ManyToOne, @OneToOne

Select input with possible values

+
+
+
+

Database Transport

+
+
+ + + + + +
+ + +This is an experimental API and feature, subject to change. +
+
+
+

Renarde can help you transport your entities' data from one place to another, which is a notoriously +complex thing to do with entities with relations. Most people who need to serialise an entity to a format, +such as JSON, need to annotate their model with special annotations, or write a custom serialiser and +deserialiser, because out of the box, model entities have too many relations to translate directly to JSON.

+
+
+

On the other hand, if you do not care what the format of the serialised entity looks like, Renarde can +automatically generate the proper serialisers and deserialisers for your entities, to make sure that +you can serialise and deserialise them to JSON trivially using the Database Transporter module.

+
+
+

This way, you can easily expose some or all of your data from your production or test instances, such +that DEV instances will automatically pick it up and seed their DEV database, which makes for much simpler +development set-up, with useful data.

+
+
+

You must import the optional quarkus-renarde-transporter module.

+
+
+
+
<dependency>
+  <groupId>io.quarkiverse.renarde</groupId>
+  <artifactId>quarkus-renarde-transporter</artifactId>
+  <version>3.0.9</version>
+</dependency>
+
+
+
+

Now, if you wish to expose your serialised entities somewhere, you may write an endpoint like +this one:

+
+
+
+
package rest;
+
+import io.quarkiverse.renarde.Controller;
+import io.quarkiverse.renarde.transporter.DatabaseTransporter;
+import jakarta.transaction.Transactional;
+import model.Configuration;
+import model.Organiser;
+import model.PreviousSpeaker;
+import model.PricePack;
+import model.PricePackDate;
+import model.Slot;
+import model.Speaker;
+import model.Sponsor;
+import model.Talk;
+import model.TalkTheme;
+import model.TalkType;
+import model.TemporarySlot;
+import model.Track;
+
+public class Serialiser extends Controller {
+
+  @Transactional
+  public String json() {
+    return DatabaseTransporter.export((entityType, fieldName, value) -> {
+        // this will sanitise some data we wish to remove from the export
+      if(entityType == Speaker.class) {
+        // make sure we remove confidential info
+        switch(fieldName) {
+        case "email":
+        case "phone":
+          return null;
+        }
+      }
+      return value;
+    },
+    // we want all of these entities
+        Configuration.listAll(),
+        Organiser.listAll(),
+        PreviousSpeaker.listAll(),
+        PricePack.listAll(),
+        PricePackDate.listAll(),
+        Slot.listAll(),
+        Speaker.listAll(),
+        Sponsor.listAll(),
+        Talk.listAll(),
+        TalkTheme.listAll(),
+        TalkType.listAll(),
+        TemporarySlot.listAll(),
+        Track.listAll());
+  }
+}
+
+
+
+ + + + + +
+ + +Remember to not expose sensitive or private data publicly, or you should secure your endpoint. +
+
+
+

Now, if you want your DEV instances to pick up the data automatically from production or test servers, you can +write the following startup class:

+
+
+
+
package util;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UncheckedIOException;
+import java.net.URL;
+import java.nio.charset.StandardCharsets;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+
+import io.quarkiverse.renarde.transporter.DatabaseTransporter;
+import io.quarkus.elytron.security.common.BcryptUtil;
+import io.quarkus.hibernate.orm.panache.PanacheEntity;
+import io.quarkus.hibernate.orm.panache.PanacheEntityBase;
+import io.quarkus.logging.Log;
+import io.quarkus.runtime.LaunchMode;
+import io.quarkus.runtime.StartupEvent;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.enterprise.event.Observes;
+import jakarta.transaction.Transactional;
+import model.Configuration;
+import model.Organiser;
+import model.PreviousSpeaker;
+import model.PricePack;
+import model.PricePackDate;
+import model.Slot;
+import model.Speaker;
+import model.Sponsor;
+import model.Talk;
+import model.TalkTheme;
+import model.TalkType;
+import model.TemporarySlot;
+import model.Track;
+import model.User;
+
+@ApplicationScoped
+public class Startup {
+
+  @ConfigProperty(name = "dev-auto-setup.url")
+  Optional<String> devAutoSetupUrl;
+
+  /**
+   * This method is executed at the start of your application
+   */
+  @Transactional
+  public void start(@Observes StartupEvent evt) {
+    // in DEV mode we seed some data
+    if(LaunchMode.current() == LaunchMode.DEVELOPMENT) {
+      if(devAutoSetupUrl.isPresent()) {
+        String dataSource = devAutoSetupUrl.get();
+        Log.infof("Loading data from %s", dataSource);
+        try {
+          try(InputStream is = new URL(dataSource).openStream()){
+            String json = new String(is.readAllBytes(), StandardCharsets.UTF_8);
+            // make sure we delete all previous test data
+            Configuration.deleteAll();
+            Organiser.deleteAll();
+            PreviousSpeaker.deleteAll();
+            PricePack.deleteAll();
+            PricePackDate.deleteAll();
+            Slot.deleteAll();
+            Speaker.deleteAll();
+            Sponsor.deleteAll();
+            Talk.deleteAll();
+            TalkTheme.deleteAll();
+            TalkType.deleteAll();
+            TemporarySlot.deleteAll();
+            Track.deleteAll();
+            Map<Class<?>,List<? extends PanacheEntityBase>> entities = DatabaseTransporter.importEntities(json);
+            // Load the entities in the proper order: relation targets before relation owners
+            for (Class<? extends PanacheEntityBase> entityType : DatabaseTransporter.sortedEntityTypes()) {
+              List<? extends PanacheEntityBase> list = entities.get(entityType);
+              if(list != null) {
+                for (PanacheEntityBase entity : list) {
+                  // remove the ID, to get a fresh entity
+                  ((PanacheEntity)entity).id = null;
+                  entity.persist();
+                }
+              }
+            }
+          }
+        } catch (IOException e) {
+          throw new UncheckedIOException(e);
+        }
+      }
+    }
+  }
+}
+
+
+
+

And voilà! Your data is trivally transported from one server to another, using JSON, in a format +you don’t care about ♥.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-renarde/dev/concepts.html b/quarkus-renarde/dev/concepts.html new file mode 100644 index 0000000000..9d315d9c3b --- /dev/null +++ b/quarkus-renarde/dev/concepts.html @@ -0,0 +1,1662 @@ + + + + + + Renarde Web Framework - Main Concepts :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Renarde renarde head Web Framework - Main Concepts

+
+

Models

+
+
+

By convention, you can place your model classes in the model package, but anywhere else works just as well.We +recommend using Hibernate ORM with Panache.Here’s an example entity for our sample Todo application:

+
+
+
+
package model;
+
+import java.util.Date;
+import java.util.List;
+
+import jakarta.persistence.Entity;
+import jakarta.persistence.ManyToOne;
+
+import io.quarkus.hibernate.orm.panache.PanacheEntity;
+
+@Entity
+public class Todo extends PanacheEntity {
+
+    @ManyToOne
+    public User owner;
+
+    public String task;
+
+    public boolean done;
+
+    public Date doneDate;
+
+    public static List<Todo> findByOwner(User user) {
+        return find("owner = ?1 ORDER BY id", user).list();
+    }
+}
+
+
+
+
+
+

Controllers

+
+
+

By convention, you can place your controllers in the rest package, but anywhere else works just as well.You +have to extend the Controller class in order to benefit from extra easy endpoint declarations and reverse-routing, +but that superclass also gives you useful methods.We usually have one controller per model class, so we tend to use +the plural entity name for the corresponding controller:

+
+
+
+
package rest;
+
+import java.util.Date;
+import java.util.List;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.ws.rs.POST;
+
+import org.jboss.resteasy.reactive.RestForm;
+import org.jboss.resteasy.reactive.RestPath;
+
+import io.quarkus.qute.CheckedTemplate;
+import io.quarkus.qute.TemplateInstance;
+import model.Todo;
+
+public class Todos extends Controller {
+
+    @CheckedTemplate
+    static class Templates {
+        public static native TemplateInstance index(List<Todo> todos);
+    }
+
+    public TemplateInstance index() {
+        // list every todo
+        List<Todo> todos = Todo.listAll();
+        // render the index template
+        return Templates.index(todos);
+    }
+
+    @POST
+    public void delete(@RestPath Long id) {
+        // find the Todo
+        Todo todo = Todo.findById(id);
+        notFoundIfNull(todo);
+        // delete it
+        todo.delete();
+        // send loving message
+        flash("message", "Task deleted");
+        // redirect to index page
+        index();
+    }
+
+    @POST
+    public void done(@RestPath Long id) {
+        // find the Todo
+        Todo todo = Todo.findById(id);
+        notFoundIfNull(todo);
+        // switch its done state
+        todo.done = !todo.done;
+        if(todo.done)
+            todo.doneDate = new Date();
+        // send loving message
+        flash("message", "Task updated");
+        // redirect to index page
+        index();
+    }
+
+    @POST
+    public void add(@NotBlank @RestForm String task) {
+        // check if there are validation issues
+        if(validationFailed()) {
+            // go back to the index page
+            index();
+        }
+        // create a new Todo
+        Todo todo = new Todo();
+        todo.task = task;
+        todo.persist();
+        // send loving message
+        flash("message", "Task added");
+        // redirect to index page
+        index();
+    }
+}
+
+
+
+

Methods

+
+

Every public method is a valid endpoint. If it has no HTTP method annotation (@GET, @HEAD, @POST, @PUT, @DELETE) then +it is assumed to be a @GET method.

+
+
+

Most @GET methods will typically return a TemplateInstance for rendering an HTML server-side template, and should not +modify application state.

+
+
+

Controller methods annotated with @POST, @PUT and @DELETE will typically return void and trigger a redirect to a @GET +method after they do their action. This is not mandatory, you can also return a TemplateInstance if you want, but it is good form +to use a redirect to avoid involuntary actions when browsers reload the page. Those methods also get an implicit @Transactional +annotation so you don’t need to add it.

+
+
+

If your controller is not annotated with @Path it will default to a path using the class name. If your controller method is not +annotated with @Path it will default to a path using the method name. The exception is if you have a @Path annotation on the +method with an absolute path, in which case the class path part will be ignored. Here’s a list of example annotations and how they +result:

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Class declarationMethod declarationURI

class Foo

public TemplateInstance bar()

Foo/bar

@Path("f") class Foo

public TemplateInstance bar()

f/bar

class Foo

@Path("b") public TemplateInstance bar()

Foo/b

@Path("f") class Foo

@Path("b") public TemplateInstance bar()

f/b

class Foo

@Path("/bar") public TemplateInstance bar()

bar

@Path("f") class Foo

@Path("/bar") public TemplateInstance bar()

f/bar

+
+

Furthermore, if you specify path parameters that are not present in your path annotations, they will be automatically +appended to your path:

+
+
+
+
public class Orders extends Controller {
+
+    // The URI will be Orders/get/{owner}/{id}
+    public TemplateInstance get(@RestPath String owner, @RestPath Long id) {
+    }
+
+    // The URI will be /orders/{owner}/{id}
+    @Path("/orders")
+    public TemplateInstance otherGet(@RestPath String owner, @RestPath Long id) {
+    }
+}
+
+
+
+
+
+
+

Views

+
+
+

You can place your Qute views in the src/main/resources/templates folder, +using the {className}/{methodName}.html naming convention.

+
+
+

Every controller that has views should declare them with a nested static class annotated with @CheckedTemplate:

+
+
+
+
public class Todos extends Controller {
+
+    @CheckedTemplate
+    static class Templates {
+        public static native TemplateInstance index(List<Todo> todos);
+    }
+
+    public TemplateInstance index() {
+        // list every todo
+        List<Todo> todos = Todo.listAll();
+        // render the index template
+        return Templates.index(todos);
+    }
+}
+
+
+
+

Here we’re declaring the Todos/index.html template, specifying that it takes a todos parameter of type +List<Todo> which allows us to validate the template at build-time.

+
+
+

Templates are written in Qute, and you can also declare imported templates in order to validate them using a +toplevel class, such as the main.html template:

+
+
+
+
package rest;
+
+import io.quarkus.qute.CheckedTemplate;
+import io.quarkus.qute.TemplateInstance;
+
+@CheckedTemplate
+public class Templates {
+    public static native TemplateInstance main();
+}
+
+
+
+

Template composition

+
+

Typical web applications will have a main template for their layout and use composition in every method. For example, we +can declare the following main template in main.html:

+
+
+
+
<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <title>{#insert title /}</title>
+        <meta charset="UTF-8">
+        <link rel="stylesheet" media="screen" href="/stylesheets/main.css">
+        {#insert moreStyles /}
+        <script src="/javascripts/main.js" type="text/javascript" charset="UTF-8"></script>
+        {#insert moreScripts /}
+    </head>
+    <body>
+        {#insert /}
+    </body>
+</html>
+
+
+
+

And then use it in our Todos/index.html template to list the todo items:

+
+
+
+
{#include main.html }
+{#title}Todos{/title}
+
+<table class="table">
+  <thead>
+    <tr>
+      <th>#</th>
+      <th>Task</th>
+    </tr>
+  </thead>
+  <tbody>
+    {#for todo in todos}
+    <tr>
+      <th>{todo.id}</th>
+      <td>{todo.task}</td>
+    </tr>
+    {/for}
+  </tbody>
+</table>
+
+{/include}
+
+
+
+
+

Standard tags

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TagDescription

for/each

Iterate over collections

if/else

Conditional statement

switch/case

Switch statement

with

Adds value members to the local scope

let

Declare local variables

include/insert

Template composition

+
+
+

User tags

+
+

If you want to declare additional tags in order to be able to repeat them in your templates, simply place them in the +templates/tags folder. For example, here is our user.html tag:

+
+
+
+
<span class="user-link" title="{it.userName}">
+{#if img??}
+{#gravatar it.email size=size.or(20) default='mm' /}
+{/if}
+{it.userName}</span>
+
+
+
+

Which allows us to use it in every template:

+
+
+
+
{#if inject:user}
+    {#if inject:user.isAdmin}<span class="bi-star-fill" title="You are an administrator"></span>{/if}
+    {#user inject:user img=true size=20/}
+{/if}
+
+
+
+

You can pass parameters to your template with name=value pairs, and the first unnamed parameter value becomes available +as the it parameter.

+
+
+

See the Qute documentation for more information.

+
+
+
+

Renarde tags

+
+

Renarde comes with a few extra tags to make your life easier:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TagDescription

{#authenticityToken/}

Generate a hidden HTML form element containing a CSRF token to be matched in the next request.

{#error 'field'/}

Inserts the error message for the given field name

{#form uri method='POST' class='css' id='id'}…​{/form}

Generates an HTML form for the given URI, method (defaults to POST) and optional CSS classes and IDs. +Includes a CSRF token.

{#gravatar email size='mm'/}

Inserts a gravatar image for the given email, with optional size (defaults to mm)

{#ifError 'field'}…​{/ifError}

Conditional statement executed if there is an error for the given field

+
+
+

Extension methods

+
+

If you need additional methods to be registered to be used on your template expressions, you can declare static methods in +a class annotated with @TemplateExtension:

+
+
+
+
package util;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+
+import io.quarkus.qute.TemplateExtension;
+
+@TemplateExtension
+public class JavaExtensions {
+
+    public static boolean isRecent(Date date){
+        Date now = new Date();
+        Calendar cal = new GregorianCalendar();
+        cal.add(Calendar.MONTH, -6);
+        Date sixMonthsAgo = cal.getTime();
+        return date.before(now) && date.after(sixMonthsAgo);
+    }
+
+}
+
+
+
+

This one declares an additional method on the Date type, allowing you to test whether a date is recent or not:

+
+
+
+
{#if todo.done && todo.doneDate.isRecent()}
+    This was done recently!
+{/if}
+
+
+
+
+

Renarde extension methods

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Target typeMethodDescription

Date

format()

Formats the date to the dd/MM/yyyy format

Date

internetFormat()

Formats the date to the yyyy-MM-dd format

Date

future()

Returns true if the date is in the future

Date

since()

Formats the date in terms of X seconds/minutes/hours/days/months/years ago

String

md5()

Returns an MD5 hash of the given string

Object

instanceOf(className)

Returns true if the given object is exactly of the specified class name

+
+
+

Global Variables

+
+

If you need to pass variables to every template, instead of passing them manually to every view, you can define them as +methods in a class annotated with @TemplateGlobal:

+
+
+
+
package util;
+
+import io.quarkus.qute.TemplateGlobal;
+
+@TemplateGlobal
+public class Globals {
+
+    public static String lineSeparator(){
+        return System.lineSeparator();
+    }
+
+}
+
+
+
+

This one declares a lineSeparator global variable that you can use in the views:

+
+
+
+
This system uses this line separator: {lineSeparator}
+
+
+
+
+

Renarde Predefined Global Variables

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeNameDescription

String

request.url

The absolute request url, including scheme, host, port, path

String

request.method

The request method (GET, POST…)

String

request.scheme

The request HTTP scheme (http, https)

String

request.authority

The request authority part (ex: localhost:8080)

String

request.host

The request host name (ex: localhost)

int

request.port

The request port (ex: 80)

String

request.path

The request path (ex: /Application/index)

String

request.action

The controller endpoint class and method (ex: Application.index)

boolean

request.ssl

True if the request is served over SSL/HTTPS

String

request.remoteAddress

The remote client IP address

String

request.remoteHost

The remote client Host name, if available

int

request.remotePort

The remote client port

+
+
+

External CSS, JavaScript libraries

+
+

You can use webjars to provide third-party JavaScript or CSS. For example, here is how you can import Bootstrap +and Bootstrap-icons in your pom.xml:

+
+
+
+
<dependency>
+  <groupId>org.webjars</groupId>
+  <artifactId>bootstrap</artifactId>
+  <version>5.1.3</version>
+</dependency>
+<dependency>
+  <groupId>org.webjars.npm</groupId>
+  <artifactId>bootstrap-icons</artifactId>
+  <version>1.7.0</version>
+</dependency>
+<dependency>
+  <groupId>io.quarkus</groupId>
+  <artifactId>quarkus-webjars-locator</artifactId>
+</dependency>
+
+
+
+

After that, you can include them in your Qute templates with:

+
+
+
+
<head>
+    <link rel="stylesheet" media="screen" href="/webjars/bootstrap/css/bootstrap.min.css">
+    <link rel="stylesheet" media="screen" href="/webjars/bootstrap-icons/font/bootstrap-icons.css">
+    <script src="/webjars/bootstrap/js/bootstrap.min.js" type="text/javascript" charset="UTF-8"></script>
+</head>
+
+
+
+

Look at https://mvnrepository.com/artifact/org.webjars for the list of available options.

+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-renarde/dev/config-reference.html b/quarkus-renarde/dev/config-reference.html new file mode 100644 index 0000000000..cc8bf97088 --- /dev/null +++ b/quarkus-renarde/dev/config-reference.html @@ -0,0 +1,992 @@ + + + + + + Renarde Web Framework Config :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Renarde renarde head Web Framework Config

+
+

Configuration Reference

+
+ +
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-renarde/dev/includes/attributes.html b/quarkus-renarde/dev/includes/attributes.html new file mode 100644 index 0000000000..28ab49333f --- /dev/null +++ b/quarkus-renarde/dev/includes/attributes.html @@ -0,0 +1,982 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-renarde/dev/includes/quarkus-renarde.html b/quarkus-renarde/dev/includes/quarkus-renarde.html new file mode 100644 index 0000000000..bd2f8797bf --- /dev/null +++ b/quarkus-renarde/dev/includes/quarkus-renarde.html @@ -0,0 +1,1015 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Option to control the name of the cookie used to redirect the user back to where he wants to get access to.

+
+
+

Environment variable: QUARKUS_RENARDE_AUTH_LOCATION_COOKIE

+
+
+

string

quarkus-redirect-location

+
+
+
+
+ + + + + + + diff --git a/quarkus-renarde/dev/index.html b/quarkus-renarde/dev/index.html new file mode 100644 index 0000000000..bae6da5a49 --- /dev/null +++ b/quarkus-renarde/dev/index.html @@ -0,0 +1,1069 @@ + + + + + + Renarde Web Framework - Getting Started :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Renarde renarde head Web Framework - Getting Started

+
+
+
+
+
+
+Renarde +
+
+
+

Renarde renarde head is a server-side Web Framework based on Quarkus, Qute, +Hibernate and RESTEasy Reactive.

+
+
+
+
<dependency>
+  <groupId>io.quarkiverse.renarde</groupId>
+  <artifactId>quarkus-renarde</artifactId>
+  <version>3.0.9</version>
+</dependency>
+
+
+
+
+
+
+
+

First: an example

+
+
+

Let’s see how you can quickly build a Web Application with Renarde. Let’s start with a Controller:

+
+
+
+
package rest;
+
+import jakarta.ws.rs.Path;
+
+import io.quarkus.qute.CheckedTemplate;
+import io.quarkus.qute.TemplateInstance;
+import io.quarkiverse.renarde.Controller;
+
+public class Application extends Controller {
+
+    @CheckedTemplate
+    static class Templates {
+        public static native TemplateInstance index();
+    }
+
+    @Path("/")
+    public TemplateInstance index() {
+        return Templates.index();
+    }
+}
+
+
+
+

A Controller is the logic class that binds URIs to actions and views. They are almost like regular +JAX-RS endpoints, +but you opt-in to special magic by extending the Controller class, which gives you nice methods, +but also super friendly behaviour.

+
+
+

In this Controller we declare a Qute template, and map the / to it.

+
+
+

We can then define the main page in src/main/resources/templates/Application/index.html:

+
+
+
+
<!DOCTYPE html>
+<html lang="en">
+  <body>
+    Hello, World!
+  </body>
+</html>
+
+
+
+

Now if you navigate to your application at http://localhost:8080 you will see Hello, World! rendered.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-renarde/dev/security.html b/quarkus-renarde/dev/security.html new file mode 100644 index 0000000000..bfad8dee7e --- /dev/null +++ b/quarkus-renarde/dev/security.html @@ -0,0 +1,2690 @@ + + + + + + Renarde Web Framework Security guide :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Renarde renarde head Web Framework Security guide

+
+
+
+

Renarde renarde head can help you deal with security and user registration, either manually, using OIDC, or +a mix of both.

+
+
+
+
+

CSRF

+
+
+

Renarde comes with built-in support for Cross-Site Request Forgery (CSRF) protection, +via the (already imported) quarkus-csrf-reactive module dependency.

+
+
+

To be safe, make sure that all your GET, HEAD and OPTIONS endpoints do not alter application state, and +always include a CSRF token to your POST, PUT, DELETE (and other) endpoints. On your endpoint side, you +do not need to do anything, we will check the token for you. But on your form end, you need to include the CSRF +token, which can be done by using the {#form/} tag to create your form, or the +{#authenticityToken/} to generate a hidden form element with the token, or by writing +the form element manually:

+
+
+
+
<input type="hidden" name="{inject:csrf.parameterName}" value="{inject:csrf.token}"/>
+
+
+
+

Tests when using CSRF

+
+

When writing tests, if you are using @QuarkusTest and +RestAssured to test endpoints secured with CSRF protection, +you will need to make sure you obtain and pass the appropriate CSRF token to your POST (and similar) endpoints.

+
+
+

There are two ways to deal with this.

+
+
+
+

The easy way

+
+

Import the quarkus-renarde-test module:

+
+
+
+
<dependency>
+  <groupId>io.quarkiverse.renarde</groupId>
+  <artifactId>quarkus-renarde-test</artifactId>
+  <version>3.0.9</version>
+  <scope>test</scope>
+</dependency>
+
+
+
+

This will automatically register a JUnit Extension +which makes sure RestAssured has a filter set up for each of your +test methods, which will pass a generated valid CSRF token as both cookie and form parameter. Not that this is only +done for POST (and related) methods which contain either no body, or a form body +(url-encoded or multipart).

+
+
+ + + + + +
+ + +you can use the @DisableCSRFFilter annotation on your test method or class in order to disable the CSRF +filter. For example, if you want to handle it yourself. +
+
+
+
+

The hard way

+
+

You will need to obtain a CSRF token from any GET endpoint, and resend it as part of your POST requests:

+
+
+
+
@Test
+public void test() {
+  String csrfToken = RestAssured
+    .given()
+    .when()
+    .get("/Application/index")
+    .then()
+    .extract().cookie("csrf-token");
+  // now we can call POST
+  RestAssured
+    .given()
+    .when()
+    // for CSRF protection
+    .cookie("csrf-token", csrfToken)
+    .param("csrf-token", csrfToken)
+    // for your actual endpoint
+    .param("param", "value")
+    .post("/Application/doSomething")
+    .then()
+    .statusCode(200);
+}
+
+
+
+
+
+
+

Custom authentication with JWT

+
+
+

In order to handle your own authentication by storing users in your database, you can use JWT tokens. +Start with importing the renarde-security module:

+
+
+
+
<dependency>
+  <groupId>io.quarkiverse.renarde</groupId>
+  <artifactId>quarkus-renarde-security</artifactId>
+  <version>3.0.9</version>
+</dependency>
+
+
+
+

And set those configuration values:

+
+
+
+
# Must be set to get proper error reporting
+quarkus.http.auth.proactive=false
+
+
+
+

Your entity should extend RenardeUser and can look like this:

+
+
+
+
package model;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.EnumType;
+import jakarta.persistence.Enumerated;
+import jakarta.persistence.Table;
+
+import io.quarkiverse.renarde.security.RenardeUser;
+import io.quarkus.hibernate.orm.panache.PanacheEntity;
+
+@Entity
+@Table(name = "user_table")
+public class User extends PanacheEntity implements RenardeUser {
+
+    @Column(nullable = false)
+    public String email;
+    @Column(unique = true)
+    public String userName;
+    public String password;
+    public String firstName;
+    public String lastName;
+    public boolean isAdmin;
+
+    @Column(unique = true)
+    public String confirmationCode;
+
+    @Column(nullable = false)
+    @Enumerated(EnumType.STRING)
+    public UserStatus status;
+
+    public boolean isRegistered(){
+        return status == UserStatus.REGISTERED;
+    }
+
+    @Override
+    public Set<String> getRoles() {
+        Set<String> roles = new HashSet<>();
+        if(isAdmin) {
+            roles.add("admin");
+        }
+        return roles;
+    }
+
+    @Override
+    public String getUserId() {
+        return userName;
+    }
+
+    //
+    // Helpers
+
+    public static User findUnconfirmedByEmail(String email) {
+        return find("LOWER(email) = ?1 AND status = ?2", email.toLowerCase(), UserStatus.CONFIRMATION_REQUIRED).firstResult();
+    }
+
+    public static User findRegisteredByUserName(String username) {
+        return find("LOWER(userName) = ?1 AND status = ?2", username.toLowerCase(), UserStatus.REGISTERED).firstResult();
+    }
+
+    public static User findByUserName(String username) {
+        return find("LOWER(userName) = ?1", username.toLowerCase()).firstResult();
+    }
+
+    public static User findForContirmation(String confirmationCode) {
+        return find("confirmationCode = ?1 AND status = ?2", confirmationCode, UserStatus.CONFIRMATION_REQUIRED).firstResult();
+    }
+}
+
+
+
+

Now tell Renarde how to map the JWT cookies to your user model by implementing RenardeUserProvider:

+
+
+
+
package util;
+
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+
+import io.quarkiverse.renarde.security.RenardeSecurity;
+import io.quarkiverse.renarde.security.RenardeUser;
+import io.quarkiverse.renarde.security.RenardeUserProvider;
+import model.User;
+
+@ApplicationScoped
+public class MySecuritySetup implements RenardeUserProvider {
+
+    @Inject
+    RenardeSecurity security;
+
+    @Override
+    public RenardeUser findUser(String tenantId, String id) {
+        return User.findByUserName(id);
+    }
+}
+
+
+
+

With this, Renarde will make sure that we produce a user named bean containing the current user if there is a +logged-in user. You can then use it in your views with inject:user or by injecting it in +your endpoints.

+
+
+

Renarde also provides a ControllerWithUser class which you can extend to access the current user for all controllers +that need a user.

+
+
+

Now you can write your login and registration page like this:

+
+
+
+
{#include main.html }
+{#title}Login{/title}
+
+<div class="row">
+  <div class="col-md-5">
+    {#form uri:Login.manualLogin()}
+        <fieldset>
+            <legend>Login</legend>
+            {#formElement name="userName" label="User Name"}
+                {#input name="userName"/}
+            {/formElement}
+            {#formElement name="password" label="Password"}
+                {#input name="password" type="password"/}
+            {/formElement}
+            <button type="submit" class="btn btn-primary">Login</button>
+        </fieldset>
+    {/form}
+  </div>
+  <div class="col-md-5">
+    {#form uri:Login.register()}
+        <fieldset>
+            <legend>Register</legend>
+            {#formElement name="email" label="Email"}
+                {#input name="email"/}
+            {/formElement}
+            <button type="submit" class="btn btn-primary">Register</button>
+        </fieldset>
+    {/form}
+  </div>
+</div>
+
+{/include}
+
+
+
+

As for your registration page, it can look like this:

+
+
+
+
{#include main.html }
+{#title}Complete registration{/title}
+
+{#form uri:Login.complete(newUser.confirmationCode)}
+
+<fieldset>
+    <legend>Complete registration for {newUser.email}</legend>
+    {#formElement name="userName" label="User Name"}
+        {#input name="userName" value=newUser.userName/}
+    {/formElement}
+    {#formElement name="password" label="Password"}
+        {#input name="password" type="password"/}
+    {/formElement}
+    {#formElement name="password2" label="Password Confirmation"}
+        {#input name="password2" type="password"/}
+    {/formElement}
+    {#formElement name="firstName" label="First Name"}
+        {#input name="firstName" value=newUser.firstName/}
+    {/formElement}
+    {#formElement name="lastName" label="Last Name"}
+        {#input name="lastName" value=newUser.lastName/}
+    {/formElement}
+    <button type="submit" class="btn btn-primary">Complete registration</button>
+</fieldset>
+
+{/form}
+{/include}
+
+
+
+

And your login and registration endpoint can look like this to handle user registration and login:

+
+
+
+
package rest;
+
+import java.util.UUID;
+
+import jakarta.inject.Inject;
+import jakarta.validation.constraints.Email;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.core.NewCookie;
+import jakarta.ws.rs.core.Response;
+import jakarta.ws.rs.core.Response.ResponseBuilder;
+
+import org.hibernate.validator.constraints.Length;
+import org.jboss.resteasy.reactive.RestForm;
+import org.jboss.resteasy.reactive.RestQuery;
+
+import email.Emails;
+import io.quarkiverse.renarde.security.RenardeSecurity;
+import io.quarkiverse.renarde.router.Router;
+import io.quarkiverse.renarde.util.StringUtils;
+import io.quarkus.elytron.security.common.BcryptUtil;
+import io.quarkus.qute.CheckedTemplate;
+import io.quarkus.qute.TemplateInstance;
+import io.quarkus.security.Authenticated;
+import model.User;
+import model.UserStatus;
+
+public class Login extends ControllerWithUser<User> {
+
+    @Inject
+    RenardeSecurity security;
+
+    @CheckedTemplate
+    static class Templates {
+        public static native TemplateInstance login();
+        public static native TemplateInstance register(String email);
+        public static native TemplateInstance confirm(User newUser);
+        public static native TemplateInstance logoutFirst();
+        public static native TemplateInstance welcome();
+    }
+
+    /**
+     * Login page
+     */
+    public TemplateInstance login() {
+        return Templates.login();
+    }
+
+    /**
+     * Welcome page at the end of registration
+     */
+    @Authenticated
+    public TemplateInstance welcome() {
+        return Templates.welcome();
+    }
+
+    /**
+     * Manual login form
+     */
+    @POST
+    public Response manualLogin(@NotBlank @RestForm String userName,
+            @NotBlank @RestForm String password) {
+        if(validationFailed()) {
+            login();
+        }
+        User user = User.findRegisteredByUserName(userName);
+        if(user == null
+                || !BcryptUtil.matches(password, user.password)) {
+            validation.addError("userName", "Invalid username/pasword");
+            prepareForErrorRedirect();
+            login();
+        }
+        NewCookie cookie = security.makeUserCookie(user);
+        return Response.seeOther(Router.getURI(Application::index)).cookie(cookie).build();
+    }
+
+
+    /**
+     * Manual registration form, sends confirmation email
+     */
+    @POST
+    public TemplateInstance register(@RestForm @NotBlank @Email String email) {
+        if(validationFailed())
+            login();
+        User newUser = User.findUnconfirmedByEmail(email);
+        if(newUser == null) {
+            newUser = new User();
+            newUser.email = email;
+            newUser.status = UserStatus.CONFIRMATION_REQUIRED;
+            newUser.confirmationCode = UUID.randomUUID().toString();
+            newUser.persist();
+        }
+        // send the confirmation code again
+        Emails.confirm(newUser);
+        return Templates.register(email);
+    }
+
+
+    /**
+     * Confirmation form, once email is verified, to add user info
+     */
+    public TemplateInstance confirm(@RestQuery String confirmationCode){
+        checkLogoutFirst();
+        User newUser = checkConfirmationCode(confirmationCode);
+        return Templates.confirm(newUser);
+    }
+
+    private void checkLogoutFirst() {
+        if(getUser() != null) {
+            logoutFirst();
+        }
+    }
+
+    /**
+     * Link to logout page
+     */
+    public TemplateInstance logoutFirst() {
+        return Templates.logoutFirst();
+    }
+
+    private User checkConfirmationCode(String confirmationCode) {
+        // can't use error reporting as those are query parameters and not form fields
+        if(StringUtils.isEmpty(confirmationCode)){
+            flash("message", "Missing confirmation code");
+            flash("messageType", "error");
+            redirect(Application.class).index();
+        }
+        User user = User.findForContirmation(confirmationCode);
+        if(user == null){
+            flash("message", "Invalid confirmation code");
+            flash("messageType", "error");
+            redirect(Application.class).index();
+        }
+        return user;
+    }
+
+    @POST
+    public Response complete(@RestQuery String confirmationCode,
+            @RestForm @NotBlank String userName,
+            @RestForm @Length(min = 8) String password,
+            @RestForm @Length(min = 8) String password2,
+            @RestForm @NotBlank String firstName,
+            @RestForm @NotBlank String lastName) {
+        checkLogoutFirst();
+        User user = checkConfirmationCode(confirmationCode);
+
+        if(validationFailed())
+            confirm(confirmationCode);
+
+        validation.required("password", password);
+        validation.required("password2", password2);
+        validation.equals("password", password, password2);
+
+        if(User.findRegisteredByUserName(userName) != null)
+            validation.addError("userName", "User name already taken");
+        if(validationFailed())
+            confirm(confirmationCode);
+
+        user.userName = userName;
+        user.password = BcryptUtil.bcryptHash(password);
+        user.firstName = firstName;
+        user.lastName = lastName;
+        user.confirmationCode = null;
+        user.status = UserStatus.REGISTERED;
+
+        ResponseBuilder responseBuilder = Response.seeOther(Router.getURI(Login::welcome));
+        NewCookie cookie = security.makeUserCookie(user);
+        responseBuilder.cookie(cookie);
+        return responseBuilder.build();
+    }
+}
+
+
+
+

You can now use the @Authenticated and @RolesAllowed("admin") annotations on your endpoints.

+
+
+

Private/public keys

+
+

In DEV mode, your private/public keys will be generated for you at startup if they do not exist and +are not specified. Cleaning your project will remove those keys, so previous JWT tokens won’t be valid +anymore on restart.

+
+
+

In production environments you will need to generate and specify your private and public keys using the following +commands:

+
+
+
+
$ openssl genrsa -out rsaPrivateKey.pem 2048
+$ openssl rsa -pubout -in rsaPrivateKey.pem -out src/main/resources/publicKey.pem
+$ openssl pkcs8 -topk8 -nocrypt -inform pem -in rsaPrivateKey.pem -outform pem -out src/main/resources/privateKey.pem
+
+
+
+

You can then point to those files in your application.properties Quarkus configuration:

+
+
+
+
mp.jwt.verify.publickey.location=publicKey.pem
+mp.jwt.decrypt.key.location=privateKey.pem
+smallrye.jwt.sign.key.location=privateKey.pem
+smallrye.jwt.encrypt.key.location=publicKey.pem
+
+quarkus.native.resources.includes=publicKey.pem
+quarkus.native.resources.includes=privateKey.pem
+
+
+
+
+
+
+

Using OIDC for login

+
+
+

OIDC (Open ID Connect) is a way to delegate user login to external services, such as:

+
+
+ +
+
+

If you use OIDC, you can skip the email validation phase, and avoid storing passwords for your users, but you may +likely still need to store a user representation in your data store, and associate it to the external identity provider +using the provider name and its own ID.

+
+
+

The recommended set up is to place each provider in its own tenant, and disable the default tenant if you want to leave +it free for the manual user registration and authentication we already covered:

+
+
+
+
# Google
+quarkus.oidc.google.provider=google
+quarkus.oidc.google.client-id=SECRET
+quarkus.oidc.google.credentials.secret=SECRET
+
+# Github
+quarkus.oidc.github.provider=github
+quarkus.oidc.github.client-id=SECRET
+quarkus.oidc.github.credentials.secret=SECRET
+
+# Manual context
+quarkus.oidc.manual.tenant-enabled=false
+
+# Default is just disabled
+quarkus.oidc.tenant-enabled=false
+
+# Get rid of keycloak dev services
+quarkus.keycloak.devservices.enabled=false
+
+# Must be set to get proper error reporting
+quarkus.http.auth.proactive=false
+
+
+
+

Make sure you import the renarde-oidc module in your pom.xml:

+
+
+
+
<dependency>
+  <groupId>io.quarkiverse.renarde</groupId>
+  <artifactId>quarkus-renarde-oidc</artifactId>
+  <version>3.0.9</version>
+</dependency>
+
+
+
+

We first adapt our User model to handle OIDC users by adding tenantId and authId fields:

+
+
+
+
package model;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.EnumType;
+import jakarta.persistence.Enumerated;
+import jakarta.persistence.Table;
+import jakarta.persistence.UniqueConstraint;
+
+import io.quarkiverse.renarde.security.RenardeUser;
+import io.quarkus.hibernate.orm.panache.PanacheEntity;
+
+@Entity
+@Table(name = "user_table", uniqueConstraints = @UniqueConstraint(columnNames = {"tenantId", "authId"}))
+public class User extends PanacheEntity implements RenardeUser {
+
+    @Column(nullable = false)
+    public String email;
+    @Column(unique = true)
+    public String userName;
+    public String password;
+    public String firstName;
+    public String lastName;
+    public boolean isAdmin;
+
+    @Column(unique = true)
+    public String confirmationCode;
+
+    public String tenantId;
+    public String authId;
+
+    @Column(nullable = false)
+    @Enumerated(EnumType.STRING)
+    public UserStatus status;
+
+    public boolean isRegistered(){
+        return status == UserStatus.REGISTERED;
+    }
+
+    @Override
+    public Set<String> getRoles() {
+        Set<String> roles = new HashSet<>();
+        if(isAdmin) {
+            roles.add("admin");
+        }
+        return roles;
+    }
+
+    @Override
+    public String getUserId() {
+        return userName;
+    }
+
+    public boolean isOidc() {
+        return tenantId != null;
+    }
+
+    //
+    // Helpers
+
+    public static User findUnconfirmedByEmail(String email) {
+        return find("LOWER(email) = ?1 AND status = ?2", email.toLowerCase(), UserStatus.CONFIRMATION_REQUIRED).firstResult();
+    }
+
+    public static User findRegisteredByUserName(String username) {
+        return find("LOWER(userName) = ?1 AND status = ?2", username.toLowerCase(), UserStatus.REGISTERED).firstResult();
+    }
+
+    public static User findByUserName(String username) {
+        return find("LOWER(userName) = ?1", username.toLowerCase()).firstResult();
+    }
+
+    public static User findByAuthId(String tenantId, String authId) {
+        return find("tenantId = ?1 AND authId = ?2", tenantId, authId).firstResult();
+    }
+
+    public static User findForContirmation(String confirmationCode) {
+        return find("confirmationCode = ?1 AND status = ?2", confirmationCode, UserStatus.CONFIRMATION_REQUIRED).firstResult();
+    }
+}
+
+
+
+

Now you need to provide implementations of RenardeUserProvider and RenardeOidcHandler which you can group:

+
+
+
+
package util;
+
+import java.net.URI;
+import java.util.UUID;
+
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+import jakarta.transaction.Transactional;
+import jakarta.ws.rs.core.Response;
+
+import io.quarkiverse.renarde.oidc.RenardeOidcHandler;
+import io.quarkiverse.renarde.oidc.RenardeOidcSecurity;
+import io.quarkiverse.renarde.security.RenardeSecurity;
+import io.quarkiverse.renarde.security.RenardeUser;
+import io.quarkiverse.renarde.security.RenardeUserProvider;
+import io.quarkiverse.renarde.router.Router;
+import io.quarkiverse.renarde.util.Flash;
+import io.quarkiverse.renarde.util.RedirectException;
+import model.User;
+import model.UserStatus;
+import rest.Application;
+import rest.Login;
+
+@ApplicationScoped
+public class MySecuritySetup implements RenardeUserProvider, RenardeOidcHandler {
+
+    @Inject
+    RenardeSecurity security;
+
+    @Inject
+    RenardeOidcSecurity oidcSecurity;
+
+    @Inject
+    Flash flash;
+
+    /**
+     * This allows us to map tenant/id to our users: manually or via OIDC
+     */
+    @Override
+    public RenardeUser findUser(String tenantId, String id) {
+        if(tenantId == null || tenantId.equals("manual")) {
+            return User.findByUserName(id);
+        } else {
+            return User.findByAuthId(tenantId, id);
+        }
+    }
+
+    /**
+     * This will be called on every successful OIDC authentication,
+     * be it a first-time user registration, or existing user login
+     */
+    @Transactional
+    @Override
+    public void oidcSuccess(String tenantId, String authId) {
+        User user = User.findByAuthId(tenantId, authId);
+        URI uri;
+        if(user == null) {
+            // registration
+            user = new User();
+            user.tenantId = tenantId;
+            user.authId = authId;
+
+            user.email = oidcSecurity.getOidcEmail();
+            user.firstName = oidcSecurity.getOidcFirstName();
+            user.lastName = oidcSecurity.getOidcLastName();
+            user.userName = oidcSecurity.getOidcUserName();
+
+            user.status = UserStatus.CONFIRMATION_REQUIRED;
+            user.confirmationCode = UUID.randomUUID().toString();
+            user.persist();
+
+            // go to registration
+            uri = Router.getURI(Login::confirm, user.confirmationCode);
+        } else if(!user.isRegistered()) {
+            // user exists, but not fully registered yet
+            // go to registration
+            uri = Router.getURI(Login::confirm, user.confirmationCode);
+        } else {
+            // regular login
+            uri = Router.getURI(Application::index);
+        }
+        throw new RedirectException(Response.seeOther(uri).build());
+    }
+
+    /**
+     * This will be called if the existing user has a valid OIDC session,
+     * and attemps to login again, so we check if the user exists, and is
+     * fully registered.
+     */
+    @Override
+    public void loginWithOidcSession(String tenantId, String authId) {
+        RenardeUser user = findUser(tenantId, authId);
+        // old cookie, no such user
+        if(user == null) {
+            flash.flash("message", "Invalid user: "+authId);
+            throw new RedirectException(security.makeLogoutResponse());
+        }
+        // redirect to registration
+        URI uri;
+        if(!user.isRegistered()) {
+            uri = Router.getURI(Login::confirm, ((User)user).confirmationCode);
+        } else {
+            flash.flash("message", "Already logged in");
+            uri = Router.getURI(Application::index);
+        }
+        throw new RedirectException(Response.seeOther(uri).build());
+    }
+}
+
+
+
+

We have to adapt our registration page to account for users coming in from OIDC, by skipping the password +if the user is an OIDC user:

+
+
+
+
{#include main.html }
+{#title}Complete registration{/title}
+
+{#form uri:Login.complete(newUser.confirmationCode)}
+
+<fieldset>
+    <legend>Complete registration for {newUser.email}</legend>
+    {#formElement name="userName" label="User Name"}
+        {#input name="userName" value=newUser.userName/}
+    {/formElement}
+    {#if !newUser.authId}
+        {#formElement name="password" label="Password"}
+            {#input name="password" type="password"/}
+        {/formElement}
+        {#formElement name="password2" label="Password Confirmation"}
+            {#input name="password2" type="password"/}
+        {/formElement}
+    {/if}
+    {#formElement name="firstName" label="First Name"}
+        {#input name="firstName" value=newUser.firstName/}
+    {/formElement}
+    {#formElement name="lastName" label="Last Name"}
+        {#input name="lastName" value=newUser.lastName/}
+    {/formElement}
+    <button type="submit" class="btn btn-primary">Complete registration</button>
+</fieldset>
+
+{/form}
+{/include}
+
+
+
+

And the corresponding controller:

+
+
+
+
    @POST
+    public Response complete(@RestQuery String confirmationCode,
+            @RestForm @NotBlank String userName,
+            @RestForm @Length(min = 8) String password,
+            @RestForm @Length(min = 8) String password2,
+            @RestForm @NotBlank String firstName,
+            @RestForm @NotBlank String lastName) {
+        checkLogoutFirst();
+        User user = checkConfirmationCode(confirmationCode);
+
+        if(validationFailed())
+            confirm(confirmationCode);
+
+        // is it OIDC?
+        if(!user.isOidc()) {
+            validation.required("password", password);
+            validation.required("password2", password2);
+            validation.equals("password", password, password2);
+        }
+
+        if(User.findRegisteredByUserName(userName) != null)
+            validation.addError("userName", "User name already taken");
+        if(validationFailed())
+            confirm(confirmationCode);
+
+        user.userName = userName;
+        if(!user.isOidc()) {
+            user.password = BcryptUtil.bcryptHash(password);
+        }
+        user.firstName = firstName;
+        user.lastName = lastName;
+        user.confirmationCode = null;
+        user.status = UserStatus.REGISTERED;
+
+        ResponseBuilder responseBuilder = Response.seeOther(Router.getURI(Login::welcome));
+        if(!user.isOidc()) {
+            NewCookie cookie = security.makeUserCookie(user);
+            responseBuilder.cookie(cookie);
+        }
+        return responseBuilder.build();
+    }
+
+
+
+

And finally we can add the OIDC login options to the login page:

+
+
+
+
{#include main.html }
+{#title}Login{/title}
+
+<div class="row">
+  <div class="col-md-2">
+    <fieldset>
+        <legend>Login/Register</legend>
+        <div class="d-grid gap-2">
+          <a class="btn btn-block btn-light" href="{uri:RenardeOidcController.loginUsingOidc('github')}" role="button"><img src="/images/signin-github.svg" height="16px" style="vertical-align: text-top"/> GitHub</a>
+          <a class="btn btn-block btn-light" href="{uri:RenardeOidcController.loginUsingOidc('google')}" role="button"><img src="/images/signin-google.svg" height="16px" style="vertical-align: text-top"/> Google</a>
+          <a class="btn btn-block btn-light" href="{uri:RenardeOidcController.loginUsingOidc('microsoft')}" role="button"><img src="/images/signin-microsoft.svg" height="16px" style="vertical-align: text-top"/> Microsoft</a>
+          <a class="btn btn-block btn-light" href="{uri:RenardeOidcController.loginUsingOidc('facebook')}" role="button"><img src="/images/signin-facebook.svg" height="16px" style="vertical-align: text-top"/> Facebook</a>
+          <a class="btn btn-block btn-light" href="{uri:RenardeOidcController.loginUsingOidc('apple')}" role="button"><img src="/images/signin-apple.svg" height="16px" style="vertical-align: text-top"/> Apple</a>
+          <a class="btn btn-block btn-light" href="{uri:RenardeOidcController.loginUsingOidc('twitter')}" role="button"><img src="/images/signin-twitter.svg" height="16px" style="vertical-align: text-top"/> Twitter</a>
+        </div>
+     </fieldset>
+  </div>
+  <-- ... Manual login and registration ... -->
+</div>
+
+{/include}
+
+
+
+

Setting up OIDC for Github

+
+

In order to set up OIDC for Github you need to create a new OAuth application in your GitHub developer settings:

+
+
+
+oidc github 1 +
+
+
+

Make sure to fill in the appropriate details, but more importantly the Authorization Callback URL, set to http://localhost:8080/_renarde/security/oidc-success +(if you intend to test this using the Quarkus DEV mode).

+
+
+

Now click on Register application and you’ll be shown your application page:

+
+
+
+oidc github 2 +
+
+
+

You need to click on Generate a new client secret, confirm your credentials, and write down +your Client ID and Client secret (especially that one, because you will not be able to see it again +later from that page, but you can always recreate one, do don’t worry too much):

+
+
+
+oidc github 3 +
+
+
+

Now add the following configuration to your application.properties:

+
+
+
+
quarkus.oidc.github.provider=github
+quarkus.oidc.github.client-id=<Client ID>
+quarkus.oidc.github.credentials.secret=<Secret>
+
+
+
+
+

Setting up OIDC for Google

+
+

In order to set up OIDC for Google you need to create a new project in your Google Cloud Platform console:

+
+
+

Pick a project name and click on CREATE.

+
+
+
+oidc google 1 +
+
+
+

Now make sure you select your project in the top selector, and click on the left-hand bar menu on APIs and Services > OAuth consent screen:

+
+
+
+oidc google 2 +
+
+
+

Select External to authorise any Google user to log in to your application and press CREATE:

+
+
+
+oidc google 3 +
+
+
+

Now you can fill in your application name, your support email, your developer contact information and press SAVE AND CONTINUE:

+
+
+
+oidc google 4 +
+
+
+

Do not add any scopes on the next page, and press SAVE AND CONTINUE:

+
+
+
+oidc google 5 +
+
+
+

Do not add any test user on the next page, and press SAVE AND CONTINUE:

+
+
+
+oidc google 6 +
+
+
+

Click on the top menu CREATE CREDENTIALS > OAuth client ID:

+
+
+
+oidc google 7 +
+
+
+

Select Web application as Application type, and add http://localhost:8080/_renarde/security/oidc-success in +the Authorised redirect URIs list, then press CREATE:

+
+
+
+oidc google 8 +
+
+
+

Copy your Client ID and Client Secret:

+
+
+
+oidc google 9 +
+
+
+

You can now configure your application.properties:

+
+
+
+
quarkus.oidc.google.provider=google
+quarkus.oidc.google.client-id=<Client ID>
+quarkus.oidc.google.credentials.secret=<Secret>
+
+
+
+
+

Setting up OIDC for Microsoft

+
+

In order to set up OIDC for Microsoft you need to go to your Microsoft Azure Portal, +and search for Azure Active Directory, then click on it:

+
+
+
+oidc microsoft 1 +
+
+
+

Once there, on the left side under Manage, click on App registrations then click on New registration:

+
+
+
+oidc microsoft 2 +
+
+
+

Fill in your application name, select Accounts in any organizational directory (Any Azure AD directory - Multitenant) and personal Microsoft accounts (e.g. Skype, Xbox) to allow anyone to log in, and add a Web Redirect URI as http://localhost:8080/_renarde/security/oidc-success, +then click on Register:

+
+
+
+oidc microsoft 3 +
+
+
+

On that resulting page, copy the Client Id (under Application (client) ID, then click on Add a certificate or secret:

+
+
+
+oidc microsoft 4 +
+
+
+

Now, under Client secrets (0), click on New client secret:

+
+
+
+oidc microsoft 5 +
+
+
+

Click on Add in that dialog without changing anything:

+
+
+
+oidc microsoft 6 +
+
+
+

On the resulting page, copy your Secret ID:

+
+
+
+oidc microsoft 7 +
+
+
+

You can now configure your application.properties:

+
+
+
+
quarkus.oidc.microsoft.provider=microsoft
+quarkus.oidc.microsoft.client-id=<Client ID>
+quarkus.oidc.microsoft.credentials.secret=<Secret>
+
+
+
+
+

Setting up OIDC for Apple

+
+

In order to set up OIDC for Apple you need to create a developer account, and sign up for the 99€/year program, but you cannot test your application on localhost like most other OIDC providers: +you will need to run it over https and make it publicly accessible, so for development purposes +you may want to use a service such as ngrok.

+
+
+

Go to Create a new identifier and press +

+
+
+
+oidc apple 1 +
+
+
+

Dont touch anything, keep App IDs selected, and press Continue:

+
+
+
+oidc apple 2 +
+
+
+

Dont touch anything, keep App selected, and press Continue:

+
+
+
+oidc apple 3 +
+
+
+

Enter a description and a Bundle ID (use your application package name):

+
+
+
+oidc apple 4 +
+
+
+

Then scroll down to find the Sign in with Apple Capability, select it, and press Continue:

+
+
+
+oidc apple 5 +
+
+
+

Write down your App ID Prefix, then press Register:

+
+
+
+oidc apple 6 +
+
+
+

Back on the Identifiers page, press +:

+
+
+
+oidc apple 7 +
+
+
+

Select Service IDs and press Continue:

+
+
+
+oidc apple 8 +
+
+
+

Enter a description and Bundle ID (use your application package name), then press Continue:

+
+
+
+oidc apple 9 +
+
+
+

Now press Register:

+
+
+
+oidc apple 10 +
+
+
+

Back on the service list, click on your newly created service:

+
+
+
+oidc apple 11 +
+
+
+

Enable Sign in with Apple and press Configure:

+
+
+
+oidc apple 12 +
+
+
+

Add your domain and return URL (set to <host>/_renarde/security/oidc-success) and press Next:

+
+
+
+oidc apple 13 +
+
+
+

Now press Done:

+
+
+
+oidc apple 14 +
+
+
+

Now press Continue:

+
+
+
+oidc apple 15 +
+
+
+

And now press Save:

+
+
+
+oidc apple 16 +
+
+
+

Go to the Keys page on the left menu, and press +:

+
+
+
+oidc apple 17 +
+
+
+

Fill in a key name, enable Sign in with Apple, and press Configure:

+
+
+
+oidc apple 18 +
+
+
+

Select your Primary App ID and press Save:

+
+
+
+oidc apple 19 +
+
+
+

Back on the key page, press Continue:

+
+
+
+oidc apple 20 +
+
+
+

Now press Register:

+
+
+
+oidc apple 21 +
+
+
+

Write down your Key ID, download your key and save it to your Quarkus application in src/main/resources/AuthKey_<KEYID>.p8:

+
+
+
+oidc apple 22 +
+
+
+

You can now configure your application.properties:

+
+
+
+
quarkus.oidc.apple.provider=apple
+quarkus.oidc.apple.client-id=<Bundle ID>
+quarkus.oidc.apple.credentials.jwt.key-file=AuthKey_<Key ID>.p8
+quarkus.oidc.apple.credentials.jwt.token-key-id=<Key ID>
+quarkus.oidc.apple.credentials.jwt.issuer=<App ID Prefix>
+quarkus.oidc.apple.credentials.jwt.subject=<Bundle ID}
+
+
+
+
+

Setting up OIDC for Facebook

+
+

Facebook you will not be let you test your application on localhost like most other OIDC providers: +you will need to run it over https and make it publicly accessible, so for development purposes +you may want to use a service such as ngrok.

+
+
+

In order to set up OIDC for Facebook start by Creating an application, select None as an app type, and press Next:

+
+
+
+oidc facebook 1 +
+
+
+

Now enter an application name, and contact email, and press Create app:

+
+
+
+oidc facebook 2 +
+
+
+

On the app page, click Set up on the Facebook login product:

+
+
+
+oidc facebook 3 +
+
+
+

Quick the Quickstarts page and click on Facebook login > Settings on the left menu:

+
+
+
+oidc facebook 4 +
+
+
+

Enter your Redirect URIs (set to <host>/_renarde/security/oidc-success) and press Save changes:

+
+
+
+oidc facebook 5 +
+
+
+

Now go to Settings > Basic on the left hand menu, and write down your App ID and App secret:

+
+
+
+oidc facebook 6 +
+
+
+

You can now configure your application.properties:

+
+
+
+
quarkus.oidc.facebook.provider=facebook
+quarkus.oidc.facebook.client-id=<App ID>
+quarkus.oidc.facebook.credentials.secret=<App secret>
+
+
+
+
+

Setting up OIDC for Spotify

+
+

In order to set up OIDC for Spotify start by Creating an app, enter an app name, +and http://localhost:8080/_renarde/security/oidc-success as Redirect URI, check the checkbox accepting the terms, +and press Save:

+
+
+
+oidc spotify 1 +
+
+
+

Now click on Settings:

+
+
+
+oidc spotify 2 +
+
+
+

And click on View client secret in order to reveal your secret:

+
+
+
+oidc spotify 3 +
+
+
+

Now copy your Client ID and Client secret into your application.properties:

+
+
+
+
quarkus.oidc.spotify.provider=spotify
+quarkus.oidc.spotify.client-id=<Client ID>
+quarkus.oidc.spotify.credentials.secret=<Client Secret>
+
+
+
+
+

Setting up OIDC for Twitter

+
+

You can use Twitter for OIDC login, but at the moment, it restricts access to the user’s email, which means you +will have to obtain it and verify it yourself.

+
+
+

In order to set up OIDC for Twitter start by Creating a project, enter a project name, and press Next:

+
+
+
+oidc twitter 1 +
+
+
+

Enter a use case, and press Next:

+
+
+
+oidc twitter 2 +
+
+
+

Enter a project description, and press Next:

+
+
+
+oidc twitter 3 +
+
+
+

Now enter an application name, and press Next:

+
+
+
+oidc twitter 4 +
+
+
+

Write down your keys, because they will not be displayed again, and press App Settings:

+
+
+
+oidc twitter 5 +
+
+
+

Navigate down to the User authentication settings section and press Set up:

+
+
+
+oidc twitter 6 +
+
+
+

Check the OAuth 2.0 check box:

+
+
+
+oidc twitter 7 +
+
+
+

Select Web App as application type, then fill in your application details (use <host>/_renarde/security/oidc-success +for the Callback URI).

+
+
+ + + + + +
+ + +Twitter doesn’t require https usage in practice, but won’t accept your Website URL without it, so +you can still use ngrok for it. +
+
+
+

Now press Save:

+
+
+
+oidc twitter 8 +
+
+
+

You can now copy your Client ID and Client Secret and press Done:

+
+
+
+oidc twitter 9 +
+
+
+

You can now configure your application.properties:

+
+
+
+
quarkus.oidc.twitter.provider=twitter
+quarkus.oidc.twitter.client-id=<Client ID>
+quarkus.oidc.twitter.credentials.secret=<Client Secret>
+
+
+
+
+

Testing OIDC providers

+
+

As soon as you integrate OIDC providers in your application, testing them becomes problematic, +because you probably don’t want to hit those external OIDC systems from your tests. But you still +want to test that your integration works well, and make it as fast as possible.

+
+
+

Renarde provides you with custom test resources +that will start mock OIDC providers that you can use in place of the real online OIDC providers. All you need to +do is import this module:

+
+
+
+
<dependency>
+  <groupId>io.quarkiverse.renarde</groupId>
+  <artifactId>quarkus-renarde-oidc-tests</artifactId>
+  <version>3.0.9</version>
+  <scope>test</scope>
+</dependency>
+
+
+
+

And place one of these annotations on your test resource:

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AnnotationRole

@MockAppleOidc

Starts a mock Apple OIDC provider

@MockFacebookOidc

Starts a mock Facebook OIDC provider

@MockGithubOidc

Starts a mock Github OIDC provider

@MockGoogleOidc

Starts a mock Google OIDC provider

@MockMicrosoftOidc

Starts a mock Microsoft OIDC provider

@MockSpotifyOidc

Starts a mock Spotify OIDC provider

@MockTwitterOidc

Starts a mock Twitter OIDC provider

+
+

All these mock OIDC providers will automatically log you in for a single fixed user with the following +properties:

+
+ +++++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ProviderTenantIdAuthIdUsernameFirst nameLast nameEmail

Apple

apple

USERID

null (Not provided by Apple)

null (Not provided by Apple)

null (Not provided by Apple)

apple@example.com

Facebook

facebook

USERID

null (Not provided by Facebook)

Foo

Bar

facebook@example.com

Github

github

1234

GithubUser

Foo

Bar

github@example.com

Google

google

USERID

null (Not provided by Google)

Foo

Bar

google@example.com

Microsoft

microsoft

USERID

microsoft@example.com (Microsoft uses the email)

Foo

Bar

microsoft@example.com

Spotify

spotify

USERID

null (Not provided by Spotify)

Foo

Bar

spotify@example.com

Twitter

twitter

USERID

null (Not provided by Twitter)

Foo

Bar

twitter@example.com

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-scala3/dev/index.html b/quarkus-scala3/dev/index.html new file mode 100644 index 0000000000..e7e745401c --- /dev/null +++ b/quarkus-scala3/dev/index.html @@ -0,0 +1,1500 @@ + + + + + + Quarkus - Scala3 :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus - Scala3

+ +
+

Introduction

+
+
+

This extension provides support for Scala 3 in Quarkus.

+
+
+

It uses the scala3-interfaces library to avoid user lock-in to any specific version of the Scala 3 compiler (Dotty). +Instead, the reflection-based API is used and compilation is done by invoking the compiler version the user has installed from the runtime classpath.

+
+
+

For more information and background context on this, there are notes in the Scala3CompilationProvider.java file.

+
+
+

Additionally, passing compiler flags when in Dev Mode is supported through the use of an environment variable (QUARKUS_SCALA3_COMPILER_ARGS) which allows you to mirror your existing Maven/Gradle compilation configuration.

+
+
+
+
+

Installation

+
+
+

Gradle

+
+
+
+ + + + + +
+ + +At the time of publishing, support for Scala 3 in Gradle is dependent on a not-yet-merged PR. +
+
+ +
+
+
+
+
buildscript {
+    repositories {
+        mavenLocal()
+        mavenCentral()
+    }
+    dependencies {
+        classpath "ch.epfl.scala:gradle-bloop_2.12:1.4.8-106-8722ebfd"
+    }
+}
+
+plugins {
+    id "java"
+    id "scala"
+    id "io.quarkus"
+}
+
+// Bloop plugin uses old DSL -- MUST be applied like this
+apply plugin: "bloop"
+// This configuration dependent on the following PR being merged into bloop, can be removed after merge
+// https://github.com/scalacenter/bloop/pull/1548
+bloop {
+    stdLibName = "scala3-library_3"
+}
+
+repositories {
+    mavenCentral()
+    mavenLocal()
+}
+
+VERSIONS = [
+  SCALA3: "3.0.0",
+  QUARKUS_SCALA3: "0.0.1"
+]
+
+dependencies {
+    implementation "org.scala-lang:scala3-compiler_3:$VERSIONS.SCALA3"
+    implementation "io.quarkiverse.scala:quarkus-scala3:$VERSIONS.QUARKUS_SCALA3"
+
+    // Quarkus comes with Scala 2 distributed in it's Bill-of-Materials unfortunately
+    // It's Scala 2.12.13, which is not ABI compatible -- With Scala 3, we need to exclude this entirely
+    implementation(enforcedPlatform("${quarkusPlatformGroupId}:${quarkusPlatformArtifactId}:${quarkusPlatformVersion}"))  {
+         exclude group: 'org.scala-lang', module: 'scala-library'
+    }
+    implementation "io.quarkus:quarkus-arc"
+    implementation "io.quarkus:quarkus-resteasy-reactive"
+
+    testImplementation "io.quarkus:quarkus-junit5"
+    testImplementation "io.rest-assured:rest-assured"
+}
+
+group = "org.hasura"
+version = "1.0.0-SNAPSHOT"
+
+java {
+    sourceCompatibility = JavaVersion.VERSION_16
+    targetCompatibility = JavaVersion.VERSION_16
+}
+
+tasks.withType(ScalaCompile) {
+    scalaCompileOptions.additionalParameters = [
+        "-feature",
+        "-explain",
+        "-Ysafe-init",
+        "-Xsemanticdb"
+    ]
+}
+
+compileJava {
+    options.encoding = 'UTF-8'
+    options.compilerArgs << '-parameters'
+}
+
+compileTestJava {
+    options.encoding = 'UTF-8'
+}
+
+
+
+
+

Maven

+
+

If you want to use this extension, you need to add the io.quarkiverse.scala:quarkus-scala3 extension first. +In your pom.xml file, add:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.scala</groupId>
+    <artifactId>quarkus-scala3</artifactId>
+    <version>0.0.1<version>
+</dependency>
+
+
+
+

Then, you will need to install the Scala 3 compiler, the Scala Maven plugin, and to fix an odd bug with the way that the Scala 3 compiler Maven dependencies are resolved.

+
+
+

Due to Scala 2 version in upstream Quarkus BOM, the wrong version of scala-library (a transitive dependency: scala3-compiler_3 -> scala3-library_3 -> scala-library) is resolved.

+
+
+

This causes binary incompatibilities — and Scala to break. In order to fix this, you just need to manually align the version of scala-library to the one listed as used by the version of scala3-library_3 that’s the same as the scala3-compiler_3 version.

+
+
+

So for scala3-compiler_3 = 3.0.0, then scala3-library_3 = 3.0.0, and we check the scala-library version it uses:

+
+ +
+

Here, we can see that it was compiled with 2.13.5 in it’s dependencies. So that’s what we set in ours:

+
+
+
+
<properties>
+    <scala-maven-plugin.version>4.5.3</scala-maven-plugin.version>
+    <scala.version>3.0.0</scala.version>
+    <scala-library.version>2.13.5</scala-library.version>
+</properties>
+
+<dependencies>
+    <!-- Scala Dependencies -->
+    <dependency>
+        <groupId>org.scala-lang</groupId>
+        <artifactId>scala3-compiler_3</artifactId>
+        <version>${scala.version}</version>
+    </dependency>
+    <dependency>
+        <!-- Version manually aligned to scala3-library_3:3.0.0 dependency -->
+        <groupId>org.scala-lang</groupId>
+        <artifactId>scala-library</artifactId>
+        <version>${scala-library.version}</version>
+    </dependency>
+</dependencies>
+
+<build>
+    <sourceDirectory>src/main/scala</sourceDirectory>
+    <testSourceDirectory>src/test/scala</testSourceDirectory>
+
+    <!-- REST OF CONFIG -->
+
+    <plugin>
+        <groupId>net.alchim31.maven</groupId>
+        <artifactId>scala-maven-plugin</artifactId>
+        <version>${scala-maven-plugin.version}</version>
+        <executions>
+            <execution>
+                <id>scala-compile-first</id>
+                <phase>process-resources</phase>
+                <goals>
+                    <goal>add-source</goal>
+                    <goal>compile</goal>
+                </goals>
+            </execution>
+            <execution>
+                <id>scala-test-compile</id>
+                <phase>process-test-resources</phase>
+                <goals>
+                    <goal>add-source</goal>
+                    <goal>testCompile</goal>
+                </goals>
+            </execution>
+        </executions>
+        <configuration>
+            <scalaVersion>${scala.version}</scalaVersion>
+            <!-- Some solid defaults, change if you like -->
+            <args>
+                <arg>-deprecated</arg>
+                <arg>-explain</arg>
+                <arg>-feature</arg>
+                <arg>-Ysafe-init</arg>
+            </args>
+        </configuration>
+    </plugin>
+</build>
+
+
+
+
+
+
+

Passing Scala compiler args in Quarkus Dev Mode

+
+
+

Finally, the last thing you want to do is make sure that you mirror any compiler args you have set up when you run in Dev Mode.

+
+
+

To do this, just run the dev command with a prefix of the environment variable set. The format is comma-delimited:

+
+
+
+
QUARKUS_SCALA3_COMPILER_ARGS="-deprecated,-explain,-feature,-Ysafe-init" mvn quarkus:dev
+
+
+
+

You might save this as a bash/powershell/batch script for convenience.

+
+
+
+
+

Useful tips and tricks for building Quarkus apps with Scala, common patterns

+
+
+

"No tests were found"?! How can that be?

+
+

JUnit requires tests to return type void. Scala functions which are not annotated with : Unit return type Scala.Nothing, rather than void. +This means that tests such as the undiscoverable test below will never be detected by JUnit.

+
+
+

See this issue for more information:

+
+ +
+

Please voice your support for a better developer experience around this behavior if it feels poor to you, by commenting on this issue:

+
+ +
+
+
@QuarkusTest
+class MyTest:
+
+  @Test
+  def `undiscoverable test` =
+    assert(1 == 1)
+
+  @Test
+  def `discoverable test`: Unit =
+    assert(2 == 2)
+
+
+
+
+

Configuring Scala Jackson and the addon-on "Enum" module for JSON support

+
+

You probably want JSON support for case class and enum serialization. +There are two things you need to enable this, as of the time of writing:

+
+
+
    +
  1. +

    The standard Jackson Scala module

    +
  2. +
  3. +

    An addon module from one of the Jackson Scala maintainers for Scala 3 enums that hasn’t made its way into the official module yet

    +
  4. +
+
+
+

To set this up:

+
+
+
    +
  • +

    Add the following to your dependencies

    +
  • +
+
+
+
+
<!-- JSON Serialization Dependencies -->
+<dependency>
+    <groupId>com.github.pjfanning</groupId>
+    <artifactId>jackson-module-scala3-enum_3</artifactId>
+    <version>2.12.3</version>
+</dependency>
+
+<dependency>
+    <groupId>com.fasterxml.jackson.module</groupId>
+    <artifactId>jackson-module-scala_2.13</artifactId>
+    <version>2.12.4</version>
+</dependency>
+
+
+
+
    +
  • +

    Set up something like the below in your codebase:

    +
  • +
+
+
+
+
import com.fasterxml.jackson.databind.ObjectMapper
+import com.fasterxml.jackson.module.scala.DefaultScalaModule
+import com.github.pjfanning.`enum`.EnumModule
+import io.quarkus.jackson.ObjectMapperCustomizer
+
+import javax.inject.Singleton
+
+// https://quarkus.io/guides/rest-json#jackson
+@Singleton
+class Scala3ObjectMapperCustomizer extends ObjectMapperCustomizer:
+  def customize(mapper: ObjectMapper): Unit =
+    // General Scala support
+    // https://github.com/FasterXML/jackson-module-scala
+    mapper.registerModule(DefaultScalaModule)
+    // Suport for Scala 3 Enums
+    // https://github.com/pjfanning/jackson-module-scala3-enum
+    mapper.registerModule(EnumModule)
+
+
+
+

The API is usable like this:

+
+
+
+
import com.fasterxml.jackson.databind.ObjectMapper
+import io.quarkus.test.junit.QuarkusTest
+import org.junit.jupiter.api.Assertions.*
+import org.junit.jupiter.api.{DisplayName, Test}
+
+import javax.inject.Inject
+import scala.collection.JavaConverters.*
+
+
+enum AnEnum:
+  case A extends AnEnum
+  case B extends AnEnum
+
+case class Other(foo: String)
+case class Something(name: String, someEnum: AnEnum, other: Other)
+
+@QuarkusTest
+class Scala3ObjectMapperCustomizerTest:
+
+  @Inject
+  var objectMapper: ObjectMapper = null
+
+  @Test
+  def `Jackson ObjectMapper can parse Scala 3 members`:
+    val sampleSomethingJSON: String = """
+    {
+    "name": "My Something",
+    "someEnum": "A",
+    "other": {
+        "foo": "bar"
+      }
+    }
+    """
+    val parsed = objectMapper.readValue[Something](sampleSomethingJSON, classOf[Something])
+    assertEquals(parsed.name, "My Something")
+    assertEquals(parsed.someEnum, AnEnum.A)
+    assertEquals(parsed.other.foo, "bar")
+
+
+
+
+

Scala DSL for rest-assured (similar to Kotlin DSL)

+
+

If you weren’t aware, Kotlin has a very nice DSL module for rest-assured that makes it far more ergonomic. +With some finagling, it’s possible to replicate this (mostly) in Scala.

+
+
+

Here’s a working outline that supports everything but .extract() — a PR or issue comment adding the .extract() case is much-welcomed:

+
+
+
    +
  • +

    Acknowledgements here should be given to Christopher Davenport from the Scala Discord for sharing the outline of how this sort of API could be written

    +
  • +
+
+
+
+
import io.restassured.RestAssured.*
+import io.restassured.internal.{ResponseSpecificationImpl, ValidatableResponseImpl}
+import io.restassured.response.{ExtractableResponse, Response, ValidatableResponse}
+import io.restassured.specification.{RequestSender, RequestSpecification, ResponseSpecification}
+
+class GivenConstructor(givenBlock: RequestSpecification => RequestSpecification):
+  def When(whenBlock: RequestSpecification => Response): ExpectationConstructor =
+    ExpectationConstructor(givenBlock, whenBlock)
+
+  class ExpectationConstructor(
+      givenBlock: RequestSpecification => RequestSpecification,
+      whenBlock: RequestSpecification => Response
+  ):
+    def Then(validatable: ValidatableResponse => Unit) =
+      val appliedGiven: RequestSpecification = givenBlock.apply(`given`())
+      val appliedWhen: Response              = whenBlock.apply(appliedGiven)
+      validatable.apply(appliedWhen.`then`())
+
+object Given:
+  def apply(givenBlock: RequestSpecification => RequestSpecification): GivenConstructor = GivenConstructor(givenBlock)
+
+def When(whenBlock: RequestSpecification => Response) =
+  def blankGiven(givenBlock: RequestSpecification): RequestSpecification = `given`()
+  Given(blankGiven).When(whenBlock)
+
+
+
+

And the way it can be used, is like this:

+
+
+
+
import io.quarkus.test.junit.QuarkusTest
+import org.hamcrest.CoreMatchers.`is`
+import org.acme.Given
+import org.junit.jupiter.api.{DisplayName, Test}
+
+@QuarkusTest
+class GreetingResourceTest:
+
+  @Test
+  def testDSL(): Unit =
+    Given {
+      _.params("something", "value")
+    }.When {
+      _.get("/hello").prettyPeek()
+    }.Then {
+      _.statusCode(200)
+    }
+
+
+
+
+

Functional HTTP routes (Vert.x handlers)

+
+

While Quarkus is heavily centered around REST-easy annotations for endpoints (being Java-oriented), it also exposes the underlying Vert.x instance.

+
+
+

You can use this to write route handlers which are much more functional-feeling, and the API is similar to that of Express.js

+
+
+ +
+
+
+
import io.quarkus.runtime.annotations.QuarkusMain
+import io.quarkus.runtime.{Quarkus, QuarkusApplication}
+import io.vertx.core.Vertx
+import io.vertx.ext.web.Router
+
+object Application:
+  def main(args: Array[String]): Unit =
+    Quarkus.run(classOf[Application], args*)
+
+@QuarkusMain
+class Application extends QuarkusApplication:
+  override def run(args: String*): Int =
+    val vertx = CDI.current().select(classOf[Vertx]).get()
+    val router = Router.router(vertx)
+    mkRoutes(router)
+    Quarkus.waitForExit()
+    0
+
+def mkRoutes(router: Router) =
+    router.get("/hello").handler(ctx => {
+        ctx.response.end("world")
+    })
+    router.post("/file-upload").handler(ctx => {
+        ctx.fileUploads.foreach(it => {
+            // Handle file
+        })
+        ctx.response.end("Got files")
+    })
+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-shardingsphere-jdbc/dev/config.html b/quarkus-shardingsphere-jdbc/dev/config.html new file mode 100644 index 0000000000..cc3c93afa3 --- /dev/null +++ b/quarkus-shardingsphere-jdbc/dev/config.html @@ -0,0 +1,912 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-shardingsphere-jdbc/dev/index.html b/quarkus-shardingsphere-jdbc/dev/index.html new file mode 100644 index 0000000000..d1e2aee32d --- /dev/null +++ b/quarkus-shardingsphere-jdbc/dev/index.html @@ -0,0 +1,1011 @@ + + + + + + Quarkus - Shardingsphere JDBC :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus - Shardingsphere JDBC

+
+
+
+

Describe what the extension does here.

+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.shardingsphere:quarkus-shardingsphere-jdbc extension first. +In your pom.xml file, add:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.shardingsphere</groupId>
+    <artifactId>quarkus-shardingsphere-jdbc</artifactId>
+</dependency>
+
+
+
+
+
+

Usages

+
+
+

The shardingsphere datasource could be configured in the application.properties file. just like

+
+
+
+
quarkus.datasource.ds_0.db-kind=h2
+quarkus.datasource.ds_0.username=sa
+quarkus.datasource.ds_0.jdbc.url=jdbc:h2:mem:ds_0
+
+quarkus.datasource.ds_1.db-kind=h2
+quarkus.datasource.ds_1.username=sa
+quarkus.datasource.ds_1.jdbc.url=jdbc:h2:mem:ds_1
+
+quarkus.datasource.db-kind=shardingsphere
+quarkus.datasource.jdbc.url=jdbc:shardingsphere:classpath:config.yaml
+
+
+
+

And in config.yaml file, you can configure the shardingsphere datasource like this:

+
+
+
+
dataSources:
+  ds_0:
+    dataSourceClassName: io.quarkiverse.shardingsphere.jdbc.QuarkusDataSource
+    dsName: ds_0
+  ds_1:
+    dataSourceClassName: io.quarkiverse.shardingsphere.jdbc.QuarkusDataSource
+    dsName: ds_1
+
+
+
+

The more sharding rules configuration, please refer to the shardingsphere official document: https://shardingsphere.apache.org/document/current/en/user-manual/shardingsphere-jdbc/configuration/yaml/

+
+
+

if you want to work with Quarkus Hibernate ORM, please add the following configuration in application.properties file to set the quarkus.hibernate-orm.dialect explicitly:

+
+
+
+
quarkus.hibernate-orm.dialect=io.quarkus.hibernate.orm.runtime.dialect.QuarkusH2Dialect
+
+
+
+ + + + + +
+ + +The transaction type of backend datasource must be set to DISABLED in application.properties file, like this: +
+
+
+
+
quarkus.datasource.ds_0.jdbc.transactions=DISABLED
+quarkus.datasource.ds_1.jdbc.transactions=DISABLED
+
+
+
+
+
+

Extension Configuration Reference

+
+ +
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-smallrye-opentracing/dev/includes/attributes.html b/quarkus-smallrye-opentracing/dev/includes/attributes.html new file mode 100644 index 0000000000..f1c8c0662c --- /dev/null +++ b/quarkus-smallrye-opentracing/dev/includes/attributes.html @@ -0,0 +1,912 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-smallrye-opentracing/dev/includes/quarkus-smallrye-opentracing.html b/quarkus-smallrye-opentracing/dev/includes/quarkus-smallrye-opentracing.html new file mode 100644 index 0000000000..7973087a0e --- /dev/null +++ b/quarkus-smallrye-opentracing/dev/includes/quarkus-smallrye-opentracing.html @@ -0,0 +1,958 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ + +
+
+
+ + + + + + + diff --git a/quarkus-smallrye-opentracing/dev/index.html b/quarkus-smallrye-opentracing/dev/index.html new file mode 100644 index 0000000000..6b2bb3be8c --- /dev/null +++ b/quarkus-smallrye-opentracing/dev/index.html @@ -0,0 +1,1451 @@ + + + + + + Quarkus SmallRye OpenTracing :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus SmallRye OpenTracing

+
+
+
+

This guide explains how your Quarkus application can utilize OpenTracing to provide distributed tracing for +interactive web applications.

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

OpenTelemetry is the recommended approach to tracing and telemetry for Quarkus.

+
+
+

The SmallRye OpenTracing support is discontinued and this extension is not actively maintained. +If you are interested in maintaining this extension, please reach out to us in the GitHub issues of this extension.

+
+
+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    Roughly 15 minutes

    +
  • +
  • +

    An IDE

    +
  • +
  • +

    JDK 11+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    Apache Maven 3.9.5

    +
  • +
  • +

    A working container runtime (Docker or Podman)

    +
  • +
  • +

    The Quarkus CLI

    +
  • +
  • +

    Optionally Mandrel or GraalVM installed and configured appropriately if you want to build a native executable (or Docker if you use a native container build)

    +
  • +
+
+
+
+
+

Architecture

+
+
+

In this guide, we create a straightforward REST application to demonstrate distributed tracing.

+
+
+
+
+

Solution

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step. +However, you can skip right to the completed example.

+
+
+

The completed example is located in the quickstart directory.

+
+
+
+
+

Creating the Maven project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
quarkus create app org.acme:opentracing-quickstart \
+    --extension='resteasy-reactive,quarkus-smallrye-opentracing' \
+    --no-code
+cd opentracing-quickstart
+
+
+
+

This command generates the Maven project and imports the smallrye-opentracing extension, which +includes the OpenTracing support and the default Jaeger tracer.

+
+
+

If you already have your Quarkus project configured, you can add the smallrye-opentracing extension +to your project by running the following command in your project base directory:

+
+
+
+
quarkus extension add smallrye-opentracing
+
+
+
+

This will add the following to your build file:

+
+
+
pom.xml
+
+
<dependency>
+    <groupId>io.quarkiverse.opentracing</groupId>
+    <artifactId>quarkus-smallrye-opentracing</artifactId>
+    <version>1.0.0</version>
+</dependency>
+
+
+
+

Examine the Jakarta REST resource

+
+

Create the src/main/java/org/acme/opentracing/TracedResource.java file with the following content:

+
+
+
+
package org.acme.opentracing;
+
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import org.jboss.logging.Logger;
+
+@Path("/hello")
+public class TracedResource {
+
+    private static final Logger LOG = Logger.getLogger(TracedResource.class);
+
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public String hello() {
+        LOG.info("hello"); (1)
+        return "hello";
+    }
+}
+
+
+
+ + + + + +
1The log event carries OpenTracing information as well. In order to print OpenTracing information to the console output, the console log handler with the required OpenTracing event’s keys needs to be defined in the application.properties file.
+
+
+

Notice that there is no tracing specific code included in the application. By default, requests sent to this +endpoint will be traced without any code changes being required. It is also possible to enhance the tracing information. +This can be achieved by SmallRye OpenTracing an implementation of +MicroProfile OpenTracing.

+
+
+
+

Create the configuration

+
+

There are two ways to configure the Jaeger tracer within the application.

+
+
+

The first approach is by providing the properties within the src/main/resources/application.properties file:

+
+
+
+
quarkus.jaeger.service-name=myservice (1)
+quarkus.jaeger.sampler-type=const (2)
+quarkus.jaeger.sampler-param=1 (3)
+quarkus.log.console.format=%d{HH:mm:ss} %-5p traceId=%X{traceId}, parentId=%X{parentId}, spanId=%X{spanId}, sampled=%X{sampled} [%c{2.}] (%t) %s%e%n (4)
+
+
+
+ + + + + + + + + + + + + + + + + +
1If the quarkus.jaeger.service-name property (or JAEGER_SERVICE_NAME environment variable) is not provided then a "no-op" tracer will be configured, resulting in no tracing data being reported to the backend.
2Set up a sampler that uses a constant sampling strategy.
3Sample all requests. Set sampler-param to somewhere between 0 and 1, e.g. 0.50, if you do not wish to sample all requests.
4Add trace IDs into log message.
+
+
+

The second approach is to supply the properties as environment variables. These can be specified using jvm.args as shown in the following section.

+
+
+
+
+
+

Run the application

+
+
+

The first step is to start the tracing system to collect and display the captured traces:

+
+
+
+
docker run -p 5775:5775/udp -p 6831:6831/udp -p 6832:6832/udp -p 5778:5778 -p 16686:16686 -p 14268:14268 jaegertracing/all-in-one:latest
+
+
+
+

Now we are ready to run our application. If using application.properties to configure the tracer:

+
+
+
+
quarkus dev
+
+
+
+

or if configuring the tracer via environment variables:

+
+
+
+
quarkus dev -Djvm.args="-DJAEGER_SERVICE_NAME=myservice -DJAEGER_SAMPLER_TYPE=const -DJAEGER_SAMPLER_PARAM=1"
+
+
+
+

Once both the application and tracing system are started, you can make a request to the provided endpoint:

+
+
+
+
$ curl http://localhost:8080/hello
+hello
+
+
+
+

When the first request has been submitted, the Jaeger tracer within the app will be initialized:

+
+
+
+
2019-10-16 09:35:23,464 INFO  [io.jae.Configuration] (executor-thread-1) Initialized tracer=JaegerTracer(version=Java-0.34.0, serviceName=myservice, reporter=RemoteReporter(sender=UdpSender(), closeEnqueueTimeout=1000), sampler=ConstSampler(decision=true, tags={sampler.type=const, sampler.param=true}), tags={hostname=localhost.localdomain, jaeger.version=Java-0.34.0, ip=127.0.0.1}, zipkinSharedRpcSpan=false, expandExceptionLogs=false, useTraceId128Bit=false)
+13:20:11 INFO  traceId=1336b2b0a76a96a3, parentId=0, spanId=1336b2b0a76a96a3, sampled=true [or.ac.qu.TracedResource] (executor-thread-63) hello
+
+
+
+

Then visit the Jaeger UI to see the tracing information.

+
+
+

Hit CTRL+C to stop the application.

+
+
+
+
+

Tracing additional methods

+
+
+

REST endpoints are automatically traced. +If you need to trace additional methods, you can add the org.eclipse.microprofile.opentracing.Traced annotation to CDI bean classes or their non-private methods.

+
+
+

This can be useful to trace incoming requests from non-REST calls (like request coming from a message) or to create spans inside a trace.

+
+
+

Here is an example of a FrancophoneService which methods are traced.

+
+
+
+
import jakarta.enterprise.context.ApplicationScoped;
+
+import org.eclipse.microprofile.opentracing.Traced;
+
+@Traced
+@ApplicationScoped
+public class FrancophoneService {
+
+    public String bonjour() {
+        return "bonjour";
+    }
+}
+
+
+
+ + + + + +
+ + +The best way to add OpenTracing capability to reactive messaging based applications is by adding the Traced annotation to all incoming methods. +
+
+
+
+
+

Additional instrumentation

+
+
+

The OpenTracing API Contributions project offers additional instrumentation that can be used to add tracing to a large variety of technologies/components.

+
+
+

The instrumentation documented in this section has been tested with Quarkus and works in both standard and native mode.

+
+
+

JDBC

+
+

The JDBC instrumentation will add a span for each JDBC queries done by your application, to enable it, add the following dependency to your build file:

+
+
+
pom.xml
+
+
<dependency>
+    <groupId>io.opentracing.contrib</groupId>
+    <artifactId>opentracing-jdbc</artifactId>
+</dependency>
+
+
+
+
build.gradle
+
+
implementation("io.opentracing.contrib:opentracing-jdbc")
+
+
+
+

Then, you need to enable it in the configuration:

+
+
+
+
quarkus.datasource.jdbc.tracing=true
+
+
+
+

quarkus.datasource.jdbc.tracing is a build time configuration property: +it makes sure all the tracing infrastructure is included in your application.

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

This is especially important when building a native executable as we need to +make sure the OpenTracing JDBC driver has been registered for reflection, +together with the underlying JDBC driver.

+
+
+
+
+

The Agroal extension will take care of adjusting the JDBC URL with the tracing prefix +when tracing is enabled, +so you do not have to adjust the JDBC URL yourself.

+
+
+

By default, when quarkus.datasource.jdbc.tracing is true, tracing is enabled at runtime +but you can explicitly disable it by setting the following property:

+
+
+
+
quarkus.datasource.jdbc.tracing.enabled=false
+
+
+
+

This way, you can have your Quarkus application ready for tracing and toggle JDBC tracing at runtime.

+
+
+
+

Kafka

+
+

The Kafka instrumentation will add a span for each message sent to or received from a Kafka topic. To enable it, add the following dependency to your build file:

+
+
+
pom.xml
+
+
<dependency>
+    <groupId>io.opentracing.contrib</groupId>
+    <artifactId>opentracing-kafka-client</artifactId>
+</dependency>
+
+
+
+

It contains OpenTracing interceptors that must be registered on Kafka producers and consumers.

+
+
+

If you followed the Kafka guide, the interceptors can be added on the generated-price and the prices channels as follows:

+
+
+
+
# Configure the Kafka sink (we write to it)
+mp.messaging.outgoing.generated-price.connector=smallrye-kafka
+mp.messaging.outgoing.generated-price.topic=prices
+mp.messaging.outgoing.generated-price.value.serializer=org.apache.kafka.common.serialization.IntegerSerializer
+mp.messaging.outgoing.generated-price.interceptor.classes=io.opentracing.contrib.kafka.TracingProducerInterceptor
+
+# Configure the Kafka source (we read from it)
+mp.messaging.incoming.prices.connector=smallrye-kafka
+mp.messaging.incoming.prices.value.deserializer=org.apache.kafka.common.serialization.IntegerDeserializer
+mp.messaging.incoming.prices.interceptor.classes=io.opentracing.contrib.kafka.TracingConsumerInterceptor
+
+
+
+ + + + + +
+ + +interceptor.classes accept a list of classes separated by a comma. +
+
+
+
+

MongoDB client

+
+

The Mongo Driver instrumentation will add a span for each command executed by your application. To enable it, add the following dependency to your build file:

+
+
+
pom.xml
+
+
<dependency>
+    <groupId>io.opentracing.contrib</groupId>
+    <artifactId>opentracing-mongo-common</artifactId>
+</dependency>
+
+
+
+

It contains the OpenTracing CommandListener that will be registered on the configuration of the mongo client. +Following the MongoDB guide, the command listener will be registered defining the config property as follows:

+
+
+
+
# Enable tracing commands in MongoDB client
+quarkus.mongodb.tracing.enabled=true
+
+
+
+
+

Zipkin compatibility mode

+
+

To enable it, add the following dependency to your build file:

+
+
+
pom.xml
+
+
<dependency>
+    <groupId>io.jaegertracing</groupId>
+    <artifactId>jaeger-zipkin</artifactId>
+</dependency>
+
+
+
+

It contains the dependencies to convert the request to zipkin format. +The zipkin compatibility mode will be activated after defining the config property as follows:

+
+
+
+
# Enable zipkin compatibility mode
+quarkus.jaeger.zipkin.compatibility-mode=true
+
+
+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Environment variable: QUARKUS_OPENTRACING_SERVER_SKIP_PATTERN

+
+
+

string

+
+
+
+

Environment variable: QUARKUS_OPENTRACING_SERVER_OPERATION_NAME_PROVIDER

+
+
+
+

http-path, class-method

+

class-method

+
+
+
+

Jaeger Configuration Reference

+
+
+

For more information about the Jaeger extension configuration, have a look at the Jaeger extension documentation.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-systemd-notify/dev/includes/attributes.html b/quarkus-systemd-notify/dev/includes/attributes.html new file mode 100644 index 0000000000..f7da3e1a7c --- /dev/null +++ b/quarkus-systemd-notify/dev/includes/attributes.html @@ -0,0 +1,912 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-systemd-notify/dev/index.html b/quarkus-systemd-notify/dev/index.html new file mode 100644 index 0000000000..fddc5cda74 --- /dev/null +++ b/quarkus-systemd-notify/dev/index.html @@ -0,0 +1,1021 @@ + + + + + + Quarkus Systemd Notify Extension :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Systemd Notify Extension

+
+

Introduction

+
+
+

This extension is used to notify Linux service manager (systemd) about start-up completion and other service status changes.

+
+
+
+
+

Usage

+
+
+

To use the extension, add the dependency to the target project:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.systemd.notify</groupId>
+    <artifactId>quarkus-systemd-notify</artifactId>
+    <version>1.0.1</version>
+</dependency>
+
+
+
+

and configure the service unit file with the following minumum configurations:

+
+
+
+
[Service]
+Type=notify
+AmbientCapabilities=CAP_SYS_ADMIN
+
+
+
+
+
+

Systemd Service Example

+
+
+

Assuming quarkus-run.jar is located at /opt/quarkus-app/quarkus-run.jar:

+
+
+
    +
  • +

    Create a unit configuration file at /etc/systemd/system/quarkus.service:

    +
  • +
+
+
+
+
[Unit]
+Description=Quarkus Server
+After=network.target
+Wants=network.target
+
+[Service]
+Type=notify
+AmbientCapabilities=CAP_SYS_ADMIN
+ExecStart=/bin/java -jar /opt/quarkus-app/quarkus-run.jar
+SuccessExitStatus=0 143
+
+[Install]
+WantedBy=multi-user.target
+
+
+
+
    +
  • +

    Enable the service (this will make it to run at system start-up as well):

    +
  • +
+
+
+
+
sudo systemctl enable quarkus
+
+
+
+
    +
  • +

    Start/Stop/Restart the service:

    +
  • +
+
+
+
+
sudo systemctl start quarkus
+sudo systemctl stop quarkus
+sudo systemctl restart quarkus
+
+
+
+
    +
  • +

    Check status of the service:

    +
  • +
+
+
+
+
sudo systemctl status quarkus
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-tika/1.x/includes/attributes.html b/quarkus-tika/1.x/includes/attributes.html new file mode 100644 index 0000000000..18b6cfd5b8 --- /dev/null +++ b/quarkus-tika/1.x/includes/attributes.html @@ -0,0 +1,919 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-tika/1.x/includes/quarkus-tika.html b/quarkus-tika/1.x/includes/quarkus-tika.html new file mode 100644 index 0000000000..f99e3a13f4 --- /dev/null +++ b/quarkus-tika/1.x/includes/quarkus-tika.html @@ -0,0 +1,1022 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The resource path within the application artifact to the tika-config.xml file.

+
+
+

Environment variable: QUARKUS_TIKA_TIKA_CONFIG_PATH

+
+
+

string

+
+
+
+

Comma separated list of the parsers which must be supported. +Most of the document formats recognized by Apache Tika are supported by default but it affects the application memory and native executable sizes. One can list only the required parsers in tika-config.xml to minimize a number of parsers loaded into the memory, but using this property is recommended to achieve both optimizations. +Either the abbreviated or full parser class names can be used. Only PDF and OpenDocument format parsers can be listed using the reserved 'pdf' and 'odf' abbreviations. Custom class name abbreviations have to be used for all other parsers. For example: // Only PDF parser is required: quarkus.tika.parsers = pdf // Only PDF and OpenDocument parsers are required: quarkus.tika.parsers = pdf,odf This property will have no effect if the `tikaConfigPath' property has been set.

+
+
+

Environment variable: QUARKUS_TIKA_PARSERS

+
+
+

string

+
+
+
+

Controls how the content of the embedded documents is parsed. By default it is appended to the main document content. Setting this property to false makes the content of each of the embedded documents available separately.

+
+
+

Environment variable: QUARKUS_TIKA_APPEND_EMBEDDED_CONTENT

+
+
+

boolean

true

+
+
+
+

Configuration of the individual parsers. For example: quarkus.tika.parsers = pdf,odf quarkus.tika.parser-options.pdf.sort-by-position = true

+
+
+

Environment variable: QUARKUS_TIKA_PARSER_OPTIONS

+
+
+

Map<String,Map<String,String>>

+
+
+
+

Full parser class name for a given parser abbreviation. For example: quarkus.tika.parsers = classparser quarkus.tika.parser.classparser = org.apache.tika.parser.asm.ClassParser

+
+
+

Environment variable: QUARKUS_TIKA_PARSER

+
+
+

Map<String,String>

+
+
+
+
+ + + + + + + diff --git a/quarkus-tika/1.x/index.html b/quarkus-tika/1.x/index.html new file mode 100644 index 0000000000..ab43a89886 --- /dev/null +++ b/quarkus-tika/1.x/index.html @@ -0,0 +1,1339 @@ + + + + + + Quarkus Tika :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Tika

+
+
+
+

This guide explains how your Quarkus application can use Apache Tika to parse the documents.

+
+
+

Apache Tika is a content analysis toolkit which is used to parse the documents in PDF, Open Document, Excel and many other well known binary and text formats using a simple uniform API. Both the document text and properties (metadata) are available once the document has been parsed.

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

If you are planning to run the application as a native executable and parse documents that may have been created with charsets different than the standard ones supported in Java such as UTF-8 then you should configure Quarkus to get the native image generator include all the charsets available to the JVM:

+
+
+
+
<properties>
+    <quarkus.package.type>native</quarkus.package.type>
+    <quarkus.native.add-all-charsets>true</quarkus.native.add-all-charsets>
+<properties>
+
+
+
+

When building native images in Docker using the standard Quarkus Docker configuration files some additional features need to be +installed to support Apache POI. Specifically font information is not included in [Red Hat’s ubi-minimal images](https://developers.redhat.com/products/rhel/ubi). To install it +simply add these lines to your DockerFile.native file:

+
+
+
+
FROM registry.access.redhat.com/ubi8/ubi-minimal:8.7
+
+######################### Set up environment for POI ##########################
+RUN microdnf update && microdnf install freetype fontconfig && microdnf clean all
+######################### Set up environment for POI ##########################
+
+WORKDIR /work/
+RUN chown 1001 /work \
+    && chmod "g+rwX" /work \
+    && chown 1001:root /work
+COPY --chown=1001:root target/*-runner /work/application
+
+EXPOSE 8080
+USER 1001
+
+CMD ["./application", "-Dquarkus.http.host=0.0.0.0"]
+
+
+
+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+ +
+
+
+
+

Solution

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step. +However, you can go right to the completed example.

+
+
+

Clone the Git repository: git clone https://github.com/quarkusio/quarkus-quickstarts.git, or download an archive.

+
+
+

The solution is located in the tika-quickstart directory.

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

The provided solution contains a few additional elements such as tests and testing infrastructure.

+
+
+
+
+
+
+

Creating the Maven Project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:2.16.5.Final:create \
+    -DprojectGroupId=org.acme.example \
+    -DprojectArtifactId=tika-quickstart \
+    -DclassName="org.acme.tika.TikaParserResource" \
+    -Dpath="/parse" \
+    -Dextensions="tika,resteasy-reactive,awt"
+cd tika-quickstart
+
+
+
+

This command generates a Maven project, importing the tika and resteasy-reactive extensions. +We also import the AWT extension as some of the Tika operations done in this guide require it.

+
+
+

If you already have your Quarkus project configured, you can add the extensions +to your project by running the following command in your project base directory:

+
+
+
+
./mvnw quarkus:add-extension -Dextensions="tika,resteasy-reactive,awt"
+
+
+
+

This will add the following to your pom.xml:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.tika</groupId>
+    <artifactId>quarkus-tika</artifactId>
+    <version>1.1.1</version>
+</dependency>
+<dependency>
+    <groupId>io.quarkus</groupId>
+    <artifactId>quarkus-resteasy-reactive</artifactId>
+</dependency>
+<dependency>
+    <groupId>io.quarkus</groupId>
+    <artifactId>quarkus-awt</artifactId>
+</dependency>
+
+
+
+

Examine the generated JAX-RS resource

+
+

Open the src/main/java/org/acme/tika/TikaParserResource.java file and see the following content:

+
+
+
+
package org.acme.tika;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+
+@Path("/parse")
+public class TikaParserResource {
+
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public String hello() {
+        return "hello";
+    }
+}
+
+
+
+
+

Update the JAX-RS resource

+
+

Next update TikaParserResource to accept and parse PDF and OpenDocument format documents:

+
+
+
+
package org.acme.tika;
+
+import java.io.InputStream;
+import java.time.Duration;
+import java.time.Instant;
+
+import javax.inject.Inject;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+
+import io.quarkus.tika.TikaParser;
+import org.jboss.logging.Logger;
+
+@Path("/parse")
+public class TikaParserResource {
+    private static final Logger log = Logger.getLogger(TikaParserResource.class);
+
+    @Inject
+    TikaParser parser;
+
+    @POST
+    @Path("/text")
+    @Consumes({"application/pdf", "application/vnd.oasis.opendocument.text"})
+    @Produces(MediaType.TEXT_PLAIN)
+    public String extractText(InputStream stream) {
+        Instant start = Instant.now();
+
+        String text = parser.getText(stream);
+
+        Instant finish = Instant.now();
+
+        log.info(Duration.between(start, finish).toMillis() + " mls have passed");
+
+        return text;
+    }
+}
+
+
+
+

As you can see the JAX-RS resource method was renamed to extractText, @GET annotation was replaced with POST and @Path(/text) annotation was added, and @Consumes annotation shows that PDF and OpenDocument media type formats can now be accepted. An injected TikaParser is used to parse the documents and report the extracted text. It also measures how long does it take to parse a given document.

+
+
+
+
+
+

Run the application

+
+
+

Now we are ready to run our application. Use:

+
+
+
+
./mvnw compile quarkus:dev
+
+
+
+

and you should see output similar to:

+
+
+
quarkus:dev Output
+
+
$ ./mvnw clean compile quarkus:dev
+[INFO] Scanning for projects...
+[INFO]
+INFO] --------------------< org.acme.example:apache-tika >--------------------
+[INFO] Building apache-tika 1.0.0-SNAPSHOT
+[INFO] --------------------------------[ jar ]---------------------------------
+...
+Listening for transport dt_socket at address: 5005
+2019-10-15 14:23:26,442 INFO  [io.qua.dep.QuarkusAugmentor] (main) Beginning quarkus augmentation
+2019-10-15 14:23:26,991 INFO  [io.qua.dep.QuarkusAugmentor] (main) Quarkus augmentation completed in 549ms
+2019-10-15 14:23:27,637 INFO  [io.quarkus] (main) Quarkus 999-SNAPSHOT started in 1.361s. Listening on: http://0.0.0.0:8080
+2019-10-15 14:23:27,638 INFO  [io.quarkus] (main) Profile dev activated. Live Coding activated.
+2019-10-15 14:23:27,639 INFO  [io.quarkus] (main) Installed features: [cdi, resteasy-reactive, tika]
+
+
+
+

Now that the REST endpoint is running, we can get it to parse PDF and OpenDocument documents using a command line tool like curl:

+
+
+
+
$ curl -X POST -H "Content-type: application/pdf" --data-binary @target/classes/quarkus.pdf http://localhost:8080/parse/text
+Hello Quarkus
+
+
+
+

and

+
+
+
+
$ curl -X POST -H "Content-type: Content-type: application/vnd.oasis.opendocument.text" --data-binary @target/classes/quarkus.odt http://localhost:8080/parse/text
+Hello Quarkus
+
+
+
+
+
+

Building a native executable

+
+
+

You can build a native executable with the usual command ./mvnw package -Dnative. +Running it is as simple as executing ./target/tika-quickstart-1.0.0-SNAPSHOT-runner.

+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The resource path within the application artifact to the tika-config.xml file.

+
+
+

Environment variable: QUARKUS_TIKA_TIKA_CONFIG_PATH

+
+
+

string

+
+
+
+

Comma separated list of the parsers which must be supported. +Most of the document formats recognized by Apache Tika are supported by default but it affects the application memory and native executable sizes. One can list only the required parsers in tika-config.xml to minimize a number of parsers loaded into the memory, but using this property is recommended to achieve both optimizations. +Either the abbreviated or full parser class names can be used. Only PDF and OpenDocument format parsers can be listed using the reserved 'pdf' and 'odf' abbreviations. Custom class name abbreviations have to be used for all other parsers. For example: // Only PDF parser is required: quarkus.tika.parsers = pdf // Only PDF and OpenDocument parsers are required: quarkus.tika.parsers = pdf,odf This property will have no effect if the `tikaConfigPath' property has been set.

+
+
+

Environment variable: QUARKUS_TIKA_PARSERS

+
+
+

string

+
+
+
+

Controls how the content of the embedded documents is parsed. By default it is appended to the main document content. Setting this property to false makes the content of each of the embedded documents available separately.

+
+
+

Environment variable: QUARKUS_TIKA_APPEND_EMBEDDED_CONTENT

+
+
+

boolean

true

+
+
+
+

Configuration of the individual parsers. For example: quarkus.tika.parsers = pdf,odf quarkus.tika.parser-options.pdf.sort-by-position = true

+
+
+

Environment variable: QUARKUS_TIKA_PARSER_OPTIONS

+
+
+

Map<String,Map<String,String>>

+
+
+
+

Full parser class name for a given parser abbreviation. For example: quarkus.tika.parsers = classparser quarkus.tika.parser.classparser = org.apache.tika.parser.asm.ClassParser

+
+
+

Environment variable: QUARKUS_TIKA_PARSER

+
+
+

Map<String,String>

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-tika/dev/includes/attributes.html b/quarkus-tika/dev/includes/attributes.html new file mode 100644 index 0000000000..bcc21a059e --- /dev/null +++ b/quarkus-tika/dev/includes/attributes.html @@ -0,0 +1,919 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-tika/dev/includes/quarkus-tika.html b/quarkus-tika/dev/includes/quarkus-tika.html new file mode 100644 index 0000000000..6d26176f32 --- /dev/null +++ b/quarkus-tika/dev/includes/quarkus-tika.html @@ -0,0 +1,1047 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The resource path within the application artifact to the tika-config.xml file.

+
+
+

Environment variable: QUARKUS_TIKA_TIKA_CONFIG_PATH

+
+
+

string

+
+
+
+

Comma separated list of the parsers which must be supported.

+
+
+

Most of the document formats recognized by Apache Tika are supported by default but it affects the application memory and native executable sizes. One can list only the required parsers in tika-config.xml to minimize a number of parsers loaded into the memory, but using this property is recommended to achieve both optimizations.

+
+
+

Either the abbreviated or full parser class names can be used. Only PDF and OpenDocument format parsers can be listed using the reserved 'pdf' and 'odf' abbreviations. Custom class name abbreviations have to be used for all other parsers. For example:

+
+
+
+
quarkus.tika.parsers = pdf
+quarkus.tika.parsers = pdf,odf
+
+
+
+

This property will have no effect if the `tikaConfigPath' property has been set.

+
+
+

Environment variable: QUARKUS_TIKA_PARSERS

+
+
+

string

+
+
+
+

Controls how the content of the embedded documents is parsed. By default it is appended to the main document content. Setting this property to false makes the content of each of the embedded documents available separately.

+
+
+

Environment variable: QUARKUS_TIKA_APPEND_EMBEDDED_CONTENT

+
+
+

boolean

true

+
+
+
+

Configuration of the individual parsers. For example:

+
+
+
+
quarkus.tika.parsers = pdf,odf
+quarkus.tika.parser-options.pdf.sort-by-position = true
+
+
+
+

Environment variable: QUARKUS_TIKA_PARSER_OPTIONS

+
+
+

Map<String,Map<String,String>>

+
+
+
+

Full parser class name for a given parser abbreviation. For example:

+
+
+
+
quarkus.tika.parsers = classparser
+quarkus.tika.parser.classparser = org.apache.tika.parser.asm.ClassParser
+
+
+
+

Environment variable: QUARKUS_TIKA_PARSER

+
+
+

Map<String,String>

+
+
+
+
+ + + + + + + diff --git a/quarkus-tika/dev/index.html b/quarkus-tika/dev/index.html new file mode 100644 index 0000000000..a9390d7f72 --- /dev/null +++ b/quarkus-tika/dev/index.html @@ -0,0 +1,1364 @@ + + + + + + Quarkus Tika :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Tika

+
+
+
+

This guide explains how your Quarkus application can use Apache Tika to parse the documents.

+
+
+

Apache Tika is a content analysis toolkit which is used to parse the documents in PDF, Open Document, Excel and many other well known binary and text formats using a simple uniform API. Both the document text and properties (metadata) are available once the document has been parsed.

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

If you are planning to run the application as a native executable and parse documents that may have been created with charsets different than the standard ones supported in Java such as UTF-8 then you should configure Quarkus to get the native image generator include all the charsets available to the JVM:

+
+
+
+
<properties>
+    <quarkus.package.type>native</quarkus.package.type>
+    <quarkus.native.add-all-charsets>true</quarkus.native.add-all-charsets>
+<properties>
+
+
+
+

When building native images in Docker using the standard Quarkus Docker configuration files some additional features need to be +installed to support Apache POI. Specifically font information is not included in [Red Hat’s ubi-minimal images](https://developers.redhat.com/products/rhel/ubi). To install it +simply add these lines to your DockerFile.native file:

+
+
+
+
FROM registry.access.redhat.com/ubi8/ubi-minimal:8.7
+
+######################### Set up environment for POI ##########################
+RUN microdnf update && microdnf install freetype fontconfig && microdnf clean all
+######################### Set up environment for POI ##########################
+
+WORKDIR /work/
+RUN chown 1001 /work \
+    && chmod "g+rwX" /work \
+    && chown 1001:root /work
+COPY --chown=1001:root target/*-runner /work/application
+
+EXPOSE 8080
+USER 1001
+
+CMD ["./application", "-Dquarkus.http.host=0.0.0.0"]
+
+
+
+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+ +
+
+
+
+

Solution

+
+
+

We recommend that you follow the instructions in the next sections and create the application step by step. +However, you can go right to the completed example.

+
+
+

Clone the Git repository: git clone https://github.com/quarkusio/quarkus-quickstarts.git, or download an archive.

+
+
+

The solution is located in the tika-quickstart directory.

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

The provided solution contains a few additional elements such as tests and testing infrastructure.

+
+
+
+
+
+
+

Creating the Maven Project

+
+
+

First, we need a new project. Create a new project with the following command:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.2.9.Final:create \
+    -DprojectGroupId=org.acme.example \
+    -DprojectArtifactId=tika-quickstart \
+    -DclassName="org.acme.tika.TikaParserResource" \
+    -Dpath="/parse" \
+    -Dextensions="tika,resteasy-reactive,awt"
+cd tika-quickstart
+
+
+
+

This command generates a Maven project, importing the tika and resteasy-reactive extensions. +We also import the AWT extension as some of the Tika operations done in this guide require it.

+
+
+

If you already have your Quarkus project configured, you can add the extensions +to your project by running the following command in your project base directory:

+
+
+
+
./mvnw quarkus:add-extension -Dextensions="tika,resteasy-reactive,awt"
+
+
+
+

This will add the following to your pom.xml:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.tika</groupId>
+    <artifactId>quarkus-tika</artifactId>
+    <version>2.0.3</version>
+</dependency>
+<dependency>
+    <groupId>io.quarkus</groupId>
+    <artifactId>quarkus-resteasy-reactive</artifactId>
+</dependency>
+<dependency>
+    <groupId>io.quarkus</groupId>
+    <artifactId>quarkus-awt</artifactId>
+</dependency>
+
+
+
+

Examine the generated JAX-RS resource

+
+

Open the src/main/java/org/acme/tika/TikaParserResource.java file and see the following content:

+
+
+
+
package org.acme.tika;
+
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+
+@Path("/parse")
+public class TikaParserResource {
+
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public String hello() {
+        return "hello";
+    }
+}
+
+
+
+
+

Update the JAX-RS resource

+
+

Next update TikaParserResource to accept and parse PDF and OpenDocument format documents:

+
+
+
+
package org.acme.tika;
+
+import java.io.InputStream;
+import java.time.Duration;
+import java.time.Instant;
+
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+
+import io.quarkus.tika.TikaParser;
+import org.jboss.logging.Logger;
+
+@Path("/parse")
+public class TikaParserResource {
+    private static final Logger log = Logger.getLogger(TikaParserResource.class);
+
+    @Inject
+    TikaParser parser;
+
+    @POST
+    @Path("/text")
+    @Consumes({"application/pdf", "application/vnd.oasis.opendocument.text"})
+    @Produces(MediaType.TEXT_PLAIN)
+    public String extractText(InputStream stream) {
+        Instant start = Instant.now();
+
+        String text = parser.getText(stream);
+
+        Instant finish = Instant.now();
+
+        log.info(Duration.between(start, finish).toMillis() + " mls have passed");
+
+        return text;
+    }
+}
+
+
+
+

As you can see the JAX-RS resource method was renamed to extractText, @GET annotation was replaced with POST and @Path(/text) annotation was added, and @Consumes annotation shows that PDF and OpenDocument media type formats can now be accepted. An injected TikaParser is used to parse the documents and report the extracted text. It also measures how long does it take to parse a given document.

+
+
+
+
+
+

Run the application

+
+
+

Now we are ready to run our application. Use:

+
+
+
+
./mvnw compile quarkus:dev
+
+
+
+

and you should see output similar to:

+
+
+
quarkus:dev Output
+
+
$ ./mvnw clean compile quarkus:dev
+[INFO] Scanning for projects...
+[INFO]
+INFO] --------------------< org.acme.example:apache-tika >--------------------
+[INFO] Building apache-tika 1.0.0-SNAPSHOT
+[INFO] --------------------------------[ jar ]---------------------------------
+...
+Listening for transport dt_socket at address: 5005
+2019-10-15 14:23:26,442 INFO  [io.qua.dep.QuarkusAugmentor] (main) Beginning quarkus augmentation
+2019-10-15 14:23:26,991 INFO  [io.qua.dep.QuarkusAugmentor] (main) Quarkus augmentation completed in 549ms
+2019-10-15 14:23:27,637 INFO  [io.quarkus] (main) Quarkus 999-SNAPSHOT started in 1.361s. Listening on: http://0.0.0.0:8080
+2019-10-15 14:23:27,638 INFO  [io.quarkus] (main) Profile dev activated. Live Coding activated.
+2019-10-15 14:23:27,639 INFO  [io.quarkus] (main) Installed features: [cdi, resteasy-reactive, tika]
+
+
+
+

Now that the REST endpoint is running, we can get it to parse PDF and OpenDocument documents using a command line tool like curl:

+
+
+
+
$ curl -X POST -H "Content-type: application/pdf" --data-binary @target/classes/quarkus.pdf http://localhost:8080/parse/text
+Hello Quarkus
+
+
+
+

and

+
+
+
+
$ curl -X POST -H "Content-type: Content-type: application/vnd.oasis.opendocument.text" --data-binary @target/classes/quarkus.odt http://localhost:8080/parse/text
+Hello Quarkus
+
+
+
+
+
+

Building a native executable

+
+
+

You can build a native executable with the usual command ./mvnw package -Dnative. +Running it is as simple as executing ./target/tika-quickstart-1.0.0-SNAPSHOT-runner.

+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The resource path within the application artifact to the tika-config.xml file.

+
+
+

Environment variable: QUARKUS_TIKA_TIKA_CONFIG_PATH

+
+
+

string

+
+
+
+

Comma separated list of the parsers which must be supported.

+
+
+

Most of the document formats recognized by Apache Tika are supported by default but it affects the application memory and native executable sizes. One can list only the required parsers in tika-config.xml to minimize a number of parsers loaded into the memory, but using this property is recommended to achieve both optimizations.

+
+
+

Either the abbreviated or full parser class names can be used. Only PDF and OpenDocument format parsers can be listed using the reserved 'pdf' and 'odf' abbreviations. Custom class name abbreviations have to be used for all other parsers. For example:

+
+
+
+
quarkus.tika.parsers = pdf
+quarkus.tika.parsers = pdf,odf
+
+
+
+

This property will have no effect if the `tikaConfigPath' property has been set.

+
+
+

Environment variable: QUARKUS_TIKA_PARSERS

+
+
+

string

+
+
+
+

Controls how the content of the embedded documents is parsed. By default it is appended to the main document content. Setting this property to false makes the content of each of the embedded documents available separately.

+
+
+

Environment variable: QUARKUS_TIKA_APPEND_EMBEDDED_CONTENT

+
+
+

boolean

true

+
+
+
+

Configuration of the individual parsers. For example:

+
+
+
+
quarkus.tika.parsers = pdf,odf
+quarkus.tika.parser-options.pdf.sort-by-position = true
+
+
+
+

Environment variable: QUARKUS_TIKA_PARSER_OPTIONS

+
+
+

Map<String,Map<String,String>>

+
+
+
+

Full parser class name for a given parser abbreviation. For example:

+
+
+
+
quarkus.tika.parsers = classparser
+quarkus.tika.parser.classparser = org.apache.tika.parser.asm.ClassParser
+
+
+
+

Environment variable: QUARKUS_TIKA_PARSER

+
+
+

Map<String,String>

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-unleash/0.x/includes/attributes.html b/quarkus-unleash/0.x/includes/attributes.html new file mode 100644 index 0000000000..0d41d594ab --- /dev/null +++ b/quarkus-unleash/0.x/includes/attributes.html @@ -0,0 +1,919 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-unleash/0.x/includes/quarkus-unleash.html b/quarkus-unleash/0.x/includes/quarkus-unleash.html new file mode 100644 index 0000000000..9881941891 --- /dev/null +++ b/quarkus-unleash/0.x/includes/quarkus-unleash.html @@ -0,0 +1,1298 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

If DevServices has been explicitly enabled or disabled. DevServices is generally enabled by default, unless there is an existing configuration present. +When DevServices is enabled Quarkus will attempt to automatically configure and start a database when running in Dev or Test mode and when Docker is running.

+
+
+

Environment variable: QUARKUS_UNLEASH_DEVSERVICES_ENABLED

+
+
+

boolean

true

+
+
+
+

Optional fixed port the dev service will listen to. +If not defined, the port will be chosen randomly.

+
+
+

Environment variable: QUARKUS_UNLEASH_DEVSERVICES_PORT

+
+
+

int

+
+
+
+

Indicates if the Unleash server managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for Unleash starts a new container. +The discovery uses the quarkus-dev-service-unleash label. The value is configured using the service-name property. +Container sharing is only used in dev mode.

+
+
+

Environment variable: QUARKUS_UNLEASH_DEVSERVICES_SHARED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-unleash label attached to the started container. This property is used when shared is set to true. In this case, before starting a container, Dev Services for Unleash looks for a container with the quarkus-dev-service-unleash label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise, it starts a new container with the quarkus-dev-service-unleash label set to the specified value. +This property is used when you need multiple shared Unleash servers.

+
+
+

Environment variable: QUARKUS_UNLEASH_DEVSERVICES_SERVICE_NAME

+
+
+

string

unleash

+
+
+
+

The container image name to use, for container based DevServices providers.

+
+
+

Environment variable: QUARKUS_UNLEASH_DEVSERVICES_IMAGE_NAME

+
+
+

string

+
+
+
+

Helper to define the stop strategy for containers created by DevServices. In particular, we don’t want to actually stop the containers when they have been flagged for reuse, and when the Testcontainers configuration has been explicitly set to allow container reuse. To enable reuse, ass testcontainers.reuse.enable=true in your .testcontainers.properties file, to be stored in your home.

+
+
+

Environment variable: QUARKUS_UNLEASH_DEVSERVICES_REUSE

+
+
+

boolean

false

+
+
+
+

The import data from file during the start.

+
+
+

Environment variable: QUARKUS_UNLEASH_DEVSERVICES_IMPORT_FILE

+
+
+

string

+
+
+
+

The container image name to use, for container based zeebe simple monitor.

+
+
+

Environment variable: QUARKUS_UNLEASH_DEVSERVICES_DB_IMAGE_NAME

+
+
+

string

postgres

+
+
+
+

The value of the quarkus-dev-service-unleash-db label attached to the started container. This property is used when shared is set to true. In this case, before starting a container, Dev Services for Unleash DB looks for a container with the quarkus-dev-service-unleash-db label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise, it starts a new container with the quarkus-dev-service-unleash-db label set to the specified value. +This property is used when you need multiple shared Unleash DB servers.

+
+
+

Environment variable: QUARKUS_UNLEASH_DEVSERVICES_DB_SERVICE_NAME

+
+
+

string

unleash-db

+
+
+
+

Unleash URL service endpoint

+
+
+

Environment variable: QUARKUS_UNLEASH_URL

+
+
+

string

required

+
+
+
+

Application name

+
+
+

Environment variable: QUARKUS_UNLEASH_APPLICATION

+
+
+

string

+
+
+
+

Project name

+
+
+

Environment variable: QUARKUS_UNLEASH_PROJECT

+
+
+

string

+
+
+
+

Instance ID.

+
+
+

Environment variable: QUARKUS_UNLEASH_INSTANCE_ID

+
+
+

string

+
+
+
+

Disable Unleash metrics

+
+
+

Environment variable: QUARKUS_UNLEASH_DISABLE_METRICS

+
+
+

boolean

false

+
+
+
+

Application Unleash token

+
+
+

Environment variable: QUARKUS_UNLEASH_TOKEN

+
+
+

string

+
+
+
+

Application environment

+
+
+

Environment variable: QUARKUS_UNLEASH_ENVIRONMENT

+
+
+

string

+
+
+
+

Fetch toggles interval

+
+
+

Environment variable: QUARKUS_UNLEASH_FETCH_TOGGLES_INTERVAL

+
+
+

long

10

+
+
+
+

Send metrics interval

+
+
+

Environment variable: QUARKUS_UNLEASH_SEND_METRICS_INTERVAL

+
+
+

long

60

+
+
+
+

Backup file

+
+
+

Environment variable: QUARKUS_UNLEASH_BACKUP_FILE

+
+
+

string

+
+
+
+

A synchronous fetch on initialisation

+
+
+

Environment variable: QUARKUS_UNLEASH_SYNCHRONOUS_FETCH_ON_INITIALISATION

+
+
+

boolean

false

+
+
+
+

Enable proxy authentication by JVM properties

+
+
+

Environment variable: QUARKUS_UNLEASH_ENABLE_PROXY_AUTHENTICATION_BY_JVM_PROPERTIES

+
+
+

boolean

false

+
+
+
+
+ + + + + + + diff --git a/quarkus-unleash/0.x/index.html b/quarkus-unleash/0.x/index.html new file mode 100644 index 0000000000..0d4b8c4052 --- /dev/null +++ b/quarkus-unleash/0.x/index.html @@ -0,0 +1,1482 @@ + + + + + + Quarkus - Unleash :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus - Unleash

+
+
+
+

Unleash is a feature toggle system, that gives you a great overview of all feature toggles across all your applications and services. +Quarkus Unleash extension is client for Unleash.

+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the quarkiverse-unleash extension first. +In your pom.xml file, add:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.unleash</groupId>
+    <artifactId>quarkus-unleash</artifactId>
+    <version>0.8.0</version>
+</dependency>
+
+
+
+
+
+

Usage

+
+
+

Unleash client

+
+

Assuming you have Unleash running on localhost:4242 you should add the following properties to your application.properties and fill in the values for url.

+
+
+
+
quarkus.unleash.url=http://localhost:4242/api
+
+
+
+

Once you have configured the properties, you can start using an Unleash-client.

+
+
+
+
@ApplicationScoped
+public class TestService {
+
+    @Inject
+    Unleash unleash;
+
+    public boolean isTest() {
+        return unleash.isEnabled("quarkus.unleash.test");
+    }
+}
+
+
+
+
+

@FeatureToggle

+
+

By using the @FeatureToggle annotation there is a shortcut to inject feature toggle.

+
+
+
+
@ApplicationScoped
+public class TestService {
+
+    @FeatureToggle(name = "my-toggle")
+    Instance<Boolean> myToggle;
+
+    @FeatureToggle(name = "my-toggle", defaultValue = true)
+    Instance<Boolean> myToggleDefault;
+
+}
+
+
+
+
+

@FeatureVariant

+
+

By using the @FeatureVariant annotation there is a shortcut to inject feature toggle +variant or the payload of the variant.

+
+
+
+
@ApplicationScoped
+public class TestService {
+
+    @FeatureVariant(name = "toggle-variant")
+    Instance<Variant> variant;
+
+    @FeatureVariant(name = "toggle-payload")
+    Instance<String> variant;
+
+    @FeatureVariant(name = "toggle-variant-json")
+    Instance<MyCustomJsonModel> variant;
+
+}
+
+
+
+
+

Testing

+
+

To use the test extension, add this dependency to the project:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.unleash</groupId>
+    <artifactId>quarkus-unleash-test</artifactId>
+    <version>0.8.0</version>
+    <scope>test</scope>
+</dependency>
+
+
+
+

UnleashTestResource creates an instance of admin and standard Unleash clients just for testing. +These instances are separate from the application instances.

+
+
+
+
@QuarkusTest
+@QuarkusTestResource(UnleashTestResource.class)
+public class BaseTest {
+
+    @InjectUnleashAdmin
+    UnleashAdmin admin;
+
+    @InjectUnleash
+    Unleash client;
+
+    @Test
+    public void test() {
+
+        admin.toggleOff("toggle-1");
+        admin.toggleOn("toggle-2");
+
+        // wait for client change
+        await().atLeast(12, SECONDS)
+                .pollInterval(4, SECONDS)
+                .until(() -> client.isEnabled("toggle-2"));
+
+        boolean toggleOn = client.isEnabled("toggle-2");
+
+        // ... test my application
+
+    }
+}
+
+
+
+
+

Dev-Services

+
+

Dev Services for Unleash is automatically enabled unless:

+
+
+
    +
  • +

    quarkus.unleash.devservices.enabled is set to false

    +
  • +
  • +

    quarkus.unleash.url is configured

    +
  • +
+
+
+

Dev Service for Unleash relies on Docker to start the broker. If your environment does not support Docker, you will need +to start the broker manually, or connect to an already running broker. You can configure the broker address using +quarkus.unleash.url.

+
+
+
+
+
+

Extension Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

If DevServices has been explicitly enabled or disabled. DevServices is generally enabled by default, unless there is an existing configuration present. +When DevServices is enabled Quarkus will attempt to automatically configure and start a database when running in Dev or Test mode and when Docker is running.

+
+
+

Environment variable: QUARKUS_UNLEASH_DEVSERVICES_ENABLED

+
+
+

boolean

true

+
+
+
+

Optional fixed port the dev service will listen to. +If not defined, the port will be chosen randomly.

+
+
+

Environment variable: QUARKUS_UNLEASH_DEVSERVICES_PORT

+
+
+

int

+
+
+
+

Indicates if the Unleash server managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for Unleash starts a new container. +The discovery uses the quarkus-dev-service-unleash label. The value is configured using the service-name property. +Container sharing is only used in dev mode.

+
+
+

Environment variable: QUARKUS_UNLEASH_DEVSERVICES_SHARED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-unleash label attached to the started container. This property is used when shared is set to true. In this case, before starting a container, Dev Services for Unleash looks for a container with the quarkus-dev-service-unleash label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise, it starts a new container with the quarkus-dev-service-unleash label set to the specified value. +This property is used when you need multiple shared Unleash servers.

+
+
+

Environment variable: QUARKUS_UNLEASH_DEVSERVICES_SERVICE_NAME

+
+
+

string

unleash

+
+
+
+

The container image name to use, for container based DevServices providers.

+
+
+

Environment variable: QUARKUS_UNLEASH_DEVSERVICES_IMAGE_NAME

+
+
+

string

+
+
+
+

Helper to define the stop strategy for containers created by DevServices. In particular, we don’t want to actually stop the containers when they have been flagged for reuse, and when the Testcontainers configuration has been explicitly set to allow container reuse. To enable reuse, ass testcontainers.reuse.enable=true in your .testcontainers.properties file, to be stored in your home.

+
+
+

Environment variable: QUARKUS_UNLEASH_DEVSERVICES_REUSE

+
+
+

boolean

false

+
+
+
+

The import data from file during the start.

+
+
+

Environment variable: QUARKUS_UNLEASH_DEVSERVICES_IMPORT_FILE

+
+
+

string

+
+
+
+

The container image name to use, for container based zeebe simple monitor.

+
+
+

Environment variable: QUARKUS_UNLEASH_DEVSERVICES_DB_IMAGE_NAME

+
+
+

string

postgres

+
+
+
+

The value of the quarkus-dev-service-unleash-db label attached to the started container. This property is used when shared is set to true. In this case, before starting a container, Dev Services for Unleash DB looks for a container with the quarkus-dev-service-unleash-db label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise, it starts a new container with the quarkus-dev-service-unleash-db label set to the specified value. +This property is used when you need multiple shared Unleash DB servers.

+
+
+

Environment variable: QUARKUS_UNLEASH_DEVSERVICES_DB_SERVICE_NAME

+
+
+

string

unleash-db

+
+
+
+

Unleash URL service endpoint

+
+
+

Environment variable: QUARKUS_UNLEASH_URL

+
+
+

string

required

+
+
+
+

Application name

+
+
+

Environment variable: QUARKUS_UNLEASH_APPLICATION

+
+
+

string

+
+
+
+

Project name

+
+
+

Environment variable: QUARKUS_UNLEASH_PROJECT

+
+
+

string

+
+
+
+

Instance ID.

+
+
+

Environment variable: QUARKUS_UNLEASH_INSTANCE_ID

+
+
+

string

+
+
+
+

Disable Unleash metrics

+
+
+

Environment variable: QUARKUS_UNLEASH_DISABLE_METRICS

+
+
+

boolean

false

+
+
+
+

Application Unleash token

+
+
+

Environment variable: QUARKUS_UNLEASH_TOKEN

+
+
+

string

+
+
+
+

Application environment

+
+
+

Environment variable: QUARKUS_UNLEASH_ENVIRONMENT

+
+
+

string

+
+
+
+

Fetch toggles interval

+
+
+

Environment variable: QUARKUS_UNLEASH_FETCH_TOGGLES_INTERVAL

+
+
+

long

10

+
+
+
+

Send metrics interval

+
+
+

Environment variable: QUARKUS_UNLEASH_SEND_METRICS_INTERVAL

+
+
+

long

60

+
+
+
+

Backup file

+
+
+

Environment variable: QUARKUS_UNLEASH_BACKUP_FILE

+
+
+

string

+
+
+
+

A synchronous fetch on initialisation

+
+
+

Environment variable: QUARKUS_UNLEASH_SYNCHRONOUS_FETCH_ON_INITIALISATION

+
+
+

boolean

false

+
+
+
+

Enable proxy authentication by JVM properties

+
+
+

Environment variable: QUARKUS_UNLEASH_ENABLE_PROXY_AUTHENTICATION_BY_JVM_PROPERTIES

+
+
+

boolean

false

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-unleash/dev/includes/attributes.html b/quarkus-unleash/dev/includes/attributes.html new file mode 100644 index 0000000000..d29447aa76 --- /dev/null +++ b/quarkus-unleash/dev/includes/attributes.html @@ -0,0 +1,919 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-unleash/dev/includes/quarkus-unleash.html b/quarkus-unleash/dev/includes/quarkus-unleash.html new file mode 100644 index 0000000000..d30a456d35 --- /dev/null +++ b/quarkus-unleash/dev/includes/quarkus-unleash.html @@ -0,0 +1,1344 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

If DevServices has been explicitly enabled or disabled. DevServices is generally enabled by default, unless there is an existing configuration present.

+
+
+

When DevServices is enabled Quarkus will attempt to automatically configure and start a database when running in Dev or Test mode and when Docker is running.

+
+
+

Environment variable: QUARKUS_UNLEASH_DEVSERVICES_ENABLED

+
+
+

boolean

true

+
+
+
+

Optional fixed port the dev service will listen to.

+
+
+

If not defined, the port will be chosen randomly.

+
+
+

Environment variable: QUARKUS_UNLEASH_DEVSERVICES_PORT

+
+
+

int

+
+
+
+

Indicates if the Unleash server managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for Unleash starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-unleash label. The value is configured using the service-name property.

+
+
+

Container sharing is only used in dev mode.

+
+
+

Environment variable: QUARKUS_UNLEASH_DEVSERVICES_SHARED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-unleash label attached to the started container. This property is used when shared is set to true. In this case, before starting a container, Dev Services for Unleash looks for a container with the quarkus-dev-service-unleash label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise, it starts a new container with the quarkus-dev-service-unleash label set to the specified value.

+
+
+

This property is used when you need multiple shared Unleash servers.

+
+
+

Environment variable: QUARKUS_UNLEASH_DEVSERVICES_SERVICE_NAME

+
+
+

string

unleash

+
+
+
+

The container image name to use, for container based DevServices providers.

+
+
+

Environment variable: QUARKUS_UNLEASH_DEVSERVICES_IMAGE_NAME

+
+
+

string

+
+
+
+

Enabled or disable log of the mock-server

+
+
+

Environment variable: QUARKUS_UNLEASH_DEVSERVICES_LOG

+
+
+

boolean

false

+
+
+
+

Helper to define the stop strategy for containers created by DevServices. In particular, we don’t want to actually stop the containers when they have been flagged for reuse, and when the Testcontainers configuration has been explicitly set to allow container reuse. To enable reuse, ass testcontainers.reuse.enable=true in your .testcontainers.properties file, to be stored in your home.

+
+
+

Environment variable: QUARKUS_UNLEASH_DEVSERVICES_REUSE

+
+
+

boolean

false

+
+
+
+

The import data from file during the start.

+
+
+

Environment variable: QUARKUS_UNLEASH_DEVSERVICES_IMPORT_FILE

+
+
+

string

+
+
+
+

The container image name to use, for unleash database.

+
+
+

Environment variable: QUARKUS_UNLEASH_DEVSERVICES_DB_IMAGE_NAME

+
+
+

string

postgres:15.2

+
+
+
+

The value of the quarkus-dev-service-unleash-db label attached to the started container. This property is used when shared is set to true. In this case, before starting a container, Dev Services for Unleash DB looks for a container with the quarkus-dev-service-unleash-db label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise, it starts a new container with the quarkus-dev-service-unleash-db label set to the specified value.

+
+
+

This property is used when you need multiple shared Unleash DB servers.

+
+
+

Environment variable: QUARKUS_UNLEASH_DEVSERVICES_DB_SERVICE_NAME

+
+
+

string

unleash-db

+
+
+
+

Whether or not the Unleash extension is active.

+
+
+

Environment variable: QUARKUS_UNLEASH_ACTIVE

+
+
+

boolean

true

+
+
+
+

Unleash URL service endpoint

+
+
+

Environment variable: QUARKUS_UNLEASH_URL

+
+
+

string

required

+
+
+
+

Application name

+
+
+

Environment variable: QUARKUS_UNLEASH_APPLICATION

+
+
+

string

+
+
+
+

Project name

+
+
+

Environment variable: QUARKUS_UNLEASH_PROJECT

+
+
+

string

+
+
+
+

Instance ID.

+
+
+

Environment variable: QUARKUS_UNLEASH_INSTANCE_ID

+
+
+

string

+
+
+
+

Disable Unleash metrics

+
+
+

Environment variable: QUARKUS_UNLEASH_DISABLE_METRICS

+
+
+

boolean

false

+
+
+
+

Application Unleash token

+
+
+

Environment variable: QUARKUS_UNLEASH_TOKEN

+
+
+

string

+
+
+
+

Application environment

+
+
+

Environment variable: QUARKUS_UNLEASH_ENVIRONMENT

+
+
+

string

+
+
+
+

Fetch toggles interval (in seconds)

+
+
+

Environment variable: QUARKUS_UNLEASH_FETCH_TOGGLES_INTERVAL

+
+
+

long

10

+
+
+
+

Send metrics interval (in seconds)

+
+
+

Environment variable: QUARKUS_UNLEASH_SEND_METRICS_INTERVAL

+
+
+

long

60

+
+
+
+

Backup file

+
+
+

Environment variable: QUARKUS_UNLEASH_BACKUP_FILE

+
+
+

string

+
+
+
+

A synchronous fetch on initialisation

+
+
+

Environment variable: QUARKUS_UNLEASH_SYNCHRONOUS_FETCH_ON_INITIALISATION

+
+
+

boolean

false

+
+
+
+

Enable proxy authentication by JVM properties

+
+
+

Environment variable: QUARKUS_UNLEASH_ENABLE_PROXY_AUTHENTICATION_BY_JVM_PROPERTIES

+
+
+

boolean

false

+
+
+
+
+ + + + + + + diff --git a/quarkus-unleash/dev/index.html b/quarkus-unleash/dev/index.html new file mode 100644 index 0000000000..bd2f9ff844 --- /dev/null +++ b/quarkus-unleash/dev/index.html @@ -0,0 +1,1544 @@ + + + + + + Quarkus - Unleash :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus - Unleash

+
+
+
+

Unleash is a feature toggle system, that gives you a great overview of all feature toggles across all your applications and services. +Quarkus Unleash extension is client for Unleash.

+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the quarkiverse-unleash extension first. +In your pom.xml file, add:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.unleash</groupId>
+    <artifactId>quarkus-unleash</artifactId>
+    <version>1.2.0</version>
+</dependency>
+
+
+
+
+
+

Usage

+
+
+

Unleash client

+
+

Assuming you have Unleash running on localhost:4242 you should add the following properties to your application.properties and fill in the values for url.

+
+
+
+
quarkus.unleash.url=http://localhost:4242/api
+
+
+
+

Once you have configured the properties, you can start using an Unleash-client.

+
+
+
+
@ApplicationScoped
+public class TestService {
+
+    @Inject
+    Unleash unleash;
+
+    public boolean isTest() {
+        return unleash.isEnabled("quarkus.unleash.test");
+    }
+}
+
+
+
+
+

@FeatureToggle

+
+

By using the @FeatureToggle annotation there is a shortcut to inject feature toggle.

+
+
+
+
@ApplicationScoped
+public class TestService {
+
+    @FeatureToggle(name = "my-toggle")
+    Instance<Boolean> myToggle;
+
+    @FeatureToggle(name = "my-toggle", defaultValue = true)
+    Instance<Boolean> myToggleDefault;
+
+}
+
+
+
+ + + + + +
+ + +
+

If the @FeatureToggle annotation is placed on a boolean field or method argument, an exception will be thrown at build time. +@FeatureToggle should only be used with the Instance<Boolean> type.

+
+
+
+
+
+

@FeatureVariant

+
+

By using the @FeatureVariant annotation there is a shortcut to inject feature toggle +variant or the payload of the variant.

+
+
+
+
@ApplicationScoped
+public class TestService {
+
+    @FeatureVariant(name = "toggle-variant")
+    Instance<Variant> variant;
+
+    @FeatureVariant(name = "toggle-payload")
+    Instance<String> variant;
+
+    @FeatureVariant(name = "toggle-variant-json")
+    Instance<MyCustomJsonModel> variant;
+
+}
+
+
+
+
+

Testing

+
+

To use the test extension, add this dependency to the project:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.unleash</groupId>
+    <artifactId>quarkus-unleash-test</artifactId>
+    <version>1.2.0</version>
+    <scope>test</scope>
+</dependency>
+
+
+
+

UnleashTestResource creates an instance of admin and standard Unleash clients just for testing. +These instances are separate from the application instances.

+
+
+
+
@QuarkusTest
+@QuarkusTestResource(UnleashTestResource.class)
+public class BaseTest {
+
+    @InjectUnleashAdmin
+    UnleashAdmin admin;
+
+    @InjectUnleash
+    Unleash client;
+
+    @Test
+    public void test() {
+
+        admin.toggleOff("toggle-1");
+        admin.toggleOn("toggle-2");
+
+        // wait for client change
+        await().atLeast(12, SECONDS)
+                .pollInterval(4, SECONDS)
+                .until(() -> client.isEnabled("toggle-2"));
+
+        boolean toggleOn = client.isEnabled("toggle-2");
+
+        // ... test my application
+
+    }
+}
+
+
+
+
+

Dev-Services

+
+

Dev Services for Unleash is automatically enabled unless:

+
+
+
    +
  • +

    quarkus.unleash.devservices.enabled is set to false

    +
  • +
  • +

    quarkus.unleash.url is configured

    +
  • +
+
+
+

Dev Service for Unleash relies on Docker to start the broker. If your environment does not support Docker, you will need +to start the broker manually, or connect to an already running broker. You can configure the broker address using +quarkus.unleash.url.

+
+
+
+
+
+

Extension Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

If DevServices has been explicitly enabled or disabled. DevServices is generally enabled by default, unless there is an existing configuration present.

+
+
+

When DevServices is enabled Quarkus will attempt to automatically configure and start a database when running in Dev or Test mode and when Docker is running.

+
+
+

Environment variable: QUARKUS_UNLEASH_DEVSERVICES_ENABLED

+
+
+

boolean

true

+
+
+
+

Optional fixed port the dev service will listen to.

+
+
+

If not defined, the port will be chosen randomly.

+
+
+

Environment variable: QUARKUS_UNLEASH_DEVSERVICES_PORT

+
+
+

int

+
+
+
+

Indicates if the Unleash server managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for Unleash starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-unleash label. The value is configured using the service-name property.

+
+
+

Container sharing is only used in dev mode.

+
+
+

Environment variable: QUARKUS_UNLEASH_DEVSERVICES_SHARED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-unleash label attached to the started container. This property is used when shared is set to true. In this case, before starting a container, Dev Services for Unleash looks for a container with the quarkus-dev-service-unleash label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise, it starts a new container with the quarkus-dev-service-unleash label set to the specified value.

+
+
+

This property is used when you need multiple shared Unleash servers.

+
+
+

Environment variable: QUARKUS_UNLEASH_DEVSERVICES_SERVICE_NAME

+
+
+

string

unleash

+
+
+
+

The container image name to use, for container based DevServices providers.

+
+
+

Environment variable: QUARKUS_UNLEASH_DEVSERVICES_IMAGE_NAME

+
+
+

string

+
+
+
+

Enabled or disable log of the mock-server

+
+
+

Environment variable: QUARKUS_UNLEASH_DEVSERVICES_LOG

+
+
+

boolean

false

+
+
+
+

Helper to define the stop strategy for containers created by DevServices. In particular, we don’t want to actually stop the containers when they have been flagged for reuse, and when the Testcontainers configuration has been explicitly set to allow container reuse. To enable reuse, ass testcontainers.reuse.enable=true in your .testcontainers.properties file, to be stored in your home.

+
+
+

Environment variable: QUARKUS_UNLEASH_DEVSERVICES_REUSE

+
+
+

boolean

false

+
+
+
+

The import data from file during the start.

+
+
+

Environment variable: QUARKUS_UNLEASH_DEVSERVICES_IMPORT_FILE

+
+
+

string

+
+
+
+

The container image name to use, for unleash database.

+
+
+

Environment variable: QUARKUS_UNLEASH_DEVSERVICES_DB_IMAGE_NAME

+
+
+

string

postgres:15.2

+
+
+
+

The value of the quarkus-dev-service-unleash-db label attached to the started container. This property is used when shared is set to true. In this case, before starting a container, Dev Services for Unleash DB looks for a container with the quarkus-dev-service-unleash-db label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise, it starts a new container with the quarkus-dev-service-unleash-db label set to the specified value.

+
+
+

This property is used when you need multiple shared Unleash DB servers.

+
+
+

Environment variable: QUARKUS_UNLEASH_DEVSERVICES_DB_SERVICE_NAME

+
+
+

string

unleash-db

+
+
+
+

Whether or not the Unleash extension is active.

+
+
+

Environment variable: QUARKUS_UNLEASH_ACTIVE

+
+
+

boolean

true

+
+
+
+

Unleash URL service endpoint

+
+
+

Environment variable: QUARKUS_UNLEASH_URL

+
+
+

string

required

+
+
+
+

Application name

+
+
+

Environment variable: QUARKUS_UNLEASH_APPLICATION

+
+
+

string

+
+
+
+

Project name

+
+
+

Environment variable: QUARKUS_UNLEASH_PROJECT

+
+
+

string

+
+
+
+

Instance ID.

+
+
+

Environment variable: QUARKUS_UNLEASH_INSTANCE_ID

+
+
+

string

+
+
+
+

Disable Unleash metrics

+
+
+

Environment variable: QUARKUS_UNLEASH_DISABLE_METRICS

+
+
+

boolean

false

+
+
+
+

Application Unleash token

+
+
+

Environment variable: QUARKUS_UNLEASH_TOKEN

+
+
+

string

+
+
+
+

Application environment

+
+
+

Environment variable: QUARKUS_UNLEASH_ENVIRONMENT

+
+
+

string

+
+
+
+

Fetch toggles interval (in seconds)

+
+
+

Environment variable: QUARKUS_UNLEASH_FETCH_TOGGLES_INTERVAL

+
+
+

long

10

+
+
+
+

Send metrics interval (in seconds)

+
+
+

Environment variable: QUARKUS_UNLEASH_SEND_METRICS_INTERVAL

+
+
+

long

60

+
+
+
+

Backup file

+
+
+

Environment variable: QUARKUS_UNLEASH_BACKUP_FILE

+
+
+

string

+
+
+
+

A synchronous fetch on initialisation

+
+
+

Environment variable: QUARKUS_UNLEASH_SYNCHRONOUS_FETCH_ON_INITIALISATION

+
+
+

boolean

false

+
+
+
+

Enable proxy authentication by JVM properties

+
+
+

Environment variable: QUARKUS_UNLEASH_ENABLE_PROXY_AUTHENTICATION_BY_JVM_PROPERTIES

+
+
+

boolean

false

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-vault/dev/includes/attributes.html b/quarkus-vault/dev/includes/attributes.html new file mode 100644 index 0000000000..aa497270c5 --- /dev/null +++ b/quarkus-vault/dev/includes/attributes.html @@ -0,0 +1,924 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-vault/dev/includes/quarkus-vault.html b/quarkus-vault/dev/includes/quarkus-vault.html new file mode 100644 index 0000000000..aeaf534a2d --- /dev/null +++ b/quarkus-vault/dev/includes/quarkus-vault.html @@ -0,0 +1,2077 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Whether or not an health check is published in case the smallrye-health extension is present.

+
+
+

Environment variable: QUARKUS_VAULT_HEALTH_ENABLED

+
+
+

boolean

false

+
+
+
+

Specifies if being a standby should still return the active status code instead of the standby status code.

+
+
+

Environment variable: QUARKUS_VAULT_HEALTH_STAND_BY_OK

+
+
+

boolean

false

+
+
+
+

Specifies if being a performance standby should still return the active status code instead of the performance standby status code.

+
+
+

Environment variable: QUARKUS_VAULT_HEALTH_PERFORMANCE_STAND_BY_OK

+
+
+

boolean

false

+
+
+
+

If DevServices has been explicitly enabled or disabled. DevServices is generally enabled by default, unless there is an existing configuration present.

+
+
+

When DevServices is enabled Quarkus will attempt to automatically configure and start a vault instance when running in Dev or Test mode and when Docker is running.

+
+
+

Environment variable: QUARKUS_VAULT_DEVSERVICES_ENABLED

+
+
+

boolean

true

+
+
+
+

The container image name to use, for container based DevServices providers.

+
+
+

Environment variable: QUARKUS_VAULT_DEVSERVICES_IMAGE_NAME

+
+
+

string

+
+
+
+

Indicates if the Vault instance managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for Vault starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-vault label. The value is configured using the service-name property.

+
+
+

Container sharing is only used in dev mode.

+
+
+

Environment variable: QUARKUS_VAULT_DEVSERVICES_SHARED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-vault label attached to the started container. This property is used when shared is set to true. In this case, before starting a container, Dev Services for Vault looks for a container with the quarkus-dev-service-vault label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-vault label set to the specified value.

+
+
+

This property is used when you need multiple shared Vault instances.

+
+
+

Environment variable: QUARKUS_VAULT_DEVSERVICES_SERVICE_NAME

+
+
+

string

vault

+
+
+
+

Optional fixed port the dev service will listen to.

+
+
+

If not defined, the port will be chosen randomly.

+
+
+

Environment variable: QUARKUS_VAULT_DEVSERVICES_PORT

+
+
+

int

+
+
+
+

Should the Transit secret engine be enabled

+
+
+

Environment variable: QUARKUS_VAULT_DEVSERVICES_TRANSIT_ENABLED

+
+
+

boolean

false

+
+
+
+

Should the PKI secret engine be enabled

+
+
+

Environment variable: QUARKUS_VAULT_DEVSERVICES_PKI_ENABLED

+
+
+

boolean

false

+
+
+
+

Custom container initialization commands

+
+
+

Environment variable: QUARKUS_VAULT_DEVSERVICES_INIT_COMMANDS

+
+
+

list of string

+
+
+
+

Microprofile Config ordinal.

+
+
+

This is provided as an alternative to the config_ordinal property defined by the specification, to make it easier and more natural for applications to override the default ordinal.

+
+
+

The default value is higher than the file system or jar ordinals, but lower than env vars.

+
+
+

Environment variable: QUARKUS_VAULT_CONFIG_ORDINAL

+
+
+

int

270

+
+
+
+

Vault server url. +<p> +Example: https://localhost:8200 +<p> +See also the documentation for the kv-secret-engine-mount-path property for some insights on how +the full Vault url gets built.

+
+
+

Environment variable: QUARKUS_VAULT_URL

+
+
+

URL

+
+
+
+

Renew grace period duration. +<p> +This value if used to extend a lease before it expires its ttl, or recreate a new lease before the current +lease reaches its max_ttl. +By default Vault leaseDuration is equal to 7 days (ie: 168h or 604800s). +If a connection pool maxLifetime is set, it is reasonable to set the renewGracePeriod to be greater +than the maxLifetime, so that we are sure we get a chance to renew leases before we reach the ttl. +In any case you need to make sure there will be attempts to fetch secrets within the renewGracePeriod, +because that is when the renewals will happen. This is particularly important for db dynamic secrets +because if the lease reaches its ttl or max_ttl, the password of the db user will become invalid and +it will be not longer possible to log in. +This value should also be smaller than the ttl, otherwise that would mean that we would try to recreate +leases all the time.

+
+
+

Environment variable: QUARKUS_VAULT_RENEW_GRACE_PERIOD

+
+
+

Duration +

1H

+
+
+
+

Vault config source cache period. +<p> +Properties fetched from vault as MP config will be kept in a cache, and will not be fetched from vault +again until the expiration of that period. +This property is ignored if secret-config-kv-path is not set.

+
+
+

Environment variable: QUARKUS_VAULT_SECRET_CONFIG_CACHE_PERIOD

+
+
+

Duration +

10M

+
+
+
+

List of comma separated vault paths in kv store, +where all properties will be available as MP config properties as-is, with no prefix. +<p> +For instance, if vault contains property foo, it will be made available to the +quarkus application as @ConfigProperty(name = "foo") String foo; +<p> +If 2 paths contain the same property, the last path will win. +<p> +For instance if +<p> +* secret/base-config contains foo=bar and +* secret/myapp/config contains foo=myappbar, then +<p> +@ConfigProperty(name = "foo") String foo will have value myappbar +with application properties quarkus.vault.secret-config-kv-path=base-config,myapp/config +<p> +See also the documentation for the kv-secret-engine-mount-path property for some insights on how +the full Vault url gets built.

+
+
+

Environment variable: QUARKUS_VAULT_SECRET_CONFIG_KV_PATH

+
+
+

list of string

+
+
+
+

Maximum number of attempts when fetching MP Config properties on the initial connection.

+
+
+

Environment variable: QUARKUS_VAULT_MP_CONFIG_INITIAL_ATTEMPTS

+
+
+

int

1

+
+
+
+

Used to hide confidential infos, for logging in particular. +Possible values are: +<p> +* low: display all secrets. +* medium: display only usernames and lease ids (ie: passwords and tokens are masked). +* high: hide lease ids and dynamic credentials username.

+
+
+

Environment variable: QUARKUS_VAULT_LOG_CONFIDENTIALITY_LEVEL

+
+
+
+

low, medium, high

+

medium

+
+
+
+

Kv secret engine version. +<p> +see https://www.vaultproject.io/docs/secrets/kv/index.html

+
+
+

Environment variable: QUARKUS_VAULT_KV_SECRET_ENGINE_VERSION

+
+
+

int

2

+
+
+
+

KV secret engine path. +<p> +This value is used when building the url path in the KV secret engine programmatic access +(i.e. VaultKVSecretEngine) and the vault config source (i.e. fetching configuration properties from Vault). +<p> +For a v2 KV secret engine (default - see kv-secret-engine-version property) +the full url is built from the expression <url>/v1/</kv-secret-engine-mount-path>/data/…​. +<p> +With property quarkus.vault.url=https://localhost:8200, the following call +vaultKVSecretEngine.readSecret("foo/bar") would lead eventually to a GET on Vault with the following +url: https://localhost:8200/v1/secret/data/foo/bar. +<p> +With a KV secret engine v1, the url changes to: <url>/v1/</kv-secret-engine-mount-path>/…​. +<p> +The same logic is applied to the Vault config source. With quarkus.vault.secret-config-kv-path=config/myapp +The secret properties would be fetched from Vault using a GET on +https://localhost:8200/v1/secret/data/config/myapp for a KV secret engine v2 (or +https://localhost:8200/v1/secret/config/myapp for a KV secret engine v1). +<p> +see https://www.vaultproject.io/docs/secrets/kv/index.html

+
+
+

Environment variable: QUARKUS_VAULT_KV_SECRET_ENGINE_MOUNT_PATH

+
+
+

string

secret

+
+
+
+

Timeout to establish a connection with Vault.

+
+
+

Environment variable: QUARKUS_VAULT_CONNECT_TIMEOUT

+
+
+

Duration +

5S

+
+
+
+

Request timeout on Vault.

+
+
+

Environment variable: QUARKUS_VAULT_READ_TIMEOUT

+
+
+

Duration +

5S

+
+
+
+

List of remote hosts that are not proxied when the client is configured to use a proxy. This list serves the same purpose as the JVM nonProxyHosts configuration.

+
+
+

Entries can use the * wildcard character for pattern matching, e.g *.example.com matches www.example.com.

+
+
+

Environment variable: QUARKUS_VAULT_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

The proxy host. If set the client is configured to use a proxy.

+
+
+

Environment variable: QUARKUS_VAULT_PROXY_HOST

+
+
+

string

+
+
+
+

The port the proxy is listening on, 3128 by default.

+
+
+

Environment variable: QUARKUS_VAULT_PROXY_PORT

+
+
+

int

3128

+
+
+
+

List of comma separated vault paths in kv store, +where all properties will be available as prefixed MP config properties. +<p> +For instance if the application properties contains +quarkus.vault.secret-config-kv-path.myprefix=config, and +vault path secret/config contains foo=bar, then myprefix.foo +will be available in the MP config. +<p> +If the same property is available in 2 different paths for the same prefix, the last one +will win. +<p> +See also the documentation for the quarkus.vault.kv-secret-engine-mount-path property for some insights on how +the full Vault url gets built.

+
+
+

Environment variable: QUARKUS_VAULT_SECRET_CONFIG_KV_PATH__PREFIX_

+
+
+

list of string

required

+
+
+
+

Dynamic credentials' role. +<p> +Roles are defined by the secret engine in use. For example, database credentials roles are defined +by the database secrets engine described at +<a href="https://www.vaultproject.io/docs/secrets/databases/index.html">Vault Databases</a>. +<p> +One of credentials-role or kv-path can to be defined. not both.

+
+
+

Environment variable: QUARKUS_VAULT_CREDENTIALS_PROVIDER__CREDENTIALS_PROVIDER__CREDENTIALS_ROLE

+
+
+

string

+
+
+
+

Mount of dynamic credentials secrets engine, for example database or rabbitmq. +<p> +Only used when credentials-role is defined.

+
+
+

Environment variable: QUARKUS_VAULT_CREDENTIALS_PROVIDER__CREDENTIALS_PROVIDER__CREDENTIALS_MOUNT

+
+
+

string

database

+
+
+
+

Path of dynamic credentials request. +<p> +Request paths are dictated by the secret engine in use. For standard secret engines this should be +left as the default of creds. +<p> +Only used when credentials-role is defined.

+
+
+

Environment variable: QUARKUS_VAULT_CREDENTIALS_PROVIDER__CREDENTIALS_PROVIDER__CREDENTIALS_REQUEST_PATH

+
+
+

string

creds

+
+
+
+

A path in vault kv store, where we will find the kv-key. +<p> +One of database-credentials-role or kv-path needs to be defined. not both. +<p> +see <a href="https://www.vaultproject.io/docs/secrets/kv/index.html">KV Secrets Engine</a>

+
+
+

Environment variable: QUARKUS_VAULT_CREDENTIALS_PROVIDER__CREDENTIALS_PROVIDER__KV_PATH

+
+
+

string

+
+
+
+

Key name to search in vault path kv-path. The value for that key is the credential. +<p> +kv-key should not be defined if kv-path is not. +<p> +see <a href="https://www.vaultproject.io/docs/secrets/kv/index.html">KV Secrets Engine</a>

+
+
+

Environment variable: QUARKUS_VAULT_CREDENTIALS_PROVIDER__CREDENTIALS_PROVIDER__KV_KEY

+
+
+

string

password

Vault Enterprise

Type

Default

+
+
+
+

Vault Enterprise namespace +<p> +If set, this will add a X-Vault-Namespace header to all requests sent to the Vault server. +<p> +See https://www.vaultproject.io/docs/enterprise/namespaces

+
+
+

Environment variable: QUARKUS_VAULT_ENTERPRISE_NAMESPACE

+
+
+

string

Authentication

Type

Default

+
+
+
+

Vault token, bypassing Vault authentication (kubernetes, userpass or approle). This is useful in development where an authentication mode might not have been set up. In production we will usually prefer some authentication such as userpass, or preferably kubernetes, where Vault tokens get generated with a TTL and some ability to revoke them. Lease renewal does not apply.

+
+
+

Environment variable: QUARKUS_VAULT_AUTHENTICATION_CLIENT_TOKEN

+
+
+

string

+
+
+
+

Client token wrapped in a wrapping token, such as what is returned by:

+
+
+

vault token create -wrap-ttl=60s -policy=myapp

+
+
+

client-token and client-token-wrapping-token are exclusive. Lease renewal does not apply.

+
+
+

Environment variable: QUARKUS_VAULT_AUTHENTICATION_CLIENT_TOKEN_WRAPPING_TOKEN

+
+
+

string

+
+
+
+

Role Id for AppRole auth method. This property is required when selecting the app-role authentication type.

+
+
+

Environment variable: QUARKUS_VAULT_AUTHENTICATION_APP_ROLE_ROLE_ID

+
+
+

string

+
+
+
+

Secret Id for AppRole auth method. This property is required when selecting the app-role authentication type.

+
+
+

Environment variable: QUARKUS_VAULT_AUTHENTICATION_APP_ROLE_SECRET_ID

+
+
+

string

+
+
+
+

Wrapping token containing a Secret Id, obtained from:

+
+
+

vault write -wrap-ttl=60s -f auth/approle/role/myapp/secret-id

+
+
+

secret-id and secret-id-wrapping-token are exclusive

+
+
+

Environment variable: QUARKUS_VAULT_AUTHENTICATION_APP_ROLE_SECRET_ID_WRAPPING_TOKEN

+
+
+

string

+
+
+
+

Allows configure Approle authentication mount path.

+
+
+

Environment variable: QUARKUS_VAULT_AUTHENTICATION_APP_ROLE_AUTH_MOUNT_PATH

+
+
+

string

approle

+
+
+
+

User for userpass auth method. This property is required when selecting the userpass authentication type.

+
+
+

Environment variable: QUARKUS_VAULT_AUTHENTICATION_USERPASS_USERNAME

+
+
+

string

+
+
+
+

Password for userpass auth method. This property is required when selecting the userpass authentication type.

+
+
+

Environment variable: QUARKUS_VAULT_AUTHENTICATION_USERPASS_PASSWORD

+
+
+

string

+
+
+
+

Wrapping token containing a Password, obtained from:

+
+
+

vault kv get -wrap-ttl=60s secret/

+
+
+

The key has to be 'password', meaning the password has initially been provisioned with:

+
+
+

vault kv put secret/ password=

+
+
+

password and password-wrapping-token are exclusive

+
+
+

Environment variable: QUARKUS_VAULT_AUTHENTICATION_USERPASS_PASSWORD_WRAPPING_TOKEN

+
+
+

string

+
+
+
+

Kubernetes authentication role that has been created in Vault to associate Vault policies, with Kubernetes service accounts and/or Kubernetes namespaces. This property is required when selecting the Kubernetes authentication type.

+
+
+

Environment variable: QUARKUS_VAULT_AUTHENTICATION_KUBERNETES_ROLE

+
+
+

string

+
+
+
+

Location of the file containing the Kubernetes JWT token to authenticate against in Kubernetes authentication mode.

+
+
+

Environment variable: QUARKUS_VAULT_AUTHENTICATION_KUBERNETES_JWT_TOKEN_PATH

+
+
+

string

/var/run/secrets/kubernetes.io/serviceaccount/token

+
+
+
+

Allows configure Kubernetes authentication mount path.

+
+
+

Environment variable: QUARKUS_VAULT_AUTHENTICATION_KUBERNETES_AUTH_MOUNT_PATH

+
+
+

string

kubernetes

TLS

Type

Default

+
+
+
+

Allows to bypass certificate validation on TLS communications.

+
+
+

If true this will allow TLS communications with Vault, without checking the validity of the certificate presented by Vault. This is discouraged in production because it allows man in the middle type of attacks.

+
+
+

Environment variable: QUARKUS_VAULT_TLS_SKIP_VERIFY

+
+
+

boolean

+
+
+
+

Certificate bundle used to validate TLS communications with Vault.

+
+
+

The path to a pem bundle file, if TLS is required, and trusted certificates are not set through javax.net.ssl.trustStore system property.

+
+
+

Environment variable: QUARKUS_VAULT_TLS_CA_CERT

+
+
+

string

+
+
+
+

If true and Vault authentication type is kubernetes, TLS will be active and the cacert path will be set to /var/run/secrets/kubernetes.io/serviceaccount/ca.crt. If set, this setting will take precedence over property quarkus.vault.tls.ca-cert. This means that if Vault authentication type is kubernetes and we want to use quarkus.vault.tls.ca-cert or system property javax.net.ssl.trustStore, then this property should be set to false.

+
+
+

Environment variable: QUARKUS_VAULT_TLS_USE_KUBERNETES_CA_CERT

+
+
+

boolean

true

Transit Engine

Type

Default

+
+
+
+

Specifies the name of the key to use. By default this will be the property key alias. Used when +the same transit key is used with different configurations. Such as in:

+
+
+
+
quarkus.vault.transit.key.my-foo-key.name=foo
+
+quarkus.vault.transit.key.my-foo-key-with-prehashed.name=foo
+quarkus.vault.transit.key.my-foo-key-with-prehashed.prehashed=true
+...
+transitSecretEngine.sign("my-foo-key", "my raw content");
+or
+transitSecretEngine.sign("my-foo-key-with-prehashed", "my already hashed content");
+
+
+
+

Environment variable: QUARKUS_VAULT_TRANSIT_KEY__KEY__NAME

+
+
+

string

+
+
+
+

Set to true when the input is already hashed. Applies to sign operations.

+
+
+

Environment variable: QUARKUS_VAULT_TRANSIT_KEY__KEY__PREHASHED

+
+
+

boolean

+
+
+
+

When using a RSA key, specifies the RSA signature algorithm. Applies to sign operations.

+
+
+

Environment variable: QUARKUS_VAULT_TRANSIT_KEY__KEY__SIGNATURE_ALGORITHM

+
+
+

string

+
+
+
+

Specifies the hash algorithm to use for supporting key types. Applies to sign operations.

+
+
+

Environment variable: QUARKUS_VAULT_TRANSIT_KEY__KEY__HASH_ALGORITHM

+
+
+

string

+
+
+
+

Specifies the type of key to create for the encrypt operation. Applies to encrypt operations.

+
+
+

Environment variable: QUARKUS_VAULT_TRANSIT_KEY__KEY__TYPE

+
+
+

string

+
+
+
+

If enabled, the key will support convergent encryption, where the same plaintext creates the same ciphertext. Applies to encrypt operations.

+
+
+

Environment variable: QUARKUS_VAULT_TRANSIT_KEY__KEY__CONVERGENT_ENCRYPTION

+
+
+

string

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-vault/dev/index.html b/quarkus-vault/dev/index.html new file mode 100644 index 0000000000..c59c06bc91 --- /dev/null +++ b/quarkus-vault/dev/index.html @@ -0,0 +1,2953 @@ + + + + + + Using HashiCorp Vault :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Using HashiCorp Vault

+
+
+
+

HashiCorp Vault is a multi-purpose tool aiming at protecting sensitive data, such as +credentials, certificates, access tokens, encryption keys, …​ In the context of Quarkus, several use cases +are supported:

+
+
+ +
+
+

Under the hood, the Quarkus Vault extension takes care of authentication when negotiating a client Vault token plus +any transparent token or lease renewals according to ttl and max-ttl.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    roughly 20 minutes

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    JDK 11+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    Docker installed

    +
  • +
+
+
+
+
+

Starting Vault

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

Using Dev Services, Quarkus will take care of starting Vault in dev and test mode.

+
+
+
+
+

Let’s start Vault in development mode:

+
+
+
+
docker run --rm --cap-add=IPC_LOCK -e VAULT_ADDR=http://localhost:8200 -p 8200:8200 -d --name=dev-vault vault:1.6.0
+
+
+
+

You can check that vault is running with:

+
+
+
+
docker logs dev-vault
+
+
+
+

You should see:

+
+
+
+
==> Vault server configuration:
+
+             Api Address: http://0.0.0.0:8200
+                     Cgo: disabled
+         Cluster Address: https://0.0.0.0:8201
+              Listener 1: tcp (addr: "0.0.0.0:8200", cluster address: "0.0.0.0:8201", max_request_duration: "1m30s", max_request_size: "33554432", tls: "disabled")
+               Log Level: info
+                   Mlock: supported: true, enabled: false
+                 Storage: inmem
+                 Version: Vault v1.6.0
+
+WARNING! dev mode is enabled! In this mode, Vault runs entirely in-memory
+and starts unsealed with a single unseal key. The root token is already
+authenticated to the CLI, so you can immediately begin using Vault.
+
+You may need to set the following environment variable:
+
+    $ export VAULT_ADDR='http://0.0.0.0:8200'
+
+The unseal key and root token are displayed below in case you want to
+seal/unseal the Vault or re-authenticate.
+
+Unseal Key: 0lZ2/vzpa92pH8gersSn2h9b5tmzd4m5sqIdMC/4PDs=
+Root Token: s.5VUS8pte13RqekCB2fmMT3u2
+
+Development mode should NOT be used in production installations!
+
+==> Vault server started! Log data will stream in below:
+
+
+
+

In development mode, Vault gets configured with several options that makes it convenient:

+
+
+
    +
  • +

    Vault is already initialized with one key share (whereas in normal mode this has to be done explicitly and the +number of key shares is 5 by default)

    +
  • +
  • +

    the unseal key and the root token are displayed in the logs (please write down the root token, we will need it +in the following step)

    +
  • +
  • +

    Vault is unsealed

    +
  • +
  • +

    in-memory storage

    +
  • +
  • +

    TLS is disabled

    +
  • +
  • +

    a kv secret engine v2 is mounted at secret/

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

By default Quarkus assumes that a kv secret engine in version 2 mounted at path secret/ will be used. +If that is not the case, please use properties quarkus.vault.kv-secret-engine-version +and quarkus.vault.kv-secret-engine-mount-path accordingly.

+
+
+
+
+

In the following step, we are going to add a userpass authentication that we will use from the Quarkus application, +to access a secret stored in the kv secret engine.

+
+
+

First open a shell inside the vault container:

+
+
+
+
docker exec -it dev-vault sh
+
+
+
+

Set the VAULT_TOKEN with the value that was printed in the logs:

+
+
+
+
export VAULT_TOKEN=s.5VUS8pte13RqekCB2fmMT3u2
+
+
+
+

You can check Vault’s status using the CLI command vault status:

+
+
+
+
Key             Value
+---             -----
+Seal Type       shamir
+Initialized     true
+Sealed          false
+Total Shares    1
+Threshold       1
+Version         1.6.0
+Cluster Name    vault-cluster-b07e80d8
+Cluster ID      55bd74b6-eaaf-3862-f7ce-3473ab86c57f
+HA Enabled      false
+
+
+
+

Now let’s add a secret configuration for our application:

+
+
+
+
vault kv put secret/myapps/vault-quickstart/config a-private-key=123456
+
+
+
+

We have defined a path secret/myapps/vault-quickstart in Vault that we need to give access to from the Quarkus application.

+
+
+

Create a policy that gives read access to secret/myapps/vault-quickstart and subpaths:

+
+
+
+
cat <<EOF | vault policy write vault-quickstart-policy -
+path "secret/data/myapps/vault-quickstart/*" {
+  capabilities = ["read", "create"]
+}
+EOF
+
+
+
+ + + + + +
+ + +
+

When using a kv secret engine version 2, secrets are written and fetched at path <mount>/data/<secret-path> +as opposed to <mount>/<secret-path> in a kv secret engine version 1. +It does not change any of the CLI commands (i.e. you do not specify data in your path). +However it does change the policies, since capabilities are applied to the real path. In the example above, +the path is secret/data/myapps/vault-quickstart/* since we are working with a kv secret engine version 2. +It would be secret/myapps/vault-quickstart/* with a kv secret engine version 1.

+
+
+
+
+

And finally, let’s enable the userpass auth secret engine, and create user bob with access to the vault-quickstart-policy:

+
+
+
+
vault auth enable userpass
+vault write auth/userpass/users/bob password=sinclair policies=vault-quickstart-policy
+
+
+
+ + + + + +
+ + +
+

Quarkus supports additional Vault Authentication methods. Check the Vault Authentication guide for details.

+
+
+
+
+

To check that the configuration is correct, try logging in:

+
+
+
+
vault login -method=userpass username=bob password=sinclair
+
+
+
+

You should see:

+
+
+
+
Success! You are now authenticated. The token information displayed below
+is already stored in the token helper. You do NOT need to run "vault login"
+again. Future Vault requests will automatically use this token.
+
+Key                    Value
+---                    -----
+token                  s.s93BVzJPzBiIGuYJHBTkG8Uw
+token_accessor         OKNipTAgxWbxsrjixASNiwdY
+token_duration         768h
+token_renewable        true
+token_policies         ["default" "vault-quickstart-policy"]
+identity_policies      []
+policies               ["default" "vault-quickstart-policy"]
+token_meta_username    bob
+
+
+
+

Now set VAULT_TOKEN to the token above (instead of the root token), and try reading the vault-quickstart secret config:

+
+
+
+
export VAULT_TOKEN=s.s93BVzJPzBiIGuYJHBTkG8Uw
+vault kv get secret/myapps/vault-quickstart/config
+
+
+
+

You should see:

+
+
+
+
======== Data ========
+Key              Value
+---              -----
+a-private-key    123456
+
+
+
+
+
+

Create a Quarkus application with a secret configuration

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.8.1:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=vault-quickstart \
+    -DclassName="org.acme.quickstart.GreetingResource" \
+    -Dpath="/hello" \
+    -Dextensions="resteasy,vault"
+cd vault-quickstart
+
+
+
+

If you already have your Quarkus project configured, you can add the vault extension +to your project by running the following command in your project base directory:

+
+
+
+
./mvnw quarkus:add-extension -Dextensions="vault"
+
+
+
+

This will add the following to your pom.xml:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.vault</groupId>
+    <artifactId>quarkus-vault</artifactId>
+    <version>4.0.0-alpha.2</version>
+</dependency>
+
+
+
+

Configure access to Vault from the application.properties:

+
+
+
+
# vault url
+quarkus.vault.url=http://localhost:8200
+
+# vault authentication
+quarkus.vault.authentication.userpass.username=bob
+quarkus.vault.authentication.userpass.password=sinclair
+
+# path within the kv secret engine where is located the vault-quickstart secret configuration
+quarkus.vault.secret-config-kv-path=myapps/vault-quickstart/config
+
+
+
+ + + + + +
+ + +
+

Using Dev Services, Quarkus will take care of configuring the Vault connection in dev and test mode.

+
+
+
+
+

This should mount whatever keys are stored in secret/myapps/vault-quickstart as Config properties.

+
+
+

Let’s verify that by adding a new endpoint in GreetingResource:

+
+
+
+
@Path("/hello")
+public class GreetingResource {
+
+    @ConfigProperty(name = "a-private-key")
+    String privateKey;
+
+    ...
+
+    @GET
+    @Path("/private-key")
+    @Produces(MediaType.TEXT_PLAIN)
+    public String privateKey() {
+        return privateKey;
+    }
+}
+
+
+
+

Now compile the application and run it:

+
+
+
+
./mvnw clean install
+java -jar target/quarkus-app/quarkus-run.jar
+
+
+
+

Finally test the new endpoint:

+
+
+
+
curl http://localhost:8080/hello/private-key
+
+
+
+

You should see:

+
+
+
+
123456
+
+
+
+ + + + + +
+ + +
+

The Vault Config Source is configured with ordinal 270, which is higher than the file system +or jar ordinals, but lower than environment variables. +This value can be changed using property quarkus.vault.config-ordinal.

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

Only scalar types are supported for secrets value from Vault.

+
+
+
+
+
+
+

Programmatic access to the KV secret engine

+
+
+

Sometimes secrets are retrieved from an arbitrary path that is known only at runtime through an application +specific property, or a method argument for instance. +In that case it is possible to inject a Quarkus VaultKVSecretEngine, and retrieve secrets programmatically.

+
+
+

For instance, in GreetingResource, add:

+
+
+
+
@Inject
+VaultKVSecretEngine kvSecretEngine;
+
+...
+
+@GET
+@Path("/secrets/{vault-path}")
+@Produces(MediaType.TEXT_PLAIN)
+public String getSecrets(@PathParam("vault-path") String vaultPath) {
+    return kvSecretEngine.readSecret("myapps/vault-quickstart/" + vaultPath).toString();
+}
+
+
+
+

Add a new key in Vault:

+
+
+
+
vault kv put secret/myapps/vault-quickstart/private mysecret=abc
+
+
+
+

Restart the application after rebuilding it, and test it with the new endpoint:

+
+
+
+
curl http://localhost:8080/hello/secrets/private
+
+
+
+

You should see:

+
+
+
+
{mysecret=abc}
+
+
+
+
+
+

TOTP Secrets Engine

+
+
+

The Vault TOTP secrets engine generates time-based credentials according to the TOTP standard.

+
+
+

Vault TOTP supports both the generator scenario (like Google Authenticator) and the provider scenario (like the Google.com sign in).

+
+
+

The Vault extension integrates with the Vault TOTP secret engine by providing an io.quarkus.vault.VaultTOTPSecretEngine class.

+
+
+
+
import io.quarkus.vault.VaultTOTPSecretEngine;
+import io.quarkus.vault.secrets.totp.CreateKeyParameters;
+import io.quarkus.vault.secrets.totp.KeyConfiguration;
+import io.quarkus.vault.secrets.totp.KeyDefinition;
+
+@Inject
+VaultTOTPSecretEngine vaultTOTPSecretEngine;
+
+CreateKeyParameters createKeyParameters = new CreateKeyParameters("Google", "test@gmail.com");
+createKeyParameters.setPeriod("30m");
+
+/** Google Authentication logic */
+
+final Optional<KeyDefinition> myKey = vaultTOTPSecretEngine
+                                            .createKey("my_key_2", createKeyParameters); (1) (2)
+
+final String keyCode = vaultTOTPSecretEngine.generateCode("my_key_2"); (3)
+
+/** Google Login logic */
+
+boolean valid = vaultTOTPSecretEngine.validateCode("my_key_2", keyCode); (4)
+
+
+
+ + + + + + + + + + + + + + + + + +
1Create a key to generate codes.
2KeyDefinition class contains an embeddable base64 QR code that can be used by third-party code generators.
3Generates a code (not using third-party generator).
4Validates that the code is valid.
+
+
+
+
+

Vault Health Check

+
+
+

If you are using the quarkus-smallrye-health extension, quarkus-vault can add a readiness health check +to validate the connection to the Vault server. This is disabled by default.

+
+
+

If enabled, when you access the /q/health/ready endpoint of your application you will have information about the connection validation status.

+
+
+

This behavior can be enabled by setting the quarkus.vault.health.enabled property to true in your application.properties.

+
+
+

Only if Vault is initialized, unsealed and active, the health endpoint returns that Vault is ready to serve requests.

+
+
+

You can change a bit this behaviour by using quarkus.vault.health.stand-by-ok and quarkus.vault.health.performance-stand-by-ok to true in your application.properties.

+
+
+
+
stand-by-ok
+
+

Specifies if being a standby should still return the active status code instead of the standby status code.

+
+
performance-stand-by-ok
+
+

Specifies if being a performance standby should still return the active status code instead of the performance standby status code.

+
+
+
+
+

You can inject io.quarkus.vault.VaultSystemBackendEngine to run system operations programmatically.

+
+
+ + + + + +
+ + +When the readiness probe is failing in Kubernetes, then the application is not reachable. This means that if Vault is failing, all services depending on Vault will become unreachable and maybe this is not the desired state, so use this flag according to your requirements. +
+
+
+
+
+

TLS

+
+
+

In production mode, TLS should be activated between the Quarkus application and Vault to prevent man-in-the-middle attacks.

+
+
+

There are several ways to configure the Quarkus application:

+
+
+
    +
  • +

    through the standard javax.net.ssl.trustStore system property, which should refer to a JKS truststore containing +the trusted certificates

    +
  • +
  • +

    using property quarkus.vault.tls.ca-cert, which should refer to a pem encoded file.

    +
  • +
+
+
+

If quarkus.vault.tls.ca-cert is not set and the Quarkus application is using the Kubernetes authentication, +TLS will be active and use the CA certificate bundle located in /var/run/secrets/kubernetes.io/serviceaccount/ca.crt. +If you want to disable this behavior (for instance when using a trust store), you need to set it explicitly using: +quarkus.vault.tls.use-kubernetes-ca-cert=false.

+
+
+

The last relevant property is quarkus.vault.tls.skip-verify, which allows to communicate with Vault using TLS, +but without checking the certificate authenticity. This may be convenient in development, but is strongly +discouraged in production as it is not more secure than talking to Vault in plain HTTP.

+
+
+
+
+

Vault Provisioning

+
+
+

Beside the typical client use cases, the Quarkus extension can be used to provision Vault as well, +for instance as part of a CD pipeline. Specific CDI beans and operations support this scenario:

+
+
+
    +
  • +

    VaultSystemBackendEngine: create Vault Policies. See the Vault documentation.

    +
  • +
  • +

    VaultKubernetesAuthService. See the Vault documentation.

    +
    +
      +
    • +

      Configure the Kubernetes Auth Method (Kubernetes host, certificates, keys, …​)

      +
    • +
    • +

      Create Kubernetes Auth Roles (association between Kubernetes service accounts, Kubernetes namespaces and Vault policies)

      +
    • +
    +
    +
  • +
  • +

    VaultTransitSecretEngine: CRUD operations on keys. See the Vault documentation.

    +
  • +
+
+
+

For instance:

+
+
+
+
@Inject
+VaultSystemBackendEngine vaultSystemBackendEngine;
+
+@Inject
+VaultKubernetesAuthService vaultKubernetesAuthService;
+
+...
+
+  String rules = "path \"transit/*\" {\n" +
+          "  capabilities = [ \"create\", \"read\", \"update\" ]\n" +
+          "}";
+  String policyName = "sys-test-policy";
+  vaultSystemBackendEngine.createUpdatePolicy(policyName, rules);
+
+  String roleName = "test-auth-k8s";
+  List<String> boundServiceAccountNames = asList("vault-auth");
+  List<String> boundServiceAccountNamespaces = asList("default");
+  List<String> tokenPolicies = asList(policyName);
+
+  vaultKubernetesAuthService.createRole(roleName, new VaultKubernetesAuthRole()
+          .setBoundServiceAccountNames(boundServiceAccountNames)
+          .setBoundServiceAccountNamespaces(boundServiceAccountNamespaces)
+          .setTokenPolicies(tokenPolicies));
+
+
+
+

Like any client, a provisioning program would have to authenticate using one of the supported Auth methods, and get the appropriate grants through one or more policies. Example:

+
+
+
+
# create Policies
+path "sys/policy/*" {
+  capabilities = ["read", "create", "update", "delete"]
+}
+
+# create Kubernetes Auth Roles
+path "auth/kubernetes/role/*" {
+  capabilities = ["read", "create", "update", "delete"]
+}
+
+
+
+

You should adjust to the minimal set of access rights depending on your specific use case.

+
+
+
+
+

Dev Services (Configuration Free Vault)

+
+
+

Quarkus supports a feature called Dev Services that allows you to create various containers without any config. +What that means in practice is that if you have Docker running and have not configured quarkus.vault.url, +Quarkus will automatically start a Vault container when running tests or in dev mode, and automatically +configure the connection.

+
+
+

When running the production version of the application, the Vault connection needs to be configured as normal, +so if you want to include a production Vault config in your application.properties and continue to use Dev Services +we recommend that you use the %prod. profile to define your Vault connection settings.

+
+
+

Shared server

+
+

Most of the time you need to share the server between applications. +Dev Services for Vault implements a service discovery mechanism for your multiple Quarkus applications running in dev mode to share a single server.

+
+
+ + + + + +
+ + +Dev Services for Vault starts the container with the quarkus-dev-service-vault label which is used to identify the container. +
+
+
+

If you need multiple (shared) servers, you can configure the quarkus.vault.devservices.service-name attribute and indicate the server name. +It looks for a container with the same value, or starts a new one if none can be found. +The default service name is vault.

+
+
+

Sharing is enabled by default in dev mode, but disabled in test mode. +You can disable the sharing with quarkus.vault.devservices.shared=false.

+
+
+
+

Automatic Secret Engine Provisioning

+
+

To help with provisioning the automatically managed Vault instance, you can enable certain secret engines.

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

As mentioned above Vault containers started in dev mode automatically mount the kv secret engine v2 +at secret/.

+
+
+
+
+

Enable the Transit Secret Engine at transit/ using:

+
+
+
+
quarkus.vault.devservices.transit-enabled=true
+
+
+
+

Enable the PKI Secret Engine at pki/ using:

+
+
+
+
quarkus.vault.devservices.pki-enabled=true
+
+
+
+
+
+
+

Conclusion

+
+
+

As a general matter, you should consider reading the extensive Vault documentation +and apply best practices.

+
+
+

The features exposed today through the Vault extension covers only a small fraction of what the product is capable of. +Still, it addresses already some of the most common microservices scenarii (e.g. sensitive configuration and database +credentials), which goes a long way towards creating secured applications.

+
+
+
+
+

Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Whether or not an health check is published in case the smallrye-health extension is present.

+
+
+

Environment variable: QUARKUS_VAULT_HEALTH_ENABLED

+
+
+

boolean

false

+
+
+
+

Specifies if being a standby should still return the active status code instead of the standby status code.

+
+
+

Environment variable: QUARKUS_VAULT_HEALTH_STAND_BY_OK

+
+
+

boolean

false

+
+
+
+

Specifies if being a performance standby should still return the active status code instead of the performance standby status code.

+
+
+

Environment variable: QUARKUS_VAULT_HEALTH_PERFORMANCE_STAND_BY_OK

+
+
+

boolean

false

+
+
+
+

If DevServices has been explicitly enabled or disabled. DevServices is generally enabled by default, unless there is an existing configuration present.

+
+
+

When DevServices is enabled Quarkus will attempt to automatically configure and start a vault instance when running in Dev or Test mode and when Docker is running.

+
+
+

Environment variable: QUARKUS_VAULT_DEVSERVICES_ENABLED

+
+
+

boolean

true

+
+
+
+

The container image name to use, for container based DevServices providers.

+
+
+

Environment variable: QUARKUS_VAULT_DEVSERVICES_IMAGE_NAME

+
+
+

string

+
+
+
+

Indicates if the Vault instance managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for Vault starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-vault label. The value is configured using the service-name property.

+
+
+

Container sharing is only used in dev mode.

+
+
+

Environment variable: QUARKUS_VAULT_DEVSERVICES_SHARED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-vault label attached to the started container. This property is used when shared is set to true. In this case, before starting a container, Dev Services for Vault looks for a container with the quarkus-dev-service-vault label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise it starts a new container with the quarkus-dev-service-vault label set to the specified value.

+
+
+

This property is used when you need multiple shared Vault instances.

+
+
+

Environment variable: QUARKUS_VAULT_DEVSERVICES_SERVICE_NAME

+
+
+

string

vault

+
+
+
+

Optional fixed port the dev service will listen to.

+
+
+

If not defined, the port will be chosen randomly.

+
+
+

Environment variable: QUARKUS_VAULT_DEVSERVICES_PORT

+
+
+

int

+
+
+
+

Should the Transit secret engine be enabled

+
+
+

Environment variable: QUARKUS_VAULT_DEVSERVICES_TRANSIT_ENABLED

+
+
+

boolean

false

+
+
+
+

Should the PKI secret engine be enabled

+
+
+

Environment variable: QUARKUS_VAULT_DEVSERVICES_PKI_ENABLED

+
+
+

boolean

false

+
+
+
+

Custom container initialization commands

+
+
+

Environment variable: QUARKUS_VAULT_DEVSERVICES_INIT_COMMANDS

+
+
+

list of string

+
+
+
+

Microprofile Config ordinal.

+
+
+

This is provided as an alternative to the config_ordinal property defined by the specification, to make it easier and more natural for applications to override the default ordinal.

+
+
+

The default value is higher than the file system or jar ordinals, but lower than env vars.

+
+
+

Environment variable: QUARKUS_VAULT_CONFIG_ORDINAL

+
+
+

int

270

+
+
+
+

Vault server url. +<p> +Example: https://localhost:8200 +<p> +See also the documentation for the kv-secret-engine-mount-path property for some insights on how +the full Vault url gets built.

+
+
+

Environment variable: QUARKUS_VAULT_URL

+
+
+

URL

+
+
+
+

Renew grace period duration. +<p> +This value if used to extend a lease before it expires its ttl, or recreate a new lease before the current +lease reaches its max_ttl. +By default Vault leaseDuration is equal to 7 days (ie: 168h or 604800s). +If a connection pool maxLifetime is set, it is reasonable to set the renewGracePeriod to be greater +than the maxLifetime, so that we are sure we get a chance to renew leases before we reach the ttl. +In any case you need to make sure there will be attempts to fetch secrets within the renewGracePeriod, +because that is when the renewals will happen. This is particularly important for db dynamic secrets +because if the lease reaches its ttl or max_ttl, the password of the db user will become invalid and +it will be not longer possible to log in. +This value should also be smaller than the ttl, otherwise that would mean that we would try to recreate +leases all the time.

+
+
+

Environment variable: QUARKUS_VAULT_RENEW_GRACE_PERIOD

+
+
+

Duration +

1H

+
+
+
+

Vault config source cache period. +<p> +Properties fetched from vault as MP config will be kept in a cache, and will not be fetched from vault +again until the expiration of that period. +This property is ignored if secret-config-kv-path is not set.

+
+
+

Environment variable: QUARKUS_VAULT_SECRET_CONFIG_CACHE_PERIOD

+
+
+

Duration +

10M

+
+
+
+

List of comma separated vault paths in kv store, +where all properties will be available as MP config properties as-is, with no prefix. +<p> +For instance, if vault contains property foo, it will be made available to the +quarkus application as @ConfigProperty(name = "foo") String foo; +<p> +If 2 paths contain the same property, the last path will win. +<p> +For instance if +<p> +* secret/base-config contains foo=bar and +* secret/myapp/config contains foo=myappbar, then +<p> +@ConfigProperty(name = "foo") String foo will have value myappbar +with application properties quarkus.vault.secret-config-kv-path=base-config,myapp/config +<p> +See also the documentation for the kv-secret-engine-mount-path property for some insights on how +the full Vault url gets built.

+
+
+

Environment variable: QUARKUS_VAULT_SECRET_CONFIG_KV_PATH

+
+
+

list of string

+
+
+
+

Maximum number of attempts when fetching MP Config properties on the initial connection.

+
+
+

Environment variable: QUARKUS_VAULT_MP_CONFIG_INITIAL_ATTEMPTS

+
+
+

int

1

+
+
+
+

Used to hide confidential infos, for logging in particular. +Possible values are: +<p> +* low: display all secrets. +* medium: display only usernames and lease ids (ie: passwords and tokens are masked). +* high: hide lease ids and dynamic credentials username.

+
+
+

Environment variable: QUARKUS_VAULT_LOG_CONFIDENTIALITY_LEVEL

+
+
+
+

low, medium, high

+

medium

+
+
+
+

Kv secret engine version. +<p> +see https://www.vaultproject.io/docs/secrets/kv/index.html

+
+
+

Environment variable: QUARKUS_VAULT_KV_SECRET_ENGINE_VERSION

+
+
+

int

2

+
+
+
+

KV secret engine path. +<p> +This value is used when building the url path in the KV secret engine programmatic access +(i.e. VaultKVSecretEngine) and the vault config source (i.e. fetching configuration properties from Vault). +<p> +For a v2 KV secret engine (default - see kv-secret-engine-version property) +the full url is built from the expression <url>/v1/</kv-secret-engine-mount-path>/data/…​. +<p> +With property quarkus.vault.url=https://localhost:8200, the following call +vaultKVSecretEngine.readSecret("foo/bar") would lead eventually to a GET on Vault with the following +url: https://localhost:8200/v1/secret/data/foo/bar. +<p> +With a KV secret engine v1, the url changes to: <url>/v1/</kv-secret-engine-mount-path>/…​. +<p> +The same logic is applied to the Vault config source. With quarkus.vault.secret-config-kv-path=config/myapp +The secret properties would be fetched from Vault using a GET on +https://localhost:8200/v1/secret/data/config/myapp for a KV secret engine v2 (or +https://localhost:8200/v1/secret/config/myapp for a KV secret engine v1). +<p> +see https://www.vaultproject.io/docs/secrets/kv/index.html

+
+
+

Environment variable: QUARKUS_VAULT_KV_SECRET_ENGINE_MOUNT_PATH

+
+
+

string

secret

+
+
+
+

Timeout to establish a connection with Vault.

+
+
+

Environment variable: QUARKUS_VAULT_CONNECT_TIMEOUT

+
+
+

Duration +

5S

+
+
+
+

Request timeout on Vault.

+
+
+

Environment variable: QUARKUS_VAULT_READ_TIMEOUT

+
+
+

Duration +

5S

+
+
+
+

List of remote hosts that are not proxied when the client is configured to use a proxy. This list serves the same purpose as the JVM nonProxyHosts configuration.

+
+
+

Entries can use the * wildcard character for pattern matching, e.g *.example.com matches www.example.com.

+
+
+

Environment variable: QUARKUS_VAULT_NON_PROXY_HOSTS

+
+
+

list of string

+
+
+
+

The proxy host. If set the client is configured to use a proxy.

+
+
+

Environment variable: QUARKUS_VAULT_PROXY_HOST

+
+
+

string

+
+
+
+

The port the proxy is listening on, 3128 by default.

+
+
+

Environment variable: QUARKUS_VAULT_PROXY_PORT

+
+
+

int

3128

+
+
+
+

List of comma separated vault paths in kv store, +where all properties will be available as prefixed MP config properties. +<p> +For instance if the application properties contains +quarkus.vault.secret-config-kv-path.myprefix=config, and +vault path secret/config contains foo=bar, then myprefix.foo +will be available in the MP config. +<p> +If the same property is available in 2 different paths for the same prefix, the last one +will win. +<p> +See also the documentation for the quarkus.vault.kv-secret-engine-mount-path property for some insights on how +the full Vault url gets built.

+
+
+

Environment variable: QUARKUS_VAULT_SECRET_CONFIG_KV_PATH__PREFIX_

+
+
+

list of string

required

+
+
+
+

Dynamic credentials' role. +<p> +Roles are defined by the secret engine in use. For example, database credentials roles are defined +by the database secrets engine described at +<a href="https://www.vaultproject.io/docs/secrets/databases/index.html">Vault Databases</a>. +<p> +One of credentials-role or kv-path can to be defined. not both.

+
+
+

Environment variable: QUARKUS_VAULT_CREDENTIALS_PROVIDER__CREDENTIALS_PROVIDER__CREDENTIALS_ROLE

+
+
+

string

+
+
+
+

Mount of dynamic credentials secrets engine, for example database or rabbitmq. +<p> +Only used when credentials-role is defined.

+
+
+

Environment variable: QUARKUS_VAULT_CREDENTIALS_PROVIDER__CREDENTIALS_PROVIDER__CREDENTIALS_MOUNT

+
+
+

string

database

+
+
+
+

Path of dynamic credentials request. +<p> +Request paths are dictated by the secret engine in use. For standard secret engines this should be +left as the default of creds. +<p> +Only used when credentials-role is defined.

+
+
+

Environment variable: QUARKUS_VAULT_CREDENTIALS_PROVIDER__CREDENTIALS_PROVIDER__CREDENTIALS_REQUEST_PATH

+
+
+

string

creds

+
+
+
+

A path in vault kv store, where we will find the kv-key. +<p> +One of database-credentials-role or kv-path needs to be defined. not both. +<p> +see <a href="https://www.vaultproject.io/docs/secrets/kv/index.html">KV Secrets Engine</a>

+
+
+

Environment variable: QUARKUS_VAULT_CREDENTIALS_PROVIDER__CREDENTIALS_PROVIDER__KV_PATH

+
+
+

string

+
+
+
+

Key name to search in vault path kv-path. The value for that key is the credential. +<p> +kv-key should not be defined if kv-path is not. +<p> +see <a href="https://www.vaultproject.io/docs/secrets/kv/index.html">KV Secrets Engine</a>

+
+
+

Environment variable: QUARKUS_VAULT_CREDENTIALS_PROVIDER__CREDENTIALS_PROVIDER__KV_KEY

+
+
+

string

password

Vault Enterprise

Type

Default

+
+
+
+

Vault Enterprise namespace +<p> +If set, this will add a X-Vault-Namespace header to all requests sent to the Vault server. +<p> +See https://www.vaultproject.io/docs/enterprise/namespaces

+
+
+

Environment variable: QUARKUS_VAULT_ENTERPRISE_NAMESPACE

+
+
+

string

Authentication

Type

Default

+
+
+
+

Vault token, bypassing Vault authentication (kubernetes, userpass or approle). This is useful in development where an authentication mode might not have been set up. In production we will usually prefer some authentication such as userpass, or preferably kubernetes, where Vault tokens get generated with a TTL and some ability to revoke them. Lease renewal does not apply.

+
+
+

Environment variable: QUARKUS_VAULT_AUTHENTICATION_CLIENT_TOKEN

+
+
+

string

+
+
+
+

Client token wrapped in a wrapping token, such as what is returned by:

+
+
+

vault token create -wrap-ttl=60s -policy=myapp

+
+
+

client-token and client-token-wrapping-token are exclusive. Lease renewal does not apply.

+
+
+

Environment variable: QUARKUS_VAULT_AUTHENTICATION_CLIENT_TOKEN_WRAPPING_TOKEN

+
+
+

string

+
+
+
+

Role Id for AppRole auth method. This property is required when selecting the app-role authentication type.

+
+
+

Environment variable: QUARKUS_VAULT_AUTHENTICATION_APP_ROLE_ROLE_ID

+
+
+

string

+
+
+
+

Secret Id for AppRole auth method. This property is required when selecting the app-role authentication type.

+
+
+

Environment variable: QUARKUS_VAULT_AUTHENTICATION_APP_ROLE_SECRET_ID

+
+
+

string

+
+
+
+

Wrapping token containing a Secret Id, obtained from:

+
+
+

vault write -wrap-ttl=60s -f auth/approle/role/myapp/secret-id

+
+
+

secret-id and secret-id-wrapping-token are exclusive

+
+
+

Environment variable: QUARKUS_VAULT_AUTHENTICATION_APP_ROLE_SECRET_ID_WRAPPING_TOKEN

+
+
+

string

+
+
+
+

Allows configure Approle authentication mount path.

+
+
+

Environment variable: QUARKUS_VAULT_AUTHENTICATION_APP_ROLE_AUTH_MOUNT_PATH

+
+
+

string

approle

+
+
+
+

User for userpass auth method. This property is required when selecting the userpass authentication type.

+
+
+

Environment variable: QUARKUS_VAULT_AUTHENTICATION_USERPASS_USERNAME

+
+
+

string

+
+
+
+

Password for userpass auth method. This property is required when selecting the userpass authentication type.

+
+
+

Environment variable: QUARKUS_VAULT_AUTHENTICATION_USERPASS_PASSWORD

+
+
+

string

+
+
+
+

Wrapping token containing a Password, obtained from:

+
+
+

vault kv get -wrap-ttl=60s secret/

+
+
+

The key has to be 'password', meaning the password has initially been provisioned with:

+
+
+

vault kv put secret/ password=

+
+
+

password and password-wrapping-token are exclusive

+
+
+

Environment variable: QUARKUS_VAULT_AUTHENTICATION_USERPASS_PASSWORD_WRAPPING_TOKEN

+
+
+

string

+
+
+
+

Kubernetes authentication role that has been created in Vault to associate Vault policies, with Kubernetes service accounts and/or Kubernetes namespaces. This property is required when selecting the Kubernetes authentication type.

+
+
+

Environment variable: QUARKUS_VAULT_AUTHENTICATION_KUBERNETES_ROLE

+
+
+

string

+
+
+
+

Location of the file containing the Kubernetes JWT token to authenticate against in Kubernetes authentication mode.

+
+
+

Environment variable: QUARKUS_VAULT_AUTHENTICATION_KUBERNETES_JWT_TOKEN_PATH

+
+
+

string

/var/run/secrets/kubernetes.io/serviceaccount/token

+
+
+
+

Allows configure Kubernetes authentication mount path.

+
+
+

Environment variable: QUARKUS_VAULT_AUTHENTICATION_KUBERNETES_AUTH_MOUNT_PATH

+
+
+

string

kubernetes

TLS

Type

Default

+
+
+
+

Allows to bypass certificate validation on TLS communications.

+
+
+

If true this will allow TLS communications with Vault, without checking the validity of the certificate presented by Vault. This is discouraged in production because it allows man in the middle type of attacks.

+
+
+

Environment variable: QUARKUS_VAULT_TLS_SKIP_VERIFY

+
+
+

boolean

+
+
+
+

Certificate bundle used to validate TLS communications with Vault.

+
+
+

The path to a pem bundle file, if TLS is required, and trusted certificates are not set through javax.net.ssl.trustStore system property.

+
+
+

Environment variable: QUARKUS_VAULT_TLS_CA_CERT

+
+
+

string

+
+
+
+

If true and Vault authentication type is kubernetes, TLS will be active and the cacert path will be set to /var/run/secrets/kubernetes.io/serviceaccount/ca.crt. If set, this setting will take precedence over property quarkus.vault.tls.ca-cert. This means that if Vault authentication type is kubernetes and we want to use quarkus.vault.tls.ca-cert or system property javax.net.ssl.trustStore, then this property should be set to false.

+
+
+

Environment variable: QUARKUS_VAULT_TLS_USE_KUBERNETES_CA_CERT

+
+
+

boolean

true

Transit Engine

Type

Default

+
+
+
+

Specifies the name of the key to use. By default this will be the property key alias. Used when +the same transit key is used with different configurations. Such as in:

+
+
+
+
quarkus.vault.transit.key.my-foo-key.name=foo
+
+quarkus.vault.transit.key.my-foo-key-with-prehashed.name=foo
+quarkus.vault.transit.key.my-foo-key-with-prehashed.prehashed=true
+...
+transitSecretEngine.sign("my-foo-key", "my raw content");
+or
+transitSecretEngine.sign("my-foo-key-with-prehashed", "my already hashed content");
+
+
+
+

Environment variable: QUARKUS_VAULT_TRANSIT_KEY__KEY__NAME

+
+
+

string

+
+
+
+

Set to true when the input is already hashed. Applies to sign operations.

+
+
+

Environment variable: QUARKUS_VAULT_TRANSIT_KEY__KEY__PREHASHED

+
+
+

boolean

+
+
+
+

When using a RSA key, specifies the RSA signature algorithm. Applies to sign operations.

+
+
+

Environment variable: QUARKUS_VAULT_TRANSIT_KEY__KEY__SIGNATURE_ALGORITHM

+
+
+

string

+
+
+
+

Specifies the hash algorithm to use for supporting key types. Applies to sign operations.

+
+
+

Environment variable: QUARKUS_VAULT_TRANSIT_KEY__KEY__HASH_ALGORITHM

+
+
+

string

+
+
+
+

Specifies the type of key to create for the encrypt operation. Applies to encrypt operations.

+
+
+

Environment variable: QUARKUS_VAULT_TRANSIT_KEY__KEY__TYPE

+
+
+

string

+
+
+
+

If enabled, the key will support convergent encryption, where the same plaintext creates the same ciphertext. Applies to encrypt operations.

+
+
+

Environment variable: QUARKUS_VAULT_TRANSIT_KEY__KEY__CONVERGENT_ENCRYPTION

+
+
+

string

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+
+
+

References

+
+ +
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-vault/dev/vault-auth.html b/quarkus-vault/dev/vault-auth.html new file mode 100644 index 0000000000..2f1f5e7ae7 --- /dev/null +++ b/quarkus-vault/dev/vault-auth.html @@ -0,0 +1,1498 @@ + + + + + + Working with HashiCorp Vault’s Authentication :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Working with HashiCorp Vault’s Authentication

+
+
+
+

Working with Vault is typically a 2 step process:

+
+
+
    +
  • +

    Logging in, which returns a client token

    +
  • +
  • +

    Start using Vault using the client token, within the limits of what is allowed by the policies associated with the token

    +
  • +
+
+
+

There are several Vault authentication methods supported in Quarkus today, namely:

+
+
+
    +
  • +

    Token: whenever you already have a token

    +
  • +
  • +

    Userpass: authenticate with a username and a password

    +
  • +
  • +

    AppRole: authenticate with a role id and a secret id (which can +be seen as a Userpass for automated workflows - machines and services)

    +
  • +
  • +

    Kubernetes, which is applicable to workloads deployed into Kubernetes

    +
  • +
+
+
+

This guide aims at providing examples for each of those authentication methods.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    to complete the Vault guide

    +
  • +
  • +

    roughly 30 minutes

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    JDK 11+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    Docker installed

    +
  • +
  • +

    For the Kubernetes authentication: A Kubernetes distribution to deploy the Quarkus application (Minishift, K3s, Docker Desktop, …​)

    +
  • +
+
+
+
+
+

Token Authentication

+
+
+

We assume there is a Vault container and a PostgreSQL container running from the Vault guide, and the root token is known.

+
+
+

First, create a new shell, docker exec into the container and set the root token:

+
+
+
+
docker exec -it dev-vault sh
+/ # export VAULT_TOKEN=s.5VUS8pte13RqekCB2fmMT3u2
+
+
+
+

Create a token for the vault-quickstart-policy policy:

+
+
+
+
/ # vault token create -policy=vault-quickstart-policy
+Key                  Value
+---                  -----
+token                s.JqMeE1UEyUb19F6zmMW0SWx6
+token_accessor       q1ynY9T7FDgbMKd3uST7RzLy
+token_duration       768h
+token_renewable      true
+token_policies       ["default" "vault-quickstart-policy"]
+identity_policies    []
+policies             ["default" "vault-quickstart-policy"]
+
+
+
+

Now use the generated client token in the application configuration:

+
+
+
+
quarkus.vault.authentication.client-token=s.JqMeE1UEyUb19F6zmMW0SWx6
+
+
+
+

Compile and start the application:

+
+
+
+
./mvnw clean install
+java -jar target/quarkus-app/quarkus-run.jar
+
+
+
+

Finally test the application endpoint:

+
+
+
+
curl http://localhost:8080/hello/private-key
+
+
+
+

You should see: 123456.

+
+
+

Client Token using Response Wrapping

+
+

One drawback of this approach is that you expose a secret piece of information (i.e. the token) that can give access +to sensitive data in Vault. This requires ensuring that the application’s configuration stays secure at all time. +If an intruder was to access the client token, it would be able to start calling Vault on all endpoints permitted +by the policy.

+
+
+

This risk can be mitigated using an approach called +Response Wrapping (which used to be known as +Cubbyhole Authentication in older versions of Vault). This principle is simple: instead of configuring the +client token itself, we hide it inside a Wrapping Token, which we provide to the application. Upon startup, +the application will unwrap the Wrapping Token, and fetch the real token from within. The additional level of +security comes from the fact that the Wrapping Token is short lived (from a few seconds to a few minutes; +basically just enough to start and unwrap the token), and can be unwrapped only once. +If the Wrapping Token gets stolen and unwrapped, we will notice immediately because the legitimate application +will get an error saying that the token is invalid.

+
+
+

With that in mind, let’s create a new token and wrap it inside a Wrapping Token with a TTL of 1 minute:

+
+
+
+
/ # vault token create -wrap-ttl=60s -policy=vault-quickstart-policy
+Key                              Value
+---                              -----
+wrapping_token:                  s.2cLMBoKhelDK6W3uAFT2umXu
+wrapping_accessor:               ojvbOtmLzB5D47SzXGo9b3sR
+wrapping_token_ttl:              1m
+wrapping_token_creation_time:    2020-04-14 16:05:20.990240428 +0000 UTC
+wrapping_token_creation_path:    auth/token/create
+wrapped_accessor:                a4ITYQNnQtwCOUmV5DJMpCiG
+
+
+
+

Now let’s use this wrapping token in the configuration:

+
+
+
+
quarkus.vault.authentication.client-token-wrapping-token=s.2cLMBoKhelDK6W3uAFT2umXu
+
+
+
+

Compile and run the application without the tests, you should be able now to curl the private key 123456 as before.

+
+
+

Stop the application, and execute tests with ./mvnw test. They should fail with the following error:

+
+
+
+
ERROR: Failed to start application
+io.quarkus.vault.VaultException: wrapping token is not valid or does not exist; this means that the token has already expired (if so you can increase the TTL on the wrapping token) or has been consumed by somebody else (potentially indicating that the wrapping token has been stolen)
+
+
+
+
+
+
+

Userpass Authentication

+
+
+

Normally the userpass auth method should already be enabled from the Vault guide. If not, execute the following +commands now:

+
+
+
+
vault auth enable userpass
+vault write auth/userpass/users/bob password=sinclair policies=vault-quickstart-policy
+
+
+
+

And simply specify the username and password for this user in the application configuration:

+
+
+
+
quarkus.vault.authentication.userpass.username=bob
+quarkus.vault.authentication.userpass.password=sinclair
+
+
+
+

Test the application endpoint after compiling and starting the application again:

+
+
+
+
curl http://localhost:8080/hello/private-key
+
+
+
+

You should see: 123456.

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

Userpass supports response wrapping as well for the password property, although it is more +unusual to use this approach as response wrapping typically involves a technical workflow, +which is better suited for approle.

+
+
+
+
+
+
+

Approle Authentication

+
+
+

Approle is an authentication method suited for technical workflows. It relies on 2 pieces of information:

+
+
+
    +
  • +

    role id can be compared to the user name in Userpass

    +
  • +
  • +

    secret id plays the role of the password

    +
  • +
+
+
+

To set up Approle you need to enable the approle auth method, create an app role, +and generate a role id and secret id:

+
+
+
+
/ # vault auth enable approle
+/ # vault write auth/approle/role/myapprole policies=vault-quickstart-policy
+
+/ # vault read auth/approle/role/myapprole/role-id
+Key        Value
+---        -----
+role_id    b15460ff-fea0-43fc-1002-a045fb60dfc4
+
+/ # vault write -f auth/approle/role/myapprole/secret-id
+Key                   Value
+---                   -----
+secret_id             d2f13e1f-f32a-f60a-86d8-0b5cdaeb821b
+secret_id_accessor    2acff656-d049-c4b3-a752-6125e69210ba
+
+
+
+

Add the appropriate properties:

+
+
+
+
quarkus.vault.authentication.app-role.role-id=b15460ff-fea0-43fc-1002-a045fb60dfc4
+quarkus.vault.authentication.app-role.secret-id=d2f13e1f-f32a-f60a-86d8-0b5cdaeb821b
+
+
+
+

After compiling and running the application you should be able to curl it on the +private-key endpoint to see the secret information 123456 as usual.

+
+
+

Approle using Response Wrapping

+
+

Similarly to direct client token authentication, it is possible to wrap the secret-id:

+
+
+
+
/ # vault write -wrap-ttl=60s -f auth/approle/role/myapprole/secret-id
+Key                              Value
+---                              -----
+wrapping_token:                  s.aSq7tcRqfeboZqLMPfa5gkXJ
+wrapping_accessor:               u5EPZOnqyIJN8mT44od67WMS
+wrapping_token_ttl:              1m
+wrapping_token_creation_time:    2020-04-14 16:59:25.482352967 +0000 UTC
+wrapping_token_creation_path:    auth/approle/role/myapprole/secret-id
+
+
+
+

Replace the secret-id property with secret-id-wrapping-token in the configuration:

+
+
+
+
quarkus.vault.authentication.app-role.secret-id-wrapping-token=s.aSq7tcRqfeboZqLMPfa5gkXJ
+
+
+
+

Finally, recompile the application without tests (otherwise you are going to consume the wrapping token), +launch it and curl the private-key endpoint. As usual, you should see 123456.

+
+
+
+
+
+

Kubernetes Authentication

+
+
+

Vault provides an integration with Kubernetes to allow containers to authenticate with Vault using their +Kubernetes JWT token located in /var/run/secrets/kubernetes.io/serviceaccount.

+
+
+

The setup is more involved than with the other auth methods because we need to allow Vault to talk +to the master API to be able to validate the JWT token that the application will authenticate with.

+
+
+

auth-delegator

+
+

The first step involves creating a vault-auth-sa service account with auth-delegator +role that Vault will use to communicate with the master API.

+
+
+

First create file vault-auth-k8s.yml:

+
+
+
+
---
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+name: vault-auth-sa
+---
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+name: vault-auth-delegator
+subjects:
+- kind: User
+name: vault-auth-sa
+namespace: default
+roleRef:
+kind: ClusterRole
+name: system:auth-delegator
+apiGroup: rbac.authorization.k8s.io
+
+
+
+

And apply it: kubectl apply -f vault-auth-k8s.yml.

+
+
+

Once the objects are created, we need to capture the JWT token of this service account, +and grab the public certificate of the cluster:

+
+
+
+
secret_name=$(kubectl get sa vault-auth-sa -o json | jq -r '.secrets[0].name')
+token=$(kubectl get secret $secret_name -o json | jq -r '.data.token' | base64 --decode)
+echo token=$token
+kubectl get secret $secret_name -o json | jq -r '.data."ca.crt"' | base64 -D > /tmp/ca.crt
+
+
+
+
+

Vault

+
+

The next step requires to exec interactively with the root token into the Vault container +to configure the Kubernetes auth method:

+
+
+
+
docker exec -it dev-vault sh
+export VAULT_TOKEN=s.5VUS8pte13RqekCB2fmMT3u2
+
+
+
+

Once inside the pod, set the token variable to the value that was just printed in the console before, and +recreate ca.crt with the same content as /tmp/ca.crt outside the container. Finally use kubectl config view +to assess the url of your Kubernetes cluster:

+
+
+
+
token=...       => set the value printed in the console just before
+vi ca.crt       => copy/paste /tmp/ca.crt from outside the container
+kubernetes_host => url from the kubectl config view (e.g. https://kubernetes.docker.internal:6443)
+
+
+
+

Now we have all the information we need to configure Vault:

+
+
+
+
vault auth enable kubernetes
+
+# configure master API access from Vault
+vault write auth/kubernetes/config \
+    token_reviewer_jwt=$token \
+    kubernetes_host=$kubernetes_host \
+    kubernetes_ca_cert=@ca.crt
+
+# create vault-quickstart-role role
+vault write auth/kubernetes/role/vault-quickstart-role \
+    bound_service_account_names=vault-quickstart-sa \
+    bound_service_account_namespaces=default \
+    policies=vault-quickstart-policy \
+    ttl=1h
+
+
+
+
+

Deploy the application

+
+

Add the following properties to the application (and remove any other authentication Vault property, +plus replace <host> by the ip or name of the local host that is running the Vault and PostgreSQL containers, +such that they will be accessible from the pod):

+
+
+
+
quarkus.vault.url=http://<host>:8200
+quarkus.datasource.db-kind=postgresql
+quarkus.datasource.username=<your username>
+quarkus.datasource.password=<your password>
+quarkus.datasource.jdbc.url = jdbc:postgresql://<host>:5432/mydatabase
+
+quarkus.vault.authentication.kubernetes.role=vault-quickstart-role
+
+quarkus.log.category."io.quarkus.vault".level=DEBUG
+
+
+
+

Now build the application:

+
+
+
+
./mvnw package -DskipTests
+docker build -f src/main/docker/Dockerfile.jvm -t quarkus/vault-quickstart-jvm .
+
+
+
+

Create a vault-quickstart-k8s.yml file with:

+
+
+
+
---
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+  name: vault-quickstart-sa
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  labels:
+    app: vaultapp
+  name: vaultapp
+spec:
+  replicas: 1
+  selector:
+    matchLabels:
+      app: vaultapp
+  template:
+    metadata:
+      labels:
+        app: vaultapp
+    spec:
+      serviceAccountName: vault-quickstart-sa
+      containers:
+      - image: quarkus/vault-quickstart-jvm
+        imagePullPolicy: Never
+        name: vaultapp
+        ports:
+        - containerPort: 8080
+          name: vaultport
+          protocol: TCP
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: vaultapp
+  labels:
+    app: vaultapp
+spec:
+  type: NodePort
+  ports:
+    - name: vault
+      port: 8080
+      nodePort: 30400
+  selector:
+    app: vaultapp
+
+
+
+

And apply it: kubectl apply -f vault-quickstart-k8s.yml.

+
+
+

This will deploy the application, and make it available on port 30400 of the Kubernetes host.

+
+
+

You can check that the application has started from the logs:

+
+
+
+
kubectl get pods
+pod=$(kubectl get pod -l app=vaultapp -o json | jq -r '.items[0].metadata.name')
+kubectl logs $pod
+
+
+
+

You should see:

+
+
+
+
exec java -Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager -XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -XX:MinHeapFreeRatio=20 -XX:MaxHeapFreeRatio=40 -XX:+ExitOnOutOfMemoryError -cp . -jar /deployments/app.jar
+__  ____  __  _____   ___  __ ____  ______
+ --/ __ \/ / / / _ | / _ \/ //_/ / / / __/
+ -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \
+--\___\_\____/_/ |_/_/|_/_/|_|\____/___/
+2020-04-15 18:30:00,983 DEBUG [io.qua.vau.run.con.VaultConfigSource] (main) loaded vault runtime config VaultRuntimeConfig{url=Optional[http://<host>:8200], kubernetesAuthenticationRole=vault-quickstart-role, kubernetesJwtTokenPath='/var/run/secrets/kubernetes.io/serviceaccount/token', userpassUsername='', userpassPassword='***', appRoleRoleId='', appRoleSecretId='***', appRoleSecretIdWrappingToken='***', clientToken=***, clientTokenWrappingToken=***, renewGracePeriod=PT1H, cachePeriod=PT10M, logConfidentialityLevel=MEDIUM, kvSecretEngineVersion=2, kvSecretEngineMountPath='secret', tlsSkipVerify=false, tlsCaCert=Optional.empty, connectTimeout=PT5S, readTimeout=PT1S}
+2020-04-15 18:30:00,985 DEBUG [io.qua.vau.run.con.VaultConfigSource] (main) loaded vault buildtime config io.quarkus.vault.runtime.config.VaultBuildTimeConfig@4163f1cd
+2020-04-15 18:30:01,310 DEBUG [io.qua.vau.run.cli.OkHttpClientFactory] (main) create SSLSocketFactory with tls /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
+2020-04-15 18:30:01,559 DEBUG [io.qua.vau.run.VaultAuthManager] (main) authenticate with jwt at: /var/run/secrets/kubernetes.io/serviceaccount/token => ***
+2020-04-15 18:30:01,779 DEBUG [io.qua.vau.run.VaultAuthManager] (main) created new login token: {clientToken: ***, renewable: true, leaseDuration: 3600s, valid_until: Wed Apr 15 19:30:01 GMT 2020}
+2020-04-15 18:30:01,802 DEBUG [io.qua.vau.run.con.VaultConfigSource] (main) loaded 1 properties from vault
+2020-04-15 18:30:02,722 DEBUG [io.qua.vau.run.VaultAuthManager] (Agroal_7305849841) extended login token: {clientToken: ***, renewable: true, leaseDuration: 3600s, valid_until: Wed Apr 15 19:30:02 GMT 2020}
+2020-04-15 18:30:03,274 INFO  [io.quarkus] (main) vault-quickstart 1.0.0-SNAPSHOT (powered by Quarkus 999-SNAPSHOT) started in 4.255s. Listening on: http://0.0.0.0:8080
+2020-04-15 18:30:03,276 INFO  [io.quarkus] (main) Profile prod activated.
+2020-04-15 18:30:03,276 INFO  [io.quarkus] (main) Installed features: [agroal, cdi, hibernate-orm, jdbc-postgresql, narayana-jta, resteasy, vault]
+
+
+
+

Notice in particular the following log line:

+
+
+
+
authenticate with jwt at: /var/run/secrets/kubernetes.io/serviceaccount/token => ***
+
+
+
+

Finally curl the private-key endpoint to make sure you can retrieve your secret:

+
+
+
+
curl http://localhost:30400/hello/private-key
+
+
+
+

You should see 123456.

+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-vault/dev/vault-datasource.html b/quarkus-vault/dev/vault-datasource.html new file mode 100644 index 0000000000..29a71214e9 --- /dev/null +++ b/quarkus-vault/dev/vault-datasource.html @@ -0,0 +1,1382 @@ + + + + + + Using HashiCorp Vault with Databases :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Using HashiCorp Vault with Databases

+
+
+
+

The most common use case when working with Vault is to keep confidential the database connection credentials. +There are several approaches that are supported in Quarkus, with different levels of sophistication +and security:

+
+
+
    +
  • +

    Property fetched from the KV Secret Engine using the Vault MicroProfile Config Source

    +
  • +
  • +

    Quarkus Credentials Provider

    +
  • +
  • +

    Vault Dynamic DB Credentials

    +
  • +
+
+
+

This guide aims at providing examples for each of those approaches. We will reuse the application implemented +in the Vault guide and enhance it with a simple persistence use case.

+
+
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    to complete the Vault guide

    +
  • +
  • +

    roughly 20 minutes

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    JDK 11+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    Docker installed

    +
  • +
+
+
+

Application

+
+

We assume the Vault guide application has been developed, a Vault container is running, and the root token is known. +In this section we are going to start a PostgreSQL database, and add a persistence service in the application.

+
+
+

Add the Hibernate and PostgreSQL extensions to the application:

+
+
+
+
mvn quarkus:add-extension -Dextensions="io.quarkus:quarkus-hibernate-orm,io.quarkus:quarkus-jdbc-postgresql"
+
+
+
+

Create a simple service:

+
+
+
+
@ApplicationScoped
+public class SantaClausService {
+
+    @Inject
+    EntityManager em;
+
+    @Transactional
+    public List<Gift> getGifts() {
+        return (List<Gift>) em.createQuery("select g from Gift g").getResultList();
+    }
+}
+
+
+
+

With its Gift entity:

+
+
+
+
@Entity
+public class Gift {
+
+    private Long id;
+    private String name;
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="giftSeq")
+    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;
+    }
+}
+
+
+
+

Finally, add a new endpoint in GreetingResource:

+
+
+
+
@Inject
+SantaClausService santaClausService;
+
+@GET
+@Path("/gift-count")
+@Produces(MediaType.TEXT_PLAIN)
+public int geGiftCount() {
+    return santaClausService.getGifts().size();
+}
+
+
+
+

Start a PostgreSQL database:

+
+
+
+
docker run --ulimit memlock=-1:-1 -it --rm=true --memory-swappiness=0 --name postgres-quarkus-hibernate -e POSTGRES_USER=sarah -e POSTGRES_PASSWORD=connor -e POSTGRES_DB=mydatabase -p 5432:5432 postgres:10.5
+
+
+
+

Now we are ready to configure Vault and Quarkus to be able to connect to this database from the application.

+
+
+
+
+
+

Vault MicroProfile Config Source

+
+
+

The simplest approach is to write the database password in the KV secret engine under the path that is +fetched from the Vault Config Source.

+
+
+

Open a new shell, docker exec in the Vault container and set the root token:

+
+
+
+
docker exec -it dev-vault sh
+export VAULT_TOKEN=s.5VUS8pte13RqekCB2fmMT3u2
+
+
+
+

Add a dbpassword property in the config path of the KV secret engine, beside the original a-private-key +property:

+
+
+
+
vault kv put secret/myapps/vault-quickstart/config a-private-key=123456 dbpassword=connor
+
+
+
+

Add the following configuration in Quarkus to use the value of property dbpassword as our database password:

+
+
+
+
# configure your datasource
+quarkus.datasource.db-kind = postgresql
+quarkus.datasource.username = sarah
+quarkus.datasource.password = ${dbpassword}
+quarkus.datasource.jdbc.url = jdbc:postgresql://localhost:5432/mydatabase
+
+# drop and create the database at startup (use `update` to only update the schema)
+quarkus.hibernate-orm.database.generation=drop-and-create
+
+
+
+

Compile and start the application:

+
+
+
+
./mvnw package
+java -jar target/quarkus-app/quarkus-run.jar
+
+
+
+

Test it with the gift-count endpoint:

+
+
+
+
curl http://localhost:8080/hello/gift-count
+
+
+
+

You should see:

+
+
+
+
0
+
+
+
+

This approach is certainly the simplest of all. It has also the big advantage of working with any subsystem +that requires a secret information in the configuration (i.e. not just Agroal). +The only drawback is that the password will never be fetched again from Vault after the initial property loading. +This means that if the db password was changed while running, the application would have to be restarted after +Vault has been updated with the new password. +This contrasts with the credentials provider approach, which fetches the password from Vault every time a connection +creation is attempted.

+
+
+
+
+

Credentials Provider

+
+
+

In this approach we introduce a new abstraction called the Credentials Provider that acts as an intermediary +component between the Agroal datasource and Vault. The additional configuration required is small, and it +has the major advantage of handling gracefully database password change while the application is running, +without any restart. Since all new connections go through the Credentials Provider to fetch their password, +we make sure we have a fresh value every time.

+
+
+

Create a new path (different than the config path) in Vault where the database password will be added:

+
+
+
+
vault kv put secret/myapps/vault-quickstart/db password=connor
+
+
+
+

Since we allowed read access on secret/myapps/vault-quickstart/* subpaths in the policy, there is nothing else +we have to do to allow the application to read it.

+
+
+

When fetching credentials from Vault that are intended to be used by the Agroal connection pool, we need +first to create a named Vault credentials provider in the application.properties:

+
+
+
+
quarkus.vault.credentials-provider.mydatabase.kv-path=myapps/vault-quickstart/db
+
+
+
+

This defines a credentials provider mydatabase that will fetch the password from key password +at path myapps/vault-quickstart/db.

+
+
+

The credentials provider can now be used in the datasource configuration, in place of the password +property:

+
+
+
+
# configure your datasource
+quarkus.datasource.db-kind = postgresql
+quarkus.datasource.username = sarah
+quarkus.datasource.credentials-provider = mydatabase
+quarkus.datasource.jdbc.url = jdbc:postgresql://localhost:5432/mydatabase
+
+
+
+

Recompile, start and test the gift-count endpoint. You should see 0 again.

+
+
+
+
+

Dynamic Database Credentials

+
+
+

The two previous approaches work well and are very popular. However they rely on a well known user configured +in the application (i.e. the database user), and the security comes from the confidentiality of the password. +If the password was stolen, we would have to change it in the database and in Vault. Regularly rotating passwords +is actually a very good practice to limit (in time) the impact of getting the password stolen.

+
+
+

A more sophisticated approach consists in letting Vault create and retire database accounts on a regular basis. +This is supported in Vault with the Database secret engine. A number +of databases are supported, such as PostgreSQL.

+
+
+

First we need to enable the database secret engine, configure the postgresql-database-plugin and create +the database role mydbrole (replace 10.0.0.3 by the actual host that is running the PostgreSQL container; +for simplicity we disabled TLS between Vault and the PostgreSQL database):

+
+
+
+
vault secrets enable database
+
+vault write database/config/mydb \
+    plugin_name=postgresql-database-plugin \
+    allowed_roles=mydbrole \
+    connection_url=postgresql://{{username}}:{{password}}@10.0.0.3:5432/mydatabase?sslmode=disable \
+    username=sarah \
+    password=connor
+
+cat <<EOF > vault-postgres-creation.sql
+CREATE ROLE "{{name}}" WITH LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}';
+GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO "{{name}}";
+GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public to "{{name}}";
+EOF
+
+vault write database/roles/mydbrole \
+    db_name=mydb creation_statements=@vault-postgres-creation.sql \
+    default_ttl=1h \
+    max_ttl=24h \
+    revocation_statements="ALTER ROLE \"{{name}}\" NOLOGIN;" \
+    renew_statements="ALTER ROLE \"{{name}}\" VALID UNTIL '{{expiration}}';"
+
+
+
+ + + + + +
+ + +
+

For this use case, user sarah configured above needs to be a PostgreSQL super user with the capability +to create users.

+
+
+
+
+

Then we need to give a read capability to the Quarkus application on path database/creds/mydbrole.

+
+
+
+
cat <<EOF | vault policy write vault-quickstart-policy -
+path "secret/data/myapps/vault-quickstart/*" {
+  capabilities = ["read", "create"]
+}
+path "database/creds/mydbrole" {
+  capabilities = [ "read" ]
+}
+EOF
+
+
+
+

Now that Vault knows how to create users in PostgreSQL, we just need to change the mydatabase credentials +provider to use credentials-role & credentials-mount.

+
+
+
+
quarkus.vault.credentials-provider.mydatabase.credentials-role=mydbrole
+quarkus.vault.credentials-provider.mydatabase.credentials-mount=database
+
+
+
+ + + + + +
+ + +
+

When using quarkus.hibernate-orm.database.generation=drop-create, objects get created with the applicative +user. Since a user will be created every time the applications starts, database objects will be created +with the first created user, then we will attempt to drop them on the second run with a different user that +is not the owner. As expected this will fail. As a result, it is recommended to use +quarkus.hibernate-orm.database.generation=update in this section.

+
+
+
+
+

Finally, we need to tell our Quarkus database configuration to recycle connections before the lease TTL we +configured in Vault. This will ensure the database connection will always use valid credentials.

+
+
+

In this example the default TTL is set to 1 hour, so we will recycle connections every 30 minutes:

+
+
+
+
quarkus.datasource.jdbc.max-lifetime=30m
+
+
+
+ + + + + +
+ + +
+

When using a reactive datasource you will need to use the quarkus.datasource.reactive.idle-timeout option instead.

+
+
+
+
+

Recompile with ./mvnw package, start and test the gift-count endpoint. You should see 0 again.

+
+
+

Notice in the logs:

+
+
+
+
2020-04-22 14:29:48,522 DEBUG [io.qua.vau.run.VaultDbManager] (Agroal_682171661) generated mydbrole credentials: {leaseId: database/creds/mydbrole/L6PxoI68gZDeVPXP0RAA4c0a, renewable: true, leaseDuration: 60s, valid_until: Wed Apr 22 14:30:48 CEST 2020, username: v-userpass-mydbrole-HeOMJCmy9coEnO2my2AR-1587558588, password:***}
+
+
+
+

If you connect to the PostgreSQL database, and list all users configured on mydatabase, you will see the +sarah super user, but also the technical users dynamically created by Vault:

+
+
+
+
docker exec -it postgres-quarkus-hibernate bash
+psql mydatabase sarah
+
+mydatabase=# \du
+                                                        List of roles
+                      Role name                      |                         Attributes                         | Member of
+-----------------------------------------------------+------------------------------------------------------------+-----------
+ sarah                                               | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
+ v-userpass-mydbrole-HeOMJCmy9coEnO2my2AR-1587558588 | Password valid until 2020-04-22 12:30:53+00                | {}
+ v-userpass-mydbrole-N2ITbBXxoqMQ3A3cZL88-1587558572 | Cannot login                                              +| {}
+                                                     | Password valid until 2020-04-22 12:30:37+00                |
+
+
+
+

As you can see 2 users have been created:

+
+
+
    +
  • +

    v-userpass-mydbrole-N2ITbBXxoqMQ3A3cZL88-1587558572 that has expired, which was created while we were executing the tests.

    +
  • +
  • +

    v-userpass-mydbrole-HeOMJCmy9coEnO2my2AR-1587558588 that is valid until 12:30:53.

    +
  • +
+
+
+

As expected, users have been created dynamically by Vault, with expiration dates, allowing a rotation to occur, +without breaking existing connections, allowing a greater level of security than the traditional +password based approaches.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-vault/dev/vault-generator.html b/quarkus-vault/dev/vault-generator.html new file mode 100644 index 0000000000..fe5cf0ada4 --- /dev/null +++ b/quarkus-vault/dev/vault-generator.html @@ -0,0 +1,1605 @@ + + + + + + Vault Generator :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Vault Generator

+
+

Overview

+
+
+

The generator is designed specifically for easily generating Java POJOs, and API classes that target Vault system and plugin APIs. It uses YAML files, referred to as a "specs", that each describe an API in very Java-centric terms.

+
+
+

Currently, the generator is used to generate the supported native Vault system apis and secret plugin apis. That being said, a long-term goal for the generator is that users with custom Vault plugins will be able to generate API objects for them as well.

+
+
+

The generator can be called directly from the command line, or via Maven using the exec-maven-plugin; the Quarkus Vault client uses the latter approach (while using the build-helper-maven-plugin to only regenerate when the specs are out of date).

+
+
+
+
+

What is generated?

+
+
+

The generator produces three main types for each API:

+
+
+
+
API
+
+

The main class for accessing an associated Vault API. Each method represents an endpoint of the associated API. All the methods are reactive and return a Smallrye Mutiny Uni. Internally, the API uses another generated class, a request factory, to build Vault API requests. The API either returns the unaltered response from Vault, or for certain endpoints, unwraps the useful data nested in the raw Vault response.

+
+
Request Factory
+
+

The API uses the request factory to build Vault API requests. It is also reactive and returns a Smallrye Mutiny Uni. The request factory is generated from the same spec as the API, and is designed to be used by the API. In general, it is not intended to be used directly by end users. Although, because Vault APIs are diverse and complex, it is possible that end users can use the request factory directly to build requests that can be modified in a way not directly supported by the API.

+
+
DTOs
+
+

The generator also produces DTO POJO classes that are used by the API to represent the data that is sent to and received from Vault. The DTO classes are generated from the same spec as the API and request factory, with many of them being implied by the request parameters or result types. Additionally, spec files can declare shared DTOs that can be used by multiple APIs. DTOs can also be enumerated types.

+
+
+
+
+
+
+

YAML Spec Format

+
+
+

The generator uses a YAML file to describe the API. The spec file is designed to be very Java-centric, while intending to be a fairly direct representation of the Vault API. The spec file is designed to be easily understood by Java developers with knowledge of Vault APIs.

+
+
+

All the Java types referenced in the spec support Java generics, including wildcards and type parameter bounds.

+
+
+

The spec file is divided into the following sections:

+
+
+
+
API
+
+

The API section describes the API itself, including the name, the Vault API path, wether the API is mountable at different paths, and base OTel tracing titles.

+
+
Operations
+
+

The operations section describes the API endpoints. Each operation is described in terms of its HTTP method, nested path, method parameters and result type. The parameters can used in a the path, query parameters or request body. The result type is can take a few forms, be it a "leased" result (the standard Vault response format), a plain DTO, or a raw binary/string value. Parameters and results can define "simple" DTOs inline as needed, refer to shared DTOs defined in the types section, or even refer to types defined in other specs or the client itself.

+
+
Types
+
+

The types section describes the DTOs used by the API. DTOs are described in terms of their fields, which are either primitive types, or other DTOs. DTOs can also be enumerated types.

+
+
Enums
+
+

The enums section describes the enumerated types used by the API. Enumerated types are described in terms of their values.

+
+
+
+
+

API Section

+
+

The API sections consists of the following fields:

+
+
+
+
name: # required
+category: # defaults to empty
+prefix: # defaults to "Vault"
+packageName: # defaults to "io.quarkus.vault.client.api"
+relativePackageName: # defaults to lowercase "<category>.<name>"
+traceNameTag: # defaults to lowecase "<name>"
+basePath: # defaults to empty
+mountable: # defaults to true
+namespaced: # defaults to true
+
+
+
+
+
name
+
+

The name of the API. This is used to generate the API class name, and is also used to generate the request factory class name. The full name of each class is prefixed with the prefix field and the capitalized category field.

+
+
category
+
+

The category of the API. This is used when forming the API class name, request factory class name and the Java package name all the types will be generated in. While it defaults to empty, it should be specified as secrets for secret plugins and as auth for authentication plugins.

+
+
prefix
+
+

The prefix used when forming the API class name and request factory class name. It defaults to Vault and probably should not be changed/specified.

+
+
packageName
+
+

The base Java package name for all types, not just those generated by the spec. It defaults to io.quarkus.vault.client.api and probably should not be changed/specified.

+
+
relativePackageName
+
+

The relative Java package name for all types generated by the spec. It defaults to the lowercase category field, followed by a dot, followed by the lowercase name field. It is relative to the packageName field.

+
+
traceNameTag
+
+

The OpenTelemetry trace name tag for the API. It defaults to the lowercase name field. The full tag for each operation is of the form "Vault [<category> (<traceNameTag>)] <operationTitle>". The operation title is generated by converting the operation name from camel-case to title-case.

+
+
basePath
+
+

The base path for the API. It defaults to empty. The base path is used to form the full path for each operation. The full path for each operation is of the form "<basePath>/<operationPath>". The operation path is specified for each operation.

+
+
mountable
+
+

Whether the API is mountable at different paths. It defaults to true. If true, each operation’s path will have a mount path injected in the approprate location. For all plugins this should be true. For system APIs (i.e., those under /sys) this should be false.

+
+
namespaced
+
+

Whether the API is namespaced. It defaults to true. If true, each operation’s request will have a namespace injected into each request according to the configuration of the VaultClient.

+
+
+
+
+
+

Operations Section

+
+

The operations section is an array of operation definitions. Each operation definition consists of the following fields:

+
+
+
+
name: # required
+method: # defaults to "GET" (one of "GET", "POST", "PUT", "PATCH", "DELETE", "LIST", "HEAD")
+path: # required if 'pathChoice` is not specified
+pathChoice: # required if 'path' is not specified
+trace: # defaults to title case of 'name'
+authenticated: # defaults to true
+namespaced: # defaults to true
+tokenFrom: # defaults to null
+wrapTTLFrom: # defaults to null
+bodyFrom: # defaults to null
+bodyType: # defaults to null
+queryFrom: # defaults to null
+headers: # defaults to an empty list
+typeParameters: # defaults to an empty list
+parameters: # defaults to an empty list
+result: # defaults to null
+recoverNotFound: # defaults to null
+
+
+
+
+
name
+
+

The name of the operation. This is used to generate the method name in the API class. It is also converted to title case and used as the operation title for OpenTelemetry tracing.

+
+
method
+
+

The HTTP method for the operation. It defaults to GET. The method specifies the HTTP method used for the operation as required by Vault.

+
+
path
+
+

The path for the operation. This is used to generate the full path for the operation. The full path is of the form "<basePath>/<path>". The path can contain parameters (specified as ':paramName`) that are replaced with the appropriate value from the operation’s parameters. The path will also contain a mount path is injected into the appropriate location if the API is mountable.

+
+
pathChoice
+
+

The patch choice field can be used in place of the path field to specify a choice of paths based on the value of a parameter. The path choice field is an array of path choice definitions. The path choice definition consists of the following fields:

+
+
+
param: # name of the parameter to use the value to select the path
+choices: # array of path choice values
+  value: # the value of the parameter that selects this path
+  path: # the path to use if the parameter has the specified value
+
+
+
+

The path field in each choice can be complex and and contain parameter references just like the main path field.

+
+
+
trace
+
+

The OpenTelemetry trace name tag for the operation. It defaults to the title case of the name field. The full tag for each operation is of the form "Vault [<category> (<traceNameTag>)] <operationTitle>".

+
+
authenticated
+
+

Whether the operation requires authentication. It defaults to true. If true, the operation will have a token injected into each request according to the configuration of the VaultClient.

+
+
namespaced
+
+

Whether the operation requires a namespace. It defaults to true. If true, the operation will have a namespace injected into each request according to the configuration of the VaultClient.

+
+
tokenFrom
+
+

If an operation parameter needs to be used as the token for the operation, this field can be used to specify the name of the parameter. If specified, the parameter will be used as the token for the operation, overriding the token injected by the VaultClient.

+
+
wrapTTLFrom
+
+

If the operation response is to be wrapped according to Vault response wrapping rules, this field can be used to specify the name of the parameter that contains the TTL for the wrapping.

+
+
bodyFrom
+
+

If the operation has a request body built solely from one or more parameters, this field can be used to specify the name of the parameters that contains the body. It is specified as a list of parameter names.

+
+
bodyType
+
+

If the operation has a request body that is a DTO declared elsewhere, this field specifies the full java type name for that type.

+
+
queryFrom
+
+

If the operation requires query parameters in the request URL, this field is a list of parameter names that should be used as query parameters. Each query parameter will use the parameter name as the query parameter name, and the parameter value as the query parameter value.

+
+
headers
+
+

If the operation requires additional headers in the request, this field is a map of header names to values. Each header value can be literal or specify a parameter name to use as the header value (using the :paramName syntax).

+
+
typeParameters
+
+

If the operation is a generic method, this field is a list of type parameter names to use for the method (possibly with bounds information if needed).

+
+
parameters
+
+

The parameters for the operation. This is an array of parameter definitions. Each parameter definition consists of the following fields:

+
+
+
name: # required (in camel case)
+serializedName: # defaults to the snake case of 'name'
+required: # defaults to false
+body: # defaults to false
+includeIn: # defaults to null can be "API" or "Factory"
+annotations: # defaults to an empty list
+type: # defaults to null, required if 'object' is not specified
+object: # defaults to null, required if 'type' is not specified
+
+
+
+
+
name
+
+

The name of the parameter. This is used to generate the parameter name in the API method and in other instances.

+
+
serializedName
+
+

The serialized name of the parameter. This is used when the parameter is included in the request body (using bodyFrom) or as a query parameter. It defaults to the snake case of the name field.

+
+
required
+
+

Whether the parameter is required. It defaults to false. If true, the parameter will not be nullable in the API method.

+
+
body
+
+

Whether the parameter is to be used as the request body. It defaults to false. If true, the parameter will be used as the request body and should be a DTO type.

+
+
includeIn
+
+

Where the parameter should be included. It defaults to null. If null, the parameter will be included in the API method and in the request factory method. If API, the parameter will only be included in the API method. If Factory, the parameter will only be included in the request factory method. This is a specialized parameter and very rarely should be used.

+
+
annotations
+
+

A list of Java annotations to add to the parameter.

+
+
type
+
+

The Java type of the parameter. This is required if the object field is not specified. The type must be defined in the types section of the spec (or elsewhere).

+
+
object
+
+

An inline POJO definition of the parameter type. This is required if the type field is not specified.

+
+
+
+
+
result
+
+

The result type for the operation. It defaults to null. The result type comes in three different forms (specified in the kind field):

+
+
+
leased
+
+

The result is a leased result. This is the standard Vault response format that returns an optional data field and an optional auth field along with other result properties. The generated Java method will return a wrapping result type (derived from the predefined VaultLeasedResult class) that has the data and auth properties defined by the result specification. The leased result definition consists of the following fields:

+
+
+
kind: leased
+data: # inline definition of data returned, required if `dataType` is not specified
+dataType: # name of the data type returned, required if `data` is not specified
+unwrapData: # defaults to false
+auth: # inline definition of auth returned, required if `authType` is not specified
+authType: # name of the auth type returned, required if `auth` is not specified
+unwrapAuth: # defaults to false
+unwrapUsing: # defaults to null
+unwrapUsingArguments: # defaults to an empty list
+unwrappedType: # defaults to null
+
+
+
+

The data and auth fields can be specified as inline POJO definitions or as type names. If specified as type names, the type must be defined in the types section of the spec (or elsewhere). If either of these are not specified the type defaults to a java.lang.Object.

+
+
+

Many of the Vault API leased responses do not provide much useful information. To allow defining the DTOs inline while not requiring users to "see" the wrapping type, results can specify "unwrapping". Specifying unwrapData to true will cause the API method to return the data or dataType value directly. Specifying unwrapAuth to true will cause the API method to return the auth or authType value directly. Finally, you can specify unwrapUsing, unwrapUsingArguments and unwrappedType to do custom unwrapping. Together unwrapUsing and unwrapUsingArguments specify a Java Code Block, while the unwrappedType specifies the type returned by the code block.

+
+
+
json
+
+

The result is a standard JSON value. This is used for operations that return a simple JSON value, such as the sys/health/info endpoint.

+
+
+
kind: json
+type: # required if `object` is not specified
+object: # inline definition of the object returned, required if `type` is not specified
+
+
+
+

Either the type or object field must be specified. If the type field is specified, the type must be defined in the types section of the spec (or elsewhere). If the object field is specified, it is an inline POJO definition.

+
+
+
raw
+
+

The result is a raw binary or string value. This is used for operations that return a raw binary or string value.

+
+
+
kind: raw
+type: # required
+
+
+
+

The type field must be specified and must be a Java type that is either byte[] or java.lang.String.

+
+
+
+
+
+
recoverNotFound
+
+

If the operation is expected to return a value instead of throwing a client error when a 404 is encountered, this field can be used to what, and how, that value is returned.The field is a map with the following fields:

+
+
+
using: # required
+arguments: # defaults to an empty list
+
+
+
+

The using and arguments fields are used to specify a Java Code Block that will be used to recover from the 404.

+
+
+
+
+
+
+

Types Section

+
+

The types section is an array of POJO definitions.

+
+
+
+

Enums Section

+
+

The enums section is an array of enumerated type definitions.Each enumerated type definition consists of the following fields:

+
+
+
+
name: # required
+values: # required
+
+
+
+
+

Methods Section

+
+

The methods section is an array of method definitions. Each method definition consists of the following fields:

+
+
+
+
name: # required
+returnType: # required
+typeParameters: # defaults to an empty list
+parameters: # defaults to an empty list
+body: # defaults to null
+bodyArguments: # defaults to an empty list
+annotations: # defaults to an empty list
+
+
+
+
+
name
+
+

The name of the method. This is used to generate the method name in the owning class.

+
+
returnType
+
+

The Java type of the method return value.

+
+
typeParameters
+
+

If the method is a generic method, this field is a list of type parameter names to use for the method (possibly with bounds information if needed).

+
+
parameters
+
+

The parameters for the method.This is a map of parameter names to Java types for each parameter.

+
+
+
parameters:
+  someParameter: java.lang.String
+  anotherParameter: java.lang.Integer
+
+
+
+
+
+
+
+
+
+

POJO Definitions

+
+
+

POJO definitions are specified in the Types Section or inline throughout different fields in the spec file. Inline POJO definitions are limited compared to those in the types section but still support a wide range of features, and they represent on the properties field of a full POJO definition.POJO definitions support of the following fields:

+
+
+
+
name: # required
+extends: # defaults to null
+implements: # defaults to an empty list
+annotations: # defaults to an empty list
+nested: # defaults to an empty list
+properties: # defaults to an empty list
+methods: # defaults to an empty list
+
+
+
+
+
name
+
+

The name of the POJO. This is used to generate the POJO class name.

+
+
extends
+
+

The name of class that this POJO extends; directly translates to the Java extends keyword.

+
+
implements
+
+

A list of interfaces that this POJO implements; directly translates to the Java implements keyword.

+
+
annotations
+
+

A list of Java Annotations to add to the POJO class.

+
+
nested
+
+

A list of nested POJO definitions. Nested POJOs are defined inline but still support all the properties of a full POJO definition.

+
+
properties
+
+

A list of properties definitions for the POJO.Each property definition consists of the following fields:

+
+
+
name: # required
+serializedName: # defaults to the snake case of 'name'
+type: # defaults to null, required if 'object' is not specified
+object: # defaults to null, required if 'type' is not specified
+annotations: # defaults to an empty list
+required: # defaults to false
+
+
+
+
+
name
+
+

The name of the property. This is used to generate the property name in the POJO class.

+
+
serializedName
+
+

The serialized name of the property.It defaults to the snake case of the name field.

+
+
type
+
+

The Java type of the property.This is required if the object field is not specified.The type must be defined in the types section of the spec (or elsewhere).

+
+
object
+
+

An inline POJO definition of the property type.This is required if the type field is not specified.

+
+
annotations
+
+

A list of Java Annotations to add to the property.

+
+
required
+
+

Whether the property is required.It defaults to false.If true, the property will not be nullable in the POJO class.

+
+
+
+
+
+
+
+
+
+

Java Annotations

+
+
+

Java annotations can be specified for POJOs, POJO properties, and POJO methods.Annotations are specified with the following fields:

+
+
+
+
type: # required
+members: # defaults to an empty list
+
+
+
+
+
type
+
+

The Java type of the annotation.

+
+
members
+
+

A map of annotation property members. Each property value is specified as:

+
+
+
format: # required
+arguments: # defaults to an empty list
+
+
+
+

Together the format and arguments fields are simplified Java Code Block initializing the annotation member.

+
+
+
+
+
+

Examples

+
+

Here is a Jackson JsonSerialize annotation for a POJO property:

+
+
+
+
type: com.fasterxml.jackson.databind.annotation.JsonSerialize
+members:
+- using: <type>com.example.SomeSerializer
+
+
+
+

which would produce a Java annotation similar to:

+
+
+
+
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.example.SomeSerializer;
+
+class SomeClass {
+    @JsonSerialize(using = SomeSerializer.class)
+    String someProperty;
+}
+
+
+
+
+
+
+

Java Code Blocks

+
+
+

The generator uses JavaPoet to generate Java code.JavaPoet uses CodeBlock classes to generate Java code, as the project puts it, "beautifully".This requires specifying Java types as arguments to the code block to ensure they are imported correctly.The spec file supports specifying a limited set of the JavaPoet parameters for any code blocks in the spec files.

+
+
+

The spec files supports code block using the following argument forms in the code block text:

+
+
+
+
$<name>:T
+
+

The value will be expected to be a Java type and will be replaced with the appropriate, imported, Java type name.

+
+
$<name>:S
+
+

The value will be treated as a string value, and will be replaced in the code block with a quoted and escaped version of the provided value.

+
+
$<name>:L
+
+

The value will be expected to be a literal value and will be replaced in the code block with the exact string.

+
+
+
+
+

Each code block will have arguments map or list.That specifies the value to use for each argument.When using a map format, argument <name>s are allowed, when using the list format no names can be specified.In either case the argument values can be in one of two formats.

+
+
+
+
<type>com.example.MyJavaType
+
+

Any value that starts with <type> will be treated as a Java type name and should only be used with arguments that are specified using the $<name>:T format.

+
+
String Value
+
+

All other values will be considered strings and can be used with arguments that are specified using the $<name>:S or $<name>:L formats.

+
+
+
+
+

Map vs List arguments

+
+

For code blocks that are expected to be complex, (e.g., method bodies in POJO definitions) the code block arguments will be specified as a map. For code blocks that expected to be simple (e.g., method return types) the code block arguments will be specified as a list.

+
+
+
+

Examples

+
+

Mapped Arguments

+
+

The following example is an excerpt from a POJO method definition that uses the map argument format:

+
+
+
+
# code block with map arguments (names must be specified)
+name: test
+returnType: java.io.StringReader
+body: |
+  $wrapped:T $name:L = new $wrapped:T($value:S);
+  return $name:L;
+bodyArguments:
+  wrapped: <type>java.io.StringReader
+  name: value
+  value: "hello world"
+
+
+
+

which generates the Java code similar to the following:

+
+
+
+
import java.io.StringReader;
+
+class SomeClass {
+    StringReader test() {
+        StringReader value = "hello world";
+        return value;
+    }
+}
+
+
+
+
+

List Arguments

+
+

The following example is an excerpt from an unwrapping code block that uses the list argument format:

+
+
+
+
# code block with list arguments (no names can be specified)
+unwrapUsing: return new $T(r.getData());
+unwrapUsingArguments:
+- <type>java.io.StringReader
+
+
+
+

which generates Java code similar to the following:

+
+
+
+
import java.io.StringReader;
+
+class SomeAPI {
+    Uni<StringReader> test() {
+        var request = buildRequest();
+        return request.map(r -> new StringReader(r.getData()));
+    }
+}
+
+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-vault/dev/vault-pki.html b/quarkus-vault/dev/vault-pki.html new file mode 100644 index 0000000000..3b08a3d7e9 --- /dev/null +++ b/quarkus-vault/dev/vault-pki.html @@ -0,0 +1,1279 @@ + + + + + + Using HashiCorp Vault’s PKI Secret Engine :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Using HashiCorp Vault’s PKI Secret Engine

+
+
+
+

Vault’s PKI Secret Engine generates dynamic X.509 certificates. It allows services to get certificates without +manually generating a private key and CSR, submitting to a CA, and waiting for signed certificate. The PKI secret +engine allows dynamically generating certificates, which has the following advantages over classic CA scenarios:

+
+
+
    +
  • +

    Generating certificates with short TTLs reduces the need for and/or size of CRLs.

    +
  • +
  • +

    Allows for ephemeral certificates that are generated upon application startup, stored in memory and discarded on shutdown.

    +
  • +
+
+
+

In this guide we cover the following:

+
+
+
    +
  • +

    setup: configuring the engine to generate certificates

    +
  • +
  • +

    generation: generating certificates using roles

    +
  • +
  • +

    revocation: revoking a previously generated certificate

    +
  • +
+
+ +
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    to complete the "Starting Vault" section of the Vault guide

    +
  • +
  • +

    roughly 15 minutes

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    JDK 11+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    Docker installed

    +
  • +
+
+
+
+
+

Setup

+
+
+

We assume there is a Vault running from the Vault guide, and the root token is known. +The first step consists of activating the PKI Secret Engine, and configuring a CA certificate +and private key:

+
+
+
+
docker exec -it dev-vault sh
+export VAULT_TOKEN=s.5VUS8pte13RqekCB2fmMT3u2
+
+vault secrets enable pki
+# ==> Success! Enabled the pki secrets engine at: pki/
+
+vault secrets tune -max-lease-ttl=8760h pki
+# ==> Success! Tuned the secrets engine at: pki/
+
+vault write pki/root/generate/internal \
+    common_name=my-website.com \
+    ttl=8760h
+# ==> Success! Configured CA with self-signed root
+# ==> Key              Value
+# ==> ---              -----
+# ==> certificate      -----BEGIN CERTIFICATE-----...
+# ==> expiration       1536807433
+# ==> issuing_ca       -----BEGIN CERTIFICATE-----...
+# ==> serial_number    7c:f1:fb:2c:6e:4d:99:0e:82:1b:08:0a:81:ed:61:3e:1d:fa:f5:29
+
+
+
+

This example configures the CA with an internal self-signed root certificate and associated key pair that is +managed by Vault. Alternatively, you can configure the CA with an existing key pair.

+
+
+ + + + + +
+ + +CA configuration can be done programmatically using VaultPKISecretEngine.generateRoot(GenerateRootOptions) +
+
+
+

With the CA configured we now require a role to be defined that determines what parameters are allowed when +generating certificates.

+
+
+

Here we create a role example-dot-com that allows certificates with the common name +allowed to be any subdomain of my-website.com.

+
+
+
+
vault write pki/roles/example-dot-com \
+    allowed_domains=my-website.com \
+    allow_subdomains=true \
+    max_ttl=72h
+# ==> Success! Data written to: pki/roles/example-dot-com
+
+
+
+ + + + + +
+ + +Role configuration can be done programmatically using +VaultPKISecretEngine.updateRole(String role, RoleOptions options) +
+
+
+
+
+

Generating Certificates

+
+
+

First, let’s create a simple Quarkus application with Vault and Jackson extensions:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.8.1:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=vault-pki-quickstart \
+    -DclassName="org.acme.quickstart.GreetingResource" \
+    -Dpath="/hello" \
+    -Dextensions="resteasy,vault,resteasy-jackson"
+cd vault-pki-quickstart
+
+
+
+

Now, configure access to Vault from the application.properties:

+
+
+
+
# vault url
+quarkus.vault.url=http://localhost:8200
+
+# vault authentication
+quarkus.vault.authentication.userpass.username=bob
+quarkus.vault.authentication.userpass.password=sinclair
+
+
+
+

We can then add a new endpoint that will allow us to generate a certificate using the configured CA & role:

+
+
+
+
@Path("/pki")
+@Produces(TEXT_PLAIN)
+@Consumes(TEXT_PLAIN)
+public class PKIResource {
+
+    @Inject
+    public VaultPKISecretEngine pkiSecretEngine;
+
+    @POST
+    @Path("/generate")
+    public String generate(String subdomain) {
+        GenerateCertificateOptions options = new GenerateCertificateOptions()
+            .setSubjectCommonName(subdomain + ".my-website.com");
+        GeneratedCertificate generated =  pkiSecretEngine.generateCertificate("example-dot-com",  options);
+        return generated.certificate.getData();
+    }
+}
+
+
+
+

After compiling and starting the Quarkus application, let’s generate a new certificate with a generated key pair:

+
+
+
+
curl -X POST --data 'a-subdomain' --header "Content-Type: text/plain"  http://localhost:8080/pki/generate
+
+# ==> -----BEGIN CERTIFICATE-----
+# ==> ...
+# ==> -----END CERTIFICATE-----
+
+
+
+

Alternatively we can generate a key pair and CSR locally and generate a certificate by having vault sign our CSR.

+
+
+

Let’s add a new method that accepts a CSR:

+
+
+
+
@POST
+@Path("/sign")
+public String sign(String csr) {
+    GenerateCertificateOptions options = new GenerateCertificateOptions();
+    SignedCertificate signed = pkiSecretEngine.signRequest("example-dot-com", csr, options);
+    return signed.certificate.getData();
+}
+
+
+
+

Now we can generate a CSR (e.g. using OpenSSL) and pass it to our /sign endpoint to sign and generate a +certificate from the CSR:

+
+
+
+
openssl req -newkey rsa:2048 -keyout example.key -out example.csr
+
+curl -X POST --data @example.csr --header "Content-Type: text/plain"  http://localhost:8080/pki/sign
+
+# ==> -----BEGIN CERTIFICATE-----
+# ==> ...
+# ==> -----END CERTIFICATE-----
+
+
+
+
+
+

Revoking Certificates

+
+
+

Let’s add another new method to our PKIResource:

+
+
+
+
@POST
+@Path("/revoke")
+public void revoke(String serialNumber) {
+    pkiSecretEngine.revokeCertificate(serialNumber);
+}
+
+
+
+

And revoke a previously generated certificate:

+
+
+
+
curl -X POST --data '1d:2e:c6:06:45:18:60:0e:23:d6:c5:17:43:c0:fe:46:ed:d1:50:be' --header "Content-Type: text/plain"  http://localhost:8080/pki/revoke
+# ==> No Data
+
+
+
+
+
+

Dynamically Mounting PKI Engines

+
+
+

Quarkus’s Vault PKI support includes that ability to mount & unmount PKI engines dynamically using +the VaultPKISecretEngineFactory & VaultSystemBackendEngine interfaces.

+
+
+

To enable, or mount, a new PKI engine at specific mount path you can use the +VaultSystemBackendEngine.enable method:

+
+
+
+
// Obtain interfaces via injection or other standard CDI method.
+VaultSystemBackendEngine systemBackendEngine = ...;
+VaultPKISecretEngineFactory pkiSecretEngineFactory = ...;
+
+// Mount a PKI engine at a specified path.
+EnableEngineOptions options = new EnableEngineOptions()
+  .setMaxLeaseTimeToLive("8760h");
+systemBackendEngine.enable(VaultSecretEngine.PKI, "pki-dyn", "A dynamic PKI engine", options);
+
+// Obtain an engine manager for the newly mounted PKI engine.
+VaultPKISecretEngine dynPkiSecretEngine = pkiSecretEngineFactory.engine("pki-dyn");
+
+// Use dynamically created engine as you please.
+dynPkiSecretEngine.generateRoot(new GenerateRootOptions());
+
+
+
+

To disable (aka unmount) a PKI engine at a specific path you simply use the VaultSystemBackendEngine.disable method:

+
+
+
+
systemBackendEngine.disable("pki-dyn");
+
+
+
+ + + + + +
+ + +If you want to test if a specific mount path is already in use you can use +VaultSystemBackendEngine.isEngineMounted(String). +
+
+
+
+
+

Conclusion

+
+
+

The PKI Secret Engine is a great tool for managing CAs and their provisioned certificates. +We have seen the most obvious functions of the interface but all of the methods and modes of Vault’s PKI secret +engine are supported, including:

+
+
+
    +
  • +

    Provisioning roles used to generate certificates.

    +
  • +
  • +

    Storing the root CA externally and issuing certificates from intermediate CAs.

    +
  • +
  • +

    Reading current CRLs for each provisioned engine instance.

    +
  • +
+
+
+

Feel free to look at the VaultPKISecretEngine & VaultPKISecretEngineFactory interfaces.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-vault/dev/vault-transit.html b/quarkus-vault/dev/vault-transit.html new file mode 100644 index 0000000000..cf2a944a78 --- /dev/null +++ b/quarkus-vault/dev/vault-transit.html @@ -0,0 +1,1273 @@ + + + + + + Using HashiCorp Vault’s Transit Secret Engine :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Using HashiCorp Vault’s Transit Secret Engine

+
+
+
+

Vault’s Transit Secret Engine offers an "encryption as a service" functionality. It allows to store encryption +keys into Vault, and provides services to encrypt/decrypt and sign/verify arbitrary pieces of data. This brings +several advantages, such as:

+
+
+
    +
  • +

    limited key exposure: keys never leave the Vault. Instead the data is sent to Vault to get +encrypted/decrypted/signed/verified.

    +
  • +
  • +

    reliable and consistent algorithms: algorithms are implemented by Vault. It supports a wide variety, and there is +only one implementation used for a given algorithm type, regardless of the client’s technology.

    +
  • +
  • +

    it relieves developers from having to embed cryptographic libraries into their applications.

    +
  • +
+
+
+

In the context of Quarkus, the main (non administration) services are being covered:

+
+
+
    +
  • +

    encrypt: encrypt some data and return the cipher text

    +
  • +
  • +

    decrypt: decrypt the cipher text and return the clear data

    +
  • +
  • +

    rewrap: reencrypt a cipher text using the most recent key version

    +
  • +
  • +

    sign: sign a piece of data

    +
  • +
  • +

    verify signature: verify that a signature is correct for a piece of data

    +
  • +
+
+ +
+
+
+

Prerequisites

+
+
+

To complete this guide, you need:

+
+
+
    +
  • +

    to complete the "Starting Vault" section of the Vault guide

    +
  • +
  • +

    roughly 15 minutes

    +
  • +
  • +

    an IDE

    +
  • +
  • +

    JDK 11+ installed with JAVA_HOME configured appropriately

    +
  • +
  • +

    Apache Maven 3.8.1+

    +
  • +
  • +

    Docker installed

    +
  • +
+
+
+
+
+

Setup

+
+
+

We assume there is a Vault running from the Vault guide, and the root token is known. +The first step consists in activating the Transit Secret Engine, and creating the different keys:

+
+
+
+
docker exec -it dev-vault sh
+export VAULT_TOKEN=s.5VUS8pte13RqekCB2fmMT3u2
+
+vault secrets enable transit
+# ==> Success! Enabled the transit secrets engine at: transit/
+
+vault write -f transit/keys/my-encryption-key
+# ==> Success! Data written to: transit/keys/my-encryption-key
+
+vault write transit/keys/my-sign-key type=ecdsa-p256
+# ==> Success! Data written to: transit/keys/my-sign-key
+
+
+
+

Note that you did not have to provide the key value. You only provide its name, and Vault will generate it for you and +keep it secured.

+
+
+

Once the keys have been created, we now need to create a policy that provides access for it:

+
+
+
+
cat <<EOF | vault policy write vault-transit-quickstart-policy -
+path "transit/encrypt/my-encryption-key" {
+  capabilities = [ "update" ]
+}
+path "transit/decrypt/my-encryption-key" {
+  capabilities = [ "update" ]
+}
+path "transit/sign/my-sign-key" {
+  capabilities = [ "update"]
+}
+path "transit/verify/my-sign-key" {
+  capabilities = [ "update" ]
+}
+EOF
+# ==> Success! Uploaded policy: vault-transit-quickstart-policy
+
+
+
+

And finally, let’s add the vault-transit-quickstart-policy to user bob that was created in the Vault guide:

+
+
+
+
vault write auth/userpass/users/bob password=sinclair policies=vault-quickstart-policy,vault-transit-quickstart-policy
+
+
+
+

To check that the configuration is correct, try logging in:

+
+
+
+
vault login -method=userpass username=bob password=sinclair
+
+
+
+

You should see:

+
+
+
+
Success! You are now authenticated. The token information displayed below
+is already stored in the token helper. You do NOT need to run "vault login"
+again. Future Vault requests will automatically use this token.
+
+Key                    Value
+---                    -----
+token                  s.s93BVzJPzBiIGuYJHBTkG8Uw
+token_accessor         OKNipTAgxWbxsrjixASNiwdY
+token_duration         768h
+token_renewable        true
+token_policies         ["default" "vault-quickstart-policy"]
+identity_policies      []
+policies               ["default" "vault-quickstart-policy"]
+token_meta_username    bob
+
+
+
+

Now set VAULT_TOKEN to the token above (instead of the root token), and try encrypting some data:

+
+
+
+
export VAULT_TOKEN=s.s93BVzJPzBiIGuYJHBTkG8Uw
+# note: "my secret data" in base64 is "bXkgc2VjcmV0IGRhdGEK"
+vault write transit/encrypt/my-encryption-key plaintext=bXkgc2VjcmV0IGRhdGEK
+
+
+
+

You should see:

+
+
+
+
Key           Value
+---           -----
+ciphertext    vault:v1:vIQxsLANFbcfKofJL55zjoIXV6MqAzvjKUUQLGg5pWTz0W2Qab/B4nEJaQ==
+
+
+
+
+
+

Encrypt and Decrypt

+
+
+

First, let’s create a simple Quarkus application with Vault and Jackson extensions:

+
+
+
+
mvn io.quarkus.platform:quarkus-maven-plugin:3.8.1:create \
+    -DprojectGroupId=org.acme \
+    -DprojectArtifactId=vault-transit-quickstart \
+    -DclassName="org.acme.quickstart.GreetingResource" \
+    -Dpath="/hello" \
+    -Dextensions="resteasy,vault,resteasy-jackson"
+cd vault-transit-quickstart
+
+
+
+

Now, configure access to Vault from the application.properties:

+
+
+
+
# vault url
+quarkus.vault.url=http://localhost:8200
+
+# vault authentication
+quarkus.vault.authentication.userpass.username=bob
+quarkus.vault.authentication.userpass.password=sinclair
+
+
+
+

Note that you did not need to specify the existence of a particular encryption key in the configuration. You only +do so in special cases such as specifying the key type for upsert, or changing the signature algorithm, …​ Check the complete configuration for more +information.

+
+
+

We can then add a new endpoint that will allow us to encrypt and decrypt data:

+
+
+
+
@Path("/transit")
+@Produces(TEXT_PLAIN)
+@Consumes(TEXT_PLAIN)
+public class TransitResource {
+
+    @Inject
+    public VaultTransitSecretEngine transitSecretEngine;
+
+    @POST
+    @Path("/encrypt")
+    public String encrypt(String clearData) {
+        return transitSecretEngine.encrypt("my-encryption-key", clearData);
+    }
+
+    @POST
+    @Path("/decrypt")
+    public String decrypt(String cipherText) {
+        return transitSecretEngine.decrypt("my-encryption-key", cipherText).asString();
+    }
+}
+
+
+
+

After compiling and starting the Quarkus application, let’s encrypt some data:

+
+
+
+
curl -X POST --data 'some secret data' --header "Content-Type: text/plain"  http://localhost:8080/transit/encrypt
+# ==> vault:v1:fN4P7WNjIegpb3lD/pSuhXvyONhGrI21gcKNcedk+5jpjguOw6JkqXYXlkY=
+
+
+
+

And decrypt back this cipher text:

+
+
+
+
curl -X POST --data 'vault:v1:fN4P7WNjIegpb3lD/pSuhXvyONhGrI21gcKNcedk+5jpjguOw6JkqXYXlkY=' --header "Content-Type: text/plain"  http://localhost:8080/transit/decrypt
+# ==> some secret data
+
+
+
+
+
+

Sign and Verify

+
+
+

Let’s add 2 new methods to our TransitResource:

+
+
+
+
@POST
+@Path("/sign")
+public String sign(String input) {
+    return transitSecretEngine.sign("my-sign-key", input);
+}
+
+public static class VerifyRequest {
+    public String signature;
+    public String input;
+}
+
+@POST
+@Path("/verify")
+@Consumes(APPLICATION_JSON)
+public Response verify(VerifyRequest request) {
+    transitSecretEngine.verifySignature("my-sign-key", request.signature, request.input);
+    return Response.accepted().build();
+}
+
+
+
+

And start signing some data:

+
+
+
+
curl -X POST --data 'some secret data' --header "Content-Type: text/plain"  http://localhost:8080/transit/sign
+# ==> vault:v1:MEUCIQDl+nE4y4E878bkugGG6FG1/RsttaQnoWfZHppeuk4TnQIgTGWTtMhVPCzN8VH/EEr2qp5h34lI1bnEP6L1F+QQoPI=
+
+
+
+

And finally, let’s make sure the signature is matching our input data:

+
+
+
+
curl -v -X POST --data '{"input":"some secret data","signature":"vault:v1:MEUCIQDl+nE4y4E878bkugGG6FG1/RsttaQnoWfZHppeuk4TnQIgTGWTtMhVPCzN8VH/EEr2qp5h34lI1bnEP6L1F+QQoPI="}' --header "Content-Type: application/json" http://localhost:8080/transit/verify
+# ==> ... < HTTP/1.1 202 Accepted
+
+
+
+
+
+

Conclusion

+
+
+

The Transit Secret Engine is a powerful tool in the enterprise. +We have seen the most obvious functions of the interface, but the rest of the methods or flavors +should not be overlooked:

+
+
+
    +
  • +

    For instance batch oriented methods are strongly recommended for mass operations (encrypt, decrypt, …​)

    +
  • +
  • +

    Transit contexts allow key derivation where one key is used to derive other keys for specific named contexts +(e.g. person names, person addresses, …​)

    +
  • +
  • +

    Rewrapping allows to reencrypt data with the most recent key version when the Vault administrator decides to +rotate keys

    +
  • +
+
+
+

Feel free to look at the VaultTransitSecretEngine interface plus the dedicated Transit Secret Engine configuration +properties in the Vault guide for all the details.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-web-bundler/dev/_images/logo.svg b/quarkus-web-bundler/dev/_images/logo.svg new file mode 100644 index 0000000000..43f63b9daa --- /dev/null +++ b/quarkus-web-bundler/dev/_images/logo.svg @@ -0,0 +1,75 @@ + + diff --git a/quarkus-web-bundler/dev/_images/web-bundler.png b/quarkus-web-bundler/dev/_images/web-bundler.png new file mode 100644 index 0000000000..05e99d0395 Binary files /dev/null and b/quarkus-web-bundler/dev/_images/web-bundler.png differ diff --git a/quarkus-web-bundler/dev/advanced-guides.html b/quarkus-web-bundler/dev/advanced-guides.html new file mode 100644 index 0000000000..89c712dfbf --- /dev/null +++ b/quarkus-web-bundler/dev/advanced-guides.html @@ -0,0 +1,1492 @@ + + + + + + Quarkus Web Bundler - Advanced Guides :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus logo Web Bundler - Advanced Guides

+
+

Web Root

+
+
+

The Web Root is src/main/resources/web, this is where the Web Bundler will look for stuff to bundle and serve.

+
+
+
+
+

Static files

+
+
+

There are 2 ways to add static files (fonts, images, music, video, …​) to your app: +- Files in src/main/resources/web/static/** will be served statically under http://localhost:8080/static/ (you can choose another directory name Config Reference). For convenience, those static files are excluded (marked as external) from the bundling by default. This allows to reference them from scripts or styles without errors (e.g. import '/static/foo.png';). +- Other files imported from scripts or styles will be bundled and processed by the configured loaders (see How is it bundled (Loaders)) allowing different options (like embedding them as data-url).

+
+
+
+
+

html templates rendering

+
+
+

The Web-Bundler is natively integrated with Qute to render html templates at build-time (this won’t affect runtime). This way you may create SPA out of the box. For this, just provide an index.html file (or any other .html file) in the src/main/resources/web directory.

+
+
+

Combined with the {#bundle /} tag, this file will be rendered with the scripts and styles tags to include in your html template. This file will be served as the default index file (e.g. http://localhost:8080/).

+
+
+ + + + + +
+ + +You can use the Qute config: namespace, it will be evaluated a build-time (runtime config will be ignored). +
+
+
+ + + + + +
+ + +This rendering option is happening at build time, so you won’t be able to access any Qute runtime data in this file. If you want to render data (for example in a server-side rendering app with htmx), you should add the Qute Web extension (or Renarde extension for MVC with Qute) and use src/main/resources/templates/ directory instead. The {#bundle /} tag will also work in this case. +
+
+
+
+
+

Bundling

+
+
+

By default, directory src/main/resources/web/app is destined to contain the scripts, styles and possibly assets for your app. It will be bundled and served into /static/bundle/main-[hash].[ext]. (see Entry-Points for more options).

+
+
+

Importing Web Dependencies

+
+

Once added in the pom.xml, the web dependencies can be imported and used with the ESM import syntax, they will automatically be bundled.

+
+
+ + + + + +
+ + +Web Dependencies (script and styles) need to be imported in order to be bundled, dead code will be eliminated during the build. +
+
+
+
web/app/script.js
+
+
import $ from 'jquery';
+import 'bootstrap/dist/css/bootstrap.css';
+
+$('.hello').innerText('Hello');
+
+
+
+

Styles can be also be imported from a scss file:

+
+
+
web/app/style.scss
+
+
@import "bootstrap/dist/scss/bootstrap.scss";
+
+
+
+
+

What is bundled

+
+

Indexing

+
+

Only what’s imported will be part of the resulting bundle, to make it easy, the Web Bundler will automatically generate an index importing all the files found in an entry-point directory.

+
+
+

Of course, you can also provide this index manually (named index.js,ts,jsx,tsx) and choose what to import. Example:

+
+
+
src/main/resources/web/app/index.js
+
+
import './my-script.js'
+import './my-style.scss'
+import './example.png'
+
+
+
+
+

Entry-Points

+
+

You may configure different entry-points (to generate different bundles):

+
+
+
src/main/resources/application.properties
+
+
quarkus.web-bundler.bundle.page-1=true (1)
+quarkus.web-bundler.bundle.page-2=true (2)
+
+
+
+ + + + + + + + + +
1Bundle src/main/resources/web/page-1/…​ into /static/bundle/page-1-[hash].[ext]
2Bundle src/main/resources/web/page-2/…​ into /static/bundle/page-2-[hash].[ext]
+
+
+

or customize the directory name and bundled file name (and possibly merge multiple directories into one bundle):

+
+
+
src/main/resources/application.properties
+
+
quarkus.web-bundler.bundle.foo=true (1)
+quarkus.web-bundler.bundle.bar=true (2)
+quarkus.web-bundler.bundle.bar.key=my-key
+quarkus.web-bundler.bundle.bar.dir=my-dir
+quarkus.web-bundler.bundle.baz=true (1)
+quarkus.web-bundler.bundle.baz.key=foo
+
+
+
+ + + + + + + + + +
1Bundle src/main/resources/web/foo/…​ and src/main/resources/web/baz/…​ together into /static/bundle/foo-[hash].[ext]
2Bundle src/main/resources/web/my-dir/…​ into /static/bundle/my-key-[hash].[ext]
+
+
+ + + + + +
+ + +By default, as soon as more than one entry-point key is configured, shared code and web dependencies are split off into a separate file. That way if the user first browses to one page and then to another page, they don’t have to download all the JavaScript for the second page from scratch if the shared part has already been downloaded and cached by their browser. The path of the shared static script is /static/bundle/chunk-[hash].js. This setup is perfect if you create an app with different pages using different scripts, libraries and styles. +
+
+
+
+
+

How is it bundled (Loaders)

+
+

Bases on the files extensions, the Web Bundler will use pre-configured loaders to bundle them. For scripts and styles, the default configuration should be enough.

+
+
+

For other assets (svg, gif, png, jpg, ttf, …​) imported from your scripts and styles using their relative path, you may choose the loader based on the file extension allowing different options (e.g. serving, embedding the file as data-url, binary, base64, …​). By default, they will automatically be copied and served using the file loader.

+
+
+

For example, url('./example.png') in a style or import example from './example.png'; in a script will be processed, the file will be copied with a static name and the path will be replaced by the new file static path (e.g. /static/bundle/assets/example-QH383.png). The example variable will contain the public path to this file to be used in a component img src for example.

+
+
+ + + + + +
+ + +For convenience, when using a file located in the static directory (e.g. url('/static/example.png'), the path will not be processed because all files under /static/** are marked as external (to be ignored from the bundling). Since /static/example.png will be served by Quarkus (See Static files), it is ok. +
+
+
+
+

SCSS, SASS

+
+

You can use scss or sass files out of the box. Local import are supported. Importing partials is also supported begin with _ (as in _code.scss imported with @import 'code';).

+
+
+
+

Server-Side Qute Components

+
+ + + + + +
+ + +This features requires quarkus-qute or quarkus-qute-web in the project (and this is not made to be used with the build-time template rendering). +
+
+
+

This is not always needed but if you need to add specific script and/or style to your Qute tags (Server Side Qute Components). This will help you do it elegantly.

+
+
+

To enable server-side components, add this in the application.properties:

+
+
+
+
quarkus.web-bundler.bundle.components=true
+quarkus.web-bundler.bundle.components.key=main (1)
+quarkus.web-bundler.bundle.components.qute-tags=true (2)
+
+
+
+ + + + + + + + + +
1use main to have a single merged bundle with the app (or remove this line to use qute-components as default)
2activate qute-tags support (default is false)
+
+
+

Here is a nice convention to define your components: src/main/resources/web/components/[name]/[name].{html,css,scss,js,ts,…​};. The scripts, styles and assets will be bundled, the html template will be usable as a Qute tag.

+
+
+

Example: +- src/main/resources/web/components/hello/hello.html +- src/main/resources/web/components/hello/hello.js +- src/main/resources/web/components/hello/hello.scss

+
+
+

This way you can use {#hello} in your templates and the scripts & styles will be bundled.

+
+
+ + + + + +
+ + +You may create different qute components groups to be used in different pages. +
+
+
+
+
+
+

Web Dependencies

+
+
+

The Web Bundler is integrated with NPM dependencies through MVNPM (default) (default) or WebJars. +Once added in the pom.xml the dependencies are directly available through import from the scripts and styles.

+
+
+

Using the Web Bundler, Web Dependencies are bundled, there is not point for the jars to be packaged in the resulting app. +Web Dependencies with provided scope (or compileOnly with Gradle) will not be packaged in the resulting app.

+
+
+

INFO: By default, the Web Bundler will fail at build time if it detects non compile only Web Dependencies. You can configure a flag to allow them but keep in mind that they will be served by Quarkus.

+
+
+ + + + + +
+ + +If you don’t import a Web Dependency from an entry-point (Indexing), it won’t be bundled (dead code elimination). +
+
+
+

MVNPM (default)

+
+

mvnpm (Maven NPM) is a maven repository facade on top of the NPM Registry.

+
+
+

Lookup for packages on https://mvnpm.org or https://www.npmjs.com/ then add them as web dependencies to your pom.xml:

+
+
+
pom.xml
+
+
...
+<dependencies>
+    ...
+    <dependency>
+        <groupId>org.mvnpm</groupId> (1)
+        <artifactId>jquery</artifactId> (2)
+        <version>3.7.0</version> (3)
+        <scope>provided</scope> (4)
+    </dependency>
+</dependencies>
+...
+
+
+
+ + + + + + + + + + + + + + + + + +
1use org.mvnpm or org.mvnpm.at.something for @something/dep
2All dependencies published on NPM are available
3Any published NPM version for your dependency
4Use provided scope to avoid having the dependency packaged in the target application
+
+
+

If a package or a version in not yet available in Maven Central:

+
+
+
    +
  • +

    You may use the mvnpm.org website to synchronize new versions with Maven Central (Click on the Maven Central icon)

    +
  • +
  • +

    If configured with the mvnpm repository, when requesting a dependency, it will inspect the registry to see if it exists and if it does, convert it to a Maven dependency and publish it to Maven Central so that future developers (and CI) won’t need the repository.

    +
  • +
+
+
+

Configure the mvnpm-repo profile in your ~/.m2/settings.xml: +.settings.xml

+
+
+
+
<settings>
+    <profiles>
+        <profile>
+            <id>mvnpm-repo</id>
+            <repositories>
+                <repository>
+                    <id>central</id>
+                    <name>central</name>
+                    <url>https://repo.maven.apache.org/maven2</url>
+                </repository>
+                <repository>
+                    <snapshots>
+                        <enabled>false</enabled>
+                    </snapshots>
+                    <id>mvnpm.org</id>
+                    <name>mvnpm</name>
+                    <url>https://repo.mvnpm.org/maven2</url>
+                </repository>
+            </repositories>
+        </profile>
+    </profiles>
+</settings>
+
+
+
+ + + + + +
+ + +I only use -Pmvnpm-repo when locking my project or updating mvnpm versions. +
+
+
+ + + + + +
+ + +In case of web dependencies versions conflicts, you can set the version to use for this dependency in the project dependencyManagement (even when using the locker). +
+
+
+
+

Node Modules for bundling

+
+

To deal with Web Dependencies, the Web Bundler manages a node_modules directory. The default location for it is the build direcotry (i.e. target/node_modules on Maven). For a good IDE support (detection of imports and types), you may use the project directory instead quarkus.web-bundler.dependencies.node-modules=node_modules and add the node_modules/ to the .gitignore, the IDE will look recursivelly in parent directories for imports and the Web Bundler too.

+
+
+
+

Locking dependencies

+
+

As the NPM ecosystem is over-using version ranges for dependencies, just a few npm dependencies can lead to a big amount of poms to download in order to get the right versions for your project. This leads to long lasting minutes of downloading poms when cloning or during CI. To solve this problem and also to make your build reproducible it is highly recommended to lock your web dependencies versions. This way it will be long only the first time and then it will be fast and reproducible.

+
+
+

Locking with Maven (mvnpm Locker Maven Plugin)

+
+

As Maven doesn’t provide a native version locking system, the mvnpm team has implemented a way to easily generate and use a locking pom.xml (BOM). The locker Maven Plugin will create a version locker BOM for your org.mvnpm and org.webjars dependencies. It is essential as NPM dependencies are over using ranges. After the locking, the quantity of files to download is considerably reduced (better for reproducibility, contributors and CI).

+
+
+

It is easy to set up and update, here is the documentation.

+
+
+
+

Locking with Gradle

+
+

Gradle provides a native version locking system, to install it, add this:

+
+
+
build.gradle
+
+
dependencyLocking {
+    lockAllConfigurations()
+}
+
+
+
+

Then run gradle dependencies --write-locks to generate the lockfile.

+
+
+
+
+

WebJars

+
+ + + + + +
+ + +Adding new dependencies or recent versions has to be done manually from their website. +
+
+
+

WebJars are client-side web libraries (e.g. jQuery & Bootstrap) packaged into JAR (Java Archive) files. You can browse the repository from the website.

+
+
+
application.properties
+
+
quarkus.web-bundler.dependencies.type=webjars
+
+
+
+
pom.xml
+
+
<dependency>
+    <groupId>org.webjars.npm</groupId>
+    <artifactId>jquery</artifactId>
+    <version>3.7.0</version>
+    <scope>provided</scope>
+</dependency>
+
+
+
+
+
+
+

Bundle Paths

+
+
+

After the bundling is done, the bundle files will be served by Quarkus under {quarkus.http.root-path}/static/bundle/…​ by default (Config Reference).

+
+
+

This may also be configured with an external URL (e.g. 'https://my.cdn.org/'), in which case, Bundle files will NOT be served by Quarkus and all resolved paths in the bundle and mapping will automatically point to this url (a CDN for example).

+
+
+

In production, it is a good practise to have a hash inserted in the scripts and styles file names (E.g.: main-XKHKUJNQ.js) to differentiate builds (make them static). This way they can be cached without a risk of missing the most recent builds.

+
+
+

In the Web Bundler, we also do it in dev mode, this way the app is as close as possible to production. You won’t have surprise when deploying a new version of your application.

+
+
+

To make it easy there are several ways to resolve the bundle files public paths from the templates and the code.

+
+
+

{#bundle /} tag

+
+

From any Qute template you can use the {#bundle /} tag to help insert the bundled scripts and styles in your html page. examples:

+
+
+
+
{#bundle /}
+Output:
+<script type="text/javascript" src="/static/bundle/main-[hash].js"></script>
+<link rel="stylesheet" media="screen" href="/static/bundle/main-[hash].css">
+
+{#bundle key="components"/}
+Output:
+<script type="text/javascript" src="/static/bundle/components-[hash].js"></script>
+<link rel="stylesheet" media="screen" href="/static/bundle/components-[hash].css">
+
+{#bundle tag="script"/}
+Output:
+<script type="text/javascript" src="/static/bundle/main-[hash].js"></script>
+
+{#bundle tag="style"/}
+Output:
+<link rel="stylesheet" media="screen" href="/static/bundle/main-[hash].css">
+
+{#bundle key="components" tag="script"/}
+Output:
+<script type="text/javascript" src="/static/bundle/components-[hash].js"></script>
+
+
+
+
+

Inject Bundle bean

+
+

This bean can be injected in the code:

+
+
+
+
@Inject
+Bundle bundle;
+
+...
+
+System.out.println(bundle.script("main"));
+System.out.println(bundle.style("main"));
+
+
+
+

or in a Qute template:

+
+
+
+
{inject:bundle.script("main")}
+{inject:bundle.style("main")}
+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-web-bundler/dev/config-reference.html b/quarkus-web-bundler/dev/config-reference.html new file mode 100644 index 0000000000..0da2044998 --- /dev/null +++ b/quarkus-web-bundler/dev/config-reference.html @@ -0,0 +1,1421 @@ + + + + + + Quarkus Web Bundler - Configuration Reference :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus logo Web Bundler - Configuration Reference

+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The directory in the resources which serves as root for the web assets

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_WEB_ROOT

+
+
+

string

web

+
+
+
+

Resources located in {quarkus.web-bundler.web-root}/{quarkus.web-bundler.static} will be served by Quarkus. This directory path is also used as prefix for serving (e.g. {quarkus.web-bundler.web-root}/static/foo.png will be served on {quarkus.http.root-path}/static/foo.png)

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_STATIC

+
+
+

string

static

+
+
+
+

When configured with an internal path (e.g. 'foo/bar'), Bundle files will be served on this path by Quarkus (prefixed by {quarkus.http.root-path}). When configured with an external URL (e.g. 'https://my.cdn.org/'), Bundle files will NOT be served by Quarkus and all resolved paths in the bundle and mapping will automatically point to this url (a CDN for example).

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_BUNDLE_PATH

+
+
+

string

static/bundle

+
+
+
+

Configure the file extensions using the js loader: https://esbuild.github.io/content-types/#javascript

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_LOADERS_JS

+
+
+

list of string

js,cjs,mjs

+
+
+
+

Configure the file extensions using the jsx loader: https://esbuild.github.io/content-types/#jsx

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_LOADERS_JSX

+
+
+

list of string

jsx

+
+
+
+

Configure the file extensions using the tsx loader: https://esbuild.github.io/content-types/#jsx

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_LOADERS_TSX

+
+
+

list of string

tsx

+
+
+
+

Configure the file extensions using the ts loader: https://esbuild.github.io/content-types/#typescript

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_LOADERS_TS

+
+
+

list of string

ts,mts,cts

+
+
+
+

Configure the file extensions using the css loader: https://esbuild.github.io/content-types/#css

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_LOADERS_CSS

+
+
+

list of string

css

+
+
+
+

Configure the file extensions using the local-css loader: https://esbuild.github.io/content-types/#css

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_LOADERS_LOCAL_CSS

+
+
+

list of string

.module.css

+
+
+
+

Configure the file extensions using the global-css loader: https://esbuild.github.io/content-types/#css

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_LOADERS_GLOBAL_CSS

+
+
+

list of string

+
+
+
+

Configure the file extensions using the file loader: https://esbuild.github.io/content-types/#file This loader will copy the file to the output directory and embed the file name into the bundle as a string.

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_LOADERS_FILE

+
+
+

list of string

aac,abw,arc,avif,avi,azw,bin,bmp,bz,bz2,cda,csv,yaml,yml,doc,docx,eot,epub,gz,gif,htm,html,ico,ics,jar,jpeg,jpg,jsonld,mid,midi,mp3,mp4,mpeg,mpkg,odp,ods,odt,oga,ogv,ogx,opus,otf,png,pdf,ppt,pptx,rar,rtf,svg,tar,tif,tiff,ttf,vsd,wav,weba,webm,webp,woff,woff2,xhtml,xls,xlsx,xml,xul,zip,3gp,3g2,7z

+
+
+
+

Configure the file extensions using the copy loader: https://esbuild.github.io/content-types/#copy

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_LOADERS_COPY

+
+
+

list of string

+
+
+
+

Configure the file extensions using the base64 loader: https://esbuild.github.io/content-types/#base64

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_LOADERS_BASE64

+
+
+

list of string

+
+
+
+

Configure the file extensions using the binary loader: https://esbuild.github.io/content-types/#binary

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_LOADERS_BINARY

+
+
+

list of string

+
+
+
+

Configure the file extensions using the dataurl loader: https://esbuild.github.io/content-types/#data-url

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_LOADERS_DATA_URL

+
+
+

list of string

+
+
+
+

Configure the file extensions using the empty loader: https://esbuild.github.io/content-types/#empty-file

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_LOADERS_EMPTY

+
+
+

list of string

+
+
+
+

Configure the file extensions using the text loader: https://esbuild.github.io/content-types/#text

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_LOADERS_TEXT

+
+
+

list of string

txt

+
+
+
+

Configure the file extensions using the json loader: https://esbuild.github.io/content-types/#json

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_LOADERS_JSON

+
+
+

list of string

json

+
+
+
+

This defines the list of external paths for esbuild (https://esbuild.github.io/api/#external). Instead of being bundled, the import will be preserved.

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_EXTERNAL_IMPORTS

+
+
+

list of string

{quarkus.http.root-path}static/*

+
+
+
+

Enable or disable bundle splitting (https://esbuild.github.io/api/#splitting) Code shared between multiple entry points is split off into a separate shared file (chunk) that both entry points import

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_BUNDLE_SPLITTING

+
+
+

boolean

true

+
+
+
+

Path to the node_modules directory (relative to the project root).

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_DEPENDENCIES_NODE_MODULES

+
+
+

string

node_modules will be in the build/target directory

+
+
+
+

Disable this option to allow using runtime web dependencies. When a runtime scope web dependency is used, the dependency will be present in the target app and served at runtime. When a compile only scope web dependency is used, the dependency will only be used at build time and will not be present in the target app. WARNING: Maven compile scope is considered as a runtime scope, use 'provided' for compile only. On Gradle, 'compileOnly' is compile only.

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_DEPENDENCIES_COMPILE_ONLY

+
+
+

boolean

true

+
+
+
+

When enabled, Quarkus will create redirections from {bundlePath}/{entryPointKey}.{js,css} to the corresponding file containing the unique hash. This is useful for fixed external access to the bundle files (fullstack microservices).

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_BUNDLE_REDIRECT

+
+
+

boolean

false

+
+
+
+

The default charset

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_CHARSET

+
+
+

Charset

UTF-8

+
+
+
+

Enable or disable this entry point. You can use this to use the map key as key and dir for this entry point.

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_BUNDLE__BUNDLE_

+
+
+

boolean

true

+
+
+
+

The directory for this entry point under the web root.

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_BUNDLE__BUNDLE__DIR

+
+
+

string

the bundle map key

+
+
+
+

The key for this entry point (use the same key as another to bundle them together).

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_BUNDLE__BUNDLE__KEY

+
+
+

string

the bundle map key

+
+
+
+

Indicate if this directory contains qute tags (as .html files) This is only available if the Quarkus Qute extension is in the project.

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_BUNDLE__BUNDLE__QUTE_TAGS

+
+
+

boolean

false

+
+
+
+
+ + + + + + + diff --git a/quarkus-web-bundler/dev/examples.html b/quarkus-web-bundler/dev/examples.html new file mode 100644 index 0000000000..e91cfb2413 --- /dev/null +++ b/quarkus-web-bundler/dev/examples.html @@ -0,0 +1,950 @@ + + + + + + Quarkus Web Bundler - Examples :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus logo Web Bundler - Examples

+
+
    +
  • +

    Quarkus Blast: Web Bundler, Renarde, htmx, hyperscript, Bootstrap

    +
  • +
  • +

    React: Web Bundler, React, React Bootstrap

    +
  • +
  • +

    Renotes: Web Bundler, Renarde, htmx, Bootstrap

    +
  • +
  • +

    jQuery: Web Bundler, jQuery, Bootstrap

    +
  • +
  • +

    Gradle jQuery: Gradle, Web Bundler, jQuery, Bootstrap

    +
  • +
  • +

    TODO Demo App: Web Bundler, Lit, Vaadin Web Components

    +
  • +
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-web-bundler/dev/includes/attributes.html b/quarkus-web-bundler/dev/includes/attributes.html new file mode 100644 index 0000000000..d62c38da98 --- /dev/null +++ b/quarkus-web-bundler/dev/includes/attributes.html @@ -0,0 +1,924 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-web-bundler/dev/includes/quarkus-web-bundler.html b/quarkus-web-bundler/dev/includes/quarkus-web-bundler.html new file mode 100644 index 0000000000..617eabdb65 --- /dev/null +++ b/quarkus-web-bundler/dev/includes/quarkus-web-bundler.html @@ -0,0 +1,1416 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

The directory in the resources which serves as root for the web assets

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_WEB_ROOT

+
+
+

string

web

+
+
+
+

Resources located in {quarkus.web-bundler.web-root}/{quarkus.web-bundler.static} will be served by Quarkus. This directory path is also used as prefix for serving (e.g. {quarkus.web-bundler.web-root}/static/foo.png will be served on {quarkus.http.root-path}/static/foo.png)

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_STATIC

+
+
+

string

static

+
+
+
+

When configured with an internal path (e.g. 'foo/bar'), Bundle files will be served on this path by Quarkus (prefixed by {quarkus.http.root-path}). When configured with an external URL (e.g. 'https://my.cdn.org/'), Bundle files will NOT be served by Quarkus and all resolved paths in the bundle and mapping will automatically point to this url (a CDN for example).

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_BUNDLE_PATH

+
+
+

string

static/bundle

+
+
+
+

Configure the file extensions using the js loader: https://esbuild.github.io/content-types/#javascript

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_LOADERS_JS

+
+
+

list of string

js,cjs,mjs

+
+
+
+

Configure the file extensions using the jsx loader: https://esbuild.github.io/content-types/#jsx

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_LOADERS_JSX

+
+
+

list of string

jsx

+
+
+
+

Configure the file extensions using the tsx loader: https://esbuild.github.io/content-types/#jsx

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_LOADERS_TSX

+
+
+

list of string

tsx

+
+
+
+

Configure the file extensions using the ts loader: https://esbuild.github.io/content-types/#typescript

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_LOADERS_TS

+
+
+

list of string

ts,mts,cts

+
+
+
+

Configure the file extensions using the css loader: https://esbuild.github.io/content-types/#css

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_LOADERS_CSS

+
+
+

list of string

css

+
+
+
+

Configure the file extensions using the local-css loader: https://esbuild.github.io/content-types/#css

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_LOADERS_LOCAL_CSS

+
+
+

list of string

.module.css

+
+
+
+

Configure the file extensions using the global-css loader: https://esbuild.github.io/content-types/#css

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_LOADERS_GLOBAL_CSS

+
+
+

list of string

+
+
+
+

Configure the file extensions using the file loader: https://esbuild.github.io/content-types/#file This loader will copy the file to the output directory and embed the file name into the bundle as a string.

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_LOADERS_FILE

+
+
+

list of string

aac,abw,arc,avif,avi,azw,bin,bmp,bz,bz2,cda,csv,yaml,yml,doc,docx,eot,epub,gz,gif,htm,html,ico,ics,jar,jpeg,jpg,jsonld,mid,midi,mp3,mp4,mpeg,mpkg,odp,ods,odt,oga,ogv,ogx,opus,otf,png,pdf,ppt,pptx,rar,rtf,svg,tar,tif,tiff,ttf,vsd,wav,weba,webm,webp,woff,woff2,xhtml,xls,xlsx,xml,xul,zip,3gp,3g2,7z

+
+
+
+

Configure the file extensions using the copy loader: https://esbuild.github.io/content-types/#copy

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_LOADERS_COPY

+
+
+

list of string

+
+
+
+

Configure the file extensions using the base64 loader: https://esbuild.github.io/content-types/#base64

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_LOADERS_BASE64

+
+
+

list of string

+
+
+
+

Configure the file extensions using the binary loader: https://esbuild.github.io/content-types/#binary

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_LOADERS_BINARY

+
+
+

list of string

+
+
+
+

Configure the file extensions using the dataurl loader: https://esbuild.github.io/content-types/#data-url

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_LOADERS_DATA_URL

+
+
+

list of string

+
+
+
+

Configure the file extensions using the empty loader: https://esbuild.github.io/content-types/#empty-file

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_LOADERS_EMPTY

+
+
+

list of string

+
+
+
+

Configure the file extensions using the text loader: https://esbuild.github.io/content-types/#text

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_LOADERS_TEXT

+
+
+

list of string

txt

+
+
+
+

Configure the file extensions using the json loader: https://esbuild.github.io/content-types/#json

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_LOADERS_JSON

+
+
+

list of string

json

+
+
+
+

This defines the list of external paths for esbuild (https://esbuild.github.io/api/#external). Instead of being bundled, the import will be preserved.

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_EXTERNAL_IMPORTS

+
+
+

list of string

{quarkus.http.root-path}static/*

+
+
+
+

Enable or disable bundle splitting (https://esbuild.github.io/api/#splitting) Code shared between multiple entry points is split off into a separate shared file (chunk) that both entry points import

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_BUNDLE_SPLITTING

+
+
+

boolean

true

+
+
+
+

Path to the node_modules directory (relative to the project root).

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_DEPENDENCIES_NODE_MODULES

+
+
+

string

node_modules will be in the build/target directory

+
+
+
+

Disable this option to allow using runtime web dependencies. When a runtime scope web dependency is used, the dependency will be present in the target app and served at runtime. When a compile only scope web dependency is used, the dependency will only be used at build time and will not be present in the target app. WARNING: Maven compile scope is considered as a runtime scope, use 'provided' for compile only. On Gradle, 'compileOnly' is compile only.

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_DEPENDENCIES_COMPILE_ONLY

+
+
+

boolean

true

+
+
+
+

When enabled, Quarkus will create redirections from {bundlePath}/{entryPointKey}.{js,css} to the corresponding file containing the unique hash. This is useful for fixed external access to the bundle files (fullstack microservices).

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_BUNDLE_REDIRECT

+
+
+

boolean

false

+
+
+
+

The default charset

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_CHARSET

+
+
+

Charset

UTF-8

+
+
+
+

Enable or disable this entry point. You can use this to use the map key as key and dir for this entry point.

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_BUNDLE__BUNDLE_

+
+
+

boolean

true

+
+
+
+

The directory for this entry point under the web root.

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_BUNDLE__BUNDLE__DIR

+
+
+

string

the bundle map key

+
+
+
+

The key for this entry point (use the same key as another to bundle them together).

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_BUNDLE__BUNDLE__KEY

+
+
+

string

the bundle map key

+
+
+
+

Indicate if this directory contains qute tags (as .html files) This is only available if the Quarkus Qute extension is in the project.

+
+
+

Environment variable: QUARKUS_WEB_BUNDLER_BUNDLE__BUNDLE__QUTE_TAGS

+
+
+

boolean

false

+
+
+
+
+ + + + + + + diff --git a/quarkus-web-bundler/dev/index.html b/quarkus-web-bundler/dev/index.html new file mode 100644 index 0000000000..717ea6efe8 --- /dev/null +++ b/quarkus-web-bundler/dev/index.html @@ -0,0 +1,1077 @@ + + + + + + Quarkus Web Bundler - Getting Started :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus logo Web Bundler - Getting Started

+
+
+
+

Create full-stack web apps and components with this Quarkus extension. It offers zero-configuration bundling and minification (with source-map) for your web app scripts (JS, JSX, TS, TSX), dependencies (jQuery, htmx, Bootstrap, Lit etc.), and styles (CSS, SCSS, SASS).

+
+
+

No need to install NodeJs, it relies on a Java wrapped version of esbuild. For libraries, all the NPM catalog is accessible through Maven or Gradle dependencies.

+
+
+
    +
  • +

    Easy to set up

    +
  • +
  • +

    Production build

    +
  • +
  • +

    Awesome Dev experience

    +
  • +
  • +

    Integrated with NPM dependencies through mvnpm or WebJars.

    +
  • +
  • +

    Build-time index.html rendering with bundled scripts and styles

    +
  • +
  • +

    Server Side Qute Components (Qute template + Script + Style)

    +
  • +
+
+
+ + + + + +
+ + +The Web Bundler has been pre-configured to reduce the complexity of web bundling. You don’t need to know all the concepts of web bundling (entry-points, loaders, …​) to use this extension, it has been pre-configured with sensible defaults that you may change if needed. +
+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.web-bundler:quarkus-web-bundler extension first to your build file.

+
+
+

For instance, with Maven, add the following dependency to your POM file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.web-bundler</groupId>
+    <artifactId>quarkus-web-bundler</artifactId>
+    <version>1.3.1</version>
+</dependency>
+
+
+
+
+
+

Usage

+
+
+

Add your web resources in src/main/resources/web:

+
+
+ +
+
+

Add Web Dependencies to the pom and import them (scripts and styles):

+
+
+
web/app/script.js
+
+
import $ from 'jquery';
+import 'bootstrap/dist/css/bootstrap.css';
+
+$('.hello').innerText('Hello');
+
+
+
+ + + + + +
+ + +If you don’t import a Web Dependency, it won’t be bundled (dead code elimination). +
+
+
+

Install the bundle in your index.html template:

+
+
+
web/index.html
+
+
<html>
+<head>
+  ...
+  {#bundle /}
+</head>
+</html>
+
+
+
+

Will compile into something looking like this:

+
+
+
+
<html>
+<head>
+      ...
+      <script type="text/javascript" src="/static/main-XKHKUJNQ.js"></script>
+      <link rel="stylesheet" media="screen" href="/static/main-TLNDARM3.css">
+</head>
+</html>
+
+
+
+

You are all set, enjoy!

+
+
+ + + + + +
+ + +By default {#bundle /} inserts both script and style tags for main, this is configurable. +
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-web-bundler/dev/main-concepts.html b/quarkus-web-bundler/dev/main-concepts.html new file mode 100644 index 0000000000..bf3eb2b846 --- /dev/null +++ b/quarkus-web-bundler/dev/main-concepts.html @@ -0,0 +1,983 @@ + + + + + + Quarkus Web Bundler - Main Concepts :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus logo Web Bundler - Main Concepts

+
+

How it works

+
+
+

It’s really simple, the web bundler:

+
+
+

Web Bundler schema

+
+
+
    +
  1. +

    Takes/watches your web resources and Web Dependencies.

    +
  2. +
  3. +

    Bundles it with the supersonic esbuild compiler (scss are also compiled if needed) and serves them.

    +
  4. +
  5. +

    Make it easy to create pages (.html) with the bundle scripts and styles using Qute or any other template engine.

    +
  6. +
+
+
+
+
+

Web Dependencies

+
+
+

Once added in the pom.xml the dependencies are directly available through import from the scripts and styles:

+
+
+
app.js
+
+
import $ from 'jquery';
+
+$('.hello').innerText('Hello');
+
+
+
+

Imported dependencies scripts and styles will be bundled.

+
+
+ + + + + +
+ + +Only imported dependencies (scripts and styles) will be bundled, dead code will be eliminated during the build. +
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-wiremock/0.x/includes/attributes.html b/quarkus-wiremock/0.x/includes/attributes.html new file mode 100644 index 0000000000..b327f93d7f --- /dev/null +++ b/quarkus-wiremock/0.x/includes/attributes.html @@ -0,0 +1,919 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-wiremock/0.x/includes/quarkus-wiremock.html b/quarkus-wiremock/0.x/includes/quarkus-wiremock.html new file mode 100644 index 0000000000..0c6f57e102 --- /dev/null +++ b/quarkus-wiremock/0.x/includes/quarkus-wiremock.html @@ -0,0 +1,1038 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

If DevServices has been explicitly enabled or disabled. DevServices is generally enabled by default, unless there is an existing configuration present.

+
+
+

Environment variable: QUARKUS_WIREMOCK_DEVSERVICES_ENABLED

+
+
+

boolean

true

+
+
+
+

Name of the WireMock Dev Service.

+
+
+

Environment variable: QUARKUS_WIREMOCK_DEVSERVICES_SERVICE_NAME

+
+
+

string

wiremock-server

+
+
+
+

Optional fixed port the dev service will listen to.

+
+
+

Environment variable: QUARKUS_WIREMOCK_DEVSERVICES_PORT

+
+
+

int

8089

+
+
+
+

Restart WireMock whenever Quarkus is reloaded. Otherwise, whenever files are changed in the files-mapping location you would need to manually +reload Quarkus.

+
+
+

Environment variable: QUARKUS_WIREMOCK_DEVSERVICES_RELOAD

+
+
+

boolean

false

+
+
+
+

Path to root dir with mappings and __files folders.

+
+
+

Environment variable: QUARKUS_WIREMOCK_DEVSERVICES_FILES_MAPPING

+
+
+

string

src/test/resources

+
+
+
+

If global response templating should be enabled for WireMock, see https://wiremock.org/2.x/docs/response-templating/

+
+
+

Environment variable: QUARKUS_WIREMOCK_DEVSERVICES_GLOBAL_RESPONSE_TEMPLATING

+
+
+

boolean

false

+
+
+
+
+ + + + + + + diff --git a/quarkus-wiremock/0.x/index.html b/quarkus-wiremock/0.x/index.html new file mode 100644 index 0000000000..8c7b639471 --- /dev/null +++ b/quarkus-wiremock/0.x/index.html @@ -0,0 +1,1160 @@ + + + + + + Quarkus WireMock :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus WireMock

+
+
+
+

Quarkus WireMock extension for tests and local development.

+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.wiremock:quarkus-wiremock extension first to your build file.

+
+
+

For instance, with Maven, add the following dependency to your POM file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.wiremock</groupId>
+    <artifactId>quarkus-wiremock</artifactId>
+    <version>0.1.2</version>
+    <scope>test</scope>
+</dependency>
+
+
+
+
+
+

Usage

+
+
+ + + + + +
+ + +The extension is designed to run in dev and test mode only! Please don’t specify any attributes applicable for the prod profile, otherwise unknown property warnings will show up when executing the production build. +
+
+
+

Example (default) configuration for testing and local development:

+
+
+
+
%dev,test.quarkus.wiremock.devservices.enabled=true
+%dev,test.quarkus.wiremock.devservices.reload=false
+%dev,test.quarkus.wiremock.devservices.files-mapping=src/test/resources
+%dev,test.quarkus.wiremock.devservices.port=8089
+%dev,test.quarkus.wiremock.devservices.service-name=wiremock-server
+%dev,test.quarkus.wiremock.devservices.global-response-templating=false
+
+
+
+
+
+

Testing

+
+
+

In addition, you might want to configure WireMock programmatically. To do so, please add the following dependency to the target project:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.wiremock</groupId>
+    <artifactId>quarkus-wiremock-test</artifactId>
+    <version>0.1.2</version>
+    <scope>test</scope>
+</dependency>
+
+
+
+

After that, you are able to inject a WireMock reference along with your test execution lifecycle has shown below:

+
+
+
+
@QuarkusTest
+@QuarkusTestResource(WireMockServerTestResource.class)
+class WireMockDevServiceResourceTest {
+
+    private static final String MOCK_MSG = "Hello from WireMock!";
+
+    @InjectWireMock
+    WireMock wiremock;
+
+    @Test
+    void testHelloEndpoint() {
+        Assertions.assertNotNull(wiremock);
+        wiremock.register(get(urlEqualTo("/mock-me"))
+            .willReturn(aResponse().withStatus(200).withBody(MOCK_MSG)));
+        ...
+    }
+
+}
+
+
+
+

You can also reuse a @QuarkusTest as a @QuarkusIntegrationTest:

+
+
+
+
@QuarkusIntegrationTest
+public class WireMockDevServiceResourceIT extends WireMockDevServiceResourceTest {
+    // re-use Quarkus tests as integration tests
+}
+
+
+
+
+
+

Extension Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

If DevServices has been explicitly enabled or disabled. DevServices is generally enabled by default, unless there is an existing configuration present.

+
+
+

Environment variable: QUARKUS_WIREMOCK_DEVSERVICES_ENABLED

+
+
+

boolean

true

+
+
+
+

Name of the WireMock Dev Service.

+
+
+

Environment variable: QUARKUS_WIREMOCK_DEVSERVICES_SERVICE_NAME

+
+
+

string

wiremock-server

+
+
+
+

Optional fixed port the dev service will listen to.

+
+
+

Environment variable: QUARKUS_WIREMOCK_DEVSERVICES_PORT

+
+
+

int

8089

+
+
+
+

Restart WireMock whenever Quarkus is reloaded. Otherwise, whenever files are changed in the files-mapping location you would need to manually +reload Quarkus.

+
+
+

Environment variable: QUARKUS_WIREMOCK_DEVSERVICES_RELOAD

+
+
+

boolean

false

+
+
+
+

Path to root dir with mappings and __files folders.

+
+
+

Environment variable: QUARKUS_WIREMOCK_DEVSERVICES_FILES_MAPPING

+
+
+

string

src/test/resources

+
+
+
+

If global response templating should be enabled for WireMock, see https://wiremock.org/2.x/docs/response-templating/

+
+
+

Environment variable: QUARKUS_WIREMOCK_DEVSERVICES_GLOBAL_RESPONSE_TEMPLATING

+
+
+

boolean

false

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-wiremock/dev/_images/plus-sign.svg b/quarkus-wiremock/dev/_images/plus-sign.svg new file mode 100644 index 0000000000..ea94fe7b0c --- /dev/null +++ b/quarkus-wiremock/dev/_images/plus-sign.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + image/svg+xml + + + + + + + + diff --git a/quarkus-wiremock/dev/_images/quarkus.svg b/quarkus-wiremock/dev/_images/quarkus.svg new file mode 100644 index 0000000000..1969e1e886 --- /dev/null +++ b/quarkus-wiremock/dev/_images/quarkus.svg @@ -0,0 +1 @@ +quarkus_icon_rgb_1024px_reverse \ No newline at end of file diff --git a/quarkus-wiremock/dev/_images/wiremock.svg b/quarkus-wiremock/dev/_images/wiremock.svg new file mode 100644 index 0000000000..2390edfac6 --- /dev/null +++ b/quarkus-wiremock/dev/_images/wiremock.svg @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/quarkus-wiremock/dev/includes/attributes.html b/quarkus-wiremock/dev/includes/attributes.html new file mode 100644 index 0000000000..61002b3a80 --- /dev/null +++ b/quarkus-wiremock/dev/includes/attributes.html @@ -0,0 +1,919 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-wiremock/dev/includes/quarkus-wiremock.html b/quarkus-wiremock/dev/includes/quarkus-wiremock.html new file mode 100644 index 0000000000..39eb07b3ea --- /dev/null +++ b/quarkus-wiremock/dev/includes/quarkus-wiremock.html @@ -0,0 +1,1028 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

If DevServices has been explicitly enabled or disabled. DevServices is generally enabled by default, unless there is an existing configuration present.

+
+
+

Environment variable: QUARKUS_WIREMOCK_DEVSERVICES_ENABLED

+
+
+

boolean

true

+
+
+
+

Optional fixed port the Dev Service will listen to. If not defined, the port will be chosen randomly.

+
+
+

WARNING: Only ports between 1025 and 65535 are permitted.

+
+
+

Environment variable: QUARKUS_WIREMOCK_DEVSERVICES_PORT

+
+
+

int

+
+
+
+

Restart WireMock whenever Quarkus is reloaded. Otherwise, whenever files are changed in the files-mapping location you would need to manually +reload Quarkus.

+
+
+

Environment variable: QUARKUS_WIREMOCK_DEVSERVICES_RELOAD

+
+
+

boolean

true

+
+
+
+

Path to root dir with mappings and __files folders.

+
+
+

Environment variable: QUARKUS_WIREMOCK_DEVSERVICES_FILES_MAPPING

+
+
+

string

src/test/resources

+
+
+
+

Response templating is enabled by default in WireMock 3, +with this setting response templating can be enabled globally.

+
+
+

Please refer to Response Templating for more details.

+
+
+

Environment variable: QUARKUS_WIREMOCK_DEVSERVICES_GLOBAL_RESPONSE_TEMPLATING

+
+
+

boolean

false

+
+
+
+
+ + + + + + + diff --git a/quarkus-wiremock/dev/index.html b/quarkus-wiremock/dev/index.html new file mode 100644 index 0000000000..62ad2c59cb --- /dev/null +++ b/quarkus-wiremock/dev/index.html @@ -0,0 +1,1243 @@ + + + + + + Quarkus WireMock :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus WireMock

+
+
+
+

Quarkus WireMock extension for tests and local development. +This extension starts WireMock as a Dev Service, thus it is designed to run in dev and test mode only!

+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.wiremock:quarkus-wiremock dependency to your build file first.

+
+
+

For instance, with Maven, add the following dependency to your POM file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.wiremock</groupId>
+    <artifactId>quarkus-wiremock</artifactId>
+    <version>1.3.0</version>
+    <scope>provided</scope>
+</dependency>
+
+
+
+
+
+

Usage

+
+
+

The extension comes with most reasonable defaults.

+
+
+
+
quarkus.wiremock.devservices.enabled=true
+quarkus.wiremock.devservices.reload=true
+quarkus.wiremock.devservices.files-mapping=src/test/resources
+quarkus.wiremock.devservices.global-response-templating=false
+
+
+
+ + + + + +
+ + +Due to its build time nature is totally fine that Quarkus prints unrecognized configuration key warnings when executing integration tests. +
+
+
+
+
+

Testing

+
+
+

Stubbing & Verifying

+
+

A core feature of WireMock is the ability to return HTTP responses for request matching criteria. You can configure stubs using JSON configuration files placed in the mappings and __files folders. +The root location of these folders can be defined via quarkus.wiremock.devservices.files-mapping. By default the root location points to src/test/resources.

+
+
+

In addition, you might want to configure WireMock’s stubbing and request matching behavior programmatically. To do so, please add the following dependency to your target project:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.wiremock</groupId>
+    <artifactId>quarkus-wiremock-test</artifactId>
+    <version>1.3.0</version>
+    <scope>test</scope>
+</dependency>
+
+
+
+

After that, a WireMock client reference can be injected along with your test execution lifecycle as shown below:

+
+
+
+
@QuarkusTest
+@ConnectWireMock
+class WireMockDevServiceResourceTest {
+
+    private static final String MOCK_MSG = "Hello from WireMock!";
+
+    WireMock wiremock; // will be injected automatically when the test class is annotated with @ConnectWireMock
+
+    @Test
+    void testHelloEndpoint() {
+        Assertions.assertNotNull(wiremock);
+        wiremock.register(get(urlEqualTo("/mock-me"))
+            .willReturn(aResponse().withStatus(200).withBody(MOCK_MSG)));
+        ...
+    }
+
+}
+
+
+
+ + + + + +
+ + +For more details please refer to the WireMock Stubbing & Verifying docs. +
+
+
+
+

Configuration retrieval

+
+

This Quarkus extension exposes configuration keys via Java constants (WireMockConfigKey). By doing so, the config values can be accessed more easily:

+
+
+
+
@QuarkusTest
+class WireMockDevServiceResourceTest {
+
+    // WireMockConfigKey is provided by the core module and does not require the `test` module dependency
+    @ConfigProperty(name = WireMockConfigKey.PORT)
+    Integer port; // the port WireMock server is listening on
+
+}
+
+
+
+

You can even access the WireMock Dev Service configuration values from within a Quarkus Integration Test:

+
+
+
+
@QuarkusIntegrationTest
+@ConnectWireMock
+class WireMockDevServiceResourceTest {
+
+    DevServicesContext devServicesContext;
+
+    @Test
+    void testWireMockDevServiceConfigPropagation() {
+        // Dev Service config gets propagated and is accessible via the ConfigProvider API
+        int port = ConfigProvider.getConfig().getValue(WireMockConfigKey.PORT, Integer.class);
+
+        // or via the Dev Service Context
+        int portDevSerCtx = Integer.parseInt(devServicesContext.devServicesProperties().get(WireMockConfigKey.PORT));
+        ...
+    }
+
+}
+
+
+
+ + + + + +
+ + +Please be aware that Dependency Injection (DI) works for specific types (DevServicesContext and WireMock) only. +The latter in particular is only available if the class has been annotated with @ConnectWireMock. +
+
+
+

You can also reuse a @QuarkusTest as a @QuarkusIntegrationTest where applicable:

+
+
+
+
@QuarkusIntegrationTest
+public class WireMockDevServiceResourceIT extends WireMockDevServiceResourceTest {
+    // re-use Quarkus tests as integration tests
+}
+
+
+
+

Further more this extension supports the configuration capabilities of Quarkus. This means you can reference WireMock configuration keys +within your custom properties via variable interpolation.

+
+
+
+
custom.config.wiremock.url=http://localhost:${quarkus.wiremock.devservices.port}/mock-me
+
+
+
+ + + + + +
+ + +Please refer to Property Expressions for further details. +
+
+
+
+
+
+

Extension Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

If DevServices has been explicitly enabled or disabled. DevServices is generally enabled by default, unless there is an existing configuration present.

+
+
+

Environment variable: QUARKUS_WIREMOCK_DEVSERVICES_ENABLED

+
+
+

boolean

true

+
+
+
+

Optional fixed port the Dev Service will listen to. If not defined, the port will be chosen randomly.

+
+
+

WARNING: Only ports between 1025 and 65535 are permitted.

+
+
+

Environment variable: QUARKUS_WIREMOCK_DEVSERVICES_PORT

+
+
+

int

+
+
+
+

Restart WireMock whenever Quarkus is reloaded. Otherwise, whenever files are changed in the files-mapping location you would need to manually +reload Quarkus.

+
+
+

Environment variable: QUARKUS_WIREMOCK_DEVSERVICES_RELOAD

+
+
+

boolean

true

+
+
+
+

Path to root dir with mappings and __files folders.

+
+
+

Environment variable: QUARKUS_WIREMOCK_DEVSERVICES_FILES_MAPPING

+
+
+

string

src/test/resources

+
+
+
+

Response templating is enabled by default in WireMock 3, +with this setting response templating can be enabled globally.

+
+
+

Please refer to Response Templating for more details.

+
+
+

Environment variable: QUARKUS_WIREMOCK_DEVSERVICES_GLOBAL_RESPONSE_TEMPLATING

+
+
+

boolean

false

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-zanzibar/dev/annotations.html b/quarkus-zanzibar/dev/annotations.html new file mode 100644 index 0000000000..6ba54de9d6 --- /dev/null +++ b/quarkus-zanzibar/dev/annotations.html @@ -0,0 +1,1081 @@ + + + + + + Quarkus Zanzibar Annotations :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Zanzibar Annotations

+
+
+
+

Zanzibar annotations are compatible with both of Quarkus' JAX-RS implementations, RESTEasy Reactive and RESTEasy (Classic).

+
+
+

The annotations are modeled after JAX-RS Role-Based Access Control annotations and will be familiar to those who have +used them. The main difference being that Zanzibar FGA annotations can dynamically determine their values from the +current HTTP request.

+
+
+
+
+

Resource Method Annotations

+
+
+

Zanzibar style authorization requires 4 distinct pieces of information: the object type & object id, +relation type and the user id. The extension provides resource method annotations to configure how the +object and relation properties are determined from the current HTTP request and uses the standard authentication +features of Quarkus to determine the user.

+
+
+

The resource method annotations can be placed on a single method or on a class to affect all methods of the class.

+
+
+

Object Type & ID Properties

+
+

The Zanzibar extension provides a number of annotations to determine the object type & id from the current request.

+
+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AnnotationDescriptionObject Id SourceObject Type Source

FGAPathObject

Dynamically inspects the HTTP request path parameters.

Request path parameter.

Annotation constant.

FGAQueryObject

Dynamically inspects the HTTP request query parameters.

Request query parameter.

Annotation constant.

FGAHeaderObject

Dynamically inspects the HTTP request header values.

Request header value.

Annotation constant.

FGARequestObject

Dynamically inspects the generic HTTP request properties.

Request property.

Annotation constant.

FGAObject

Statically provides both properties in the Zanzibar annotation.

Annotation constant.

Annotation constant.

+
+

While these annotations provide a large amount of options sometimes custom support will be needed; currently you can use FGARequestObject to achieve this. Any filter or other request interception method that runs before Zanzibar’s authorization filer can store a property against the current request and then extract the value using the FGARequestObject annotation.

+
+
+
+

Relation Type Properties

+
+

The relation is specified using a single annotation providing the relation as a constant.

+
+ +++++ + + + + + + + + + + + + + + +
AnnotationDescriptionRelation Type Source

FGARelation

Statically provides the relation type properties in the Zanzibar annotation.

Annotation constant.

+
+
+

User Type Properties

+
+

The user type is specified using a single annotation providing the type name as a constant.

+
+
+

Certain FGA implementations require the user to be provided as an object. For example instead of +providing a user with id some-user-id as simply some-user-id, it requires the user to be in +an object format such as user:some-user-id (for the user type is user).

+
+ +++++ + + + + + + + + + + + + + + +
AnnotationDescriptionRelation Type Source

FGAUserType

Statically provides the user type name in the Zanzibar annotation.

Annotation constant.

+
+ + + + + +
+ + +
User Object Type Requirements
+Currently only OpenFGA’s 1.1 schema requires users in object format. The @FGAUserType will be required for +all endpoints when using OpenFGA. +
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-zanzibar/dev/authzed-connector.html b/quarkus-zanzibar/dev/authzed-connector.html new file mode 100644 index 0000000000..fc15821fd3 --- /dev/null +++ b/quarkus-zanzibar/dev/authzed-connector.html @@ -0,0 +1,972 @@ + + + + + + Quarkus Zanzibar - Authzed Connector :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Zanzibar - Authzed Connector

+
+

Overview

+
+
+

The Authzed Connector provides access to Authzed server instances or their managed +authorization platform. +It relies upon the Quarkus Authzed Client.

+
+
+

Currently there is no connector specific setup or configuration beyond installing the connector dependency.

+
+
+

Visit the Quarkus Authzed Client project for details on configuring the client to connect to your server or the Authzed platform.

+
+
+
+
+

Installation

+
+
+

To connect to Authzed servers you need to add the Zanzibar Authzed connector.

+
+
+

For instance, with Maven, add the following dependency to your POM file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.zanzibar</groupId>
+    <artifactId>quarkus-zanzibar-authzed</artifactId>
+    <version>1.2.0</version>
+</dependency>
+
+
+
+

The connector depends on the required quarkus-zanzibar extension; its inclusion is optional.

+
+
+
+
+

Extension Configuration Reference

+
+
+

Currently there are no specific configuration options for the Authzed Connector.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-zanzibar/dev/includes/attributes.html b/quarkus-zanzibar/dev/includes/attributes.html new file mode 100644 index 0000000000..de70a32a44 --- /dev/null +++ b/quarkus-zanzibar/dev/includes/attributes.html @@ -0,0 +1,921 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-zanzibar/dev/includes/quarkus-zanzibar.html b/quarkus-zanzibar/dev/includes/quarkus-zanzibar.html new file mode 100644 index 0000000000..e340b8ef64 --- /dev/null +++ b/quarkus-zanzibar/dev/includes/quarkus-zanzibar.html @@ -0,0 +1,1051 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Whether the filter is enabled.

+
+
+

When enabled all endpoints must have a resolvable FGADynamicObject and FGARelation otherwise a FORBIDDEN will be returns to clients.

+
+
+

Environment variable: QUARKUS_ZANZIBAR_FILTER_ENABLED

+
+
+

boolean

true

+
+
+
+

Should access to resource methods without FGA annotations be denied.

+
+
+

Environment variable: QUARKUS_ZANZIBAR_FILTER_DENY_UNANNOTATED_RESOURCE_METHODS

+
+
+

boolean

true

+
+
+
+

Name used for authorization when the request is unauthenticated.

+
+
+

Environment variable: QUARKUS_ZANZIBAR_FILTER_UNAUTHENTICATED_USER

+
+
+

string

+
+
+
+

Maximum time an authorization check is allowed to take.

+
+
+

Environment variable: QUARKUS_ZANZIBAR_FILTER_TIMEOUT

+
+
+

Duration +

5S

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-zanzibar/dev/index.html b/quarkus-zanzibar/dev/index.html new file mode 100644 index 0000000000..7716181294 --- /dev/null +++ b/quarkus-zanzibar/dev/index.html @@ -0,0 +1,1241 @@ + + + + + + Quarkus Zanzibar :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Zanzibar

+
+

Overview

+
+
+

The Quarkus Zanzibar extension provides Zanzibar style Fine Grain +Authorization (FGA) capabilities for Quarkus' HTTP subsystems. An authorization filter and dedicated +annotations are provided to provide easy integration of Zanzibar style FGA into applications.

+
+
+

The extension only provides the framework and relies on dedicated connectors to communicate with specific +Zanzibar style servers.

+
+
+

Supported APIs and platforms:

+
+
+ +
+
+
+
+

Installation

+
+
+

Adding the quarkus-zanzibar extension to your project only provides access to the authorization and the annotations needed to configure authorization on your resource classes and methods.

+
+
+

To communicate with your selected server API you will need to add the Zanzibar connector for your selected server.

+
+ +
+
+
+

Basic Usage

+
+
+

Authorization Model

+
+

Given a model object Thing, and the following simple authorization model that give every owner both +read and write permissions.

+
+
+
+
## OpenFGA Syntax
+model
+    schema 1.1
+type user
+type thing
+    relations
+        define owner: [user]
+        ## permissions
+        define read as owner
+        define write as owner
+
+
+
+
+

Creating and Accessing Objects

+
+

With a suitable authorization model initialized in your selected server, Zanzibar uses JAX-RS annotations to +define the exact authorization details for resource methods.

+
+
+

Using the authorization model from above. The following resource methods allow any user to create new +things but only users with read access to fetch them; in this example this will be the owner of the Thing.

+
+
+
+
import java.security.Principal;
+import java.util.List;
+
+import jakarta.inject.Inject;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.QueryParam;
+
+import io.quarkiverse.zanzibar.Relationship;
+import io.quarkiverse.zanzibar.RelationshipManager;
+import io.quarkiverse.zanzibar.annotations.FGAPathObject;
+import io.quarkiverse.zanzibar.annotations.FGARelation;
+import io.quarkiverse.zanzibar.annotations.FGAUserType;
+import io.smallrye.mutiny.Uni;
+
+@Path("/things")
+class ThingResource {
+
+    @Inject
+    ThingRepository thingRepository;
+    @Inject (1)
+    RelationshipManager relationshipManager;
+    @Inject (2)
+    Principal principal;
+
+    @POST
+    @FGARelation(FGARelation.ANY) (3)
+    public Uni<Thing> createThing(@QueryParam("name") String name) {
+        return thingRepository.createThing(name)
+                .flatMap((thing) -> {
+                    (4)
+                    var relationship = new Relationship("thing", thing.getId(), "owner", principal.getName());
+                    (5)
+                    return relationshipManager.add(List.of(relationship))
+                            .map((unused) -> thing);
+                });
+    }
+
+    @GET
+    @Path("{id}")
+    @FGAPathObject(param = "id", type = "thing") (6)
+    @FGARelation("owner") (7)
+    @FGAUserType("user") (8)
+    public Uni<Thing> getThing(String id) {
+        return thingRepository.fetchThing(id);
+    }
+}
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
1Inject RelationshipManager to allow adding & removing relationships.
2Inject Principal for access to the current user id.
3FGARelation.ANY allows access for any user, disregarding the authorization model.
4Create a Relationship that defines the current user as the owner of the newly created Thing.
5Add the new thing’s owner relationship to the authorization model.
6Dynamically determine the id of the Thing to authorize from the id path parameter of the current HTTP request. Additionally, set the object type to thing as defined by the authorization model.
7Check if the current user has the owner relation for the thing dynamically determined by the @FGAPathObject.
8For implementations that require it, provide the user object type.
+
+
+
+

More Details

+
+

Zanzibar provides a number of annotations to determine the current object id and object type. The annotations +are detailed here.

+
+
+
+
+
+

Extension Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Whether the filter is enabled.

+
+
+

When enabled all endpoints must have a resolvable FGADynamicObject and FGARelation otherwise a FORBIDDEN will be returns to clients.

+
+
+

Environment variable: QUARKUS_ZANZIBAR_FILTER_ENABLED

+
+
+

boolean

true

+
+
+
+

Should access to resource methods without FGA annotations be denied.

+
+
+

Environment variable: QUARKUS_ZANZIBAR_FILTER_DENY_UNANNOTATED_RESOURCE_METHODS

+
+
+

boolean

true

+
+
+
+

Name used for authorization when the request is unauthenticated.

+
+
+

Environment variable: QUARKUS_ZANZIBAR_FILTER_UNAUTHENTICATED_USER

+
+
+

string

+
+
+
+

Maximum time an authorization check is allowed to take.

+
+
+

Environment variable: QUARKUS_ZANZIBAR_FILTER_TIMEOUT

+
+
+

Duration +

5S

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-zanzibar/dev/openfga-connector.html b/quarkus-zanzibar/dev/openfga-connector.html new file mode 100644 index 0000000000..7125bb80fc --- /dev/null +++ b/quarkus-zanzibar/dev/openfga-connector.html @@ -0,0 +1,972 @@ + + + + + + Quarkus Zanzibar - OpenFGA Connector :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Zanzibar - OpenFGA Connector

+
+

Overview

+
+
+

The OpenFGA Connector provides access to OpenFGA server instances or +Auth0’s managed authorization platform. +It relies upon the Quarkus OpenFGA Client.

+
+
+

Currently there is no connector specific setup or configuration beyond installing the connector dependency.

+
+
+

Visit the Quarkus OpenFGA Client project for details on configuring the client to connect to your server or the Authzed platform.

+
+
+
+
+

Installation

+
+
+

To connect to OpenFGA servers you need to add the Zanzibar OpenFGA connector.

+
+
+

For instance, with Maven, add the following dependency to your POM file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.zanzibar</groupId>
+    <artifactId>quarkus-zanzibar-openfga</artifactId>
+    <version>1.2.0</version>
+</dependency>
+
+
+
+

The connector depends on the required quarkus-zanzibar extension; its inclusion is optional.

+
+
+
+
+

Extension Configuration Reference

+
+
+

Currently there are no specific configuration options for the OpenFGA Connector.

+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-zeebe/0.x/_images/devservice.svg b/quarkus-zeebe/0.x/_images/devservice.svg new file mode 100644 index 0000000000..3d93e2835b --- /dev/null +++ b/quarkus-zeebe/0.x/_images/devservice.svg @@ -0,0 +1,16 @@ + + + + + + + Quarkus appquarkus-zeebehttpZeebe brokerdebugexportergrpcDev monitorhttphttp \ No newline at end of file diff --git a/quarkus-zeebe/0.x/_images/diagrams.excalidraw b/quarkus-zeebe/0.x/_images/diagrams.excalidraw new file mode 100644 index 0000000000..19c110c7a8 --- /dev/null +++ b/quarkus-zeebe/0.x/_images/diagrams.excalidraw @@ -0,0 +1,2627 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "https://excalidraw.com", + "elements": [ + { + "type": "rectangle", + "version": 537, + "versionNonce": 868243326, + "isDeleted": false, + "id": "W73vWyZN2Tgyn_Oa0HJsm", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1605, + "y": 445.5, + "strokeColor": "#495057", + "backgroundColor": "#ced4da", + "width": 200.00000000000009, + "height": 147.00000000000003, + "seed": 224718654, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "qGDpk7Jdju_xzHJl-Kd_n", + "type": "arrow" + }, + { + "id": "VEBDww6PkXybfnqfiZHNs", + "type": "arrow" + }, + { + "id": "uF8Vrvc6EKRzoZ2yPY2HA", + "type": "arrow" + } + ], + "updated": 1666700641671, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 203, + "versionNonce": 1098602110, + "isDeleted": false, + "id": "Dt-EY54EQkCLOxv7-ZX_Z", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1618, + "y": 452.5, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 70, + "height": 35, + "seed": 1203653777, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501265, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 1, + "text": "Test", + "baseline": 25, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Test" + }, + { + "type": "ellipse", + "version": 418, + "versionNonce": 661248098, + "isDeleted": false, + "id": "odO6q81WTBT5c_egP-wu8", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 5.996705855137247, + "x": 726.7850259288767, + "y": 501.6570252233714, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 36.13444500077782, + "height": 37.3663010803498, + "seed": 1464220305, + "groupIds": [ + "lr6SWU1ep3pURgt6XT6mE" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501266, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 461, + "versionNonce": 1057478334, + "isDeleted": false, + "id": "L38Hi-qzk90nqWe2JEEun", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 5.996705855137247, + "x": 728.6275478136519, + "y": 522.4501543421778, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 8.349246761543355, + "height": 14.78227295486365, + "seed": 1889714289, + "groupIds": [ + "lr6SWU1ep3pURgt6XT6mE" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501266, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0.13687289773021405, + -4.243059829636799 + ], + [ + -4.65367852282742, + -3.6955682387159143 + ], + [ + -8.212373863813141, + 1.7793476704928324 + ], + [ + -7.391136477431843, + 7.254263579701593 + ], + [ + -3.2849495455252367, + 10.12859443203619 + ], + [ + 0.13687289773021405, + 10.539213125226851 + ], + [ + 0, + 0 + ] + ] + }, + { + "type": "line", + "version": 532, + "versionNonce": 1997831202, + "isDeleted": false, + "id": "d_FJ6zYfE37bM8WP5_2ie", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 5.996705855137247, + "x": 764.1249916583897, + "y": 509.7613050775677, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 8.156126449642073, + "height": 14.78227295486365, + "seed": 473139793, + "groupIds": [ + "lr6SWU1ep3pURgt6XT6mE" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501266, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -0.13370699097772942, + -4.243059829636799 + ], + [ + 4.546037693243122, + -3.6955682387159143 + ], + [ + 8.022419458664343, + 1.7793476704928324 + ], + [ + 7.220177512797915, + 7.254263579701593 + ], + [ + 3.20896778346574, + 10.12859443203619 + ], + [ + -0.13370699097772942, + 10.539213125226851 + ], + [ + 0, + 0 + ] + ] + }, + { + "type": "line", + "version": 529, + "versionNonce": 261771006, + "isDeleted": false, + "id": "EGsjAMGaVKppepqXK7n-A", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 5.996705855137247, + "x": 720.2199587075833, + "y": 513.6542529155352, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 40.78812352360524, + "height": 21.489044943644387, + "seed": 315627569, + "groupIds": [ + "lr6SWU1ep3pURgt6XT6mE" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501266, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0.8212373863813136, + -10.949831818417493 + ], + [ + 9.854848636575767, + -19.299078579960877 + ], + [ + 20.53093465953285, + -21.489044943644387 + ], + [ + 31.617639375680596, + -19.299078579960877 + ], + [ + 37.91379267127064, + -13.276671079831232 + ], + [ + 40.10375903495415, + -6.980517784241172 + ], + [ + 40.78812352360524, + -1.0949831818417408 + ] + ] + }, + { + "type": "line", + "version": 655, + "versionNonce": 154445794, + "isDeleted": false, + "id": "11aEON5TMNNITurfC38cz", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 5.996705855137247, + "x": 728.6365079801126, + "y": 531.3268533765479, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 15.329764545784533, + "height": 7.254263579701606, + "seed": 106949137, + "groupIds": [ + "lr6SWU1ep3pURgt6XT6mE" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501266, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 1.3672496725532823, + 3.7149018015166426 + ], + [ + 5.127836505444835, + 6.406784042582821 + ], + [ + 10.67608602295711, + 7.254263579701606 + ], + [ + 15.329764545784533, + 5.06429721601811 + ] + ] + }, + { + "type": "ellipse", + "version": 388, + "versionNonce": 1337179966, + "isDeleted": false, + "id": "21xg8tdMdsbYwtjSfw2EK", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 5.996705855137247, + "x": 742.3114460346991, + "y": 531.5315513179764, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 6.56989909105051, + "height": 3.148076647795045, + "seed": 2145026033, + "groupIds": [ + "lr6SWU1ep3pURgt6XT6mE" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501266, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 403, + "versionNonce": 98130850, + "isDeleted": false, + "id": "e5XEVbceQ4BCEXBSOAZaj", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 733.8481096866503, + "y": 521.8278874313669, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 7.928068798346042, + "height": 5.20386742722378, + "seed": 2101828049, + "groupIds": [ + "lr6SWU1ep3pURgt6XT6mE" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501266, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0.5836018059876391, + -3.5886753742749278 + ], + [ + 2.5442168294536334, + -5.203867427223781 + ], + [ + 6.1838936627098935, + -4.614834436996752 + ], + [ + 7.928068798346042, + -1.6151920529488741 + ] + ] + }, + { + "type": "rectangle", + "version": 567, + "versionNonce": 1672816510, + "isDeleted": false, + "id": "LGTXdkJBrSWCYmVKRuAIq", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 718.2648585626797, + "y": 549.4763461009916, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 55.36534481123195, + "height": 33.25148988662913, + "seed": 1337849777, + "groupIds": [ + "lr6SWU1ep3pURgt6XT6mE" + ], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "j1_co9Ikv7n5rlvyjCBwA", + "type": "arrow" + }, + { + "id": "PLi_LaaovZupU81HN6gAQ", + "type": "arrow" + } + ], + "updated": 1666700501266, + "link": null, + "locked": false + }, + { + "type": "ellipse", + "version": 369, + "versionNonce": 993105762, + "isDeleted": false, + "id": "nKE66Ew9vgIbjPCu2Ier6", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 743.4406427531586, + "y": 562.7463581610111, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 5.488109981288296, + "height": 5.488109981288296, + "seed": 962976145, + "groupIds": [ + "lr6SWU1ep3pURgt6XT6mE" + ], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1666700501266, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 562, + "versionNonce": 2078246846, + "isDeleted": false, + "id": "rifUAIMouVqr2s4C02JeA", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 718.9207093963055, + "y": 493.19947899335716, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 9.716454034757207, + "height": 13.910185341047512, + "seed": 1266057073, + "groupIds": [ + "lr6SWU1ep3pURgt6XT6mE" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501266, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 3.5987481737131652, + -1.4646068148832327 + ], + [ + 3.0547513567565403, + -3.8289006731947737 + ], + [ + 3.703362946204823, + -6.768575780210462 + ], + [ + 3.0756743112548577, + -11.371625769843526 + ], + [ + -1.6362303865257921, + -13.910185341047516 + ], + [ + -6.0130910885523825, + -11.854174793929992 + ], + [ + -5.921196123027958, + -5.722428055293868 + ], + [ + -3.2290170696486733, + -2.9383540363905993 + ], + [ + -0.6799960211957519, + -1.516914201129076 + ], + [ + 0, + 0 + ] + ] + }, + { + "type": "line", + "version": 329, + "versionNonce": 1502370594, + "isDeleted": false, + "id": "IiG6fZ_Wbw4cMCfbN7vez", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 713.1804027916907, + "y": 492.56325898330806, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 3.5673637419656354, + "height": 5.868888736782174, + "seed": 70740305, + "groupIds": [ + "lr6SWU1ep3pURgt6XT6mE" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501266, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -3.5673637419656354, + 5.868888736782174 + ] + ] + }, + { + "type": "line", + "version": 360, + "versionNonce": 408150014, + "isDeleted": false, + "id": "8iKU6muMwehz65eLvYNkK", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 708.2784429191952, + "y": 486.5362732242793, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 7.7101087326354065, + "height": 0.3452287492224806, + "seed": 754980657, + "groupIds": [ + "lr6SWU1ep3pURgt6XT6mE" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501267, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -7.7101087326354065, + 0.3452287492224806 + ] + ] + }, + { + "type": "line", + "version": 311, + "versionNonce": 794339042, + "isDeleted": false, + "id": "NGP-pdck7Won6ARDtjA8E", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 711.2547040366665, + "y": 480.4297429969406, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 5.638736237300519, + "height": 4.948278738855558, + "seed": 2016938257, + "groupIds": [ + "lr6SWU1ep3pURgt6XT6mE" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501267, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -5.638736237300519, + -4.948278738855558 + ] + ] + }, + { + "type": "line", + "version": 314, + "versionNonce": 219361342, + "isDeleted": false, + "id": "nXX62IWHz1pjkU3EzAFk0", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 720.1993007965151, + "y": 477.4521732489637, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 1.2658387471490966, + "height": 7.019651234190448, + "seed": 1599520497, + "groupIds": [ + "lr6SWU1ep3pURgt6XT6mE" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501267, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 1.2658387471490966, + -7.019651234190448 + ] + ] + }, + { + "type": "line", + "version": 323, + "versionNonce": 1696955042, + "isDeleted": false, + "id": "SPFo_pGlitw6lULmyVmWV", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 724.7506248831811, + "y": 482.97123182233054, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 7.940261232117059, + "height": 0.23015249948165384, + "seed": 1088665809, + "groupIds": [ + "lr6SWU1ep3pURgt6XT6mE" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501267, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 7.940261232117059, + -0.23015249948165384 + ] + ] + }, + { + "type": "line", + "version": 356, + "versionNonce": 100563070, + "isDeleted": false, + "id": "7Djo68wi3WsUHwpme0xkl", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 716.0048743656337, + "y": 484.0476252077144, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 1.4880243108912152, + "height": 4.436421832779961, + "seed": 1047951025, + "groupIds": [ + "lr6SWU1ep3pURgt6XT6mE" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501267, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -0.6200101295379938, + 2.495487280938722 + ], + [ + 0.8680141813532214, + 4.436421832779961 + ] + ] + }, + { + "type": "line", + "version": 318, + "versionNonce": 966907490, + "isDeleted": false, + "id": "n4kg5mvT7CcyZJqwgNzoF", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 718.4926552462973, + "y": 496.19750668124607, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 4.075325602520659, + "height": 2.038206258440234, + "seed": 1521907857, + "groupIds": [ + "lr6SWU1ep3pURgt6XT6mE" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501267, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 4.075325602520659, + -2.038206258440234 + ] + ] + }, + { + "type": "line", + "version": 328, + "versionNonce": 181844158, + "isDeleted": false, + "id": "3Y4FDJRkVBTNZkJN6zM3a", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 720.592639401812, + "y": 496.4989775989595, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 2.64675374403902, + "height": 1.4959912466307506, + "seed": 1465597553, + "groupIds": [ + "lr6SWU1ep3pURgt6XT6mE" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501267, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 2.64675374403902, + -1.4959912466307506 + ] + ] + }, + { + "type": "line", + "version": 355, + "versionNonce": 1033681442, + "isDeleted": false, + "id": "W4KFnUVZ4MZ1UI5QLxJqj", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 719.947006152363, + "y": 497.8173081833645, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 1.9562962455940565, + "height": 1.2658387471490966, + "seed": 1395411025, + "groupIds": [ + "lr6SWU1ep3pURgt6XT6mE" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501267, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 1.9562962455940565, + -1.2658387471490966 + ] + ] + }, + { + "type": "line", + "version": 517, + "versionNonce": 54325502, + "isDeleted": false, + "id": "ieugDVEk6RVxkXOY0ouFh", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 5.809351980489753, + "x": 753.8350253442239, + "y": 517.6740982277106, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 7.532865383426903, + "height": 5.20386742722378, + "seed": 671159857, + "groupIds": [ + "lr6SWU1ep3pURgt6XT6mE" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501267, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -0.554510052050361, + -3.5886753742749278 + ], + [ + -2.4173910910714653, + -5.203867427223781 + ], + [ + -5.875634999072972, + -4.614834436996752 + ], + [ + -7.532865383426902, + -1.6151920529488741 + ] + ] + }, + { + "type": "line", + "version": 660, + "versionNonce": 268772834, + "isDeleted": false, + "id": "RCQqfbzoM-C8-Y3fUgU57", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 774.2063861747871, + "y": 582.0065240985288, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 72.39791392451355, + "height": 4.959011366833817, + "seed": 146876433, + "groupIds": [ + "lr6SWU1ep3pURgt6XT6mE" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501267, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 7.708337390710312, + 0.5734911104501723 + ], + [ + 6.19689868664949, + 3.2115502185209657 + ], + [ + -2.11601418568506, + 3.2115502185209657 + ], + [ + -16.92811348548122, + 3.7850413289711375 + ], + [ + -33.70508310055658, + 3.6703431068811048 + ], + [ + -58.23484418587299, + 3.096851996430933 + ], + [ + -64.68957653380323, + -0.114698222090035 + ], + [ + -60.253059396589265, + -1.1739700378626798 + ] + ] + }, + { + "type": "line", + "version": 396, + "versionNonce": 984752446, + "isDeleted": false, + "id": "n1H4Hbqf0CY-fuooueHJ6", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 744.2905748142894, + "y": 546.0690656695676, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 44.249439823814946, + "height": 9.258068927814971, + "seed": 1600388593, + "groupIds": [ + "lr6SWU1ep3pURgt6XT6mE" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501267, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -14.910137331937662, + 0.19287643599609794 + ], + [ + -20.36115528124806, + 0.19287643599609794 + ], + [ + -10.581387783955762, + -3.086022975938427 + ], + [ + -6.252638235973848, + -5.400540207892178 + ], + [ + 2.565184917322867, + -4.821910899903735 + ], + [ + 10.902035898621207, + -4.821910899903735 + ], + [ + 17.795970363925562, + -8.679439619826567 + ], + [ + 20.681803395913505, + -7.329304567853583 + ], + [ + 23.888284542566886, + -2.121640795957653 + ], + [ + 16.35305384793159, + 0.5786293079884075 + ], + [ + 9.619443439959767, + 0 + ] + ] + }, + { + "type": "rectangle", + "version": 279, + "versionNonce": 1845456382, + "isDeleted": false, + "id": "v8WbsMugJl-GRkzbGwW-H", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 934, + "y": 461, + "strokeColor": "#495057", + "backgroundColor": "#ced4da", + "width": 200.00000000000009, + "height": 147.00000000000003, + "seed": 1649077538, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "j1_co9Ikv7n5rlvyjCBwA", + "type": "arrow" + }, + { + "id": "PLi_LaaovZupU81HN6gAQ", + "type": "arrow" + } + ], + "updated": 1666700628517, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 28, + "versionNonce": 1687636350, + "isDeleted": false, + "id": "jPgTV0Oq1FVAUogc_OOGj", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 949, + "y": 468, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 172, + "height": 35, + "seed": 692051551, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501268, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 1, + "text": "Quarkus app", + "baseline": 25, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Quarkus app" + }, + { + "type": "rectangle", + "version": 102, + "versionNonce": 1341667902, + "isDeleted": false, + "id": "c7F3pTWvzLeRsEfMuYvLK", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 949, + "y": 531, + "strokeColor": "#1864ab", + "backgroundColor": "#228be6", + "width": 159.00000000000003, + "height": 60, + "seed": 1167206910, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [ + { + "id": "PFHUJlTdPgbO2nI6aLii-", + "type": "arrow" + } + ], + "updated": 1666700579178, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 69, + "versionNonce": 539847102, + "isDeleted": false, + "id": "RYqULwClUq1Ww8xd_kff-", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 960, + "y": 544, + "strokeColor": "#000000", + "backgroundColor": "#868e96", + "width": 140, + "height": 25, + "seed": 1233747345, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "PFHUJlTdPgbO2nI6aLii-", + "type": "arrow" + } + ], + "updated": 1666700501268, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "quarkus-zeebe", + "baseline": 18, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "quarkus-zeebe" + }, + { + "type": "arrow", + "version": 91, + "versionNonce": 2050478114, + "isDeleted": false, + "id": "j1_co9Ikv7n5rlvyjCBwA", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 775.0278416927587, + "y": 539.0936472824062, + "strokeColor": "#495057", + "backgroundColor": "#228be6", + "width": 139.97215830724133, + "height": 4.104106319488096, + "seed": 568919633, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700580259, + "link": null, + "locked": false, + "startBinding": { + "elementId": "LGTXdkJBrSWCYmVKRuAIq", + "focus": -1.499969012572985, + "gap": 10.476346100991577 + }, + "endBinding": { + "elementId": "v8WbsMugJl-GRkzbGwW-H", + "focus": 0.03924586379376683, + "gap": 19 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 139.97215830724133, + -4.104106319488096 + ] + ] + }, + { + "type": "text", + "version": 16, + "versionNonce": 2090172926, + "isDeleted": false, + "id": "PNwMP0ZcFl90qh0sXdJJy", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 821, + "y": 504, + "strokeColor": "#495057", + "backgroundColor": "#228be6", + "width": 43, + "height": 25, + "seed": 768927313, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1666700501268, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "http", + "baseline": 18, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "http" + }, + { + "type": "rectangle", + "version": 302, + "versionNonce": 345933438, + "isDeleted": false, + "id": "0_-UwWyaHswot3-5NXVwa", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 60, + "angle": 0, + "x": 1237, + "y": 459.5, + "strokeColor": "#5c940d", + "backgroundColor": "#82c91e", + "width": 200.00000000000009, + "height": 147.00000000000003, + "seed": 2028440738, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "j1_co9Ikv7n5rlvyjCBwA", + "type": "arrow" + }, + { + "id": "PFHUJlTdPgbO2nI6aLii-", + "type": "arrow" + }, + { + "id": "BN6Z0lOFpuxIWrz-Ec5pA", + "type": "arrow" + } + ], + "updated": 1666700632449, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 65, + "versionNonce": 2094043710, + "isDeleted": false, + "id": "hrDBfEjRw4UHXMYQ27B0N", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1247, + "y": 469.5, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 180, + "height": 35, + "seed": 329915583, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501268, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 1, + "text": "Zeebe broker", + "baseline": 25, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Zeebe broker" + }, + { + "type": "rectangle", + "version": 129, + "versionNonce": 1677516670, + "isDeleted": false, + "id": "Ao0Q6pKm_CvmmR0rFSyr7", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1257.5, + "y": 523, + "strokeColor": "#d9480f", + "backgroundColor": "#fd7e14", + "width": 159.00000000000003, + "height": 68, + "seed": 1387908770, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [ + { + "id": "BN6Z0lOFpuxIWrz-Ec5pA", + "type": "arrow" + } + ], + "updated": 1666700759402, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 143, + "versionNonce": 56154430, + "isDeleted": false, + "id": "Y7WsEXAV_TYCU5Gcsrzpt", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 1294, + "y": 532, + "strokeColor": "#d9480f", + "backgroundColor": "#868e96", + "width": 85, + "height": 50, + "seed": 1959034111, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "BN6Z0lOFpuxIWrz-Ec5pA", + "type": "arrow" + } + ], + "updated": 1666700775293, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "debug\nexporter", + "baseline": 43, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "debug\nexporter" + }, + { + "type": "arrow", + "version": 125, + "versionNonce": 1029724130, + "isDeleted": false, + "id": "PFHUJlTdPgbO2nI6aLii-", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1107, + "y": 571, + "strokeColor": "#1864ab", + "backgroundColor": "#228be6", + "width": 123.23898792721661, + "height": 1.238987927216499, + "seed": 588105407, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700978287, + "link": null, + "locked": false, + "startBinding": { + "elementId": "RYqULwClUq1Ww8xd_kff-", + "focus": 1.1568020547471511, + "gap": 7 + }, + "endBinding": { + "elementId": "0_-UwWyaHswot3-5NXVwa", + "focus": -0.4789949213265562, + "gap": 6.761012072783387 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 123.23898792721661, + -1.238987927216499 + ] + ] + }, + { + "type": "text", + "version": 54, + "versionNonce": 275377406, + "isDeleted": false, + "id": "Z6kdudogFDMH-3X0AXKfn", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1149.5, + "y": 531.5, + "strokeColor": "#1864ab", + "backgroundColor": "#228be6", + "width": 40, + "height": 25, + "seed": 1624818833, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1666700815871, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "grpc", + "baseline": 18, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "grpc" + }, + { + "type": "rectangle", + "version": 579, + "versionNonce": 293751842, + "isDeleted": false, + "id": "tRN7hL6A_E9DMxxbjxm3L", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 930, + "y": 643.5, + "strokeColor": "#5c940d", + "backgroundColor": "#82c91e", + "width": 213.00000000000009, + "height": 72.00000000000003, + "seed": 642057918, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "j1_co9Ikv7n5rlvyjCBwA", + "type": "arrow" + }, + { + "id": "PFHUJlTdPgbO2nI6aLii-", + "type": "arrow" + }, + { + "id": "BN6Z0lOFpuxIWrz-Ec5pA", + "type": "arrow" + }, + { + "id": "PLi_LaaovZupU81HN6gAQ", + "type": "arrow" + } + ], + "updated": 1666700634287, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 373, + "versionNonce": 795947262, + "isDeleted": false, + "id": "EZXK3jAVq5AH_y25l0P89", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 952.9245543275258, + "y": 660.2610120727835, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 164, + "height": 35, + "seed": 576097695, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700835078, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 1, + "text": "Dev monitor", + "baseline": 25, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Dev monitor" + }, + { + "type": "arrow", + "version": 632, + "versionNonce": 1221978174, + "isDeleted": false, + "id": "BN6Z0lOFpuxIWrz-Ec5pA", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1149.821154827157, + "y": 687.4708220102483, + "strokeColor": "#d9480f", + "backgroundColor": "#228be6", + "width": 192.86444485065795, + "height": 91.5903159738566, + "seed": 861780287, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700765590, + "link": null, + "locked": false, + "startBinding": { + "elementId": "tRN7hL6A_E9DMxxbjxm3L", + "focus": 0.318940547152707, + "gap": 6.821154827156988 + }, + "endBinding": { + "elementId": "Y7WsEXAV_TYCU5Gcsrzpt", + "focus": -0.3286189244198348, + "gap": 13.880506036391694 + }, + "lastCommittedPoint": null, + "startArrowhead": "arrow", + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 171.55094459054817, + -7.590315973856605 + ], + [ + 192.86444485065795, + -91.5903159738566 + ] + ] + }, + { + "type": "arrow", + "version": 608, + "versionNonce": 1471054654, + "isDeleted": false, + "id": "PLi_LaaovZupU81HN6gAQ", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 761.9947064903936, + "y": 598.0509075147964, + "strokeColor": "#495057", + "backgroundColor": "#228be6", + "width": 164.00529350960642, + "height": 81.44854646036242, + "seed": 1507561841, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501269, + "link": null, + "locked": false, + "startBinding": { + "elementId": "LGTXdkJBrSWCYmVKRuAIq", + "focus": -0.2599317950931369, + "gap": 15.323071527175784 + }, + "endBinding": { + "elementId": "tRN7hL6A_E9DMxxbjxm3L", + "focus": -0.07006809108836656, + "gap": 4 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 19.010587019212835, + 77.89818497040733 + ], + [ + 164.00529350960642, + 81.44854646036242 + ] + ] + }, + { + "type": "text", + "version": 37, + "versionNonce": 584898466, + "isDeleted": false, + "id": "HKQCdTI-rL2qQW5JnTg9P", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 825.3805060363918, + "y": 654.5, + "strokeColor": "#495057", + "backgroundColor": "#228be6", + "width": 43, + "height": 25, + "seed": 1725657137, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1666700501269, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "http", + "baseline": 18, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "http" + }, + { + "type": "rectangle", + "version": 433, + "versionNonce": 309492094, + "isDeleted": false, + "id": "9KLza3Kh6-XYGVsZAdIVK", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1885.2158329067202, + "y": 441.5, + "strokeColor": "#495057", + "backgroundColor": "#ced4da", + "width": 200.00000000000009, + "height": 147.00000000000003, + "seed": 1345540414, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "qGDpk7Jdju_xzHJl-Kd_n", + "type": "arrow" + }, + { + "id": "VEBDww6PkXybfnqfiZHNs", + "type": "arrow" + }, + { + "id": "uF8Vrvc6EKRzoZ2yPY2HA", + "type": "arrow" + } + ], + "updated": 1666700652990, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 96, + "versionNonce": 1650824034, + "isDeleted": false, + "id": "zBtsFHHsF6S-SzViCHvDh", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1898.2158329067202, + "y": 448.5, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 172, + "height": 35, + "seed": 920217425, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501269, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 1, + "text": "Quarkus app", + "baseline": 25, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Quarkus app" + }, + { + "type": "rectangle", + "version": 186, + "versionNonce": 1483721122, + "isDeleted": false, + "id": "ScZJu6dTYWmnnGFBGZaex", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1902.618363088679, + "y": 500.0534215269073, + "strokeColor": "#1864ab", + "backgroundColor": "#228be6", + "width": 159.00000000000003, + "height": 60, + "seed": 1902424574, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [ + { + "id": "e4Sju-tpxkPzel74_yOGV", + "type": "arrow" + } + ], + "updated": 1666700981747, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 151, + "versionNonce": 1117987874, + "isDeleted": false, + "id": "wy5XLV5i8ANRbRkHxpqhu", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 1911.8573510158953, + "y": 512.1729154905155, + "strokeColor": "#000000", + "backgroundColor": "#868e96", + "width": 140, + "height": 25, + "seed": 1991398705, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "e4Sju-tpxkPzel74_yOGV", + "type": "arrow" + } + ], + "updated": 1666700984750, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "quarkus-zeebe", + "baseline": 18, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "quarkus-zeebe" + }, + { + "type": "rectangle", + "version": 370, + "versionNonce": 1271112802, + "isDeleted": false, + "id": "ES-EfjNXlnEdOIYDWOJnv", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 2186.21583290672, + "y": 440, + "strokeColor": "#5c940d", + "backgroundColor": "#82c91e", + "width": 200.00000000000009, + "height": 147.00000000000003, + "seed": 713214590, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "qGDpk7Jdju_xzHJl-Kd_n", + "type": "arrow" + }, + { + "id": "e4Sju-tpxkPzel74_yOGV", + "type": "arrow" + }, + { + "id": "Y3k9Rp7kzlRXgesEeaUWx", + "type": "arrow" + }, + { + "id": "T3oVcbDfmKAeh3jpSk0d6", + "type": "arrow" + } + ], + "updated": 1666700662495, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 133, + "versionNonce": 1589486306, + "isDeleted": false, + "id": "XdWvzIP52_JkvymfzqYns", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 2196.21583290672, + "y": 450, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 180, + "height": 35, + "seed": 873561329, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501270, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 1, + "text": "Zeebe broker", + "baseline": 25, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Zeebe broker" + }, + { + "type": "rectangle", + "version": 201, + "versionNonce": 1079724606, + "isDeleted": false, + "id": "1VBTyQcJZqOEx_H1hqhKE", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 2206.71583290672, + "y": 503.5, + "strokeColor": "#d9480f", + "backgroundColor": "#fd7e14", + "width": 159.00000000000003, + "height": 68, + "seed": 1653306338, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [ + { + "id": "Y3k9Rp7kzlRXgesEeaUWx", + "type": "arrow" + }, + { + "id": "fGdD2KFPKsqofte0YArvp", + "type": "arrow" + } + ], + "updated": 1666700792101, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 213, + "versionNonce": 459431266, + "isDeleted": false, + "id": "lUWTeKYGqsatMOkboOqLM", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 2243.21583290672, + "y": 512.5, + "strokeColor": "#d9480f", + "backgroundColor": "#868e96", + "width": 85, + "height": 50, + "seed": 1805039313, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "Y3k9Rp7kzlRXgesEeaUWx", + "type": "arrow" + }, + { + "id": "fGdD2KFPKsqofte0YArvp", + "type": "arrow" + } + ], + "updated": 1666700782302, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "debug\nexporter", + "baseline": 43, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "debug\nexporter" + }, + { + "type": "arrow", + "version": 388, + "versionNonce": 625547938, + "isDeleted": false, + "id": "e4Sju-tpxkPzel74_yOGV", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 2061.5468025487257, + "y": 536.4777396263713, + "strokeColor": "#1864ab", + "backgroundColor": "#228be6", + "width": 118.78852432160238, + "height": 1.395852812041312, + "seed": 1198627519, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700994489, + "link": null, + "locked": false, + "startBinding": { + "elementId": "wy5XLV5i8ANRbRkHxpqhu", + "focus": 0.9563658918931266, + "gap": 9.68945153283039 + }, + "endBinding": { + "elementId": "ES-EfjNXlnEdOIYDWOJnv", + "focus": -0.27234941607820073, + "gap": 5.880506036392035 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 118.78852432160238, + -1.395852812041312 + ] + ] + }, + { + "type": "text", + "version": 139, + "versionNonce": 1630830910, + "isDeleted": false, + "id": "q01s1DM5BBcTD-SgttoN9", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 2103.118363088679, + "y": 502.31443359969086, + "strokeColor": "#1864ab", + "backgroundColor": "#228be6", + "width": 40, + "height": 25, + "seed": 1444525233, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1666700995342, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "grpc", + "baseline": 18, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "grpc" + }, + { + "type": "rectangle", + "version": 351, + "versionNonce": 825920034, + "isDeleted": false, + "id": "_AZDyfrhM4LHsJmMxnQzX", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1621.5, + "y": 501, + "strokeColor": "#1864ab", + "backgroundColor": "#228be6", + "width": 159.00000000000003, + "height": 69, + "seed": 2112088254, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [ + { + "id": "e4Sju-tpxkPzel74_yOGV", + "type": "arrow" + }, + { + "id": "fGdD2KFPKsqofte0YArvp", + "type": "arrow" + } + ], + "updated": 1666700647375, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 432, + "versionNonce": 647113506, + "isDeleted": false, + "id": "3ZtvXOgtRAgvXaYv5T4Rc", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 1632, + "y": 514.3805060363917, + "strokeColor": "#000000", + "backgroundColor": "#868e96", + "width": 139, + "height": 50, + "seed": 1924219999, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "e4Sju-tpxkPzel74_yOGV", + "type": "arrow" + }, + { + "id": "fGdD2KFPKsqofte0YArvp", + "type": "arrow" + }, + { + "id": "T3oVcbDfmKAeh3jpSk0d6", + "type": "arrow" + }, + { + "id": "uF8Vrvc6EKRzoZ2yPY2HA", + "type": "arrow" + } + ], + "updated": 1666700643577, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "quarkus-zeebe\ntest", + "baseline": 43, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "quarkus-zeebe\ntest" + }, + { + "type": "arrow", + "version": 68, + "versionNonce": 1727482530, + "isDeleted": false, + "id": "uF8Vrvc6EKRzoZ2yPY2HA", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1785.4212766535052, + "y": 529.2918520110056, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 94.57872334649483, + "height": 1.0606662181044157, + "seed": 1242468479, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700643578, + "link": null, + "locked": false, + "startBinding": { + "elementId": "3ZtvXOgtRAgvXaYv5T4Rc", + "focus": -0.34460936263202463, + "gap": 14.421276653505174 + }, + "endBinding": { + "elementId": "9KLza3Kh6-XYGVsZAdIVK", + "focus": -0.16149814821724667, + "gap": 5.215832906720152 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 94.57872334649483, + -1.0606662181044157 + ] + ] + }, + { + "type": "arrow", + "version": 526, + "versionNonce": 152699838, + "isDeleted": false, + "id": "fGdD2KFPKsqofte0YArvp", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1696.715017418213, + "y": 570.9999999999999, + "strokeColor": "#d9480f", + "backgroundColor": "transparent", + "width": 598.3145364065108, + "height": 97.1194939636083, + "seed": 270367487, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700796560, + "link": null, + "locked": false, + "startBinding": { + "elementId": "3ZtvXOgtRAgvXaYv5T4Rc", + "focus": 0.33231270603674323, + "gap": 6.619493963608193 + }, + "endBinding": { + "elementId": "lUWTeKYGqsatMOkboOqLM", + "focus": -0.5929829024188236, + "gap": 10.33645774525769 + }, + "lastCommittedPoint": null, + "startArrowhead": "arrow", + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 76.28498258178706, + 97.1194939636083 + ], + [ + 525.2849825817871, + 96.1194939636083 + ], + [ + 598.3145364065108, + 1.8364577452578033 + ] + ] + }, + { + "type": "arrow", + "version": 787, + "versionNonce": 314361506, + "isDeleted": false, + "id": "T3oVcbDfmKAeh3jpSk0d6", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1774, + "y": 563.2370574649151, + "strokeColor": "#1864ab", + "backgroundColor": "transparent", + "width": 425.2089429583066, + "height": 75.2629425350849, + "seed": 1568681009, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700706182, + "link": null, + "locked": false, + "startBinding": { + "elementId": "3ZtvXOgtRAgvXaYv5T4Rc", + "focus": -0.5375158389588645, + "gap": 3 + }, + "endBinding": { + "elementId": "ES-EfjNXlnEdOIYDWOJnv", + "focus": -0.11275981507535228, + "gap": 8.5 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 66.20894295830658, + 70.2629425350849 + ], + [ + 365.2089429583066, + 75.2629425350849 + ], + [ + 425.2089429583066, + 32.2629425350849 + ] + ] + }, + { + "type": "text", + "version": 184, + "versionNonce": 143703422, + "isDeleted": false, + "id": "5RrbQl30p2pFhbPS2fxWO", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1970.0000000000005, + "y": 617.5, + "strokeColor": "#1864ab", + "backgroundColor": "#228be6", + "width": 40, + "height": 25, + "seed": 1576933169, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1666700722637, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "grpc", + "baseline": 18, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "grpc" + }, + { + "type": "text", + "version": 92, + "versionNonce": 837780002, + "isDeleted": false, + "id": "8OKGVLblbA-0u6-FmiTCb", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1220.9145879314387, + "y": 663.0242717310698, + "strokeColor": "#d9480f", + "backgroundColor": "#228be6", + "width": 53, + "height": 50, + "seed": 506312190, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1666700770174, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "http \n", + "baseline": 43, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "http \n" + }, + { + "type": "text", + "version": 195, + "versionNonce": 369847010, + "isDeleted": false, + "id": "2h5it2F5RWVR662Avmw4y", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1972.3165991571045, + "y": 653.1657898402448, + "strokeColor": "#d9480f", + "backgroundColor": "#228be6", + "width": 44, + "height": 25, + "seed": 323133410, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1666700800589, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "http", + "baseline": 18, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "http" + }, + { + "type": "text", + "version": 70, + "versionNonce": 756276898, + "isDeleted": false, + "id": "jqGpkk4hPALBE4Z00UHfd", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1820.5391987142198, + "y": 486.92306445272004, + "strokeColor": "#495057", + "backgroundColor": "#228be6", + "width": 43, + "height": 25, + "seed": 1388223870, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1666700533803, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "http", + "baseline": 18, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "http" + } + ], + "appState": { + "gridSize": null, + "viewBackgroundColor": "#ffffff" + }, + "files": {} +} \ No newline at end of file diff --git a/quarkus-zeebe/0.x/_images/opentelemetry.png b/quarkus-zeebe/0.x/_images/opentelemetry.png new file mode 100644 index 0000000000..19bf79eb8e Binary files /dev/null and b/quarkus-zeebe/0.x/_images/opentelemetry.png differ diff --git a/quarkus-zeebe/0.x/_images/testing.svg b/quarkus-zeebe/0.x/_images/testing.svg new file mode 100644 index 0000000000..6761e5923f --- /dev/null +++ b/quarkus-zeebe/0.x/_images/testing.svg @@ -0,0 +1,16 @@ + + + + + + + TestQuarkus appquarkus-zeebeZeebe brokerdebugexportergrpcquarkus-zeebetestgrpchttphttp \ No newline at end of file diff --git a/quarkus-zeebe/0.x/includes/attributes.html b/quarkus-zeebe/0.x/includes/attributes.html new file mode 100644 index 0000000000..458f2bedfa --- /dev/null +++ b/quarkus-zeebe/0.x/includes/attributes.html @@ -0,0 +1,919 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-zeebe/0.x/includes/quarkus-zeebe.html b/quarkus-zeebe/0.x/includes/quarkus-zeebe.html new file mode 100644 index 0000000000..d80da25894 --- /dev/null +++ b/quarkus-zeebe/0.x/includes/quarkus-zeebe.html @@ -0,0 +1,1334 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

If DevServices has been explicitly enabled or disabled. DevServices is generally enabled by default, unless there is an existing configuration present. +When DevServices is enabled Quarkus will attempt to automatically configure and start a database when running in Dev or Test mode and when Docker is running.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_ENABLED

+
+
+

boolean

true

+
+
+
+

Optional fixed port the dev service will listen to. +If not defined, the port will be chosen randomly.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_PORT

+
+
+

int

+
+
+
+

Indicates if the Zeebe server managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for Zeebe starts a new container. +The discovery uses the quarkus-dev-service-zeebe label. The value is configured using the service-name property. +Container sharing is only used in dev mode.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_SHARED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-zeebe label attached to the started container. This property is used when shared is set to true. In this case, before starting a container, Dev Services for Zeebe looks for a container with the quarkus-dev-service-zeebe label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise, it starts a new container with the quarkus-dev-service-zeebe label set to the specified value. +This property is used when you need multiple shared Zeebe servers.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_SERVICE_NAME

+
+
+

string

zeebe

+
+
+
+

The container image name to use, for container based DevServices providers.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_IMAGE_NAME

+
+
+

string

+
+
+
+

Helper to define the stop strategy for containers created by DevServices. In particular, we don’t want to actually stop the containers when they have been flagged for reuse, and when the Testcontainers configuration has been explicitly set to allow container reuse. To enable reuse, ass testcontainers.reuse.enable=true in your .testcontainers.properties file, to be stored in your home.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_REUSE

+
+
+

boolean

false

+
+
+
+

Enable or disable dev monitor for dev-services.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_MONITOR_ENABLED

+
+
+

boolean

false

+
+
+
+

Optional fixed port the dev monitor will listen to. +If not defined, the port will be chosen randomly.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_MONITOR_PORT

+
+
+

int

+
+
+
+

The container image name to use, for container based zeebe simple monitor.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_MONITOR_IMAGE_NAME

+
+
+

string

ghcr.io/lorislab/zeebe-dev-monitor:8.1

+
+
+
+

The value of the quarkus-dev-service-zeebe label attached to the started container. This property is used when shared is set to true. In this case, before starting a container, Dev Services for Zeebe looks for a container with the quarkus-dev-service-zeebe label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise, it starts a new container with the quarkus-dev-service-zeebe label set to the specified value. +This property is used when you need multiple shared Zeebe servers.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_MONITOR_SERVICE_NAME

+
+
+

string

zeebe-dev-monitor

+
+
+
+

Helper to define the stop strategy for containers created by DevServices. In particular, we don’t want to actually stop the containers when they have been flagged for reuse, and when the Testcontainers configuration has been explicitly set to allow container reuse. To enable reuse, ass testcontainers.reuse.enable=true in your .testcontainers.properties file, to be stored in your home.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_MONITOR_REUSE

+
+
+

boolean

false

+
+
+
+

Optional fixed debug export receiver port the dev service will listen to. +If not defined, the port will be chosen randomly.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_TEST_RECEIVER_PORT

+
+
+

int

+
+
+
+

Disable or enable debug exporter for the test.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_TEST_EXPORTER

+
+
+

boolean

true

+
+
+
+

Enable or disable debug exporter.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_DEBUG_EXPORTER_ENABLED

+
+
+

boolean

false

+
+
+
+

Fixed debug export receiver port the localhost service will listen to.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_DEBUG_EXPORTER_RECEIVER_PORT

+
+
+

int

8080

+
+
+
+

Observe changes in the bpmn files.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEV_MODE_WATCH_BPMN_FILES

+
+
+

boolean

true

+
+
+
+

Observe changes in the bpmn directory and subdirectories.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEV_MODE_WATCH_BPMN_DIR

+
+
+

boolean

true

+
+
+
+

Observe changes in the job worker.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEV_MODE_WATCH_JOB_WORKER

+
+
+

boolean

true

+
+
+
+

Whether an auto scan BPMN process folder. Default true

+
+
+

Environment variable: QUARKUS_ZEEBE_RESOURCES_ENABLED

+
+
+

boolean

true

+
+
+
+

BPMN process root folder. Default bpmn

+
+
+

Environment variable: QUARKUS_ZEEBE_RESOURCES_LOCATION

+
+
+

string

bpmn

+
+
+
+

Whether a metrics is enabled in case the micrometer or micro-profile metrics extension is present.

+
+
+

Environment variable: QUARKUS_ZEEBE_METRICS_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether a health check is published in case the smallrye-health extension is present.

+
+
+

Environment variable: QUARKUS_ZEEBE_HEALTH_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether an opentracing is published in case the smallrye-opentracing extension is present.

+
+
+

Environment variable: QUARKUS_ZEEBE_TRACING_ENABLED

+
+
+

boolean

true

+
+
+
+
+ + + + + + + diff --git a/quarkus-zeebe/0.x/index.html b/quarkus-zeebe/0.x/index.html new file mode 100644 index 0000000000..a4985ed1ea --- /dev/null +++ b/quarkus-zeebe/0.x/index.html @@ -0,0 +1,2038 @@ + + + + + + Quarkus Zeebe :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Zeebe

+
+
+
+

Quarkus Zeebe extension. Zeebe’s cloud-native design provides the performance, resilience, and security enterprises need to future-proof their process orchestration efforts.

+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.zeebe:quarkus-zeebe extension first to your build file.

+
+
+

For instance, with Maven, add the following dependency to your POM file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.zeebe</groupId>
+    <artifactId>quarkus-zeebe</artifactId>
+    <version>0.8.0</version>
+</dependency>
+
+
+
+

Upgrade

+
+
+In version >=0.8.0 we replaced @ZeebeWorker with @JobWorker annotation. +
+
+
+
+In version >=0.7.0 we removed the hazelcast dependency and zeebe-simple-monitor +for test and dev services. Now we do use zeebe-test-container with debug exporter +and zeebe-dev-monitor. In test module we remove our assert API and switch to Camunda BpmnAssert +from zeebe-process-test. Test api migration: io.quarkiverse.zeebe.test.BpmnAssertio.camunda.zeebe.process.test.assertions.BpmnAssert +
+
+
+
+
+
+

Configuration

+
+
+

Exemplary Setup for your local development

+
+

Generally speaking there are three ways to configure your quarkus project to speak with camunda: +- Local dev instance with dev services +- Shared local dev instance +- Direct interaction with Camunda SaaS/ on-premise

+
+
+

You can see some exemplary configurations for each of the setups below. Please note that these are only exemplary and can be adapted to your needs.

+
+
+
+

Local dev instance with dev services

+
+
+
# enable auto load bpmn resources
+quarkus.zeebe.resources.enabled=true
+# src/main/resources/bpmn
+quarkus.zeebe.resources.location=bpmn
+# Enable zeebe Dev Service:
+quarkus.zeebe.devservices.enabled=true
+# only start devservices, if no running docker container is found
+quarkus.zeebe.devservices.shared=true
+# zeebe service name
+quarkus.zeebe.devservices.service-name=zeebe_broker
+# enable reusable zeebe test-container (https://www.testcontainers.org/features/reuse/)
+quarkus.zeebe.devservices.reuse=false
+# enable zeebe monitor Dev Service:
+quarkus.zeebe.devservices.monitor.enabled=true
+# zeebe monitor service name
+quarkus.zeebe.devservices.monitor.service-name=zeebe-dev-monitor
+# enable reusable zeebe test-container (https://www.testcontainers.org/features/reuse/)
+quarkus.zeebe.devservices.monitor.reuse=false
+# enable hot restart for bpmn subdirectories changes
+quarkus.zeebe.dev-mode.watch-bpmn-dir=true
+# enable hot restart for bpmn files changes
+quarkus.zeebe.dev-mode.watch-bpmn-files=true
+# enable hot restart for job worker changes
+quarkus.zeebe.dev-mode.watch-job-worker=true
+
+
+
+

Shared local dev instance

+
+
+
quarkus.zeebe.client.broker.gateway-address=localhost:26500
+# If you are sure that there is already an instance running, yu can directly deactivate it
+quarkus.zeebe.devservices.enabled=false
+quarkus.zeebe.devservices.shared=true
+quarkus.zeebe.devservices.monitor.serviceName=zeebe-dev-monitor
+quarkus.zeebe.devservices.serviceName=zeebe_broker
+
+
+
+
+

Direct interaction with Camunda Cloud live instance

+
+

Preferably you would be using a dev instance of Camunda and not your production process engine ;)

+
+
+
+
# Disable local dev services
+quarkus.zeebe.devservices.enabled=false
+
+# Enter your cloud credentials from the zeebe portal
+quarkus.zeebe.client.broker.gateway-address=
+# Specify a cluster id.
+quarkus.zeebe.client.cloud.cluster-id=
+# Specify a client id.
+quarkus.zeebe.client.cloud.client-id=
+# Specify a client secret to request an access token.
+quarkus.zeebe.client.cloud.client-secret=
+# Specify a cloud region.
+quarkus.zeebe.client.cloud.region=
+quarkus.zeebe.client.cloud.base-url=zeebe.camunda.io
+quarkus.zeebe.client.cloud.auth-url=https://login.cloud.camunda.io/oauth/token
+quarkus.zeebe.client.cloud.port=443
+
+# Make sure you are disabling plaintext security, otherwise connection will fail
+quarkus.zeebe.client.security.plaintext=false
+
+
+
+
+
+

Metrics

+
+

Whether zeebe metrics is enabled or not is done by quarkus.zeebe.metrics.enabled build time property. +The default is true, but shown here to indicate how it can be disabled.

+
+
+
+
quarkus.zeebe.metrics.enabled=true
+
+
+
+

You can access the following metrics:

+
+
+
    +
  • +

    camunda.job.invocations: Number of invocations of job workers (tagging the job type)

    +
  • +
  • +

    activated: The job was activated and started to process an item

    +
  • +
  • +

    completed: The processing was completed successfully

    +
  • +
  • +

    failed: The processing failed with some exception

    +
  • +
  • +

    bpmn-error: The processing completed by throwing an ZeebeBpmnError (which means there was no technical problem)

    +
  • +
+
+
+

Example:

+
+
+
+
# TYPE camunda_job_invocations counter
+# HELP camunda_job_invocations
+camunda_job_invocations_total{action="activated",type="gateway-empty-data"} 1.0
+camunda_job_invocations_total{action="completed",type="gateway-show-data"} 2.0
+camunda_job_invocations_total{action="activated",type="gateway-show-data"} 2.0
+camunda_job_invocations_total{action="completed",type="gateway-read-data"} 2.0
+
+
+
+

Micrometer

+
+

If you already have your Quarkus project configured, you can add the quarkus-micrometer-registry-prometheus extension to your project.

+
+
+
+
<dependency>
+    <groupId>io.quarkus</groupId>
+    <artifactId>quarkus-micrometer-registry-prometheus</artifactId>
+</dependency>
+
+
+ +
+
+

Smallrye Metrics (Microprofile)

+
+

If you already have your Quarkus project configured, you can add the quarkus-smallrye-metrics extension to your project.

+
+
+
+
<dependency>
+    <groupId>io.quarkus</groupId>
+    <artifactId>quarkus-smallrye-metrics</artifactId>
+</dependency>
+
+
+ +
+
+
+

Tracing

+
+

Whether zeebe tracing is enabled or not is done by quarkus.zeebe.tracing.enabled build time property. The default is true, but shown here to indicate how it can be disabled.

+
+
+
+
quarkus.zeebe.tracing.enabled=true
+
+
+
+
+OpenTelemetry +
+
+
+

OpenTelemetry

+
+

If you already have your Quarkus project configured, you can add the quarkus-opentelemetry-exporter-otlp extension to your project.

+
+
+
+
<dependency>
+    <groupId>io.quarkus</groupId>
+    <artifactId>quarkus-opentelemetry-exporter-otlp</artifactId>
+</dependency>
+
+
+ +
+
+

OpenTracing

+
+

If you already have your Quarkus project configured, you can add the smallrye-opentracing extension to your project.

+
+
+
+
<dependency>
+    <groupId>io.quarkus</groupId>
+    <artifactId>quarkus-smallrye-opentracing</artifactId>
+</dependency>
+
+
+ +
+
+
+

Dev-Services

+
+

Dev Services for Zeebe is automatically enabled unless: +* quarkus.zeebe.devservices.enabled is set to false +* quarkus.zeebe.broker.gateway-address is configured

+
+
+

Dev Service for Zeebe relies on Docker to start the broker. If your environment does not support Docker, you will need +to start the broker manually, or connect to an already running broker. You can configure the broker address using +quarkus.zeebe.broker.gateway-address.

+
+
+
+Test +
+
+
+

To activate Zeebe-Dev-Monitor Dev Service use this configuration:

+
+
+
+
quarkus.zeebe.devservices.enabled=true
+quarkus.zeebe.devservices.monitor.enabled=true
+
+
+
+

Property qquarkus.zeebe.devservices.monitor.enabled=true will activate the debug exporter.

+
+
+
+
+
+

Usage

+
+
+

@JobWorker

+
+

You need to configure the job type via the JobWorker annotation:

+
+
+
+
@JobWorker(type = "my-job")
+public void executeMyJob() {
+    // handles jobs of type 'my-job'
+}
+
+
+
+

If you don’t specify the type the method name is use as default:

+
+
+
+
@JobWorker
+public void test() {
+        // handles jobs of type 'test'
+}
+
+
+
+

Or you can set a default job type:

+
+
+
+
quarkus.zeebe.client.job.default-type=test
+
+
+
+
+

Variables

+
+

You can specify that you only want to fetch some variables or when executing a job, which can decrease load and improve +performance:

+
+
+
+
@JobWorker(type="test", fetchVariables={"var1", "var2"})
+public void test(final JobClient client, final ActivatedJob job) {
+    String var1 = (String) job.getVariablesAsMap().get("var1");
+    System.out.println(var1);
+    // ...
+}
+
+
+
+
+

@Variable

+
+

By using the @Variable annotation there is a shortcut to make variable retrieval simpler, including the type cast:

+
+
+
+
@JobWorker(type="test")
+public void test(final JobClient client, final ActivatedJob job, @Variable String var1) {
+    System.out.println(var1);
+    // ...
+}
+
+
+
+

With @Variable or fetchVariables you limit which variables are loaded from the workflow engine. +You can also override this with fetchAllVariables and force that all variables are loaded anyway:

+
+
+
+
@JobWorker(type="test", fetchAllVariables=true)
+public void test(final JobClient client, final ActivatedJob job) {
+    String var1 = (String) job.getVariablesAsMap().get("var1");
+    System.out.println(var1);
+    // ...
+}
+
+
+
+
+

@VariablesAsType

+
+

You can also use your own class into which the process variables are mapped to (comparable with getVariablesAsType() in +the Java Client API). Therefore, use the @VariablesAsType annotation. In the below example, Parameter refers to your own class:

+
+
+
+
@JobWorker(type = "job1")
+public void job1(@VariablesAsType Parameter p) {
+    System.out.println(p.getValue());
+    p.setValue(1);
+    // ... custom code
+    return param;
+}
+
+
+
+
+

Fetch variables via Job

+
+

You can access variables of a process via the ActivatedJob object, which is passed into the method if it is a parameter:

+
+
+
+
@JobWorker(type="test")
+public void test(final ActivatedJob job) {
+    String var1 = (String) job.getVariablesAsMap().get("var1");
+    System.out.println(var1);
+    // ...
+}
+
+
+
+
+

@CustomHeader

+
+

You can use the @CustomHeader annotation for a parameter to retrieve custom header for a job:

+
+
+
+
@JobWorker(type = "job1")
+public void job1(@VariablesAsType Parameter p, @CustomHeader String header1, @CustomHeader("custom-header") String header2) {
+    System.out.println(header1);
+    System.out.println(header2);
+    System.out.println(p.getValue());
+    p.setValue(1);
+    // ... custom code
+    return param;
+}
+
+
+
+
+

@CustomHeaders

+
+

You can use the @CustomHeaders annotation for a parameter to retrieve custom headers for a job:

+
+
+
+
@JobWorker(type = "job1")
+public void job1(@VariablesAsType Parameter p, @CustomHeaders Map<String, String> headers) {
+    System.out.println(headers.get("header1"));
+    System.out.println(headers.get("custom-header"));
+    System.out.println(p.getValue());
+    p.setValue(1);
+    // ... custom code
+}
+
+
+
+
+

Auto-completing jobs

+
+

By default, the autoComplete attribute is set to true for any job worker. In this case, the Quarkus extension will take +care about job completion for you:

+
+
+
+
@JobWorker(type = "job1")
+public void job1(final ActivatedJob job) {
+    // ... custom code ...
+    // no need to call client.newCompleteCommand()...
+}
+
+
+
+

Note that the code within the handler method needs to be synchronously executed, as the completion will be triggered +right after the method has finished.

+
+
+

When using autoComplete you can: +* Return a Map, String, InputStream, or Object, which then will be added to the process variables +* Throw a ZeebeBpmnError which results in a BPMN error being sent to Zeebe +* Throw any other Exception that leads in a failure handed over to Zeebe

+
+
+
+
@JobWorker(type = "job1")
+public Map<String, Object> job1(final ActivatedJob job) {
+    // ... custom code ...
+    if (ok) {
+       return responseMap;
+    } else {
+       throw new ZeebeBpmnError("Error code", "Error message");
+    }
+}
+
+
+
+
+

Programmatically completing jobs

+
+

Your job worker code can also complete the job itself. This gives you more control about when exactly you want to +complete the job (e.g. allowing the completion to be moved to reactive callbacks):

+
+
+
+
@JobWorker(type = "job1")
+public void job1(final JobClient client, final ActivatedJob job) {
+    // ... custom code ...
+    client.newCompleteCommand(job.getKey()).send()
+        .exceptionally( throwable -> { throw new RuntimeException("Could not complete job " + job, throwable); });
+}
+
+
+
+

Ideally, you don’t use blocking behavior like send().join(), as this is blocking call to wait for the issues command +to be executed on the workflow engine. While this is very straightforward to use and produces easy-to-read code, +blocking code is limited in terms of scalability.

+
+
+

That’s why the worker above showed a different pattern (using exceptionally), often you might also want to use the +whenComplete callback:

+
+
+
+
 client.newCompleteCommand(job.getKey()).send()
+        .whenComplete((result, exception) -> {});
+
+
+
+

This registers a callback to be executed if the command on the workflow engine was executed or resulted in an exception. +This allows for parallelism. This is discussed in more detail in +this blog post about writing good workers for Camunda Cloud.

+
+
+
+Note that when completing jobs programmatically, you must specify autoComplete = false. Otherwise, there is a race +condition between your programmatic job completion and the Quarkus extension integration job completion, this can +lead to unpredictable results. +
+
+
+
+

Throwing ZeebeBpmnError

+
+

Whenever your code hits a problem that should lead to a BPMN error being raised, you can simply throw a ZeebeBpmnError +providing the error code used in BPMN:

+
+
+
+
@JobWorker(type = "job1")
+public Map<String, Object> job1(final ActivatedJob job) {
+    // ... custom code ...
+    if (ok) {
+       return responseMap;
+    } else {
+       throw new ZeebeBpmnError("Error code", "Error message");
+    }
+}
+
+
+
+
+

Non-blocking Methods

+
+

By default, a scheduled method is executed on the main executor for blocking tasks. As a result, a technology that is +designed to run on a Vert.x event loop (such as Hibernate Reactive) cannot be used inside the method body. For this +reason, a job worker method that returns java.util.concurrent.CompletionStage<?> or io.smallrye.mutiny.Uni<Void> +or is annotated with @io.smallrye.common.annotation.NonBlocking is executed on the Vert.x event loop.

+
+
+
+
@JobWorker(type = "job1")
+public Uni<Void> job1(final ActivatedJob job) {
+    // ... custom code ...
+    // no need to call client.newCompleteCommand()...
+}
+
+
+
+

The return type Uni<Void> instructs the job worker to execute the method on the Vert.x event loop.

+
+
+
+
+
+

Testing

+
+
+

To use the test extension, add this dependency to the project:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.zeebe</groupId>
+    <artifactId>quarkus-zeebe-test</artifactId>
+    <version>{version}</version>
+    <scope>test</scope>
+</dependency>
+
+
+
+
+Test +
+
+
+

To use the ZeebeClient and BpmnAssert in the tests use the @QuarkusTestResource(ZeebeTestResource.class) and enable this configuration:

+
+
+
+
quarkus.zeebe.devservices.enabled=true
+
+
+
+

Test example

+
+
+
+
import io.quarkiverse.zeebe.test.ZeebeTestResource;
+import io.quarkus.test.common.QuarkusTestResource;
+import io.camunda.zeebe.client.ZeebeClient;
+
+@QuarkusTest
+@QuarkusTestResource(ZeebeTestResource.class)
+public class BaseTest {
+
+    @InjectZeebeClient
+    ZeebeClient client;
+
+    @Test
+    public void startProcessTest() {
+        ProcessInstanceEvent event = client.newCreateInstanceCommand()
+                .bpmnProcessId("test").latestVersion()
+                .variables(Map.of("k","v")).send().join();
+
+        ProcessInstanceAssert a = BpmnAssert.assertThat(event);
+        await().atMost(7, SECONDS).untilAsserted(a::isCompleted);
+    }
+}
+
+
+
+

We can reuse the test for the integration test.

+
+
+
+
import io.quarkus.test.junit.QuarkusIntegrationTest;
+
+@QuarkusIntegrationTest
+public class BaseIT extends BaseTest {
+
+}
+
+
+
+

For more information check examples in the integration-tests directory in this repo.

+
+
+

Testing with embedded engine

+
+
+The Zeebe process test embedded engine requires Java version >= 17 +
+
+
+
+
import io.quarkiverse.zeebe.test.ZeebeTestEmbeddedResource;
+import io.quarkus.test.common.QuarkusTestResource;
+import io.camunda.zeebe.client.ZeebeClient;
+
+@QuarkusTest
+@QuarkusTestResource(ZeebeTestEmbeddedResource.class)
+public class BaseTest {
+
+    @InjectZeebeClient
+    ZeebeClient client;
+
+    @Test
+    public void startProcessTest() {
+        ProcessInstanceEvent event = client.newCreateInstanceCommand()
+                .bpmnProcessId("test").latestVersion()
+                .variables(Map.of("k","v")).send().join();
+
+        ProcessInstanceAssert a = BpmnAssert.assertThat(event);
+        await().atMost(7, SECONDS).untilAsserted(a::isCompleted);
+    }
+}
+
+
+
+
+
+
+

Extension Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

If DevServices has been explicitly enabled or disabled. DevServices is generally enabled by default, unless there is an existing configuration present. +When DevServices is enabled Quarkus will attempt to automatically configure and start a database when running in Dev or Test mode and when Docker is running.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_ENABLED

+
+
+

boolean

true

+
+
+
+

Optional fixed port the dev service will listen to. +If not defined, the port will be chosen randomly.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_PORT

+
+
+

int

+
+
+
+

Indicates if the Zeebe server managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for Zeebe starts a new container. +The discovery uses the quarkus-dev-service-zeebe label. The value is configured using the service-name property. +Container sharing is only used in dev mode.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_SHARED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-zeebe label attached to the started container. This property is used when shared is set to true. In this case, before starting a container, Dev Services for Zeebe looks for a container with the quarkus-dev-service-zeebe label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise, it starts a new container with the quarkus-dev-service-zeebe label set to the specified value. +This property is used when you need multiple shared Zeebe servers.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_SERVICE_NAME

+
+
+

string

zeebe

+
+
+
+

The container image name to use, for container based DevServices providers.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_IMAGE_NAME

+
+
+

string

+
+
+
+

Helper to define the stop strategy for containers created by DevServices. In particular, we don’t want to actually stop the containers when they have been flagged for reuse, and when the Testcontainers configuration has been explicitly set to allow container reuse. To enable reuse, ass testcontainers.reuse.enable=true in your .testcontainers.properties file, to be stored in your home.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_REUSE

+
+
+

boolean

false

+
+
+
+

Enable or disable dev monitor for dev-services.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_MONITOR_ENABLED

+
+
+

boolean

false

+
+
+
+

Optional fixed port the dev monitor will listen to. +If not defined, the port will be chosen randomly.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_MONITOR_PORT

+
+
+

int

+
+
+
+

The container image name to use, for container based zeebe simple monitor.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_MONITOR_IMAGE_NAME

+
+
+

string

ghcr.io/lorislab/zeebe-dev-monitor:8.1

+
+
+
+

The value of the quarkus-dev-service-zeebe label attached to the started container. This property is used when shared is set to true. In this case, before starting a container, Dev Services for Zeebe looks for a container with the quarkus-dev-service-zeebe label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise, it starts a new container with the quarkus-dev-service-zeebe label set to the specified value. +This property is used when you need multiple shared Zeebe servers.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_MONITOR_SERVICE_NAME

+
+
+

string

zeebe-dev-monitor

+
+
+
+

Helper to define the stop strategy for containers created by DevServices. In particular, we don’t want to actually stop the containers when they have been flagged for reuse, and when the Testcontainers configuration has been explicitly set to allow container reuse. To enable reuse, ass testcontainers.reuse.enable=true in your .testcontainers.properties file, to be stored in your home.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_MONITOR_REUSE

+
+
+

boolean

false

+
+
+
+

Optional fixed debug export receiver port the dev service will listen to. +If not defined, the port will be chosen randomly.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_TEST_RECEIVER_PORT

+
+
+

int

+
+
+
+

Disable or enable debug exporter for the test.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_TEST_EXPORTER

+
+
+

boolean

true

+
+
+
+

Enable or disable debug exporter.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_DEBUG_EXPORTER_ENABLED

+
+
+

boolean

false

+
+
+
+

Fixed debug export receiver port the localhost service will listen to.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_DEBUG_EXPORTER_RECEIVER_PORT

+
+
+

int

8080

+
+
+
+

Observe changes in the bpmn files.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEV_MODE_WATCH_BPMN_FILES

+
+
+

boolean

true

+
+
+
+

Observe changes in the bpmn directory and subdirectories.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEV_MODE_WATCH_BPMN_DIR

+
+
+

boolean

true

+
+
+
+

Observe changes in the job worker.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEV_MODE_WATCH_JOB_WORKER

+
+
+

boolean

true

+
+
+
+

Whether an auto scan BPMN process folder. Default true

+
+
+

Environment variable: QUARKUS_ZEEBE_RESOURCES_ENABLED

+
+
+

boolean

true

+
+
+
+

BPMN process root folder. Default bpmn

+
+
+

Environment variable: QUARKUS_ZEEBE_RESOURCES_LOCATION

+
+
+

string

bpmn

+
+
+
+

Whether a metrics is enabled in case the micrometer or micro-profile metrics extension is present.

+
+
+

Environment variable: QUARKUS_ZEEBE_METRICS_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether a health check is published in case the smallrye-health extension is present.

+
+
+

Environment variable: QUARKUS_ZEEBE_HEALTH_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether an opentracing is published in case the smallrye-opentracing extension is present.

+
+
+

Environment variable: QUARKUS_ZEEBE_TRACING_ENABLED

+
+
+

boolean

true

+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-zeebe/dev/_images/devservice.svg b/quarkus-zeebe/dev/_images/devservice.svg new file mode 100644 index 0000000000..3d93e2835b --- /dev/null +++ b/quarkus-zeebe/dev/_images/devservice.svg @@ -0,0 +1,16 @@ + + + + + + + Quarkus appquarkus-zeebehttpZeebe brokerdebugexportergrpcDev monitorhttphttp \ No newline at end of file diff --git a/quarkus-zeebe/dev/_images/diagrams.excalidraw b/quarkus-zeebe/dev/_images/diagrams.excalidraw new file mode 100644 index 0000000000..19c110c7a8 --- /dev/null +++ b/quarkus-zeebe/dev/_images/diagrams.excalidraw @@ -0,0 +1,2627 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "https://excalidraw.com", + "elements": [ + { + "type": "rectangle", + "version": 537, + "versionNonce": 868243326, + "isDeleted": false, + "id": "W73vWyZN2Tgyn_Oa0HJsm", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1605, + "y": 445.5, + "strokeColor": "#495057", + "backgroundColor": "#ced4da", + "width": 200.00000000000009, + "height": 147.00000000000003, + "seed": 224718654, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "qGDpk7Jdju_xzHJl-Kd_n", + "type": "arrow" + }, + { + "id": "VEBDww6PkXybfnqfiZHNs", + "type": "arrow" + }, + { + "id": "uF8Vrvc6EKRzoZ2yPY2HA", + "type": "arrow" + } + ], + "updated": 1666700641671, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 203, + "versionNonce": 1098602110, + "isDeleted": false, + "id": "Dt-EY54EQkCLOxv7-ZX_Z", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1618, + "y": 452.5, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 70, + "height": 35, + "seed": 1203653777, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501265, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 1, + "text": "Test", + "baseline": 25, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Test" + }, + { + "type": "ellipse", + "version": 418, + "versionNonce": 661248098, + "isDeleted": false, + "id": "odO6q81WTBT5c_egP-wu8", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 5.996705855137247, + "x": 726.7850259288767, + "y": 501.6570252233714, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 36.13444500077782, + "height": 37.3663010803498, + "seed": 1464220305, + "groupIds": [ + "lr6SWU1ep3pURgt6XT6mE" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501266, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 461, + "versionNonce": 1057478334, + "isDeleted": false, + "id": "L38Hi-qzk90nqWe2JEEun", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 5.996705855137247, + "x": 728.6275478136519, + "y": 522.4501543421778, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 8.349246761543355, + "height": 14.78227295486365, + "seed": 1889714289, + "groupIds": [ + "lr6SWU1ep3pURgt6XT6mE" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501266, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0.13687289773021405, + -4.243059829636799 + ], + [ + -4.65367852282742, + -3.6955682387159143 + ], + [ + -8.212373863813141, + 1.7793476704928324 + ], + [ + -7.391136477431843, + 7.254263579701593 + ], + [ + -3.2849495455252367, + 10.12859443203619 + ], + [ + 0.13687289773021405, + 10.539213125226851 + ], + [ + 0, + 0 + ] + ] + }, + { + "type": "line", + "version": 532, + "versionNonce": 1997831202, + "isDeleted": false, + "id": "d_FJ6zYfE37bM8WP5_2ie", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 5.996705855137247, + "x": 764.1249916583897, + "y": 509.7613050775677, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 8.156126449642073, + "height": 14.78227295486365, + "seed": 473139793, + "groupIds": [ + "lr6SWU1ep3pURgt6XT6mE" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501266, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -0.13370699097772942, + -4.243059829636799 + ], + [ + 4.546037693243122, + -3.6955682387159143 + ], + [ + 8.022419458664343, + 1.7793476704928324 + ], + [ + 7.220177512797915, + 7.254263579701593 + ], + [ + 3.20896778346574, + 10.12859443203619 + ], + [ + -0.13370699097772942, + 10.539213125226851 + ], + [ + 0, + 0 + ] + ] + }, + { + "type": "line", + "version": 529, + "versionNonce": 261771006, + "isDeleted": false, + "id": "EGsjAMGaVKppepqXK7n-A", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 5.996705855137247, + "x": 720.2199587075833, + "y": 513.6542529155352, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 40.78812352360524, + "height": 21.489044943644387, + "seed": 315627569, + "groupIds": [ + "lr6SWU1ep3pURgt6XT6mE" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501266, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0.8212373863813136, + -10.949831818417493 + ], + [ + 9.854848636575767, + -19.299078579960877 + ], + [ + 20.53093465953285, + -21.489044943644387 + ], + [ + 31.617639375680596, + -19.299078579960877 + ], + [ + 37.91379267127064, + -13.276671079831232 + ], + [ + 40.10375903495415, + -6.980517784241172 + ], + [ + 40.78812352360524, + -1.0949831818417408 + ] + ] + }, + { + "type": "line", + "version": 655, + "versionNonce": 154445794, + "isDeleted": false, + "id": "11aEON5TMNNITurfC38cz", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 5.996705855137247, + "x": 728.6365079801126, + "y": 531.3268533765479, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 15.329764545784533, + "height": 7.254263579701606, + "seed": 106949137, + "groupIds": [ + "lr6SWU1ep3pURgt6XT6mE" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501266, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 1.3672496725532823, + 3.7149018015166426 + ], + [ + 5.127836505444835, + 6.406784042582821 + ], + [ + 10.67608602295711, + 7.254263579701606 + ], + [ + 15.329764545784533, + 5.06429721601811 + ] + ] + }, + { + "type": "ellipse", + "version": 388, + "versionNonce": 1337179966, + "isDeleted": false, + "id": "21xg8tdMdsbYwtjSfw2EK", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 5.996705855137247, + "x": 742.3114460346991, + "y": 531.5315513179764, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 6.56989909105051, + "height": 3.148076647795045, + "seed": 2145026033, + "groupIds": [ + "lr6SWU1ep3pURgt6XT6mE" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501266, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 403, + "versionNonce": 98130850, + "isDeleted": false, + "id": "e5XEVbceQ4BCEXBSOAZaj", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 733.8481096866503, + "y": 521.8278874313669, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 7.928068798346042, + "height": 5.20386742722378, + "seed": 2101828049, + "groupIds": [ + "lr6SWU1ep3pURgt6XT6mE" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501266, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0.5836018059876391, + -3.5886753742749278 + ], + [ + 2.5442168294536334, + -5.203867427223781 + ], + [ + 6.1838936627098935, + -4.614834436996752 + ], + [ + 7.928068798346042, + -1.6151920529488741 + ] + ] + }, + { + "type": "rectangle", + "version": 567, + "versionNonce": 1672816510, + "isDeleted": false, + "id": "LGTXdkJBrSWCYmVKRuAIq", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 718.2648585626797, + "y": 549.4763461009916, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 55.36534481123195, + "height": 33.25148988662913, + "seed": 1337849777, + "groupIds": [ + "lr6SWU1ep3pURgt6XT6mE" + ], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "j1_co9Ikv7n5rlvyjCBwA", + "type": "arrow" + }, + { + "id": "PLi_LaaovZupU81HN6gAQ", + "type": "arrow" + } + ], + "updated": 1666700501266, + "link": null, + "locked": false + }, + { + "type": "ellipse", + "version": 369, + "versionNonce": 993105762, + "isDeleted": false, + "id": "nKE66Ew9vgIbjPCu2Ier6", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 743.4406427531586, + "y": 562.7463581610111, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 5.488109981288296, + "height": 5.488109981288296, + "seed": 962976145, + "groupIds": [ + "lr6SWU1ep3pURgt6XT6mE" + ], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1666700501266, + "link": null, + "locked": false + }, + { + "type": "line", + "version": 562, + "versionNonce": 2078246846, + "isDeleted": false, + "id": "rifUAIMouVqr2s4C02JeA", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 718.9207093963055, + "y": 493.19947899335716, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 9.716454034757207, + "height": 13.910185341047512, + "seed": 1266057073, + "groupIds": [ + "lr6SWU1ep3pURgt6XT6mE" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501266, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 3.5987481737131652, + -1.4646068148832327 + ], + [ + 3.0547513567565403, + -3.8289006731947737 + ], + [ + 3.703362946204823, + -6.768575780210462 + ], + [ + 3.0756743112548577, + -11.371625769843526 + ], + [ + -1.6362303865257921, + -13.910185341047516 + ], + [ + -6.0130910885523825, + -11.854174793929992 + ], + [ + -5.921196123027958, + -5.722428055293868 + ], + [ + -3.2290170696486733, + -2.9383540363905993 + ], + [ + -0.6799960211957519, + -1.516914201129076 + ], + [ + 0, + 0 + ] + ] + }, + { + "type": "line", + "version": 329, + "versionNonce": 1502370594, + "isDeleted": false, + "id": "IiG6fZ_Wbw4cMCfbN7vez", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 713.1804027916907, + "y": 492.56325898330806, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 3.5673637419656354, + "height": 5.868888736782174, + "seed": 70740305, + "groupIds": [ + "lr6SWU1ep3pURgt6XT6mE" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501266, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -3.5673637419656354, + 5.868888736782174 + ] + ] + }, + { + "type": "line", + "version": 360, + "versionNonce": 408150014, + "isDeleted": false, + "id": "8iKU6muMwehz65eLvYNkK", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 708.2784429191952, + "y": 486.5362732242793, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 7.7101087326354065, + "height": 0.3452287492224806, + "seed": 754980657, + "groupIds": [ + "lr6SWU1ep3pURgt6XT6mE" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501267, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -7.7101087326354065, + 0.3452287492224806 + ] + ] + }, + { + "type": "line", + "version": 311, + "versionNonce": 794339042, + "isDeleted": false, + "id": "NGP-pdck7Won6ARDtjA8E", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 711.2547040366665, + "y": 480.4297429969406, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 5.638736237300519, + "height": 4.948278738855558, + "seed": 2016938257, + "groupIds": [ + "lr6SWU1ep3pURgt6XT6mE" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501267, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -5.638736237300519, + -4.948278738855558 + ] + ] + }, + { + "type": "line", + "version": 314, + "versionNonce": 219361342, + "isDeleted": false, + "id": "nXX62IWHz1pjkU3EzAFk0", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 720.1993007965151, + "y": 477.4521732489637, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 1.2658387471490966, + "height": 7.019651234190448, + "seed": 1599520497, + "groupIds": [ + "lr6SWU1ep3pURgt6XT6mE" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501267, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 1.2658387471490966, + -7.019651234190448 + ] + ] + }, + { + "type": "line", + "version": 323, + "versionNonce": 1696955042, + "isDeleted": false, + "id": "SPFo_pGlitw6lULmyVmWV", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 724.7506248831811, + "y": 482.97123182233054, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 7.940261232117059, + "height": 0.23015249948165384, + "seed": 1088665809, + "groupIds": [ + "lr6SWU1ep3pURgt6XT6mE" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501267, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 7.940261232117059, + -0.23015249948165384 + ] + ] + }, + { + "type": "line", + "version": 356, + "versionNonce": 100563070, + "isDeleted": false, + "id": "7Djo68wi3WsUHwpme0xkl", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 716.0048743656337, + "y": 484.0476252077144, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 1.4880243108912152, + "height": 4.436421832779961, + "seed": 1047951025, + "groupIds": [ + "lr6SWU1ep3pURgt6XT6mE" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501267, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -0.6200101295379938, + 2.495487280938722 + ], + [ + 0.8680141813532214, + 4.436421832779961 + ] + ] + }, + { + "type": "line", + "version": 318, + "versionNonce": 966907490, + "isDeleted": false, + "id": "n4kg5mvT7CcyZJqwgNzoF", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 718.4926552462973, + "y": 496.19750668124607, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 4.075325602520659, + "height": 2.038206258440234, + "seed": 1521907857, + "groupIds": [ + "lr6SWU1ep3pURgt6XT6mE" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501267, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 4.075325602520659, + -2.038206258440234 + ] + ] + }, + { + "type": "line", + "version": 328, + "versionNonce": 181844158, + "isDeleted": false, + "id": "3Y4FDJRkVBTNZkJN6zM3a", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 720.592639401812, + "y": 496.4989775989595, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 2.64675374403902, + "height": 1.4959912466307506, + "seed": 1465597553, + "groupIds": [ + "lr6SWU1ep3pURgt6XT6mE" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501267, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 2.64675374403902, + -1.4959912466307506 + ] + ] + }, + { + "type": "line", + "version": 355, + "versionNonce": 1033681442, + "isDeleted": false, + "id": "W4KFnUVZ4MZ1UI5QLxJqj", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 719.947006152363, + "y": 497.8173081833645, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 1.9562962455940565, + "height": 1.2658387471490966, + "seed": 1395411025, + "groupIds": [ + "lr6SWU1ep3pURgt6XT6mE" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501267, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 1.9562962455940565, + -1.2658387471490966 + ] + ] + }, + { + "type": "line", + "version": 517, + "versionNonce": 54325502, + "isDeleted": false, + "id": "ieugDVEk6RVxkXOY0ouFh", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 5.809351980489753, + "x": 753.8350253442239, + "y": 517.6740982277106, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 7.532865383426903, + "height": 5.20386742722378, + "seed": 671159857, + "groupIds": [ + "lr6SWU1ep3pURgt6XT6mE" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501267, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -0.554510052050361, + -3.5886753742749278 + ], + [ + -2.4173910910714653, + -5.203867427223781 + ], + [ + -5.875634999072972, + -4.614834436996752 + ], + [ + -7.532865383426902, + -1.6151920529488741 + ] + ] + }, + { + "type": "line", + "version": 660, + "versionNonce": 268772834, + "isDeleted": false, + "id": "RCQqfbzoM-C8-Y3fUgU57", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 774.2063861747871, + "y": 582.0065240985288, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 72.39791392451355, + "height": 4.959011366833817, + "seed": 146876433, + "groupIds": [ + "lr6SWU1ep3pURgt6XT6mE" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501267, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 7.708337390710312, + 0.5734911104501723 + ], + [ + 6.19689868664949, + 3.2115502185209657 + ], + [ + -2.11601418568506, + 3.2115502185209657 + ], + [ + -16.92811348548122, + 3.7850413289711375 + ], + [ + -33.70508310055658, + 3.6703431068811048 + ], + [ + -58.23484418587299, + 3.096851996430933 + ], + [ + -64.68957653380323, + -0.114698222090035 + ], + [ + -60.253059396589265, + -1.1739700378626798 + ] + ] + }, + { + "type": "line", + "version": 396, + "versionNonce": 984752446, + "isDeleted": false, + "id": "n1H4Hbqf0CY-fuooueHJ6", + "fillStyle": "hachure", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 744.2905748142894, + "y": 546.0690656695676, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 44.249439823814946, + "height": 9.258068927814971, + "seed": 1600388593, + "groupIds": [ + "lr6SWU1ep3pURgt6XT6mE" + ], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501267, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -14.910137331937662, + 0.19287643599609794 + ], + [ + -20.36115528124806, + 0.19287643599609794 + ], + [ + -10.581387783955762, + -3.086022975938427 + ], + [ + -6.252638235973848, + -5.400540207892178 + ], + [ + 2.565184917322867, + -4.821910899903735 + ], + [ + 10.902035898621207, + -4.821910899903735 + ], + [ + 17.795970363925562, + -8.679439619826567 + ], + [ + 20.681803395913505, + -7.329304567853583 + ], + [ + 23.888284542566886, + -2.121640795957653 + ], + [ + 16.35305384793159, + 0.5786293079884075 + ], + [ + 9.619443439959767, + 0 + ] + ] + }, + { + "type": "rectangle", + "version": 279, + "versionNonce": 1845456382, + "isDeleted": false, + "id": "v8WbsMugJl-GRkzbGwW-H", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 934, + "y": 461, + "strokeColor": "#495057", + "backgroundColor": "#ced4da", + "width": 200.00000000000009, + "height": 147.00000000000003, + "seed": 1649077538, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "j1_co9Ikv7n5rlvyjCBwA", + "type": "arrow" + }, + { + "id": "PLi_LaaovZupU81HN6gAQ", + "type": "arrow" + } + ], + "updated": 1666700628517, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 28, + "versionNonce": 1687636350, + "isDeleted": false, + "id": "jPgTV0Oq1FVAUogc_OOGj", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 949, + "y": 468, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 172, + "height": 35, + "seed": 692051551, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501268, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 1, + "text": "Quarkus app", + "baseline": 25, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Quarkus app" + }, + { + "type": "rectangle", + "version": 102, + "versionNonce": 1341667902, + "isDeleted": false, + "id": "c7F3pTWvzLeRsEfMuYvLK", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 949, + "y": 531, + "strokeColor": "#1864ab", + "backgroundColor": "#228be6", + "width": 159.00000000000003, + "height": 60, + "seed": 1167206910, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [ + { + "id": "PFHUJlTdPgbO2nI6aLii-", + "type": "arrow" + } + ], + "updated": 1666700579178, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 69, + "versionNonce": 539847102, + "isDeleted": false, + "id": "RYqULwClUq1Ww8xd_kff-", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 960, + "y": 544, + "strokeColor": "#000000", + "backgroundColor": "#868e96", + "width": 140, + "height": 25, + "seed": 1233747345, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "PFHUJlTdPgbO2nI6aLii-", + "type": "arrow" + } + ], + "updated": 1666700501268, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "quarkus-zeebe", + "baseline": 18, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "quarkus-zeebe" + }, + { + "type": "arrow", + "version": 91, + "versionNonce": 2050478114, + "isDeleted": false, + "id": "j1_co9Ikv7n5rlvyjCBwA", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 775.0278416927587, + "y": 539.0936472824062, + "strokeColor": "#495057", + "backgroundColor": "#228be6", + "width": 139.97215830724133, + "height": 4.104106319488096, + "seed": 568919633, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700580259, + "link": null, + "locked": false, + "startBinding": { + "elementId": "LGTXdkJBrSWCYmVKRuAIq", + "focus": -1.499969012572985, + "gap": 10.476346100991577 + }, + "endBinding": { + "elementId": "v8WbsMugJl-GRkzbGwW-H", + "focus": 0.03924586379376683, + "gap": 19 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 139.97215830724133, + -4.104106319488096 + ] + ] + }, + { + "type": "text", + "version": 16, + "versionNonce": 2090172926, + "isDeleted": false, + "id": "PNwMP0ZcFl90qh0sXdJJy", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 821, + "y": 504, + "strokeColor": "#495057", + "backgroundColor": "#228be6", + "width": 43, + "height": 25, + "seed": 768927313, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1666700501268, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "http", + "baseline": 18, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "http" + }, + { + "type": "rectangle", + "version": 302, + "versionNonce": 345933438, + "isDeleted": false, + "id": "0_-UwWyaHswot3-5NXVwa", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 60, + "angle": 0, + "x": 1237, + "y": 459.5, + "strokeColor": "#5c940d", + "backgroundColor": "#82c91e", + "width": 200.00000000000009, + "height": 147.00000000000003, + "seed": 2028440738, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "j1_co9Ikv7n5rlvyjCBwA", + "type": "arrow" + }, + { + "id": "PFHUJlTdPgbO2nI6aLii-", + "type": "arrow" + }, + { + "id": "BN6Z0lOFpuxIWrz-Ec5pA", + "type": "arrow" + } + ], + "updated": 1666700632449, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 65, + "versionNonce": 2094043710, + "isDeleted": false, + "id": "hrDBfEjRw4UHXMYQ27B0N", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1247, + "y": 469.5, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 180, + "height": 35, + "seed": 329915583, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501268, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 1, + "text": "Zeebe broker", + "baseline": 25, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Zeebe broker" + }, + { + "type": "rectangle", + "version": 129, + "versionNonce": 1677516670, + "isDeleted": false, + "id": "Ao0Q6pKm_CvmmR0rFSyr7", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1257.5, + "y": 523, + "strokeColor": "#d9480f", + "backgroundColor": "#fd7e14", + "width": 159.00000000000003, + "height": 68, + "seed": 1387908770, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [ + { + "id": "BN6Z0lOFpuxIWrz-Ec5pA", + "type": "arrow" + } + ], + "updated": 1666700759402, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 143, + "versionNonce": 56154430, + "isDeleted": false, + "id": "Y7WsEXAV_TYCU5Gcsrzpt", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 1294, + "y": 532, + "strokeColor": "#d9480f", + "backgroundColor": "#868e96", + "width": 85, + "height": 50, + "seed": 1959034111, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "BN6Z0lOFpuxIWrz-Ec5pA", + "type": "arrow" + } + ], + "updated": 1666700775293, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "debug\nexporter", + "baseline": 43, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "debug\nexporter" + }, + { + "type": "arrow", + "version": 125, + "versionNonce": 1029724130, + "isDeleted": false, + "id": "PFHUJlTdPgbO2nI6aLii-", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1107, + "y": 571, + "strokeColor": "#1864ab", + "backgroundColor": "#228be6", + "width": 123.23898792721661, + "height": 1.238987927216499, + "seed": 588105407, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700978287, + "link": null, + "locked": false, + "startBinding": { + "elementId": "RYqULwClUq1Ww8xd_kff-", + "focus": 1.1568020547471511, + "gap": 7 + }, + "endBinding": { + "elementId": "0_-UwWyaHswot3-5NXVwa", + "focus": -0.4789949213265562, + "gap": 6.761012072783387 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 123.23898792721661, + -1.238987927216499 + ] + ] + }, + { + "type": "text", + "version": 54, + "versionNonce": 275377406, + "isDeleted": false, + "id": "Z6kdudogFDMH-3X0AXKfn", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1149.5, + "y": 531.5, + "strokeColor": "#1864ab", + "backgroundColor": "#228be6", + "width": 40, + "height": 25, + "seed": 1624818833, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1666700815871, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "grpc", + "baseline": 18, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "grpc" + }, + { + "type": "rectangle", + "version": 579, + "versionNonce": 293751842, + "isDeleted": false, + "id": "tRN7hL6A_E9DMxxbjxm3L", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 930, + "y": 643.5, + "strokeColor": "#5c940d", + "backgroundColor": "#82c91e", + "width": 213.00000000000009, + "height": 72.00000000000003, + "seed": 642057918, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "j1_co9Ikv7n5rlvyjCBwA", + "type": "arrow" + }, + { + "id": "PFHUJlTdPgbO2nI6aLii-", + "type": "arrow" + }, + { + "id": "BN6Z0lOFpuxIWrz-Ec5pA", + "type": "arrow" + }, + { + "id": "PLi_LaaovZupU81HN6gAQ", + "type": "arrow" + } + ], + "updated": 1666700634287, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 373, + "versionNonce": 795947262, + "isDeleted": false, + "id": "EZXK3jAVq5AH_y25l0P89", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 952.9245543275258, + "y": 660.2610120727835, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 164, + "height": 35, + "seed": 576097695, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700835078, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 1, + "text": "Dev monitor", + "baseline": 25, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Dev monitor" + }, + { + "type": "arrow", + "version": 632, + "versionNonce": 1221978174, + "isDeleted": false, + "id": "BN6Z0lOFpuxIWrz-Ec5pA", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1149.821154827157, + "y": 687.4708220102483, + "strokeColor": "#d9480f", + "backgroundColor": "#228be6", + "width": 192.86444485065795, + "height": 91.5903159738566, + "seed": 861780287, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700765590, + "link": null, + "locked": false, + "startBinding": { + "elementId": "tRN7hL6A_E9DMxxbjxm3L", + "focus": 0.318940547152707, + "gap": 6.821154827156988 + }, + "endBinding": { + "elementId": "Y7WsEXAV_TYCU5Gcsrzpt", + "focus": -0.3286189244198348, + "gap": 13.880506036391694 + }, + "lastCommittedPoint": null, + "startArrowhead": "arrow", + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 171.55094459054817, + -7.590315973856605 + ], + [ + 192.86444485065795, + -91.5903159738566 + ] + ] + }, + { + "type": "arrow", + "version": 608, + "versionNonce": 1471054654, + "isDeleted": false, + "id": "PLi_LaaovZupU81HN6gAQ", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 761.9947064903936, + "y": 598.0509075147964, + "strokeColor": "#495057", + "backgroundColor": "#228be6", + "width": 164.00529350960642, + "height": 81.44854646036242, + "seed": 1507561841, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501269, + "link": null, + "locked": false, + "startBinding": { + "elementId": "LGTXdkJBrSWCYmVKRuAIq", + "focus": -0.2599317950931369, + "gap": 15.323071527175784 + }, + "endBinding": { + "elementId": "tRN7hL6A_E9DMxxbjxm3L", + "focus": -0.07006809108836656, + "gap": 4 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 19.010587019212835, + 77.89818497040733 + ], + [ + 164.00529350960642, + 81.44854646036242 + ] + ] + }, + { + "type": "text", + "version": 37, + "versionNonce": 584898466, + "isDeleted": false, + "id": "HKQCdTI-rL2qQW5JnTg9P", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 825.3805060363918, + "y": 654.5, + "strokeColor": "#495057", + "backgroundColor": "#228be6", + "width": 43, + "height": 25, + "seed": 1725657137, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1666700501269, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "http", + "baseline": 18, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "http" + }, + { + "type": "rectangle", + "version": 433, + "versionNonce": 309492094, + "isDeleted": false, + "id": "9KLza3Kh6-XYGVsZAdIVK", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1885.2158329067202, + "y": 441.5, + "strokeColor": "#495057", + "backgroundColor": "#ced4da", + "width": 200.00000000000009, + "height": 147.00000000000003, + "seed": 1345540414, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "qGDpk7Jdju_xzHJl-Kd_n", + "type": "arrow" + }, + { + "id": "VEBDww6PkXybfnqfiZHNs", + "type": "arrow" + }, + { + "id": "uF8Vrvc6EKRzoZ2yPY2HA", + "type": "arrow" + } + ], + "updated": 1666700652990, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 96, + "versionNonce": 1650824034, + "isDeleted": false, + "id": "zBtsFHHsF6S-SzViCHvDh", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1898.2158329067202, + "y": 448.5, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 172, + "height": 35, + "seed": 920217425, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501269, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 1, + "text": "Quarkus app", + "baseline": 25, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Quarkus app" + }, + { + "type": "rectangle", + "version": 186, + "versionNonce": 1483721122, + "isDeleted": false, + "id": "ScZJu6dTYWmnnGFBGZaex", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1902.618363088679, + "y": 500.0534215269073, + "strokeColor": "#1864ab", + "backgroundColor": "#228be6", + "width": 159.00000000000003, + "height": 60, + "seed": 1902424574, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [ + { + "id": "e4Sju-tpxkPzel74_yOGV", + "type": "arrow" + } + ], + "updated": 1666700981747, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 151, + "versionNonce": 1117987874, + "isDeleted": false, + "id": "wy5XLV5i8ANRbRkHxpqhu", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 1911.8573510158953, + "y": 512.1729154905155, + "strokeColor": "#000000", + "backgroundColor": "#868e96", + "width": 140, + "height": 25, + "seed": 1991398705, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "e4Sju-tpxkPzel74_yOGV", + "type": "arrow" + } + ], + "updated": 1666700984750, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "quarkus-zeebe", + "baseline": 18, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "quarkus-zeebe" + }, + { + "type": "rectangle", + "version": 370, + "versionNonce": 1271112802, + "isDeleted": false, + "id": "ES-EfjNXlnEdOIYDWOJnv", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 2186.21583290672, + "y": 440, + "strokeColor": "#5c940d", + "backgroundColor": "#82c91e", + "width": 200.00000000000009, + "height": 147.00000000000003, + "seed": 713214590, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "qGDpk7Jdju_xzHJl-Kd_n", + "type": "arrow" + }, + { + "id": "e4Sju-tpxkPzel74_yOGV", + "type": "arrow" + }, + { + "id": "Y3k9Rp7kzlRXgesEeaUWx", + "type": "arrow" + }, + { + "id": "T3oVcbDfmKAeh3jpSk0d6", + "type": "arrow" + } + ], + "updated": 1666700662495, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 133, + "versionNonce": 1589486306, + "isDeleted": false, + "id": "XdWvzIP52_JkvymfzqYns", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 2196.21583290672, + "y": 450, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 180, + "height": 35, + "seed": 873561329, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700501270, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 1, + "text": "Zeebe broker", + "baseline": 25, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Zeebe broker" + }, + { + "type": "rectangle", + "version": 201, + "versionNonce": 1079724606, + "isDeleted": false, + "id": "1VBTyQcJZqOEx_H1hqhKE", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 2206.71583290672, + "y": 503.5, + "strokeColor": "#d9480f", + "backgroundColor": "#fd7e14", + "width": 159.00000000000003, + "height": 68, + "seed": 1653306338, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [ + { + "id": "Y3k9Rp7kzlRXgesEeaUWx", + "type": "arrow" + }, + { + "id": "fGdD2KFPKsqofte0YArvp", + "type": "arrow" + } + ], + "updated": 1666700792101, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 213, + "versionNonce": 459431266, + "isDeleted": false, + "id": "lUWTeKYGqsatMOkboOqLM", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 2243.21583290672, + "y": 512.5, + "strokeColor": "#d9480f", + "backgroundColor": "#868e96", + "width": 85, + "height": 50, + "seed": 1805039313, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "Y3k9Rp7kzlRXgesEeaUWx", + "type": "arrow" + }, + { + "id": "fGdD2KFPKsqofte0YArvp", + "type": "arrow" + } + ], + "updated": 1666700782302, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "debug\nexporter", + "baseline": 43, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "debug\nexporter" + }, + { + "type": "arrow", + "version": 388, + "versionNonce": 625547938, + "isDeleted": false, + "id": "e4Sju-tpxkPzel74_yOGV", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 2061.5468025487257, + "y": 536.4777396263713, + "strokeColor": "#1864ab", + "backgroundColor": "#228be6", + "width": 118.78852432160238, + "height": 1.395852812041312, + "seed": 1198627519, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700994489, + "link": null, + "locked": false, + "startBinding": { + "elementId": "wy5XLV5i8ANRbRkHxpqhu", + "focus": 0.9563658918931266, + "gap": 9.68945153283039 + }, + "endBinding": { + "elementId": "ES-EfjNXlnEdOIYDWOJnv", + "focus": -0.27234941607820073, + "gap": 5.880506036392035 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 118.78852432160238, + -1.395852812041312 + ] + ] + }, + { + "type": "text", + "version": 139, + "versionNonce": 1630830910, + "isDeleted": false, + "id": "q01s1DM5BBcTD-SgttoN9", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 2103.118363088679, + "y": 502.31443359969086, + "strokeColor": "#1864ab", + "backgroundColor": "#228be6", + "width": 40, + "height": 25, + "seed": 1444525233, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1666700995342, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "grpc", + "baseline": 18, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "grpc" + }, + { + "type": "rectangle", + "version": 351, + "versionNonce": 825920034, + "isDeleted": false, + "id": "_AZDyfrhM4LHsJmMxnQzX", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1621.5, + "y": 501, + "strokeColor": "#1864ab", + "backgroundColor": "#228be6", + "width": 159.00000000000003, + "height": 69, + "seed": 2112088254, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [ + { + "id": "e4Sju-tpxkPzel74_yOGV", + "type": "arrow" + }, + { + "id": "fGdD2KFPKsqofte0YArvp", + "type": "arrow" + } + ], + "updated": 1666700647375, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 432, + "versionNonce": 647113506, + "isDeleted": false, + "id": "3ZtvXOgtRAgvXaYv5T4Rc", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 1632, + "y": 514.3805060363917, + "strokeColor": "#000000", + "backgroundColor": "#868e96", + "width": 139, + "height": 50, + "seed": 1924219999, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [ + { + "id": "e4Sju-tpxkPzel74_yOGV", + "type": "arrow" + }, + { + "id": "fGdD2KFPKsqofte0YArvp", + "type": "arrow" + }, + { + "id": "T3oVcbDfmKAeh3jpSk0d6", + "type": "arrow" + }, + { + "id": "uF8Vrvc6EKRzoZ2yPY2HA", + "type": "arrow" + } + ], + "updated": 1666700643577, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "quarkus-zeebe\ntest", + "baseline": 43, + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "quarkus-zeebe\ntest" + }, + { + "type": "arrow", + "version": 68, + "versionNonce": 1727482530, + "isDeleted": false, + "id": "uF8Vrvc6EKRzoZ2yPY2HA", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1785.4212766535052, + "y": 529.2918520110056, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 94.57872334649483, + "height": 1.0606662181044157, + "seed": 1242468479, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700643578, + "link": null, + "locked": false, + "startBinding": { + "elementId": "3ZtvXOgtRAgvXaYv5T4Rc", + "focus": -0.34460936263202463, + "gap": 14.421276653505174 + }, + "endBinding": { + "elementId": "9KLza3Kh6-XYGVsZAdIVK", + "focus": -0.16149814821724667, + "gap": 5.215832906720152 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 94.57872334649483, + -1.0606662181044157 + ] + ] + }, + { + "type": "arrow", + "version": 526, + "versionNonce": 152699838, + "isDeleted": false, + "id": "fGdD2KFPKsqofte0YArvp", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1696.715017418213, + "y": 570.9999999999999, + "strokeColor": "#d9480f", + "backgroundColor": "transparent", + "width": 598.3145364065108, + "height": 97.1194939636083, + "seed": 270367487, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700796560, + "link": null, + "locked": false, + "startBinding": { + "elementId": "3ZtvXOgtRAgvXaYv5T4Rc", + "focus": 0.33231270603674323, + "gap": 6.619493963608193 + }, + "endBinding": { + "elementId": "lUWTeKYGqsatMOkboOqLM", + "focus": -0.5929829024188236, + "gap": 10.33645774525769 + }, + "lastCommittedPoint": null, + "startArrowhead": "arrow", + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 76.28498258178706, + 97.1194939636083 + ], + [ + 525.2849825817871, + 96.1194939636083 + ], + [ + 598.3145364065108, + 1.8364577452578033 + ] + ] + }, + { + "type": "arrow", + "version": 787, + "versionNonce": 314361506, + "isDeleted": false, + "id": "T3oVcbDfmKAeh3jpSk0d6", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1774, + "y": 563.2370574649151, + "strokeColor": "#1864ab", + "backgroundColor": "transparent", + "width": 425.2089429583066, + "height": 75.2629425350849, + "seed": 1568681009, + "groupIds": [], + "strokeSharpness": "round", + "boundElements": [], + "updated": 1666700706182, + "link": null, + "locked": false, + "startBinding": { + "elementId": "3ZtvXOgtRAgvXaYv5T4Rc", + "focus": -0.5375158389588645, + "gap": 3 + }, + "endBinding": { + "elementId": "ES-EfjNXlnEdOIYDWOJnv", + "focus": -0.11275981507535228, + "gap": 8.5 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 66.20894295830658, + 70.2629425350849 + ], + [ + 365.2089429583066, + 75.2629425350849 + ], + [ + 425.2089429583066, + 32.2629425350849 + ] + ] + }, + { + "type": "text", + "version": 184, + "versionNonce": 143703422, + "isDeleted": false, + "id": "5RrbQl30p2pFhbPS2fxWO", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1970.0000000000005, + "y": 617.5, + "strokeColor": "#1864ab", + "backgroundColor": "#228be6", + "width": 40, + "height": 25, + "seed": 1576933169, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1666700722637, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "grpc", + "baseline": 18, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "grpc" + }, + { + "type": "text", + "version": 92, + "versionNonce": 837780002, + "isDeleted": false, + "id": "8OKGVLblbA-0u6-FmiTCb", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1220.9145879314387, + "y": 663.0242717310698, + "strokeColor": "#d9480f", + "backgroundColor": "#228be6", + "width": 53, + "height": 50, + "seed": 506312190, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1666700770174, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "http \n", + "baseline": 43, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "http \n" + }, + { + "type": "text", + "version": 195, + "versionNonce": 369847010, + "isDeleted": false, + "id": "2h5it2F5RWVR662Avmw4y", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1972.3165991571045, + "y": 653.1657898402448, + "strokeColor": "#d9480f", + "backgroundColor": "#228be6", + "width": 44, + "height": 25, + "seed": 323133410, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1666700800589, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "http", + "baseline": 18, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "http" + }, + { + "type": "text", + "version": 70, + "versionNonce": 756276898, + "isDeleted": false, + "id": "jqGpkk4hPALBE4Z00UHfd", + "fillStyle": "cross-hatch", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 1820.5391987142198, + "y": 486.92306445272004, + "strokeColor": "#495057", + "backgroundColor": "#228be6", + "width": 43, + "height": 25, + "seed": 1388223870, + "groupIds": [], + "strokeSharpness": "sharp", + "boundElements": [], + "updated": 1666700533803, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "http", + "baseline": 18, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "http" + } + ], + "appState": { + "gridSize": null, + "viewBackgroundColor": "#ffffff" + }, + "files": {} +} \ No newline at end of file diff --git a/quarkus-zeebe/dev/_images/opentelemetry.png b/quarkus-zeebe/dev/_images/opentelemetry.png new file mode 100644 index 0000000000..19bf79eb8e Binary files /dev/null and b/quarkus-zeebe/dev/_images/opentelemetry.png differ diff --git a/quarkus-zeebe/dev/_images/testing.svg b/quarkus-zeebe/dev/_images/testing.svg new file mode 100644 index 0000000000..6761e5923f --- /dev/null +++ b/quarkus-zeebe/dev/_images/testing.svg @@ -0,0 +1,16 @@ + + + + + + + TestQuarkus appquarkus-zeebeZeebe brokerdebugexportergrpcquarkus-zeebetestgrpchttphttp \ No newline at end of file diff --git a/quarkus-zeebe/dev/includes/attributes.html b/quarkus-zeebe/dev/includes/attributes.html new file mode 100644 index 0000000000..40e650cccd --- /dev/null +++ b/quarkus-zeebe/dev/includes/attributes.html @@ -0,0 +1,919 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+ +
+
+
+
+ + + + + + + diff --git a/quarkus-zeebe/dev/includes/quarkus-zeebe.html b/quarkus-zeebe/dev/includes/quarkus-zeebe.html new file mode 100644 index 0000000000..532490cb0f --- /dev/null +++ b/quarkus-zeebe/dev/includes/quarkus-zeebe.html @@ -0,0 +1,2164 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

If DevServices has been explicitly enabled or disabled. DevServices is generally enabled by default, unless there is an existing configuration present.

+
+
+

When DevServices is enabled Quarkus will attempt to automatically configure and start a database when running in Dev or Test mode and when Docker is running.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_ENABLED

+
+
+

boolean

true

+
+
+
+

Optional fixed port the dev service will listen to.

+
+
+

If not defined, the port will be chosen randomly.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_PORT

+
+
+

int

+
+
+
+

Indicates if the Zeebe server managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for Zeebe starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-zeebe label. The value is configured using the service-name property.

+
+
+

Container sharing is only used in dev mode.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_SHARED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-zeebe label attached to the started container. This property is used when shared is set to true. In this case, before starting a container, Dev Services for Zeebe looks for a container with the quarkus-dev-service-zeebe label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise, it starts a new container with the quarkus-dev-service-zeebe label set to the specified value.

+
+
+

This property is used when you need multiple shared Zeebe servers.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_SERVICE_NAME

+
+
+

string

zeebe

+
+
+
+

The container image name to use, for container based DevServices providers.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_IMAGE_NAME

+
+
+

string

+
+
+
+

Helper to define the stop strategy for containers created by DevServices. In particular, we don’t want to actually stop the containers when they have been flagged for reuse, and when the Testcontainers configuration has been explicitly set to allow container reuse. To enable reuse, ass testcontainers.reuse.enable=true in your .testcontainers.properties file, to be stored in your home.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_REUSE

+
+
+

boolean

false

+
+
+
+

Enable or disable dev monitor for dev-services.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_MONITOR_ENABLED

+
+
+

boolean

false

+
+
+
+

Optional fixed port the dev monitor will listen to.

+
+
+

If not defined, the port will be chosen randomly.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_MONITOR_PORT

+
+
+

int

+
+
+
+

The container image name to use, for container based zeebe simple monitor.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_MONITOR_IMAGE_NAME

+
+
+

string

ghcr.io/lorislab/zeebe-dev-monitor:8.4

+
+
+
+

The value of the quarkus-dev-service-zeebe label attached to the started container. This property is used when shared is set to true. In this case, before starting a container, Dev Services for Zeebe looks for a container with the quarkus-dev-service-zeebe label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise, it starts a new container with the quarkus-dev-service-zeebe label set to the specified value.

+
+
+

This property is used when you need multiple shared Zeebe servers.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_MONITOR_SERVICE_NAME

+
+
+

string

zeebe-dev-monitor

+
+
+
+

Helper to define the stop strategy for containers created by DevServices. In particular, we don’t want to actually stop the containers when they have been flagged for reuse, and when the Testcontainers configuration has been explicitly set to allow container reuse. To enable reuse, ass testcontainers.reuse.enable=true in your .testcontainers.properties file, to be stored in your home.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_MONITOR_REUSE

+
+
+

boolean

false

+
+
+
+

Optional fixed debug export receiver port the dev service will listen to.

+
+
+

If not defined, the port will be chosen randomly.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_TEST_RECEIVER_PORT

+
+
+

int

+
+
+
+

Disable or enable debug exporter for the test.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_TEST_EXPORTER

+
+
+

boolean

true

+
+
+
+

Enable or disable debug exporter.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_DEBUG_EXPORTER_ENABLED

+
+
+

boolean

false

+
+
+
+

Fixed debug export receiver port the localhost service will listen to.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_DEBUG_EXPORTER_RECEIVER_PORT

+
+
+

int

8080

+
+
+
+

Observe changes in the bpmn files.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEV_MODE_WATCH_BPMN_FILES

+
+
+

boolean

true

+
+
+
+

Observe changes in the bpmn directory and subdirectories.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEV_MODE_WATCH_BPMN_DIR

+
+
+

boolean

true

+
+
+
+

Observe changes in the job worker.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEV_MODE_WATCH_JOB_WORKER

+
+
+

boolean

true

+
+
+
+

Whether an auto scan BPMN process folder. Default true

+
+
+

Environment variable: QUARKUS_ZEEBE_RESOURCES_ENABLED

+
+
+

boolean

true

+
+
+
+

BPMN process root folder. Default bpmn

+
+
+

Environment variable: QUARKUS_ZEEBE_RESOURCES_LOCATION

+
+
+

string

bpmn

+
+
+
+

Whether a metrics is enabled in case the micrometer or micro-profile metrics extension is present.

+
+
+

Environment variable: QUARKUS_ZEEBE_METRICS_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether a health check is published in case the smallrye-health extension is present.

+
+
+

Environment variable: QUARKUS_ZEEBE_HEALTH_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether an opentracing is published in case the smallrye-opentracing extension is present.

+
+
+

Environment variable: QUARKUS_ZEEBE_TRACING_ENABLED

+
+
+

boolean

true

+
+
+
+

Zeebe gateway address. Default: localhost:26500

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_BROKER_GATEWAY_ADDRESS

+
+
+

string

localhost:26500

+
+
+
+

Client keep alive duration

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_BROKER_KEEP_ALIVE

+
+
+

Duration +

PT45S

+
+
+
+

Cloud cluster ID

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_CLOUD_CLUSTER_ID

+
+
+

string

+
+
+
+

Cloud client secret ID

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_CLOUD_CLIENT_ID

+
+
+

string

+
+
+
+

Specify a client secret to request an access token.

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_CLOUD_CLIENT_SECRET

+
+
+

string

+
+
+
+

Cloud region

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_CLOUD_REGION

+
+
+

string

bru-2

+
+
+
+

Cloud base URL

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_CLOUD_BASE_URL

+
+
+

string

zeebe.camunda.io

+
+
+
+

Cloud authorization server URL

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_CLOUD_AUTH_URL

+
+
+

string

https://login.cloud.camunda.io/oauth/token

+
+
+
+

Cloud port

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_CLOUD_PORT

+
+
+

int

443

+
+
+
+

Cloud credentials cache path

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_CLOUD_CREDENTIALS_CACHE_PATH

+
+
+

string

+
+
+
+

OAuth client secret ID

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_OAUTH_CLIENT_ID

+
+
+

string

+
+
+
+

Specify a client secret to request an access token.

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_OAUTH_CLIENT_SECRET

+
+
+

string

+
+
+
+

Authorization server URL

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_OAUTH_AUTH_URL

+
+
+

string

https://login.cloud.camunda.io/oauth/token

+
+
+
+

Credentials cache path

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_OAUTH_CREDENTIALS_CACHE_PATH

+
+
+

string

+
+
+
+

OAuth connect timeout

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_OAUTH_CONNECT_TIMEOUT

+
+
+

Duration +

PT5S

+
+
+
+

OAuth read timeout

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_OAUTH_READ_TIMEOUT

+
+
+

Duration +

PT5S

+
+
+
+

Zeebe token audience

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_OAUTH_TOKEN_AUDIENCE

+
+
+

string

+
+
+
+

Maximum retries for the auto-completion command.

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_AUTO_COMPLETE_MAX_RETRIES

+
+
+

int

20

+
+
+
+

Maximum retries for the auto-completion command.

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_AUTO_COMPLETE_RETRY_DELAY

+
+
+

long

50

+
+
+
+

Sets the backoff supplier. The supplier is called to determine the retry delay after each failed request; the worker then waits until the returned delay has elapsed before sending the next request. Note that this is used only for the polling mechanism - failures in the JobHandler should be handled there, and retried there if need be. Sets the backoff multiplication factor. The previous delay is multiplied by this factor. Default is 1.5.

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_AUTO_COMPLETE_EXP_BACKOFF_FACTOR

+
+
+

double

1.5

+
+
+
+

Sets the jitter factor. The next delay is changed randomly within a range of +/- this factor. For example, if the next delay is calculated to be 1s and the jitterFactor is 0.1 then the actual next delay can be somewhere between 0.9 and 1.1s. Default is 0.2

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_AUTO_COMPLETE_EXP_JITTER_FACTOR

+
+
+

double

0.2

+
+
+
+

Sets the maximum retry delay. Note that the jitter may push the retry delay over this maximum. Default is 1000ms.

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_AUTO_COMPLETE_EXP_MAX_DELAY

+
+
+

long

1000

+
+
+
+

Sets the minimum retry delay. Note that the jitter may push the retry delay below this minimum. Default is 50ms.

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_AUTO_COMPLETE_EXP_MIN_DELAY

+
+
+

long

50

+
+
+
+

Client message time to live duration.

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_MESSAGE_TIME_TO_LIVE

+
+
+

Duration +

PT1H

+
+
+
+

Client security plaintext flag.

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_SECURITY_PLAINTEXT

+
+
+

boolean

true

+
+
+
+

Specify a path to a certificate with which to validate gateway requests.

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_SECURITY_CERT_PATH

+
+
+

string

+
+
+
+

Overrides the authority used with TLS virtual hosting. Specifically, to override hostname verification in the TLS handshake. It does not change what host is actually connected to.

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_SECURITY_OVERRIDE_AUTHORITY

+
+
+

string

+
+
+
+

Client worker maximum active jobs.

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_JOB_MAX_JOBS_ACTIVE

+
+
+

int

32

+
+
+
+

Client worker number of threads

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_JOB_WORKER_EXECUTION_THREADS

+
+
+

int

1

+
+
+
+

Client worker default name

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_JOB_WORKER_NAME

+
+
+

string

default

+
+
+
+

Zeebe client request timeout configuration.

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_JOB_REQUEST_TIMEOUT

+
+
+

Duration +

PT45S

+
+
+
+

Client worker global type

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_JOB_DEFAULT_TYPE

+
+
+

string

+
+
+
+

Client job timeout

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_JOB_TIMEOUT

+
+
+

Duration +

PT5M

+
+
+
+

Client job pool interval

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_JOB_POOL_INTERVAL

+
+
+

Duration +

PT0.100S

+
+
+
+

Sets the backoff supplier. The supplier is called to determine the retry delay after each failed request; the worker then waits until the returned delay has elapsed before sending the next request. Note that this is used only for the polling mechanism - failures in the JobHandler should be handled there, and retried there if need be. Sets the backoff multiplication factor. The previous delay is multiplied by this factor. Default is 1.6.

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_JOB_EXP_BACKOFF_FACTOR

+
+
+

double

1.6

+
+
+
+

Sets the jitter factor. The next delay is changed randomly within a range of +/- this factor. For example, if the next delay is calculated to be 1s and the jitterFactor is 0.1 then the actual next delay can be somewhere between 0.9 and 1.1s. Default is 0.1

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_JOB_EXP_JITTER_FACTOR

+
+
+

double

0.1

+
+
+
+

Sets the maximum retry delay. Note that the jitter may push the retry delay over this maximum. Default is 5000ms.

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_JOB_EXP_MAX_DELAY

+
+
+

long

5000

+
+
+
+

Sets the minimum retry delay. Note that the jitter may push the retry delay below this minimum. Default is 50ms.

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_JOB_EXP_MIN_DELAY

+
+
+

long

50

+
+
+
+

List of span names

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_TRACING_ATTRIBUTES

+
+
+

list of string

+
+
+
+

Zeebe worker enable or disable flag.

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_WORKERS__WORKERS__ENABLED

+
+
+

boolean

+
+
+
+

Zeebe worker handler name.

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_WORKERS__WORKERS__NAME

+
+
+

string

+
+
+
+

Zeebe worker timeout.

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_WORKERS__WORKERS__TIMEOUT

+
+
+

long

+
+
+
+

Zeebe worker maximum jobs active.

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_WORKERS__WORKERS__MAX_JOBS_ACTIVE

+
+
+

int

+
+
+
+

Zeebe worker request timeout.

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_WORKERS__WORKERS__REQUEST_TIMEOUT

+
+
+

long

+
+
+
+

Zeebe worker poll interval.

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_WORKERS__WORKERS__POLL_INTERVAL

+
+
+

long

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-zeebe/dev/index.html b/quarkus-zeebe/dev/index.html new file mode 100644 index 0000000000..e249e25733 --- /dev/null +++ b/quarkus-zeebe/dev/index.html @@ -0,0 +1,2828 @@ + + + + + + Quarkus Zeebe :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus Zeebe

+
+
+
+

Quarkus Zeebe extension. Zeebe’s cloud-native design provides the performance, resilience, and security enterprises need to future-proof their process orchestration efforts.

+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.zeebe:quarkus-zeebe extension first to your build file.

+
+
+

For instance, with Maven, add the following dependency to your POM file:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.zeebe</groupId>
+    <artifactId>quarkus-zeebe</artifactId>
+    <version>1.3.0</version>
+</dependency>
+
+
+
+

Upgrade

+
+
+In version >=0.8.0 we replaced @ZeebeWorker with @JobWorker annotation. +
+
+
+
+In version >=0.7.0 we removed the hazelcast dependency and zeebe-simple-monitor +for test and dev services. Now we do use zeebe-test-container with debug exporter +and zeebe-dev-monitor. In test module we remove our assert API and switch to Camunda BpmnAssert +from zeebe-process-test. Test api migration: io.quarkiverse.zeebe.test.BpmnAssertio.camunda.zeebe.process.test.assertions.BpmnAssert +
+
+
+
+
+
+

Configuration

+
+
+

Exemplary Setup for your local development

+
+

Generally speaking there are three ways to configure your quarkus project to speak with camunda: +- Local dev instance with dev services +- Shared local dev instance +- Direct interaction with Camunda SaaS/ on-premise

+
+
+

You can see some exemplary configurations for each of the setups below. Please note that these are only exemplary and can be adapted to your needs.

+
+
+
+

Local dev instance with dev services

+
+
+
# enable auto load bpmn resources
+quarkus.zeebe.resources.enabled=true
+# src/main/resources/bpmn
+quarkus.zeebe.resources.location=bpmn
+# Enable zeebe Dev Service:
+quarkus.zeebe.devservices.enabled=true
+# only start devservices, if no running docker container is found
+quarkus.zeebe.devservices.shared=true
+# zeebe service name
+quarkus.zeebe.devservices.service-name=zeebe_broker
+# enable reusable zeebe test-container (https://www.testcontainers.org/features/reuse/)
+quarkus.zeebe.devservices.reuse=false
+# enable zeebe monitor Dev Service:
+quarkus.zeebe.devservices.monitor.enabled=true
+# zeebe monitor service name
+quarkus.zeebe.devservices.monitor.service-name=zeebe-dev-monitor
+# enable reusable zeebe test-container (https://www.testcontainers.org/features/reuse/)
+quarkus.zeebe.devservices.monitor.reuse=false
+# enable hot restart for bpmn subdirectories changes
+quarkus.zeebe.dev-mode.watch-bpmn-dir=true
+# enable hot restart for bpmn files changes
+quarkus.zeebe.dev-mode.watch-bpmn-files=true
+# enable hot restart for job worker changes
+quarkus.zeebe.dev-mode.watch-job-worker=true
+
+
+
+

Shared local dev instance

+
+
+
quarkus.zeebe.client.broker.gateway-address=localhost:26500
+# If you are sure that there is already an instance running, yu can directly deactivate it
+quarkus.zeebe.devservices.enabled=false
+quarkus.zeebe.devservices.shared=true
+quarkus.zeebe.devservices.monitor.serviceName=zeebe-dev-monitor
+quarkus.zeebe.devservices.serviceName=zeebe_broker
+
+
+
+
+

Direct interaction with Camunda Cloud live instance

+
+

Preferably you would be using a dev instance of Camunda and not your production process engine ;)

+
+
+
+
# Disable local dev services
+quarkus.zeebe.devservices.enabled=false
+
+# Enter your cloud credentials from the zeebe portal
+quarkus.zeebe.client.broker.gateway-address=
+# Specify a cluster id.
+quarkus.zeebe.client.cloud.cluster-id=
+# Specify a client id.
+quarkus.zeebe.client.cloud.client-id=
+# Specify a client secret to request an access token.
+quarkus.zeebe.client.cloud.client-secret=
+# Specify a cloud region.
+quarkus.zeebe.client.cloud.region=
+quarkus.zeebe.client.cloud.base-url=zeebe.camunda.io
+quarkus.zeebe.client.cloud.auth-url=https://login.cloud.camunda.io/oauth/token
+quarkus.zeebe.client.cloud.port=443
+
+# Make sure you are disabling plaintext security, otherwise connection will fail
+quarkus.zeebe.client.security.plaintext=false
+
+
+
+
+
+

Metrics

+
+

Whether zeebe metrics is enabled or not is done by quarkus.zeebe.metrics.enabled build time property. +The default is true, but shown here to indicate how it can be disabled.

+
+
+
+
quarkus.zeebe.metrics.enabled=true
+
+
+
+

You can access the following metrics:

+
+
+
    +
  • +

    camunda.job.invocations: Number of invocations of job workers (tagging the job type)

    +
  • +
  • +

    activated: The job was activated and started to process an item

    +
  • +
  • +

    completed: The processing was completed successfully

    +
  • +
  • +

    failed: The processing failed with some exception

    +
  • +
  • +

    bpmn-error: The processing completed by throwing an ZeebeBpmnError (which means there was no technical problem)

    +
  • +
+
+
+

Example:

+
+
+
+
# TYPE camunda_job_invocations counter
+# HELP camunda_job_invocations
+camunda_job_invocations_total{action="activated",type="gateway-empty-data"} 1.0
+camunda_job_invocations_total{action="completed",type="gateway-show-data"} 2.0
+camunda_job_invocations_total{action="activated",type="gateway-show-data"} 2.0
+camunda_job_invocations_total{action="completed",type="gateway-read-data"} 2.0
+
+
+
+

Micrometer

+
+

If you already have your Quarkus project configured, you can add the quarkus-micrometer-registry-prometheus extension to your project.

+
+
+
+
<dependency>
+    <groupId>io.quarkus</groupId>
+    <artifactId>quarkus-micrometer-registry-prometheus</artifactId>
+</dependency>
+
+
+ +
+
+
+

Tracing

+
+

Whether zeebe tracing is enabled or not is done by quarkus.zeebe.tracing.enabled build time property. The default is true, but shown here to indicate how it can be disabled.

+
+
+
+
quarkus.zeebe.tracing.enabled=true
+
+
+
+
+OpenTelemetry +
+
+
+

OpenTelemetry

+
+

If you already have your Quarkus project configured, you can add the quarkus-opentelemetry-exporter-otlp extension to your project.

+
+
+
+
<dependency>
+    <groupId>io.quarkus</groupId>
+    <artifactId>quarkus-opentelemetry-exporter-otlp</artifactId>
+</dependency>
+
+
+ +
+
+
+

Dev-Services

+
+

Dev Services for Zeebe is automatically enabled unless: +* quarkus.zeebe.devservices.enabled is set to false +* quarkus.zeebe.broker.gateway-address is configured

+
+
+

Dev Service for Zeebe relies on Docker to start the broker. If your environment does not support Docker, you will need +to start the broker manually, or connect to an already running broker. You can configure the broker address using +quarkus.zeebe.broker.gateway-address.

+
+
+
+Test +
+
+
+

To activate Zeebe-Dev-Monitor Dev Service use this configuration:

+
+
+
+
quarkus.zeebe.devservices.enabled=true
+quarkus.zeebe.devservices.monitor.enabled=true
+
+
+
+

Property qquarkus.zeebe.devservices.monitor.enabled=true will activate the debug exporter.

+
+
+
+
+
+

Usage

+
+
+

@JobWorker

+
+

You need to configure the job type via the JobWorker annotation:

+
+
+
+
@JobWorker(type = "my-job")
+public void executeMyJob() {
+    // handles jobs of type 'my-job'
+}
+
+
+
+

If you don’t specify the type the method name is use as default:

+
+
+
+
@JobWorker
+public void test() {
+        // handles jobs of type 'test'
+}
+
+
+
+

Or you can set a default job type:

+
+
+
+
quarkus.zeebe.client.job.default-type=test
+
+
+
+
+

Variables

+
+

You can specify that you only want to fetch some variables or when executing a job, which can decrease load and improve +performance:

+
+
+
+
@JobWorker(type="test", fetchVariables={"var1", "var2"})
+public void test(final JobClient client, final ActivatedJob job) {
+    String var1 = (String) job.getVariablesAsMap().get("var1");
+    System.out.println(var1);
+    // ...
+}
+
+
+
+
+

@Variable

+
+

By using the @Variable annotation there is a shortcut to make variable retrieval simpler, including the type cast:

+
+
+
+
@JobWorker(type="test")
+public void test(final JobClient client, final ActivatedJob job, @Variable String var1) {
+    System.out.println(var1);
+    // ...
+}
+
+
+
+

With @Variable or fetchVariables you limit which variables are loaded from the workflow engine. +You can also override this with fetchAllVariables and force that all variables are loaded anyway:

+
+
+
+
@JobWorker(type="test", fetchAllVariables=true)
+public void test(final JobClient client, final ActivatedJob job) {
+    String var1 = (String) job.getVariablesAsMap().get("var1");
+    System.out.println(var1);
+    // ...
+}
+
+
+
+
+

@VariablesAsType

+
+

You can also use your own class into which the process variables are mapped to (comparable with getVariablesAsType() in +the Java Client API). Therefore, use the @VariablesAsType annotation. In the below example, Parameter refers to your own class:

+
+
+
+
@JobWorker(type = "job1")
+public void job1(@VariablesAsType Parameter p) {
+    System.out.println(p.getValue());
+    p.setValue(1);
+    // ... custom code
+    return param;
+}
+
+
+
+
+

Fetch variables via Job

+
+

You can access variables of a process via the ActivatedJob object, which is passed into the method if it is a parameter:

+
+
+
+
@JobWorker(type="test")
+public void test(final ActivatedJob job) {
+    String var1 = (String) job.getVariablesAsMap().get("var1");
+    System.out.println(var1);
+    // ...
+}
+
+
+
+
+

@CustomHeader

+
+

You can use the @CustomHeader annotation for a parameter to retrieve custom header for a job:

+
+
+
+
@JobWorker(type = "job1")
+public void job1(@VariablesAsType Parameter p, @CustomHeader String header1, @CustomHeader("custom-header") String header2) {
+    System.out.println(header1);
+    System.out.println(header2);
+    System.out.println(p.getValue());
+    p.setValue(1);
+    // ... custom code
+    return param;
+}
+
+
+
+
+

@CustomHeaders

+
+

You can use the @CustomHeaders annotation for a parameter to retrieve custom headers for a job:

+
+
+
+
@JobWorker(type = "job1")
+public void job1(@VariablesAsType Parameter p, @CustomHeaders Map<String, String> headers) {
+    System.out.println(headers.get("header1"));
+    System.out.println(headers.get("custom-header"));
+    System.out.println(p.getValue());
+    p.setValue(1);
+    // ... custom code
+}
+
+
+
+
+

Auto-completing jobs

+
+

By default, the autoComplete attribute is set to true for any job worker. In this case, the Quarkus extension will take +care about job completion for you:

+
+
+
+
@JobWorker(type = "job1")
+public void job1(final ActivatedJob job) {
+    // ... custom code ...
+    // no need to call client.newCompleteCommand()...
+}
+
+
+
+

Note that the code within the handler method needs to be synchronously executed, as the completion will be triggered +right after the method has finished.

+
+
+

When using autoComplete you can: +* Return a Map, String, InputStream, or Object, which then will be added to the process variables +* Throw a ZeebeBpmnError which results in a BPMN error being sent to Zeebe +* Throw any other Exception that leads in a failure handed over to Zeebe

+
+
+
+
@JobWorker(type = "job1")
+public Map<String, Object> job1(final ActivatedJob job) {
+    // ... custom code ...
+    if (ok) {
+       return responseMap;
+    } else {
+       throw new ZeebeBpmnError("Error code", "Error message");
+    }
+}
+
+
+
+
+

Programmatically completing jobs

+
+

Your job worker code can also complete the job itself. This gives you more control about when exactly you want to +complete the job (e.g. allowing the completion to be moved to reactive callbacks):

+
+
+
+
@JobWorker(type = "job1")
+public void job1(final JobClient client, final ActivatedJob job) {
+    // ... custom code ...
+    client.newCompleteCommand(job.getKey()).send()
+        .exceptionally( throwable -> { throw new RuntimeException("Could not complete job " + job, throwable); });
+}
+
+
+
+

Ideally, you don’t use blocking behavior like send().join(), as this is blocking call to wait for the issues command +to be executed on the workflow engine. While this is very straightforward to use and produces easy-to-read code, +blocking code is limited in terms of scalability.

+
+
+

That’s why the worker above showed a different pattern (using exceptionally), often you might also want to use the +whenComplete callback:

+
+
+
+
 client.newCompleteCommand(job.getKey()).send()
+        .whenComplete((result, exception) -> {});
+
+
+
+

This registers a callback to be executed if the command on the workflow engine was executed or resulted in an exception. +This allows for parallelism. This is discussed in more detail in +this blog post about writing good workers for Camunda Cloud.

+
+
+
+Note that when completing jobs programmatically, you must specify autoComplete = false. Otherwise, there is a race +condition between your programmatic job completion and the Quarkus extension integration job completion, this can +lead to unpredictable results. +
+
+
+
+

Throwing ZeebeBpmnError

+
+

Whenever your code hits a problem that should lead to a BPMN error being raised, you can simply throw a ZeebeBpmnError +providing the error code used in BPMN:

+
+
+
+
@JobWorker(type = "job1")
+public Map<String, Object> job1(final ActivatedJob job) {
+    // ... custom code ...
+    if (ok) {
+       return responseMap;
+    } else {
+       throw new ZeebeBpmnError("Error code", "Error message");
+    }
+}
+
+
+
+
+

Non-blocking Methods

+
+

By default, a scheduled method is executed on the main executor for blocking tasks. As a result, a technology that is +designed to run on a Vert.x event loop (such as Hibernate Reactive) cannot be used inside the method body. For this +reason, a job worker method that returns java.util.concurrent.CompletionStage<?> or io.smallrye.mutiny.Uni<Void> +or is annotated with @io.smallrye.common.annotation.NonBlocking is executed on the Vert.x event loop.

+
+
+
+
@JobWorker(type = "job1")
+public Uni<Void> job1(final ActivatedJob job) {
+    // ... custom code ...
+    // no need to call client.newCompleteCommand()...
+}
+
+
+
+

The return type Uni<Void> instructs the job worker to execute the method on the Vert.x event loop.

+
+
+
+
+
+

Testing

+
+
+

To use the test extension, add this dependency to the project:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.zeebe</groupId>
+    <artifactId>quarkus-zeebe-test</artifactId>
+    <version>{version}</version>
+    <scope>test</scope>
+</dependency>
+
+
+
+
+Test +
+
+
+

To use the ZeebeClient and BpmnAssert in the tests use the @QuarkusTestResource(ZeebeTestResource.class) and enable this configuration:

+
+
+
+
quarkus.zeebe.devservices.enabled=true
+
+
+
+

Test example

+
+
+
+
import io.quarkiverse.zeebe.test.ZeebeTestResource;
+import io.quarkus.test.common.QuarkusTestResource;
+import io.camunda.zeebe.client.ZeebeClient;
+
+@QuarkusTest
+@QuarkusTestResource(ZeebeTestResource.class)
+public class BaseTest {
+
+    @InjectZeebeClient
+    ZeebeClient client;
+
+    @Test
+    public void startProcessTest() {
+        ProcessInstanceEvent event = client.newCreateInstanceCommand()
+                .bpmnProcessId("test").latestVersion()
+                .variables(Map.of("k","v")).send().join();
+
+        ProcessInstanceAssert a = BpmnAssert.assertThat(event);
+        await().atMost(7, SECONDS).untilAsserted(a::isCompleted);
+    }
+}
+
+
+
+

We can reuse the test for the integration test.

+
+
+
+
import io.quarkus.test.junit.QuarkusIntegrationTest;
+
+@QuarkusIntegrationTest
+public class BaseIT extends BaseTest {
+
+}
+
+
+
+

For more information check examples in the integration-tests directory in this repo.

+
+
+

Testing with embedded engine

+
+
+The Zeebe process test embedded engine requires Java version >= 17 +
+
+
+
+
import io.quarkiverse.zeebe.test.ZeebeTestEmbeddedResource;
+import io.quarkus.test.common.QuarkusTestResource;
+import io.camunda.zeebe.client.ZeebeClient;
+
+@QuarkusTest
+@QuarkusTestResource(ZeebeTestEmbeddedResource.class)
+public class BaseTest {
+
+    @InjectZeebeClient
+    ZeebeClient client;
+
+    @Test
+    public void startProcessTest() {
+        ProcessInstanceEvent event = client.newCreateInstanceCommand()
+                .bpmnProcessId("test").latestVersion()
+                .variables(Map.of("k","v")).send().join();
+
+        ProcessInstanceAssert a = BpmnAssert.assertThat(event);
+        await().atMost(7, SECONDS).untilAsserted(a::isCompleted);
+    }
+}
+
+
+
+
+
+
+

Extension Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

If DevServices has been explicitly enabled or disabled. DevServices is generally enabled by default, unless there is an existing configuration present.

+
+
+

When DevServices is enabled Quarkus will attempt to automatically configure and start a database when running in Dev or Test mode and when Docker is running.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_ENABLED

+
+
+

boolean

true

+
+
+
+

Optional fixed port the dev service will listen to.

+
+
+

If not defined, the port will be chosen randomly.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_PORT

+
+
+

int

+
+
+
+

Indicates if the Zeebe server managed by Quarkus Dev Services is shared. When shared, Quarkus looks for running containers using label-based service discovery. If a matching container is found, it is used, and so a second one is not started. Otherwise, Dev Services for Zeebe starts a new container.

+
+
+

The discovery uses the quarkus-dev-service-zeebe label. The value is configured using the service-name property.

+
+
+

Container sharing is only used in dev mode.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_SHARED

+
+
+

boolean

true

+
+
+
+

The value of the quarkus-dev-service-zeebe label attached to the started container. This property is used when shared is set to true. In this case, before starting a container, Dev Services for Zeebe looks for a container with the quarkus-dev-service-zeebe label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise, it starts a new container with the quarkus-dev-service-zeebe label set to the specified value.

+
+
+

This property is used when you need multiple shared Zeebe servers.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_SERVICE_NAME

+
+
+

string

zeebe

+
+
+
+

The container image name to use, for container based DevServices providers.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_IMAGE_NAME

+
+
+

string

+
+
+
+

Helper to define the stop strategy for containers created by DevServices. In particular, we don’t want to actually stop the containers when they have been flagged for reuse, and when the Testcontainers configuration has been explicitly set to allow container reuse. To enable reuse, ass testcontainers.reuse.enable=true in your .testcontainers.properties file, to be stored in your home.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_REUSE

+
+
+

boolean

false

+
+
+
+

Enable or disable dev monitor for dev-services.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_MONITOR_ENABLED

+
+
+

boolean

false

+
+
+
+

Optional fixed port the dev monitor will listen to.

+
+
+

If not defined, the port will be chosen randomly.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_MONITOR_PORT

+
+
+

int

+
+
+
+

The container image name to use, for container based zeebe simple monitor.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_MONITOR_IMAGE_NAME

+
+
+

string

ghcr.io/lorislab/zeebe-dev-monitor:8.4

+
+
+
+

The value of the quarkus-dev-service-zeebe label attached to the started container. This property is used when shared is set to true. In this case, before starting a container, Dev Services for Zeebe looks for a container with the quarkus-dev-service-zeebe label set to the configured value. If found, it will use this container instead of starting a new one. Otherwise, it starts a new container with the quarkus-dev-service-zeebe label set to the specified value.

+
+
+

This property is used when you need multiple shared Zeebe servers.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_MONITOR_SERVICE_NAME

+
+
+

string

zeebe-dev-monitor

+
+
+
+

Helper to define the stop strategy for containers created by DevServices. In particular, we don’t want to actually stop the containers when they have been flagged for reuse, and when the Testcontainers configuration has been explicitly set to allow container reuse. To enable reuse, ass testcontainers.reuse.enable=true in your .testcontainers.properties file, to be stored in your home.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_MONITOR_REUSE

+
+
+

boolean

false

+
+
+
+

Optional fixed debug export receiver port the dev service will listen to.

+
+
+

If not defined, the port will be chosen randomly.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_TEST_RECEIVER_PORT

+
+
+

int

+
+
+
+

Disable or enable debug exporter for the test.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_TEST_EXPORTER

+
+
+

boolean

true

+
+
+
+

Enable or disable debug exporter.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_DEBUG_EXPORTER_ENABLED

+
+
+

boolean

false

+
+
+
+

Fixed debug export receiver port the localhost service will listen to.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEVSERVICES_DEBUG_EXPORTER_RECEIVER_PORT

+
+
+

int

8080

+
+
+
+

Observe changes in the bpmn files.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEV_MODE_WATCH_BPMN_FILES

+
+
+

boolean

true

+
+
+
+

Observe changes in the bpmn directory and subdirectories.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEV_MODE_WATCH_BPMN_DIR

+
+
+

boolean

true

+
+
+
+

Observe changes in the job worker.

+
+
+

Environment variable: QUARKUS_ZEEBE_DEV_MODE_WATCH_JOB_WORKER

+
+
+

boolean

true

+
+
+
+

Whether an auto scan BPMN process folder. Default true

+
+
+

Environment variable: QUARKUS_ZEEBE_RESOURCES_ENABLED

+
+
+

boolean

true

+
+
+
+

BPMN process root folder. Default bpmn

+
+
+

Environment variable: QUARKUS_ZEEBE_RESOURCES_LOCATION

+
+
+

string

bpmn

+
+
+
+

Whether a metrics is enabled in case the micrometer or micro-profile metrics extension is present.

+
+
+

Environment variable: QUARKUS_ZEEBE_METRICS_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether a health check is published in case the smallrye-health extension is present.

+
+
+

Environment variable: QUARKUS_ZEEBE_HEALTH_ENABLED

+
+
+

boolean

true

+
+
+
+

Whether an opentracing is published in case the smallrye-opentracing extension is present.

+
+
+

Environment variable: QUARKUS_ZEEBE_TRACING_ENABLED

+
+
+

boolean

true

+
+
+
+

Zeebe gateway address. Default: localhost:26500

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_BROKER_GATEWAY_ADDRESS

+
+
+

string

localhost:26500

+
+
+
+

Client keep alive duration

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_BROKER_KEEP_ALIVE

+
+
+

Duration +

PT45S

+
+
+
+

Cloud cluster ID

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_CLOUD_CLUSTER_ID

+
+
+

string

+
+
+
+

Cloud client secret ID

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_CLOUD_CLIENT_ID

+
+
+

string

+
+
+
+

Specify a client secret to request an access token.

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_CLOUD_CLIENT_SECRET

+
+
+

string

+
+
+
+

Cloud region

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_CLOUD_REGION

+
+
+

string

bru-2

+
+
+
+

Cloud base URL

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_CLOUD_BASE_URL

+
+
+

string

zeebe.camunda.io

+
+
+
+

Cloud authorization server URL

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_CLOUD_AUTH_URL

+
+
+

string

https://login.cloud.camunda.io/oauth/token

+
+
+
+

Cloud port

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_CLOUD_PORT

+
+
+

int

443

+
+
+
+

Cloud credentials cache path

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_CLOUD_CREDENTIALS_CACHE_PATH

+
+
+

string

+
+
+
+

OAuth client secret ID

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_OAUTH_CLIENT_ID

+
+
+

string

+
+
+
+

Specify a client secret to request an access token.

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_OAUTH_CLIENT_SECRET

+
+
+

string

+
+
+
+

Authorization server URL

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_OAUTH_AUTH_URL

+
+
+

string

https://login.cloud.camunda.io/oauth/token

+
+
+
+

Credentials cache path

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_OAUTH_CREDENTIALS_CACHE_PATH

+
+
+

string

+
+
+
+

OAuth connect timeout

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_OAUTH_CONNECT_TIMEOUT

+
+
+

Duration +

PT5S

+
+
+
+

OAuth read timeout

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_OAUTH_READ_TIMEOUT

+
+
+

Duration +

PT5S

+
+
+
+

Zeebe token audience

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_OAUTH_TOKEN_AUDIENCE

+
+
+

string

+
+
+
+

Maximum retries for the auto-completion command.

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_AUTO_COMPLETE_MAX_RETRIES

+
+
+

int

20

+
+
+
+

Maximum retries for the auto-completion command.

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_AUTO_COMPLETE_RETRY_DELAY

+
+
+

long

50

+
+
+
+

Sets the backoff supplier. The supplier is called to determine the retry delay after each failed request; the worker then waits until the returned delay has elapsed before sending the next request. Note that this is used only for the polling mechanism - failures in the JobHandler should be handled there, and retried there if need be. Sets the backoff multiplication factor. The previous delay is multiplied by this factor. Default is 1.5.

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_AUTO_COMPLETE_EXP_BACKOFF_FACTOR

+
+
+

double

1.5

+
+
+
+

Sets the jitter factor. The next delay is changed randomly within a range of +/- this factor. For example, if the next delay is calculated to be 1s and the jitterFactor is 0.1 then the actual next delay can be somewhere between 0.9 and 1.1s. Default is 0.2

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_AUTO_COMPLETE_EXP_JITTER_FACTOR

+
+
+

double

0.2

+
+
+
+

Sets the maximum retry delay. Note that the jitter may push the retry delay over this maximum. Default is 1000ms.

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_AUTO_COMPLETE_EXP_MAX_DELAY

+
+
+

long

1000

+
+
+
+

Sets the minimum retry delay. Note that the jitter may push the retry delay below this minimum. Default is 50ms.

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_AUTO_COMPLETE_EXP_MIN_DELAY

+
+
+

long

50

+
+
+
+

Client message time to live duration.

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_MESSAGE_TIME_TO_LIVE

+
+
+

Duration +

PT1H

+
+
+
+

Client security plaintext flag.

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_SECURITY_PLAINTEXT

+
+
+

boolean

true

+
+
+
+

Specify a path to a certificate with which to validate gateway requests.

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_SECURITY_CERT_PATH

+
+
+

string

+
+
+
+

Overrides the authority used with TLS virtual hosting. Specifically, to override hostname verification in the TLS handshake. It does not change what host is actually connected to.

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_SECURITY_OVERRIDE_AUTHORITY

+
+
+

string

+
+
+
+

Client worker maximum active jobs.

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_JOB_MAX_JOBS_ACTIVE

+
+
+

int

32

+
+
+
+

Client worker number of threads

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_JOB_WORKER_EXECUTION_THREADS

+
+
+

int

1

+
+
+
+

Client worker default name

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_JOB_WORKER_NAME

+
+
+

string

default

+
+
+
+

Zeebe client request timeout configuration.

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_JOB_REQUEST_TIMEOUT

+
+
+

Duration +

PT45S

+
+
+
+

Client worker global type

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_JOB_DEFAULT_TYPE

+
+
+

string

+
+
+
+

Client job timeout

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_JOB_TIMEOUT

+
+
+

Duration +

PT5M

+
+
+
+

Client job pool interval

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_JOB_POOL_INTERVAL

+
+
+

Duration +

PT0.100S

+
+
+
+

Sets the backoff supplier. The supplier is called to determine the retry delay after each failed request; the worker then waits until the returned delay has elapsed before sending the next request. Note that this is used only for the polling mechanism - failures in the JobHandler should be handled there, and retried there if need be. Sets the backoff multiplication factor. The previous delay is multiplied by this factor. Default is 1.6.

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_JOB_EXP_BACKOFF_FACTOR

+
+
+

double

1.6

+
+
+
+

Sets the jitter factor. The next delay is changed randomly within a range of +/- this factor. For example, if the next delay is calculated to be 1s and the jitterFactor is 0.1 then the actual next delay can be somewhere between 0.9 and 1.1s. Default is 0.1

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_JOB_EXP_JITTER_FACTOR

+
+
+

double

0.1

+
+
+
+

Sets the maximum retry delay. Note that the jitter may push the retry delay over this maximum. Default is 5000ms.

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_JOB_EXP_MAX_DELAY

+
+
+

long

5000

+
+
+
+

Sets the minimum retry delay. Note that the jitter may push the retry delay below this minimum. Default is 50ms.

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_JOB_EXP_MIN_DELAY

+
+
+

long

50

+
+
+
+

List of span names

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_TRACING_ATTRIBUTES

+
+
+

list of string

+
+
+
+

Zeebe worker enable or disable flag.

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_WORKERS__WORKERS__ENABLED

+
+
+

boolean

+
+
+
+

Zeebe worker handler name.

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_WORKERS__WORKERS__NAME

+
+
+

string

+
+
+
+

Zeebe worker timeout.

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_WORKERS__WORKERS__TIMEOUT

+
+
+

long

+
+
+
+

Zeebe worker maximum jobs active.

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_WORKERS__WORKERS__MAX_JOBS_ACTIVE

+
+
+

int

+
+
+
+

Zeebe worker request timeout.

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_WORKERS__WORKERS__REQUEST_TIMEOUT

+
+
+

long

+
+
+
+

Zeebe worker poll interval.

+
+
+

Environment variable: QUARKUS_ZEEBE_CLIENT_WORKERS__WORKERS__POLL_INTERVAL

+
+
+

long

+
+ + + + + +
+ + +
About the Duration format
+
+

To write duration values, use the standard java.time.Duration format. +See the Duration#parse() Java API documentation for more information.

+
+
+

You can also use a simplified format, starting with a number:

+
+
+
    +
  • +

    If the value is only a number, it represents time in seconds.

    +
  • +
  • +

    If the value is a number followed by ms, it represents time in milliseconds.

    +
  • +
+
+
+

In other cases, the simplified format is translated to the java.time.Duration format for parsing:

+
+
+
    +
  • +

    If the value is a number followed by h, m, or s, it is prefixed with PT.

    +
  • +
  • +

    If the value is a number followed by d, it is prefixed with P.

    +
  • +
+
+
+
+
+
+
+
+
+
+ + + + + + + diff --git a/quarkus-zookeeper-client/dev/config/config-group-io-quarkiverse-zookeeper-config-client-config.html b/quarkus-zookeeper-client/dev/config/config-group-io-quarkiverse-zookeeper-config-client-config.html new file mode 100644 index 0000000000..fc88dac4e2 --- /dev/null +++ b/quarkus-zookeeper-client/dev/config/config-group-io-quarkiverse-zookeeper-config-client-config.html @@ -0,0 +1,1251 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Set the value to true to enable SASL authentication.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_AUTH_SASL_ENABLED

+
+
+

boolean

false

+
+
+
+

Specifies the context key in the JAAS login file.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_AUTH_CLIENTCONFIG

+
+
+

string

Client

+
+
+
+

SALS client configuration string, e.g. org.apache.zookeeper.server.auth.DigestLoginModule required username="test" password="passwd";

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_AUTH_SASL_CONFIG_STRING

+
+
+

string

+
+
+
+

Specifies the server principal to be used by the client for authentication, while connecting to the zookeeper server, when Kerberos authentication is enabled. If this configuration is provided, then the ZooKeeper client will NOT USE any of the following parameters to determine the server principal: zookeeper.sasl.client.username, zookeeper.sasl.client.canonicalize.hostname, zookeeper.server.realm.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_AUTH_SERVER_PRINCIPAL

+
+
+

string

+
+
+
+

Traditionally, a principal is divided into three parts: the primary, the instance, and the realm. The format of a typical Kerberos V5 principal is primary/instance@REALM. zookeeper.sasl.client.username specifies the primary part of the server principal.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_AUTH_CLIENT_USERNAME

+
+
+

string

zookeeper

+
+
+
+

Expecting the zookeeper.server.principal parameter is not provided, the ZooKeeper client will try to determine the 'instance' (host) part of the ZooKeeper server principal. First it takes the hostname provided as the ZooKeeper server connection string. Then it tries to 'canonicalize' the address by getting the fully qualified domain name belonging to the address. You can disable this 'canonicalization' by setting: zookeeper.sasl.client.canonicalize.hostname=false.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_AUTH_CLIENT_CANONICALIZE_HOSTNAME

+
+
+

boolean

true

+
+
+
+

Realm part of the server principal. By default it is the client principal realm.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_AUTH_SERVER_REALM

+
+
+

string

+
+
+
+

Specifies the file path to a JKS containing the local credentials to be used for SSL connections.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_SSL_KEY_STORE_LOCATION

+
+
+

string

+
+
+
+

Specifies the password to unlock the file.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_SSL_KEY_STORE_PASSWORD

+
+
+

string

+
+
+
+

Specifies the file path to a JKS containing the remote credentials to be used for SSL connections.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_SSL_TRUST_STORE_LOCATION

+
+
+

string

+
+
+
+

Specifies the password to unlock the file.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_SSL_TRUST_STORE_PASSWORD

+
+
+

string

+
+
+
+

Specifies the file format of keys store files used to establish TLS connection to the ZooKeeper server. Values: JKS, PEM, PKCS12 or null.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_SSL_KEY_STORE_TYPE

+
+
+

string

+
+
+
+

Specifies the file format of trust store files used to establish TLS connection to the ZooKeeper server. Values: JKS, PEM, PKCS12 or null.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_SSL_TRUST_STORE_TYPE

+
+
+

string

+
+
+
+

Connection timeout in millis.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_CONNECTION_TIMEOUT_MILLIS

+
+
+

int

30000

+
+
+
+

Request timeout in millis.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_REQUEST_TIMEOUT_MILLIS

+
+
+

int

5000

+
+
+
+

This switch controls whether automatic watch resetting is enabled. Clients automatically reset watches during session reconnect by default, this option allows the client to turn off this behavior by setting zookeeper.disableAutoWatchReset to true.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_DISABLE_AUTOWATCH_RESET

+
+
+

boolean

false

+
+
+
+

If you want to connect to the server secure client port, you need to set this property to true on the client. This will connect to server using SSL with specified credentials. Note that it requires the Netty client.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_SECURE

+
+
+

boolean

false

+
+
+
+

Specifies which ClientCnxnSocket to be used. Possible values are org.apache.zookeeper.ClientCnxnSocketNIO and org.apache.zookeeper.ClientCnxnSocketNetty . Default is org.apache.zookeeper.ClientCnxnSocketNIO . If you want to connect to server’s secure client port, you need to set this property to org.apache.zookeeper.ClientCnxnSocketNetty on client.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_CLIENT_CNXN_SOCKET

+
+
+

string

org.apache.zookeeper.ClientCnxnSocketNIO

+
+
+
+

In the client side, it specifies the maximum size of the incoming data from the server. The default is 0xfffff(1048575) bytes, or just under 1M. This is really a sanity check. The ZooKeeper server is designed to store and send data on the order of kilobytes. If incoming data length is more than this value, an IOException is raised. This value of client side should keep same with the server side(Setting System.setProperty("jute.maxbuffer", "xxxx") in the client side will work), otherwise problems will arise.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_JUTE_MAX_BUFFER

+
+
+

int

1048575

+
+
+
+
+ + + + + + + diff --git a/quarkus-zookeeper-client/dev/config/config-group-io-quarkiverse-zookeeper-config-sasl-config.html b/quarkus-zookeeper-client/dev/config/config-group-io-quarkiverse-zookeeper-config-sasl-config.html new file mode 100644 index 0000000000..703998e7b1 --- /dev/null +++ b/quarkus-zookeeper-client/dev/config/config-group-io-quarkiverse-zookeeper-config-sasl-config.html @@ -0,0 +1,1047 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Set the value to true to enable SASL authentication.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_AUTH_SASL_ENABLED

+
+
+

boolean

false

+
+
+
+

Specifies the context key in the JAAS login file.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_AUTH_CLIENTCONFIG

+
+
+

string

Client

+
+
+
+

SALS client configuration string, e.g. org.apache.zookeeper.server.auth.DigestLoginModule required username="test" password="passwd";

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_AUTH_SASL_CONFIG_STRING

+
+
+

string

+
+
+
+

Specifies the server principal to be used by the client for authentication, while connecting to the zookeeper server, when Kerberos authentication is enabled. If this configuration is provided, then the ZooKeeper client will NOT USE any of the following parameters to determine the server principal: zookeeper.sasl.client.username, zookeeper.sasl.client.canonicalize.hostname, zookeeper.server.realm.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_AUTH_SERVER_PRINCIPAL

+
+
+

string

+
+
+
+

Traditionally, a principal is divided into three parts: the primary, the instance, and the realm. The format of a typical Kerberos V5 principal is primary/instance@REALM. zookeeper.sasl.client.username specifies the primary part of the server principal.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_AUTH_CLIENT_USERNAME

+
+
+

string

zookeeper

+
+
+
+

Expecting the zookeeper.server.principal parameter is not provided, the ZooKeeper client will try to determine the 'instance' (host) part of the ZooKeeper server principal. First it takes the hostname provided as the ZooKeeper server connection string. Then it tries to 'canonicalize' the address by getting the fully qualified domain name belonging to the address. You can disable this 'canonicalization' by setting: zookeeper.sasl.client.canonicalize.hostname=false.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_AUTH_CLIENT_CANONICALIZE_HOSTNAME

+
+
+

boolean

true

+
+
+
+

Realm part of the server principal. By default it is the client principal realm.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_AUTH_SERVER_REALM

+
+
+

string

+
+
+
+
+ + + + + + + diff --git a/quarkus-zookeeper-client/dev/config/config-group-io-quarkiverse-zookeeper-config-secure-client-config.html b/quarkus-zookeeper-client/dev/config/config-group-io-quarkiverse-zookeeper-config-secure-client-config.html new file mode 100644 index 0000000000..237c3b4289 --- /dev/null +++ b/quarkus-zookeeper-client/dev/config/config-group-io-quarkiverse-zookeeper-config-secure-client-config.html @@ -0,0 +1,1030 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Specifies the file path to a JKS containing the local credentials to be used for SSL connections.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_SSL_KEY_STORE_LOCATION

+
+
+

string

+
+
+
+

Specifies the password to unlock the file.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_SSL_KEY_STORE_PASSWORD

+
+
+

string

+
+
+
+

Specifies the file path to a JKS containing the remote credentials to be used for SSL connections.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_SSL_TRUST_STORE_LOCATION

+
+
+

string

+
+
+
+

Specifies the password to unlock the file.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_SSL_TRUST_STORE_PASSWORD

+
+
+

string

+
+
+
+

Specifies the file format of keys store files used to establish TLS connection to the ZooKeeper server. Values: JKS, PEM, PKCS12 or null.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_SSL_KEY_STORE_TYPE

+
+
+

string

+
+
+
+

Specifies the file format of trust store files used to establish TLS connection to the ZooKeeper server. Values: JKS, PEM, PKCS12 or null.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_SSL_TRUST_STORE_TYPE

+
+
+

string

+
+
+
+
+ + + + + + + diff --git a/quarkus-zookeeper-client/dev/config/config-group-io-quarkiverse-zookeeper-config-session-config.html b/quarkus-zookeeper-client/dev/config/config-group-io-quarkiverse-zookeeper-config-session-config.html new file mode 100644 index 0000000000..3769cae4ed --- /dev/null +++ b/quarkus-zookeeper-client/dev/config/config-group-io-quarkiverse-zookeeper-config-session-config.html @@ -0,0 +1,979 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Comma separated host:port pairs, each corresponding to a zk server.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_SESSION_CONNECTION_STRING

+
+
+

string

required

+
+
+
+

Session timeout in milliseconds.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_SESSION_TIMEOUT

+
+
+

int

30000

+
+
+
+

Whether the created client is allowed to go to read-only mode in case of partitioning. Read-only mode basically means that if the client can’t find any majority servers but there’s partitioned server it could reach, it connects to one in read-only mode.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_SESSION_CAN_BE_READ_ONLY

+
+
+

boolean

false

+
+
+
+
+ + + + + + + diff --git a/quarkus-zookeeper-client/dev/config/quarkus-zookeeper-general-config-items.html b/quarkus-zookeeper-client/dev/config/quarkus-zookeeper-general-config-items.html new file mode 100644 index 0000000000..b0e5e04d07 --- /dev/null +++ b/quarkus-zookeeper-client/dev/config/quarkus-zookeeper-general-config-items.html @@ -0,0 +1,1302 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Set the value to true to enable SASL authentication.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_AUTH_SASL_ENABLED

+
+
+

boolean

false

+
+
+
+

Specifies the context key in the JAAS login file.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_AUTH_CLIENTCONFIG

+
+
+

string

Client

+
+
+
+

SALS client configuration string, e.g. org.apache.zookeeper.server.auth.DigestLoginModule required username="test" password="passwd";

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_AUTH_SASL_CONFIG_STRING

+
+
+

string

+
+
+
+

Specifies the server principal to be used by the client for authentication, while connecting to the zookeeper server, when Kerberos authentication is enabled. If this configuration is provided, then the ZooKeeper client will NOT USE any of the following parameters to determine the server principal: zookeeper.sasl.client.username, zookeeper.sasl.client.canonicalize.hostname, zookeeper.server.realm.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_AUTH_SERVER_PRINCIPAL

+
+
+

string

+
+
+
+

Traditionally, a principal is divided into three parts: the primary, the instance, and the realm. The format of a typical Kerberos V5 principal is primary/instance@REALM. zookeeper.sasl.client.username specifies the primary part of the server principal.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_AUTH_CLIENT_USERNAME

+
+
+

string

zookeeper

+
+
+
+

Expecting the zookeeper.server.principal parameter is not provided, the ZooKeeper client will try to determine the 'instance' (host) part of the ZooKeeper server principal. First it takes the hostname provided as the ZooKeeper server connection string. Then it tries to 'canonicalize' the address by getting the fully qualified domain name belonging to the address. You can disable this 'canonicalization' by setting: zookeeper.sasl.client.canonicalize.hostname=false.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_AUTH_CLIENT_CANONICALIZE_HOSTNAME

+
+
+

boolean

true

+
+
+
+

Realm part of the server principal. By default it is the client principal realm.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_AUTH_SERVER_REALM

+
+
+

string

+
+
+
+

Specifies the file path to a JKS containing the local credentials to be used for SSL connections.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_SSL_KEY_STORE_LOCATION

+
+
+

string

+
+
+
+

Specifies the password to unlock the file.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_SSL_KEY_STORE_PASSWORD

+
+
+

string

+
+
+
+

Specifies the file path to a JKS containing the remote credentials to be used for SSL connections.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_SSL_TRUST_STORE_LOCATION

+
+
+

string

+
+
+
+

Specifies the password to unlock the file.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_SSL_TRUST_STORE_PASSWORD

+
+
+

string

+
+
+
+

Specifies the file format of keys store files used to establish TLS connection to the ZooKeeper server. Values: JKS, PEM, PKCS12 or null.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_SSL_KEY_STORE_TYPE

+
+
+

string

+
+
+
+

Specifies the file format of trust store files used to establish TLS connection to the ZooKeeper server. Values: JKS, PEM, PKCS12 or null.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_SSL_TRUST_STORE_TYPE

+
+
+

string

+
+
+
+

Connection timeout in millis.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_CONNECTION_TIMEOUT_MILLIS

+
+
+

int

30000

+
+
+
+

Request timeout in millis.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_REQUEST_TIMEOUT_MILLIS

+
+
+

int

5000

+
+
+
+

This switch controls whether automatic watch resetting is enabled. Clients automatically reset watches during session reconnect by default, this option allows the client to turn off this behavior by setting zookeeper.disableAutoWatchReset to true.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_DISABLE_AUTOWATCH_RESET

+
+
+

boolean

false

+
+
+
+

If you want to connect to the server secure client port, you need to set this property to true on the client. This will connect to server using SSL with specified credentials. Note that it requires the Netty client.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_SECURE

+
+
+

boolean

false

+
+
+
+

Specifies which ClientCnxnSocket to be used. Possible values are org.apache.zookeeper.ClientCnxnSocketNIO and org.apache.zookeeper.ClientCnxnSocketNetty . Default is org.apache.zookeeper.ClientCnxnSocketNIO . If you want to connect to server’s secure client port, you need to set this property to org.apache.zookeeper.ClientCnxnSocketNetty on client.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_CLIENT_CNXN_SOCKET

+
+
+

string

org.apache.zookeeper.ClientCnxnSocketNIO

+
+
+
+

In the client side, it specifies the maximum size of the incoming data from the server. The default is 0xfffff(1048575) bytes, or just under 1M. This is really a sanity check. The ZooKeeper server is designed to store and send data on the order of kilobytes. If incoming data length is more than this value, an IOException is raised. This value of client side should keep same with the server side(Setting System.setProperty("jute.maxbuffer", "xxxx") in the client side will work), otherwise problems will arise.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_JUTE_MAX_BUFFER

+
+
+

int

1048575

+
+
+
+

Comma separated host:port pairs, each corresponding to a zk server.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_SESSION_CONNECTION_STRING

+
+
+

string

required

+
+
+
+

Session timeout in milliseconds.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_SESSION_TIMEOUT

+
+
+

int

30000

+
+
+
+

Whether the created client is allowed to go to read-only mode in case of partitioning. Read-only mode basically means that if the client can’t find any majority servers but there’s partitioned server it could reach, it connects to one in read-only mode.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_SESSION_CAN_BE_READ_ONLY

+
+
+

boolean

false

+
+
+
+
+ + + + + + + diff --git a/quarkus-zookeeper-client/dev/config/quarkus-zookeeper-io-quarkiverse-zookeeper-config-zookeeper-configuration.html b/quarkus-zookeeper-client/dev/config/quarkus-zookeeper-io-quarkiverse-zookeeper-config-zookeeper-configuration.html new file mode 100644 index 0000000000..506661ccb9 --- /dev/null +++ b/quarkus-zookeeper-client/dev/config/quarkus-zookeeper-io-quarkiverse-zookeeper-config-zookeeper-configuration.html @@ -0,0 +1,1319 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Set the value to true to enable SASL authentication.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_AUTH_SASL_ENABLED

+
+
+

boolean

false

+
+
+
+

Specifies the context key in the JAAS login file.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_AUTH_CLIENTCONFIG

+
+
+

string

Client

+
+
+
+

SALS client configuration string, e.g. org.apache.zookeeper.server.auth.DigestLoginModule required username="test" password="passwd";

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_AUTH_SASL_CONFIG_STRING

+
+
+

string

+
+
+
+

Specifies the server principal to be used by the client for authentication, while connecting to the zookeeper server, when Kerberos authentication is enabled. If this configuration is provided, then the ZooKeeper client will NOT USE any of the following parameters to determine the server principal: zookeeper.sasl.client.username, zookeeper.sasl.client.canonicalize.hostname, zookeeper.server.realm.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_AUTH_SERVER_PRINCIPAL

+
+
+

string

+
+
+
+

Traditionally, a principal is divided into three parts: the primary, the instance, and the realm. The format of a typical Kerberos V5 principal is primary/instance@REALM. zookeeper.sasl.client.username specifies the primary part of the server principal.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_AUTH_CLIENT_USERNAME

+
+
+

string

zookeeper

+
+
+
+

Expecting the zookeeper.server.principal parameter is not provided, the ZooKeeper client will try to determine the 'instance' (host) part of the ZooKeeper server principal. First it takes the hostname provided as the ZooKeeper server connection string. Then it tries to 'canonicalize' the address by getting the fully qualified domain name belonging to the address. You can disable this 'canonicalization' by setting: zookeeper.sasl.client.canonicalize.hostname=false.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_AUTH_CLIENT_CANONICALIZE_HOSTNAME

+
+
+

boolean

true

+
+
+
+

Realm part of the server principal. By default it is the client principal realm.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_AUTH_SERVER_REALM

+
+
+

string

+
+
+
+

Specifies the file path to a JKS containing the local credentials to be used for SSL connections.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_SSL_KEY_STORE_LOCATION

+
+
+

string

+
+
+
+

Specifies the password to unlock the file.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_SSL_KEY_STORE_PASSWORD

+
+
+

string

+
+
+
+

Specifies the file path to a JKS containing the remote credentials to be used for SSL connections.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_SSL_TRUST_STORE_LOCATION

+
+
+

string

+
+
+
+

Specifies the password to unlock the file.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_SSL_TRUST_STORE_PASSWORD

+
+
+

string

+
+
+
+

Specifies the file format of keys store files used to establish TLS connection to the ZooKeeper server. Values: JKS, PEM, PKCS12 or null.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_SSL_KEY_STORE_TYPE

+
+
+

string

+
+
+
+

Specifies the file format of trust store files used to establish TLS connection to the ZooKeeper server. Values: JKS, PEM, PKCS12 or null.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_SSL_TRUST_STORE_TYPE

+
+
+

string

+
+
+
+

Connection timeout in millis.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_CONNECTION_TIMEOUT_MILLIS

+
+
+

int

30000

+
+
+
+

Request timeout in millis.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_REQUEST_TIMEOUT_MILLIS

+
+
+

int

5000

+
+
+
+

This switch controls whether automatic watch resetting is enabled. Clients automatically reset watches during session reconnect by default, this option allows the client to turn off this behavior by setting zookeeper.disableAutoWatchReset to true.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_DISABLE_AUTOWATCH_RESET

+
+
+

boolean

false

+
+
+
+

If you want to connect to the server secure client port, you need to set this property to true on the client. This will connect to server using SSL with specified credentials. Note that it requires the Netty client.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_SECURE

+
+
+

boolean

false

+
+
+
+

Specifies which ClientCnxnSocket to be used. Possible values are org.apache.zookeeper.ClientCnxnSocketNIO and org.apache.zookeeper.ClientCnxnSocketNetty . Default is org.apache.zookeeper.ClientCnxnSocketNIO . If you want to connect to server’s secure client port, you need to set this property to org.apache.zookeeper.ClientCnxnSocketNetty on client.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_CLIENT_CNXN_SOCKET

+
+
+

string

org.apache.zookeeper.ClientCnxnSocketNIO

+
+
+
+

In the client side, it specifies the maximum size of the incoming data from the server. The default is 0xfffff(1048575) bytes, or just under 1M. This is really a sanity check. The ZooKeeper server is designed to store and send data on the order of kilobytes. If incoming data length is more than this value, an IOException is raised. This value of client side should keep same with the server side(Setting System.setProperty("jute.maxbuffer", "xxxx") in the client side will work), otherwise problems will arise.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_JUTE_MAX_BUFFER

+
+
+

int

1048575

+
+
+
+

Comma separated host:port pairs, each corresponding to a zk server.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_SESSION_CONNECTION_STRING

+
+
+

string

required

+
+
+
+

Session timeout in milliseconds.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_SESSION_TIMEOUT

+
+
+

int

30000

+
+
+
+

Whether the created client is allowed to go to read-only mode in case of partitioning. Read-only mode basically means that if the client can’t find any majority servers but there’s partitioned server it could reach, it connects to one in read-only mode.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_SESSION_CAN_BE_READ_ONLY

+
+
+

boolean

false

+
+
+
+

Whether to enable health checks.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_HEALTH_ENABLED

+
+
+

boolean

true

+
+
+
+
+ + + + + + + diff --git a/quarkus-zookeeper-client/dev/config/quarkus-zookeeper-io-quarkiverse-zookeeper-deployment-config-zookeeper-build-time-configuration.html b/quarkus-zookeeper-client/dev/config/quarkus-zookeeper-io-quarkiverse-zookeeper-deployment-config-zookeeper-build-time-configuration.html new file mode 100644 index 0000000000..a37f3deb04 --- /dev/null +++ b/quarkus-zookeeper-client/dev/config/quarkus-zookeeper-io-quarkiverse-zookeeper-deployment-config-zookeeper-build-time-configuration.html @@ -0,0 +1,945 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Whether to enable health checks.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_HEALTH_ENABLED

+
+
+

boolean

true

+
+
+
+
+ + + + + + + diff --git a/quarkus-zookeeper-client/dev/config/quarkus-zookeeper.html b/quarkus-zookeeper-client/dev/config/quarkus-zookeeper.html new file mode 100644 index 0000000000..ff4a1d1768 --- /dev/null +++ b/quarkus-zookeeper-client/dev/config/quarkus-zookeeper.html @@ -0,0 +1,1319 @@ + + + + + + Untitled :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Whether to enable health checks.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_HEALTH_ENABLED

+
+
+

boolean

true

+
+
+
+

Set the value to true to enable SASL authentication.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_AUTH_SASL_ENABLED

+
+
+

boolean

false

+
+
+
+

Specifies the context key in the JAAS login file.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_AUTH_CLIENTCONFIG

+
+
+

string

Client

+
+
+
+

SALS client configuration string, e.g. org.apache.zookeeper.server.auth.DigestLoginModule required username="test" password="passwd";

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_AUTH_SASL_CONFIG_STRING

+
+
+

string

+
+
+
+

Specifies the server principal to be used by the client for authentication, while connecting to the zookeeper server, when Kerberos authentication is enabled. If this configuration is provided, then the ZooKeeper client will NOT USE any of the following parameters to determine the server principal: zookeeper.sasl.client.username, zookeeper.sasl.client.canonicalize.hostname, zookeeper.server.realm.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_AUTH_SERVER_PRINCIPAL

+
+
+

string

+
+
+
+

Traditionally, a principal is divided into three parts: the primary, the instance, and the realm. The format of a typical Kerberos V5 principal is primary/instance@REALM. zookeeper.sasl.client.username specifies the primary part of the server principal.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_AUTH_CLIENT_USERNAME

+
+
+

string

zookeeper

+
+
+
+

Expecting the zookeeper.server.principal parameter is not provided, the ZooKeeper client will try to determine the 'instance' (host) part of the ZooKeeper server principal. First it takes the hostname provided as the ZooKeeper server connection string. Then it tries to 'canonicalize' the address by getting the fully qualified domain name belonging to the address. You can disable this 'canonicalization' by setting: zookeeper.sasl.client.canonicalize.hostname=false.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_AUTH_CLIENT_CANONICALIZE_HOSTNAME

+
+
+

boolean

true

+
+
+
+

Realm part of the server principal. By default it is the client principal realm.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_AUTH_SERVER_REALM

+
+
+

string

+
+
+
+

Specifies the file path to a JKS containing the local credentials to be used for SSL connections.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_SSL_KEY_STORE_LOCATION

+
+
+

string

+
+
+
+

Specifies the password to unlock the file.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_SSL_KEY_STORE_PASSWORD

+
+
+

string

+
+
+
+

Specifies the file path to a JKS containing the remote credentials to be used for SSL connections.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_SSL_TRUST_STORE_LOCATION

+
+
+

string

+
+
+
+

Specifies the password to unlock the file.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_SSL_TRUST_STORE_PASSWORD

+
+
+

string

+
+
+
+

Specifies the file format of keys store files used to establish TLS connection to the ZooKeeper server. Values: JKS, PEM, PKCS12 or null.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_SSL_KEY_STORE_TYPE

+
+
+

string

+
+
+
+

Specifies the file format of trust store files used to establish TLS connection to the ZooKeeper server. Values: JKS, PEM, PKCS12 or null.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_SSL_TRUST_STORE_TYPE

+
+
+

string

+
+
+
+

Connection timeout in millis.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_CONNECTION_TIMEOUT_MILLIS

+
+
+

int

30000

+
+
+
+

Request timeout in millis.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_REQUEST_TIMEOUT_MILLIS

+
+
+

int

5000

+
+
+
+

This switch controls whether automatic watch resetting is enabled. Clients automatically reset watches during session reconnect by default, this option allows the client to turn off this behavior by setting zookeeper.disableAutoWatchReset to true.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_DISABLE_AUTOWATCH_RESET

+
+
+

boolean

false

+
+
+
+

If you want to connect to the server secure client port, you need to set this property to true on the client. This will connect to server using SSL with specified credentials. Note that it requires the Netty client.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_SECURE

+
+
+

boolean

false

+
+
+
+

Specifies which ClientCnxnSocket to be used. Possible values are org.apache.zookeeper.ClientCnxnSocketNIO and org.apache.zookeeper.ClientCnxnSocketNetty . Default is org.apache.zookeeper.ClientCnxnSocketNIO . If you want to connect to server’s secure client port, you need to set this property to org.apache.zookeeper.ClientCnxnSocketNetty on client.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_CLIENT_CNXN_SOCKET

+
+
+

string

org.apache.zookeeper.ClientCnxnSocketNIO

+
+
+
+

In the client side, it specifies the maximum size of the incoming data from the server. The default is 0xfffff(1048575) bytes, or just under 1M. This is really a sanity check. The ZooKeeper server is designed to store and send data on the order of kilobytes. If incoming data length is more than this value, an IOException is raised. This value of client side should keep same with the server side(Setting System.setProperty("jute.maxbuffer", "xxxx") in the client side will work), otherwise problems will arise.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_JUTE_MAX_BUFFER

+
+
+

int

1048575

+
+
+
+

Comma separated host:port pairs, each corresponding to a zk server.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_SESSION_CONNECTION_STRING

+
+
+

string

required

+
+
+
+

Session timeout in milliseconds.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_SESSION_TIMEOUT

+
+
+

int

30000

+
+
+
+

Whether the created client is allowed to go to read-only mode in case of partitioning. Read-only mode basically means that if the client can’t find any majority servers but there’s partitioned server it could reach, it connects to one in read-only mode.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_SESSION_CAN_BE_READ_ONLY

+
+
+

boolean

false

+
+
+
+
+ + + + + + + diff --git a/quarkus-zookeeper-client/dev/index.html b/quarkus-zookeeper-client/dev/index.html new file mode 100644 index 0000000000..87a43073ba --- /dev/null +++ b/quarkus-zookeeper-client/dev/index.html @@ -0,0 +1,1382 @@ + + + + + + Quarkus - Zookeeper Client :: Quarkiverse Documentation + + + + + + + + + +
+ +
+ +
+ +
+

Quarkus - Zookeeper Client

+
+
+
+

Stateful client to Apache ZooKeeper (https://zookeeper.apache.org/).

+
+
+

ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services.

+
+
+
+
+

Installation

+
+
+

If you want to use this extension, you need to add the io.quarkiverse.quarkus-zookeeper:quarkus-zookeeper extension first. +In your pom.xml file, add:

+
+
+
+
<dependency>
+    <groupId>io.quarkiverse.quarkus-zookeeper</groupId>
+    <artifactId>quarkus-zookeeper</artifactId>
+</dependency>
+
+
+
+
+
+

Usage

+
+
+

This extension produces an application scoped bean for the ZooKeeper client, which can be directly injected into a managed bean:

+
+
+
+
@ApplicationScoped
+public class ZookeeperService implements AsyncObserverExceptionHandler {
+
+    private static final Logger LOG = Logger.getLogger(ZookeeperService.class);
+
+    @Inject ZooKeeper client;
+
+    public void onZKEvent(@ObservesAsync WatchedEvent event) {
+        LOG.infof("Receiving [%s]", event.getState());
+    }
+}
+
+
+
+

As shown by the example, it also provides a binding between ZooKeeper watched events and an asynch CDI bus.

+
+
+
+
+

Extension Configuration Reference

+
+
+

Configuration property fixed at build time - All other configuration properties are overridable at runtime

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

Configuration property

Type

Default

+
+
+
+

Whether to enable health checks.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_HEALTH_ENABLED

+
+
+

boolean

true

+
+
+
+

Set the value to true to enable SASL authentication.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_AUTH_SASL_ENABLED

+
+
+

boolean

false

+
+
+
+

Specifies the context key in the JAAS login file.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_AUTH_CLIENTCONFIG

+
+
+

string

Client

+
+
+
+

SALS client configuration string, e.g. org.apache.zookeeper.server.auth.DigestLoginModule required username="test" password="passwd";

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_AUTH_SASL_CONFIG_STRING

+
+
+

string

+
+
+
+

Specifies the server principal to be used by the client for authentication, while connecting to the zookeeper server, when Kerberos authentication is enabled. If this configuration is provided, then the ZooKeeper client will NOT USE any of the following parameters to determine the server principal: zookeeper.sasl.client.username, zookeeper.sasl.client.canonicalize.hostname, zookeeper.server.realm.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_AUTH_SERVER_PRINCIPAL

+
+
+

string

+
+
+
+

Traditionally, a principal is divided into three parts: the primary, the instance, and the realm. The format of a typical Kerberos V5 principal is primary/instance@REALM. zookeeper.sasl.client.username specifies the primary part of the server principal.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_AUTH_CLIENT_USERNAME

+
+
+

string

zookeeper

+
+
+
+

Expecting the zookeeper.server.principal parameter is not provided, the ZooKeeper client will try to determine the 'instance' (host) part of the ZooKeeper server principal. First it takes the hostname provided as the ZooKeeper server connection string. Then it tries to 'canonicalize' the address by getting the fully qualified domain name belonging to the address. You can disable this 'canonicalization' by setting: zookeeper.sasl.client.canonicalize.hostname=false.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_AUTH_CLIENT_CANONICALIZE_HOSTNAME

+
+
+

boolean

true

+
+
+
+

Realm part of the server principal. By default it is the client principal realm.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_AUTH_SERVER_REALM

+
+
+

string

+
+
+
+

Specifies the file path to a JKS containing the local credentials to be used for SSL connections.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_SSL_KEY_STORE_LOCATION

+
+
+

string

+
+
+
+

Specifies the password to unlock the file.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_SSL_KEY_STORE_PASSWORD

+
+
+

string

+
+
+
+

Specifies the file path to a JKS containing the remote credentials to be used for SSL connections.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_SSL_TRUST_STORE_LOCATION

+
+
+

string

+
+
+
+

Specifies the password to unlock the file.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_SSL_TRUST_STORE_PASSWORD

+
+
+

string

+
+
+
+

Specifies the file format of keys store files used to establish TLS connection to the ZooKeeper server. Values: JKS, PEM, PKCS12 or null.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_SSL_KEY_STORE_TYPE

+
+
+

string

+
+
+
+

Specifies the file format of trust store files used to establish TLS connection to the ZooKeeper server. Values: JKS, PEM, PKCS12 or null.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_SSL_TRUST_STORE_TYPE

+
+
+

string

+
+
+
+

Connection timeout in millis.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_CONNECTION_TIMEOUT_MILLIS

+
+
+

int

30000

+
+
+
+

Request timeout in millis.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_REQUEST_TIMEOUT_MILLIS

+
+
+

int

5000

+
+
+
+

This switch controls whether automatic watch resetting is enabled. Clients automatically reset watches during session reconnect by default, this option allows the client to turn off this behavior by setting zookeeper.disableAutoWatchReset to true.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_DISABLE_AUTOWATCH_RESET

+
+
+

boolean

false

+
+
+
+

If you want to connect to the server secure client port, you need to set this property to true on the client. This will connect to server using SSL with specified credentials. Note that it requires the Netty client.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_SECURE

+
+
+

boolean

false

+
+
+
+

Specifies which ClientCnxnSocket to be used. Possible values are org.apache.zookeeper.ClientCnxnSocketNIO and org.apache.zookeeper.ClientCnxnSocketNetty . Default is org.apache.zookeeper.ClientCnxnSocketNIO . If you want to connect to server’s secure client port, you need to set this property to org.apache.zookeeper.ClientCnxnSocketNetty on client.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_CLIENT_CNXN_SOCKET

+
+
+

string

org.apache.zookeeper.ClientCnxnSocketNIO

+
+
+
+

In the client side, it specifies the maximum size of the incoming data from the server. The default is 0xfffff(1048575) bytes, or just under 1M. This is really a sanity check. The ZooKeeper server is designed to store and send data on the order of kilobytes. If incoming data length is more than this value, an IOException is raised. This value of client side should keep same with the server side(Setting System.setProperty("jute.maxbuffer", "xxxx") in the client side will work), otherwise problems will arise.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_CLIENT_JUTE_MAX_BUFFER

+
+
+

int

1048575

+
+
+
+

Comma separated host:port pairs, each corresponding to a zk server.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_SESSION_CONNECTION_STRING

+
+
+

string

required

+
+
+
+

Session timeout in milliseconds.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_SESSION_TIMEOUT

+
+
+

int

30000

+
+
+
+

Whether the created client is allowed to go to read-only mode in case of partitioning. Read-only mode basically means that if the client can’t find any majority servers but there’s partitioned server it could reach, it connects to one in read-only mode.

+
+
+

Environment variable: QUARKUS_ZOOKEEPER_SESSION_CAN_BE_READ_ONLY

+
+
+

boolean

false

+
+
+
+
+
+
+ + + + + + + diff --git a/sitemap-index.xml b/sitemap-index.xml new file mode 100644 index 0000000000..df5cf5428c --- /dev/null +++ b/sitemap-index.xml @@ -0,0 +1,7 @@ + + + +https://docs.quarkiverse.io/index/explore/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-amazon-alexa.xml b/sitemap-quarkus-amazon-alexa.xml new file mode 100644 index 0000000000..dd06cf5b06 --- /dev/null +++ b/sitemap-quarkus-amazon-alexa.xml @@ -0,0 +1,11 @@ + + + +https://docs.quarkiverse.io/quarkus-amazon-alexa/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-alexa/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-amazon-services.xml b/sitemap-quarkus-amazon-services.xml new file mode 100644 index 0000000000..5d59b9389d --- /dev/null +++ b/sitemap-quarkus-amazon-services.xml @@ -0,0 +1,531 @@ + + + +https://docs.quarkiverse.io/quarkus-amazon-services/dev/amazon-cognitouserpools.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/dev/amazon-credentials.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/dev/amazon-dynamodb.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/dev/amazon-eventbridge.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/dev/amazon-iam.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/dev/amazon-kinesis.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/dev/amazon-kms.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/dev/amazon-lambda.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/dev/amazon-s3.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/dev/amazon-secretsmanager.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/dev/amazon-ses.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/dev/amazon-sfn.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/dev/amazon-sns.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/dev/amazon-sqs.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/dev/amazon-ssm.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/dev/amazon-sts.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/dev/dev-services.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/dev/includes/quarkus-amazon-cognitouserpools.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/dev/includes/quarkus-amazon-dynamodb-enhanced.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/dev/includes/quarkus-amazon-dynamodb.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/dev/includes/quarkus-amazon-eventbridge.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/dev/includes/quarkus-amazon-iam.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/dev/includes/quarkus-amazon-kinesis.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/dev/includes/quarkus-amazon-kms.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/dev/includes/quarkus-amazon-lambda.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/dev/includes/quarkus-amazon-s3.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/dev/includes/quarkus-amazon-secretsmanager.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/dev/includes/quarkus-amazon-ses.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/dev/includes/quarkus-amazon-sfn.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/dev/includes/quarkus-amazon-sns.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/dev/includes/quarkus-amazon-sqs.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/dev/includes/quarkus-amazon-ssm.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/dev/includes/quarkus-amazon-sts.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/dev/includes/quarkus-aws-devservices-localstack-local-stack-dev-services-build-time-config.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/dev/includes/quarkus-aws-devservices-moto-moto-dev-services-build-time-config.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/dev/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.12.x/amazon-cognitouserpools.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.12.x/amazon-credentials.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.12.x/amazon-dynamodb.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.12.x/amazon-eventbridge.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.12.x/amazon-iam.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.12.x/amazon-kinesis.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.12.x/amazon-kms.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.12.x/amazon-lambda.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.12.x/amazon-s3.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.12.x/amazon-secretsmanager.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.12.x/amazon-ses.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.12.x/amazon-sfn.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.12.x/amazon-sns.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.12.x/amazon-sqs.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.12.x/amazon-ssm.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.12.x/amazon-sts.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.12.x/dev-services.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.12.x/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-cognitouserpools.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-dynamodb-enhanced.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-dynamodb.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-eventbridge.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-iam.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-kinesis.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-kms.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-lambda.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-s3.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-secretsmanager.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-ses.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-sfn.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-sns.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-sqs.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-ssm.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.12.x/includes/quarkus-amazon-sts.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.12.x/includes/quarkus-aws-devservices-localstack-local-stack-dev-services-build-time-config.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.12.x/includes/quarkus-aws-devservices-moto-moto-dev-services-build-time-config.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.12.x/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.4.x/amazon-cognitouserpools.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.4.x/amazon-credentials.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.4.x/amazon-dynamodb.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.4.x/amazon-iam.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.4.x/amazon-kms.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.4.x/amazon-s3.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.4.x/amazon-secretsmanager.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.4.x/amazon-ses.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.4.x/amazon-sns.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.4.x/amazon-sqs.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.4.x/amazon-ssm.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.4.x/amazon-sts.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.4.x/dev-services.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.4.x/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-cognitouserpools.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-dynamodb-enhanced.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-dynamodb.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-iam.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-kms.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-s3.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-secretsmanager.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-ses.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-sns.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-sqs.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-ssm.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.4.x/includes/quarkus-amazon-sts.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.4.x/includes/quarkus-aws-devservices-localstack-local-stack-dev-services-build-time-config.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.4.x/includes/quarkus-aws-devservices-moto-moto-dev-services-build-time-config.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/2.4.x/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/1.x/amazon-cognitouserpools.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/1.x/amazon-credentials.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/1.x/amazon-dynamodb.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/1.x/amazon-iam.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/1.x/amazon-kms.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/1.x/amazon-s3.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/1.x/amazon-secretsmanager.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/1.x/amazon-ses.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/1.x/amazon-sns.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/1.x/amazon-sqs.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/1.x/amazon-ssm.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/1.x/amazon-sts.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/1.x/dev-services.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/1.x/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/1.x/includes/quarkus-amazon-cognitouserpools.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/1.x/includes/quarkus-amazon-dynamodb-enhanced.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/1.x/includes/quarkus-amazon-dynamodb.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/1.x/includes/quarkus-amazon-iam.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/1.x/includes/quarkus-amazon-kms.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/1.x/includes/quarkus-amazon-s3.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/1.x/includes/quarkus-amazon-secretsmanager.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/1.x/includes/quarkus-amazon-ses.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/1.x/includes/quarkus-amazon-sns.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/1.x/includes/quarkus-amazon-sqs.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/1.x/includes/quarkus-amazon-ssm.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/1.x/includes/quarkus-amazon-sts.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/1.x/includes/quarkus-aws-devservices-localstack-local-stack-dev-services-build-time-config.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/1.x/includes/quarkus-aws-devservices-moto-moto-dev-services-build-time-config.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-amazon-services/1.x/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-antivirus.xml b/sitemap-quarkus-antivirus.xml new file mode 100644 index 0000000000..7480fda350 --- /dev/null +++ b/sitemap-quarkus-antivirus.xml @@ -0,0 +1,15 @@ + + + +https://docs.quarkiverse.io/quarkus-antivirus/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-antivirus/dev/includes/quarkus-antivirus.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-antivirus/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-apistax.xml b/sitemap-quarkus-apistax.xml new file mode 100644 index 0000000000..9ede34ed27 --- /dev/null +++ b/sitemap-quarkus-apistax.xml @@ -0,0 +1,15 @@ + + + +https://docs.quarkiverse.io/quarkus-apistax/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-apistax/dev/includes/quarkus-apistax.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-apistax/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-arangodb-client-ext.xml b/sitemap-quarkus-arangodb-client-ext.xml new file mode 100644 index 0000000000..0b2ac97975 --- /dev/null +++ b/sitemap-quarkus-arangodb-client-ext.xml @@ -0,0 +1,15 @@ + + + +https://docs.quarkiverse.io/quarkus-arangodb-client-ext/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-arangodb-client-ext/dev/includes/quarkus-arangodb.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-arangodb-client-ext/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-artemis.xml b/sitemap-quarkus-artemis.xml new file mode 100644 index 0000000000..ee5648ba62 --- /dev/null +++ b/sitemap-quarkus-artemis.xml @@ -0,0 +1,75 @@ + + + +https://docs.quarkiverse.io/quarkus-artemis/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-artemis/dev/includes/quarkus-artemis-core.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-artemis/dev/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-artemis/dev/quarkus-artemis-jms.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-artemis/dev/quarkus-artemis-ra.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-artemis/3.1.x/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-artemis/3.1.x/includes/quarkus-artemis-core.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-artemis/3.1.x/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-artemis/3.1.x/quarkus-artemis-jms.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-artemis/3.1.x/quarkus-artemis-ra.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-artemis/3.0.x/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-artemis/3.0.x/includes/quarkus-artemis-core.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-artemis/3.0.x/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-artemis/3.0.x/quarkus-artemis-jms.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-artemis/3.0.x/quarkus-artemis-ra.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-artemis/2.x/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-artemis/2.x/includes/quarkus-artemis-core.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-artemis/2.x/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-asyncapi.xml b/sitemap-quarkus-asyncapi.xml new file mode 100644 index 0000000000..5e7c550b0d --- /dev/null +++ b/sitemap-quarkus-asyncapi.xml @@ -0,0 +1,39 @@ + + + +https://docs.quarkiverse.io/quarkus-asyncapi/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-asyncapi/dev/includes/config-group-io-quarkiverse-asyncapi-annotation-scanner-config-channel.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-asyncapi/dev/includes/config-group-io-quarkiverse-asyncapi-annotation-scanner-config-server.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-asyncapi/dev/includes/quarkus-asyncapi-annotation-scanner-general-config-items.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-asyncapi/dev/includes/quarkus-asyncapi-annotation-scanner-io-quarkiverse-asyncapi-annotation-scanner-config-async-api-runtime-config.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-asyncapi/dev/includes/quarkus-asyncapi-annotation-scanner.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-asyncapi/dev/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-asyncapi/dev/reader.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-asyncapi/dev/scanner.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-azure-services.xml b/sitemap-quarkus-azure-services.xml new file mode 100644 index 0000000000..cdba3ad911 --- /dev/null +++ b/sitemap-quarkus-azure-services.xml @@ -0,0 +1,35 @@ + + + +https://docs.quarkiverse.io/quarkus-azure-services/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-azure-services/dev/includes/azure-setup-environment.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-azure-services/dev/includes/quarkus-azure-app-configuration.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-azure-services/dev/includes/quarkus-azure-storage-blob.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-azure-services/dev/includes/support.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-azure-services/dev/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-azure-services/dev/quarkus-azure-app-configuration.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-azure-services/dev/quarkus-azure-storage-blob.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-bucket4j.xml b/sitemap-quarkus-bucket4j.xml new file mode 100644 index 0000000000..2adc85be30 --- /dev/null +++ b/sitemap-quarkus-bucket4j.xml @@ -0,0 +1,15 @@ + + + +https://docs.quarkiverse.io/quarkus-bucket4j/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-bucket4j/dev/includes/quarkus-rate-limiter.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-bucket4j/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-certmanager.xml b/sitemap-quarkus-certmanager.xml new file mode 100644 index 0000000000..0477c54909 --- /dev/null +++ b/sitemap-quarkus-certmanager.xml @@ -0,0 +1,15 @@ + + + +https://docs.quarkiverse.io/quarkus-certmanager/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-certmanager/dev/includes/quarkus-certificate.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-certmanager/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-config-extensions.xml b/sitemap-quarkus-config-extensions.xml new file mode 100644 index 0000000000..18e24e4333 --- /dev/null +++ b/sitemap-quarkus-config-extensions.xml @@ -0,0 +1,31 @@ + + + +https://docs.quarkiverse.io/quarkus-config-extensions/dev/consul.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-config-extensions/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-config-extensions/dev/includes/quarkus-consul-config.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-config-extensions/dev/includes/quarkus-jdbc-config.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-config-extensions/dev/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-config-extensions/dev/jasypt.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-config-extensions/dev/jdbc.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-couchbase.xml b/sitemap-quarkus-couchbase.xml new file mode 100644 index 0000000000..03365b9de0 --- /dev/null +++ b/sitemap-quarkus-couchbase.xml @@ -0,0 +1,7 @@ + + + +https://docs.quarkiverse.io/quarkus-couchbase/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-cucumber.xml b/sitemap-quarkus-cucumber.xml new file mode 100644 index 0000000000..c35648bf28 --- /dev/null +++ b/sitemap-quarkus-cucumber.xml @@ -0,0 +1,11 @@ + + + +https://docs.quarkiverse.io/quarkus-cucumber/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cucumber/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-cxf.xml b/sitemap-quarkus-cxf.xml new file mode 100644 index 0000000000..e2f783d885 --- /dev/null +++ b/sitemap-quarkus-cxf.xml @@ -0,0 +1,371 @@ + + + +https://docs.quarkiverse.io/quarkus-cxf/dev/contributor-guide/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/dev/contributor-guide/releasing.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/dev/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/dev/reference/extensions/quarkus-cxf-integration-tracing-opentelemetry.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/dev/reference/extensions/quarkus-cxf-rt-features-metrics.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/dev/reference/extensions/quarkus-cxf-rt-transports-http-hc5.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/dev/reference/extensions/quarkus-cxf-rt-ws-rm.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/dev/reference/extensions/quarkus-cxf-rt-ws-security.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/dev/reference/extensions/quarkus-cxf-services-sts.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/dev/reference/extensions/quarkus-cxf-xjc-plugins.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/dev/reference/extensions/quarkus-cxf.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/dev/reference/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/dev/release-notes/3.8.0.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/dev/release-notes/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/dev/user-guide/advanced-soap-client-topics.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/dev/user-guide/auth.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/dev/user-guide/camel-integration.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/dev/user-guide/common-problems-troubleshooting.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/dev/user-guide/configuration.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/dev/user-guide/contract-first-code-first.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/dev/user-guide/create-project.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/dev/user-guide/cxf-interceptors-and-features.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/dev/user-guide/examples.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/dev/user-guide/first-soap-client.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/dev/user-guide/first-soap-web-service.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/dev/user-guide/generate-java-from-wsdl.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/dev/user-guide/generate-wsdl-from-java.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/dev/user-guide/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/dev/user-guide/jax-ws-handlers.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/dev/user-guide/jax-ws-providers.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/dev/user-guide/package-for-jvm-and-native.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/dev/user-guide/payload-logging.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/dev/user-guide/running-behind-a-reverse-proxy.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/dev/user-guide/soap-payloads-with-jaxb.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/dev/user-guide/ssl.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/2.2/includes/quarkus-cxf.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/2.2/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/2.2/reference/extensions/quarkus-cxf-rt-features-logging.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/2.2/reference/extensions/quarkus-cxf-rt-features-metrics.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/2.2/reference/extensions/quarkus-cxf-rt-transports-http-hc5.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/2.2/reference/extensions/quarkus-cxf-rt-ws-rm.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/2.2/reference/extensions/quarkus-cxf-rt-ws-security.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/2.2/reference/extensions/quarkus-cxf-services-sts.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/2.2/reference/extensions/quarkus-cxf-xjc-plugins.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/2.2/reference/extensions/quarkus-cxf.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/2.2/reference/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/2.2/user-guide/advanced-soap-client-topics.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/2.2/user-guide/advanced-soap-server-topics.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/2.2/user-guide/camel-integration.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/2.2/user-guide/common-problems-troubleshooting.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/2.2/user-guide/contract-first-code-first.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/2.2/user-guide/create-project.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/2.2/user-guide/cxf-interceptors-and-features.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/2.2/user-guide/examples.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/2.2/user-guide/first-soap-client.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/2.2/user-guide/first-soap-web-service.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/2.2/user-guide/generate-java-from-wsdl.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/2.2/user-guide/generate-wsdl-from-java.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/2.2/user-guide/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/2.2/user-guide/jax-ws-handlers.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/2.2/user-guide/jax-ws-providers.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/2.2/user-guide/package-for-jvm-and-native.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/2.2/user-guide/soap-payloads-with-jaxb.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/2.2/user-guide/supported-soap-binding.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/1.5/includes/quarkus-cxf.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/1.5/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/1.5/reference/extensions/quarkus-cxf-rt-features-logging.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/1.5/reference/extensions/quarkus-cxf-rt-features-metrics.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/1.5/reference/extensions/quarkus-cxf-rt-transports-http-hc5.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/1.5/reference/extensions/quarkus-cxf-rt-ws-rm.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/1.5/reference/extensions/quarkus-cxf-rt-ws-security.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/1.5/reference/extensions/quarkus-cxf-services-sts.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/1.5/reference/extensions/quarkus-cxf-xjc-plugins.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/1.5/reference/extensions/quarkus-cxf.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/1.5/reference/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/1.5/user-guide/advanced-soap-client-topics.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/1.5/user-guide/camel-integration.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/1.5/user-guide/common-problems-troubleshooting.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/1.5/user-guide/contract-first-code-first.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/1.5/user-guide/create-project.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/1.5/user-guide/cxf-interceptors-and-features.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/1.5/user-guide/examples.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/1.5/user-guide/first-soap-client.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/1.5/user-guide/first-soap-web-service.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/1.5/user-guide/generate-java-from-wsdl.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/1.5/user-guide/generate-wsdl-from-java.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/1.5/user-guide/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/1.5/user-guide/jax-ws-handlers.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/1.5/user-guide/jax-ws-providers.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/1.5/user-guide/package-for-jvm-and-native.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/1.5/user-guide/soap-payloads-with-jaxb.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-cxf/1.5/user-guide/supported-soap-binding.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-dapr.xml b/sitemap-quarkus-dapr.xml new file mode 100644 index 0000000000..5b0fbd472a --- /dev/null +++ b/sitemap-quarkus-dapr.xml @@ -0,0 +1,15 @@ + + + +https://docs.quarkiverse.io/quarkus-dapr/dev/config.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-dapr/dev/includes/devservices.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-dapr/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-dashbuilder.xml b/sitemap-quarkus-dashbuilder.xml new file mode 100644 index 0000000000..8c6b322275 --- /dev/null +++ b/sitemap-quarkus-dashbuilder.xml @@ -0,0 +1,15 @@ + + + +https://docs.quarkiverse.io/quarkus-dashbuilder/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-dashbuilder/dev/includes/quarkus-dashbuilder.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-dashbuilder/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-discord4j.xml b/sitemap-quarkus-discord4j.xml new file mode 100644 index 0000000000..317187c485 --- /dev/null +++ b/sitemap-quarkus-discord4j.xml @@ -0,0 +1,27 @@ + + + +https://docs.quarkiverse.io/quarkus-discord4j/dev/commands.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-discord4j/dev/getting-started.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-discord4j/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-discord4j/dev/includes/quarkus-discord4j.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-discord4j/dev/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-discord4j/dev/reference.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-doma.xml b/sitemap-quarkus-doma.xml new file mode 100644 index 0000000000..d19ac05ddb --- /dev/null +++ b/sitemap-quarkus-doma.xml @@ -0,0 +1,15 @@ + + + +https://docs.quarkiverse.io/quarkus-doma/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-doma/dev/includes/quarkus-doma.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-doma/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-embedded-postgresql.xml b/sitemap-quarkus-embedded-postgresql.xml new file mode 100644 index 0000000000..cd14ded7d0 --- /dev/null +++ b/sitemap-quarkus-embedded-postgresql.xml @@ -0,0 +1,15 @@ + + + +https://docs.quarkiverse.io/quarkus-embedded-postgresql/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-embedded-postgresql/dev/includes/quarkus-embedded-postgresql.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-embedded-postgresql/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-file-vault.xml b/sitemap-quarkus-file-vault.xml new file mode 100644 index 0000000000..4da98c64c2 --- /dev/null +++ b/sitemap-quarkus-file-vault.xml @@ -0,0 +1,15 @@ + + + +https://docs.quarkiverse.io/quarkus-file-vault/dev/config-source-config.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-file-vault/dev/config.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-file-vault/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-freemarker.xml b/sitemap-quarkus-freemarker.xml new file mode 100644 index 0000000000..fa02ae8ee5 --- /dev/null +++ b/sitemap-quarkus-freemarker.xml @@ -0,0 +1,19 @@ + + + +https://docs.quarkiverse.io/quarkus-freemarker/dev/config.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-freemarker/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-freemarker/dev/includes/quarkus-freemarker.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-freemarker/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-fx.xml b/sitemap-quarkus-fx.xml new file mode 100644 index 0000000000..daf7643412 --- /dev/null +++ b/sitemap-quarkus-fx.xml @@ -0,0 +1,19 @@ + + + +https://docs.quarkiverse.io/quarkus-fx/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-fx/dev/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-fx/dev/run-on-fx-thread.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-fx/dev/startup-synchronization.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-github-action.xml b/sitemap-quarkus-github-action.xml new file mode 100644 index 0000000000..f6bb175640 --- /dev/null +++ b/sitemap-quarkus-github-action.xml @@ -0,0 +1,27 @@ + + + +https://docs.quarkiverse.io/quarkus-github-action/dev/create-github-action.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-github-action/dev/developer-reference.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-github-action/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-github-action/dev/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-github-action/dev/push-to-production.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-github-action/dev/testing.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-github-app.xml b/sitemap-quarkus-github-app.xml new file mode 100644 index 0000000000..c59fa066b5 --- /dev/null +++ b/sitemap-quarkus-github-app.xml @@ -0,0 +1,43 @@ + + + +https://docs.quarkiverse.io/quarkus-github-app/dev/commands.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-github-app/dev/create-github-app.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-github-app/dev/developer-reference.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-github-app/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-github-app/dev/includes/quarkus-github-app.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-github-app/dev/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-github-app/dev/push-to-production.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-github-app/dev/register-github-app.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-github-app/dev/replay-ui.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-github-app/dev/testing.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-google-cloud-services.xml b/sitemap-quarkus-google-cloud-services.xml new file mode 100644 index 0000000000..fe9f476f26 --- /dev/null +++ b/sitemap-quarkus-google-cloud-services.xml @@ -0,0 +1,47 @@ + + + +https://docs.quarkiverse.io/quarkus-google-cloud-services/main/bigquery.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-google-cloud-services/main/bigtable.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-google-cloud-services/main/firebase-admin.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-google-cloud-services/main/firestore.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-google-cloud-services/main/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-google-cloud-services/main/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-google-cloud-services/main/logging.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-google-cloud-services/main/pubsub.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-google-cloud-services/main/secretmanager.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-google-cloud-services/main/spanner.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-google-cloud-services/main/storage.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-groovy.xml b/sitemap-quarkus-groovy.xml new file mode 100644 index 0000000000..62c6f84176 --- /dev/null +++ b/sitemap-quarkus-groovy.xml @@ -0,0 +1,11 @@ + + + +https://docs.quarkiverse.io/quarkus-groovy/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-groovy/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-helm.xml b/sitemap-quarkus-helm.xml new file mode 100644 index 0000000000..29b6d6f585 --- /dev/null +++ b/sitemap-quarkus-helm.xml @@ -0,0 +1,27 @@ + + + +https://docs.quarkiverse.io/quarkus-helm/dev/example-argocd.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-helm/dev/example-config.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-helm/dev/example-crud.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-helm/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-helm/dev/includes/quarkus-helm.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-helm/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-hibernate-search-extras.xml b/sitemap-quarkus-hibernate-search-extras.xml new file mode 100644 index 0000000000..08cdaf06ec --- /dev/null +++ b/sitemap-quarkus-hibernate-search-extras.xml @@ -0,0 +1,51 @@ + + + +https://docs.quarkiverse.io/quarkus-hibernate-search-extras/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-hibernate-search-extras/dev/includes/quarkus-hibernate-search-orm-elasticsearch-aws.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-hibernate-search-extras/dev/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-hibernate-search-extras/3.x/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-hibernate-search-extras/3.x/includes/quarkus-hibernate-search-orm-elasticsearch-aws.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-hibernate-search-extras/3.x/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-hibernate-search-extras/2.x/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-hibernate-search-extras/2.x/includes/quarkus-hibernate-search-orm-elasticsearch-aws.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-hibernate-search-extras/2.x/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-hibernate-search-extras/1.x/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-hibernate-search-extras/1.x/includes/quarkus-hibernate-search-orm-elasticsearch-aws.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-hibernate-search-extras/1.x/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-hibernate-types.xml b/sitemap-quarkus-hibernate-types.xml new file mode 100644 index 0000000000..7b9d026e82 --- /dev/null +++ b/sitemap-quarkus-hibernate-types.xml @@ -0,0 +1,15 @@ + + + +https://docs.quarkiverse.io/quarkus-hibernate-types/dev/config.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-hibernate-types/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-hibernate-types/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-hivemq-client.xml b/sitemap-quarkus-hivemq-client.xml new file mode 100644 index 0000000000..9ad6882fce --- /dev/null +++ b/sitemap-quarkus-hivemq-client.xml @@ -0,0 +1,19 @@ + + + +https://docs.quarkiverse.io/quarkus-hivemq-client/dev/config-reference.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-hivemq-client/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-hivemq-client/dev/includes/config.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-hivemq-client/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-ironjacamar.xml b/sitemap-quarkus-ironjacamar.xml new file mode 100644 index 0000000000..3b2adee845 --- /dev/null +++ b/sitemap-quarkus-ironjacamar.xml @@ -0,0 +1,15 @@ + + + +https://docs.quarkiverse.io/quarkus-ironjacamar/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-ironjacamar/dev/includes/quarkus-ironjacamar.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-ironjacamar/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-itext.xml b/sitemap-quarkus-itext.xml new file mode 100644 index 0000000000..4f6bf8e935 --- /dev/null +++ b/sitemap-quarkus-itext.xml @@ -0,0 +1,11 @@ + + + +https://docs.quarkiverse.io/quarkus-itext/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-itext/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-jackson-jq.xml b/sitemap-quarkus-jackson-jq.xml new file mode 100644 index 0000000000..a01b303fc9 --- /dev/null +++ b/sitemap-quarkus-jackson-jq.xml @@ -0,0 +1,11 @@ + + + +https://docs.quarkiverse.io/quarkus-jackson-jq/dev/config.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-jackson-jq/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-jaeger.xml b/sitemap-quarkus-jaeger.xml new file mode 100644 index 0000000000..7d24dc3bc7 --- /dev/null +++ b/sitemap-quarkus-jaeger.xml @@ -0,0 +1,15 @@ + + + +https://docs.quarkiverse.io/quarkus-jaeger/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-jaeger/dev/includes/quarkus-jaeger.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-jaeger/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-java-embedded-framework.xml b/sitemap-quarkus-java-embedded-framework.xml new file mode 100644 index 0000000000..cd4134e5cc --- /dev/null +++ b/sitemap-quarkus-java-embedded-framework.xml @@ -0,0 +1,55 @@ + + + +https://docs.quarkiverse.io/quarkus-java-embedded-framework/dev/architecture.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-java-embedded-framework/dev/board.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-java-embedded-framework/dev/config.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-java-embedded-framework/dev/config/gpio.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-java-embedded-framework/dev/config/i2c.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-java-embedded-framework/dev/config/onewire.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-java-embedded-framework/dev/config/serial.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-java-embedded-framework/dev/config/spi.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-java-embedded-framework/dev/dev.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-java-embedded-framework/dev/examples.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-java-embedded-framework/dev/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-java-embedded-framework/dev/theory.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-java-embedded-framework/dev/troubleshooting.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-jdbc-clickhouse.xml b/sitemap-quarkus-jdbc-clickhouse.xml new file mode 100644 index 0000000000..7f2e546880 --- /dev/null +++ b/sitemap-quarkus-jdbc-clickhouse.xml @@ -0,0 +1,11 @@ + + + +https://docs.quarkiverse.io/quarkus-jdbc-clickhouse/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-jdbc-clickhouse/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-jdbc-sqlite.xml b/sitemap-quarkus-jdbc-sqlite.xml new file mode 100644 index 0000000000..454522a250 --- /dev/null +++ b/sitemap-quarkus-jdbc-sqlite.xml @@ -0,0 +1,11 @@ + + + +https://docs.quarkiverse.io/quarkus-jdbc-sqlite/dev/datasource.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-jdbc-sqlite/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-jdbi.xml b/sitemap-quarkus-jdbi.xml new file mode 100644 index 0000000000..0316400e1f --- /dev/null +++ b/sitemap-quarkus-jdbi.xml @@ -0,0 +1,11 @@ + + + +https://docs.quarkiverse.io/quarkus-jdbi/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-jdbi/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-jgit.xml b/sitemap-quarkus-jgit.xml new file mode 100644 index 0000000000..ee72d85268 --- /dev/null +++ b/sitemap-quarkus-jgit.xml @@ -0,0 +1,11 @@ + + + +https://docs.quarkiverse.io/quarkus-jgit/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-jgit/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-jgrapht.xml b/sitemap-quarkus-jgrapht.xml new file mode 100644 index 0000000000..5f26a25f22 --- /dev/null +++ b/sitemap-quarkus-jgrapht.xml @@ -0,0 +1,7 @@ + + + +https://docs.quarkiverse.io/quarkus-jgrapht/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-jnosql.xml b/sitemap-quarkus-jnosql.xml new file mode 100644 index 0000000000..7d34cee738 --- /dev/null +++ b/sitemap-quarkus-jnosql.xml @@ -0,0 +1,11 @@ + + + +https://docs.quarkiverse.io/quarkus-jnosql/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-jnosql/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-jpastreamer.xml b/sitemap-quarkus-jpastreamer.xml new file mode 100644 index 0000000000..d8bd861f69 --- /dev/null +++ b/sitemap-quarkus-jpastreamer.xml @@ -0,0 +1,19 @@ + + + +https://docs.quarkiverse.io/quarkus-jpastreamer/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-jpastreamer/dev/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-jpastreamer/1.x/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-jpastreamer/1.x/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-jsch.xml b/sitemap-quarkus-jsch.xml new file mode 100644 index 0000000000..52da594500 --- /dev/null +++ b/sitemap-quarkus-jsch.xml @@ -0,0 +1,11 @@ + + + +https://docs.quarkiverse.io/quarkus-jsch/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-jsch/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-kafka-streams-processor.xml b/sitemap-quarkus-kafka-streams-processor.xml new file mode 100644 index 0000000000..e9a3bd5dd8 --- /dev/null +++ b/sitemap-quarkus-kafka-streams-processor.xml @@ -0,0 +1,19 @@ + + + +https://docs.quarkiverse.io/quarkus-kafka-streams-processor/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-kafka-streams-processor/dev/includes/kafka-streams-processor-configuration-keys.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-kafka-streams-processor/dev/includes/quarkus-other-extension-configurations.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-kafka-streams-processor/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-kerberos.xml b/sitemap-quarkus-kerberos.xml new file mode 100644 index 0000000000..233a0a9028 --- /dev/null +++ b/sitemap-quarkus-kerberos.xml @@ -0,0 +1,15 @@ + + + +https://docs.quarkiverse.io/quarkus-kerberos/dev/config-client.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-kerberos/dev/config.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-kerberos/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-kiota.xml b/sitemap-quarkus-kiota.xml new file mode 100644 index 0000000000..d47e4cd17e --- /dev/null +++ b/sitemap-quarkus-kiota.xml @@ -0,0 +1,23 @@ + + + +https://docs.quarkiverse.io/quarkus-kiota/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-kiota/dev/includes/authentication-support.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-kiota/dev/includes/getting-started.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-kiota/dev/includes/quarkus-kiota.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-kiota/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-langchain4j.xml b/sitemap-quarkus-langchain4j.xml new file mode 100644 index 0000000000..bb7e502720 --- /dev/null +++ b/sitemap-quarkus-langchain4j.xml @@ -0,0 +1,119 @@ + + + +https://docs.quarkiverse.io/quarkus-langchain4j/dev/agent-and-tools.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-langchain4j/dev/ai-services.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-langchain4j/dev/chroma-store.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-langchain4j/dev/csv.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-langchain4j/dev/dev-ui.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-langchain4j/dev/enable-disable-integrations.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-langchain4j/dev/fault-tolerance.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-langchain4j/dev/huggingface.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-langchain4j/dev/in-process-embedding.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-langchain4j/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-langchain4j/dev/includes/quarkus-langchain4j-chroma.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-langchain4j/dev/includes/quarkus-langchain4j-huggingface.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-langchain4j/dev/includes/quarkus-langchain4j-infinispan.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-langchain4j/dev/includes/quarkus-langchain4j-ollama.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-langchain4j/dev/includes/quarkus-langchain4j-openai.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-langchain4j/dev/includes/quarkus-langchain4j-pgvector.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-langchain4j/dev/includes/quarkus-langchain4j-pinecone.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-langchain4j/dev/includes/quarkus-langchain4j-redis.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-langchain4j/dev/includes/quarkus-langchain4j.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-langchain4j/dev/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-langchain4j/dev/infinispan-store.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-langchain4j/dev/llms.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-langchain4j/dev/ollama.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-langchain4j/dev/openai.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-langchain4j/dev/pgvector-store.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-langchain4j/dev/pinecone-store.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-langchain4j/dev/prompt-engineering.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-langchain4j/dev/redis-store.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-langchain4j/dev/retrievers.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-logging-json.xml b/sitemap-quarkus-logging-json.xml new file mode 100644 index 0000000000..24613571bd --- /dev/null +++ b/sitemap-quarkus-logging-json.xml @@ -0,0 +1,15 @@ + + + +https://docs.quarkiverse.io/quarkus-logging-json/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-logging-json/dev/includes/quarkus-log-json.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-logging-json/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-logging-logback.xml b/sitemap-quarkus-logging-logback.xml new file mode 100644 index 0000000000..167446c3c7 --- /dev/null +++ b/sitemap-quarkus-logging-logback.xml @@ -0,0 +1,11 @@ + + + +https://docs.quarkiverse.io/quarkus-logging-logback/dev/config.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-logging-logback/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-logging-sentry.xml b/sitemap-quarkus-logging-sentry.xml new file mode 100644 index 0000000000..2dcceb7735 --- /dev/null +++ b/sitemap-quarkus-logging-sentry.xml @@ -0,0 +1,15 @@ + + + +https://docs.quarkiverse.io/quarkus-logging-sentry/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-logging-sentry/dev/includes/quarkus-logging-sentry.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-logging-sentry/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-logging-splunk.xml b/sitemap-quarkus-logging-splunk.xml new file mode 100644 index 0000000000..d574982a38 --- /dev/null +++ b/sitemap-quarkus-logging-splunk.xml @@ -0,0 +1,15 @@ + + + +https://docs.quarkiverse.io/quarkus-logging-splunk/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-logging-splunk/dev/includes/quarkus-log-handler-splunk.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-logging-splunk/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-mailpit.xml b/sitemap-quarkus-mailpit.xml new file mode 100644 index 0000000000..8597e5b254 --- /dev/null +++ b/sitemap-quarkus-mailpit.xml @@ -0,0 +1,15 @@ + + + +https://docs.quarkiverse.io/quarkus-mailpit/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-mailpit/dev/includes/quarkus-mailpit.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-mailpit/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-micrometer-registry.xml b/sitemap-quarkus-micrometer-registry.xml new file mode 100644 index 0000000000..fc5d821054 --- /dev/null +++ b/sitemap-quarkus-micrometer-registry.xml @@ -0,0 +1,163 @@ + + + +https://docs.quarkiverse.io/quarkus-micrometer-registry/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-micrometer-registry/dev/includes/quarkus-micrometer-export-azuremonitor.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-micrometer-registry/dev/includes/quarkus-micrometer-export-datadog.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-micrometer-registry/dev/includes/quarkus-micrometer-export-graphite.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-micrometer-registry/dev/includes/quarkus-micrometer-export-influx.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-micrometer-registry/dev/includes/quarkus-micrometer-export-jmx.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-micrometer-registry/dev/includes/quarkus-micrometer-export-newrelic-telemetry.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-micrometer-registry/dev/includes/quarkus-micrometer-export-newrelic.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-micrometer-registry/dev/includes/quarkus-micrometer-export-otlp.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-micrometer-registry/dev/includes/quarkus-micrometer-export-signalfx.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-micrometer-registry/dev/includes/quarkus-micrometer-export-stackdriver.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-micrometer-registry/dev/includes/quarkus-micrometer-export-statsd.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-micrometer-registry/dev/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-micrometer-registry/dev/micrometer-registry-azure-monitor.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-micrometer-registry/dev/micrometer-registry-datadog.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-micrometer-registry/dev/micrometer-registry-graphite.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-micrometer-registry/dev/micrometer-registry-influx.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-micrometer-registry/dev/micrometer-registry-jmx.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-micrometer-registry/dev/micrometer-registry-newrelic-telemetry.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-micrometer-registry/dev/micrometer-registry-newrelic.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-micrometer-registry/dev/micrometer-registry-otlp.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-micrometer-registry/dev/micrometer-registry-signalfx.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-micrometer-registry/dev/micrometer-registry-stackdriver.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-micrometer-registry/dev/micrometer-registry-statsd.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-micrometer-registry/1.x/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-micrometer-registry/1.x/includes/quarkus-micrometer-export-azuremonitor.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-micrometer-registry/1.x/includes/quarkus-micrometer-export-datadog.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-micrometer-registry/1.x/includes/quarkus-micrometer-export-jmx.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-micrometer-registry/1.x/includes/quarkus-micrometer-export-newrelic.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-micrometer-registry/1.x/includes/quarkus-micrometer-export-signalfx.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-micrometer-registry/1.x/includes/quarkus-micrometer-export-stackdriver.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-micrometer-registry/1.x/includes/quarkus-micrometer-export-statsd.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-micrometer-registry/1.x/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-micrometer-registry/1.x/micrometer-registry-azure-monitor.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-micrometer-registry/1.x/micrometer-registry-datadog.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-micrometer-registry/1.x/micrometer-registry-jmx.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-micrometer-registry/1.x/micrometer-registry-newrelic.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-micrometer-registry/1.x/micrometer-registry-signalfx.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-micrometer-registry/1.x/micrometer-registry-stackdriver.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-micrometer-registry/1.x/micrometer-registry-statsd.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-minio.xml b/sitemap-quarkus-minio.xml new file mode 100644 index 0000000000..e66dd20874 --- /dev/null +++ b/sitemap-quarkus-minio.xml @@ -0,0 +1,23 @@ + + + +https://docs.quarkiverse.io/quarkus-minio/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-minio/dev/includes/quarkus-minio.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-minio/dev/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-minio/v2.9.x/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-minio/v2.9.x/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-mockk.xml b/sitemap-quarkus-mockk.xml new file mode 100644 index 0000000000..35b844c760 --- /dev/null +++ b/sitemap-quarkus-mockk.xml @@ -0,0 +1,15 @@ + + + +https://docs.quarkiverse.io/quarkus-mockk/dev/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-mockk/dev/injectmock.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-mockk/dev/injectspy.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-mockserver.xml b/sitemap-quarkus-mockserver.xml new file mode 100644 index 0000000000..7380a9fefc --- /dev/null +++ b/sitemap-quarkus-mockserver.xml @@ -0,0 +1,27 @@ + + + +https://docs.quarkiverse.io/quarkus-mockserver/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-mockserver/dev/includes/quarkus-mockserver.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-mockserver/dev/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-mockserver/0.x/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-mockserver/0.x/includes/quarkus-mockserver.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-mockserver/0.x/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-mybatis.xml b/sitemap-quarkus-mybatis.xml new file mode 100644 index 0000000000..304b761c84 --- /dev/null +++ b/sitemap-quarkus-mybatis.xml @@ -0,0 +1,27 @@ + + + +https://docs.quarkiverse.io/quarkus-mybatis/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-mybatis/dev/includes/quarkus-mybatis.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-mybatis/dev/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-mybatis/1.x/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-mybatis/1.x/includes/quarkus-mybatis.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-mybatis/1.x/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-neo4j.xml b/sitemap-quarkus-neo4j.xml new file mode 100644 index 0000000000..c952797bf0 --- /dev/null +++ b/sitemap-quarkus-neo4j.xml @@ -0,0 +1,19 @@ + + + +https://docs.quarkiverse.io/quarkus-neo4j/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-neo4j/dev/includes/quarkus-neo4j-config-group-dev-services-build-time-config.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-neo4j/dev/includes/quarkus-neo4j.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-neo4j/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-ngrok.xml b/sitemap-quarkus-ngrok.xml new file mode 100644 index 0000000000..4f0e48dae9 --- /dev/null +++ b/sitemap-quarkus-ngrok.xml @@ -0,0 +1,11 @@ + + + +https://docs.quarkiverse.io/quarkus-ngrok/dev/includes/quarkus-ngrok.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-ngrok/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-omnifaces.xml b/sitemap-quarkus-omnifaces.xml new file mode 100644 index 0000000000..d142a1111f --- /dev/null +++ b/sitemap-quarkus-omnifaces.xml @@ -0,0 +1,11 @@ + + + +https://docs.quarkiverse.io/quarkus-omnifaces/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-omnifaces/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-openapi-generator.xml b/sitemap-quarkus-openapi-generator.xml new file mode 100644 index 0000000000..3fcf6081ac --- /dev/null +++ b/sitemap-quarkus-openapi-generator.xml @@ -0,0 +1,83 @@ + + + +https://docs.quarkiverse.io/quarkus-openapi-generator/dev/client.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-openapi-generator/dev/includes/additional-properties-as-attribute.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-openapi-generator/dev/includes/additional-request-args.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-openapi-generator/dev/includes/authentication-support.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-openapi-generator/dev/includes/authorization-token-propagation.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-openapi-generator/dev/includes/circuit-breaker.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-openapi-generator/dev/includes/config-key.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-openapi-generator/dev/includes/config.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-openapi-generator/dev/includes/filter-openapi-spec-files.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-openapi-generator/dev/includes/getting-started.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-openapi-generator/dev/includes/logging.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-openapi-generator/dev/includes/quarkus-openapi-generator.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-openapi-generator/dev/includes/resteasy-support.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-openapi-generator/dev/includes/return-response-objects.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-openapi-generator/dev/includes/sending-multipart-formdata.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-openapi-generator/dev/includes/server-getting-started.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-openapi-generator/dev/includes/template-customization.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-openapi-generator/dev/includes/want-to-contribute.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-openapi-generator/dev/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-openapi-generator/dev/server.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-openfga-client.xml b/sitemap-quarkus-openfga-client.xml new file mode 100644 index 0000000000..a821fc2df9 --- /dev/null +++ b/sitemap-quarkus-openfga-client.xml @@ -0,0 +1,15 @@ + + + +https://docs.quarkiverse.io/quarkus-openfga-client/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-openfga-client/dev/includes/quarkus-openfga.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-openfga-client/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-opensearch.xml b/sitemap-quarkus-opensearch.xml new file mode 100644 index 0000000000..0e846b1aab --- /dev/null +++ b/sitemap-quarkus-opensearch.xml @@ -0,0 +1,15 @@ + + + +https://docs.quarkiverse.io/quarkus-opensearch/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-opensearch/dev/includes/quarkus-opensearch.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-opensearch/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-operator-sdk.xml b/sitemap-quarkus-operator-sdk.xml new file mode 100644 index 0000000000..cf616d9481 --- /dev/null +++ b/sitemap-quarkus-operator-sdk.xml @@ -0,0 +1,15 @@ + + + +https://docs.quarkiverse.io/quarkus-operator-sdk/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-operator-sdk/dev/includes/quarkus-operator-sdk.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-operator-sdk/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-pact.xml b/sitemap-quarkus-pact.xml new file mode 100644 index 0000000000..f784aa7a9a --- /dev/null +++ b/sitemap-quarkus-pact.xml @@ -0,0 +1,43 @@ + + + +https://docs.quarkiverse.io/quarkus-pact/dev/consumer-index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-pact/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-pact/dev/includes/resources.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-pact/dev/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-pact/dev/provider-index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-pact/0.x/consumer-index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-pact/0.x/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-pact/0.x/includes/resources.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-pact/0.x/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-pact/0.x/provider-index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-pdfbox.xml b/sitemap-quarkus-pdfbox.xml new file mode 100644 index 0000000000..2a283fcaf9 --- /dev/null +++ b/sitemap-quarkus-pdfbox.xml @@ -0,0 +1,11 @@ + + + +https://docs.quarkiverse.io/quarkus-pdfbox/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-pdfbox/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-playwright.xml b/sitemap-quarkus-playwright.xml new file mode 100644 index 0000000000..63afbb0535 --- /dev/null +++ b/sitemap-quarkus-playwright.xml @@ -0,0 +1,11 @@ + + + +https://docs.quarkiverse.io/quarkus-playwright/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-playwright/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-poi.xml b/sitemap-quarkus-poi.xml new file mode 100644 index 0000000000..2c60d20b2a --- /dev/null +++ b/sitemap-quarkus-poi.xml @@ -0,0 +1,19 @@ + + + +https://docs.quarkiverse.io/quarkus-poi/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-poi/dev/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-poi/1.x/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-poi/1.x/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-pooled-jms.xml b/sitemap-quarkus-pooled-jms.xml new file mode 100644 index 0000000000..b7b2a81335 --- /dev/null +++ b/sitemap-quarkus-pooled-jms.xml @@ -0,0 +1,23 @@ + + + +https://docs.quarkiverse.io/quarkus-pooled-jms/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-pooled-jms/dev/includes/quarkus-pooled-jms.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-pooled-jms/dev/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-pooled-jms/1.x/config.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-pooled-jms/1.x/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-prettytime.xml b/sitemap-quarkus-prettytime.xml new file mode 100644 index 0000000000..a1b9a26429 --- /dev/null +++ b/sitemap-quarkus-prettytime.xml @@ -0,0 +1,11 @@ + + + +https://docs.quarkiverse.io/quarkus-prettytime/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-prettytime/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-primefaces.xml b/sitemap-quarkus-primefaces.xml new file mode 100644 index 0000000000..b7f646d5a0 --- /dev/null +++ b/sitemap-quarkus-primefaces.xml @@ -0,0 +1,11 @@ + + + +https://docs.quarkiverse.io/quarkus-primefaces/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-primefaces/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-quinoa.xml b/sitemap-quarkus-quinoa.xml new file mode 100644 index 0000000000..85d2d68e99 --- /dev/null +++ b/sitemap-quarkus-quinoa.xml @@ -0,0 +1,35 @@ + + + +https://docs.quarkiverse.io/quarkus-quinoa/dev/advanced-guides.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-quinoa/dev/config-reference.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-quinoa/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-quinoa/dev/includes/quarkus-quinoa.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-quinoa/dev/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-quinoa/dev/main-concepts.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-quinoa/dev/testing.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-quinoa/dev/web-frameworks.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-qute-web.xml b/sitemap-quarkus-qute-web.xml new file mode 100644 index 0000000000..5f524cebee --- /dev/null +++ b/sitemap-quarkus-qute-web.xml @@ -0,0 +1,15 @@ + + + +https://docs.quarkiverse.io/quarkus-qute-web/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-qute-web/dev/includes/quarkus-qute-web.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-qute-web/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-rabbitmq-client.xml b/sitemap-quarkus-rabbitmq-client.xml new file mode 100644 index 0000000000..5e62ab2689 --- /dev/null +++ b/sitemap-quarkus-rabbitmq-client.xml @@ -0,0 +1,15 @@ + + + +https://docs.quarkiverse.io/quarkus-rabbitmq-client/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-rabbitmq-client/dev/includes/quarkus-rabbitmqclient.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-rabbitmq-client/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-reactive-messaging-http.xml b/sitemap-quarkus-reactive-messaging-http.xml new file mode 100644 index 0000000000..2debeef797 --- /dev/null +++ b/sitemap-quarkus-reactive-messaging-http.xml @@ -0,0 +1,19 @@ + + + +https://docs.quarkiverse.io/quarkus-reactive-messaging-http/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-reactive-messaging-http/dev/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-reactive-messaging-http/dev/reactive-messaging-http.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-reactive-messaging-http/dev/reactive-messaging-websocket.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-reactive-messsaging-nats-jetstream.xml b/sitemap-quarkus-reactive-messsaging-nats-jetstream.xml new file mode 100644 index 0000000000..2060a48eb7 --- /dev/null +++ b/sitemap-quarkus-reactive-messsaging-nats-jetstream.xml @@ -0,0 +1,15 @@ + + + +https://docs.quarkiverse.io/quarkus-reactive-messsaging-nats-jetstream/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-reactive-messsaging-nats-jetstream/dev/includes/config.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-reactive-messsaging-nats-jetstream/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-renarde.xml b/sitemap-quarkus-renarde.xml new file mode 100644 index 0000000000..86c717f811 --- /dev/null +++ b/sitemap-quarkus-renarde.xml @@ -0,0 +1,43 @@ + + + +https://docs.quarkiverse.io/quarkus-renarde/dev/advanced.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-renarde/dev/concepts.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-renarde/dev/config-reference.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-renarde/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-renarde/dev/includes/quarkus-renarde.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-renarde/dev/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-renarde/dev/security.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-renarde/1.x/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-renarde/1.x/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-renarde/1.x/security.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-scala3.xml b/sitemap-quarkus-scala3.xml new file mode 100644 index 0000000000..5304b60d3e --- /dev/null +++ b/sitemap-quarkus-scala3.xml @@ -0,0 +1,7 @@ + + + +https://docs.quarkiverse.io/quarkus-scala3/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-shardingsphere-jdbc.xml b/sitemap-quarkus-shardingsphere-jdbc.xml new file mode 100644 index 0000000000..ac7532407a --- /dev/null +++ b/sitemap-quarkus-shardingsphere-jdbc.xml @@ -0,0 +1,11 @@ + + + +https://docs.quarkiverse.io/quarkus-shardingsphere-jdbc/dev/config.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-shardingsphere-jdbc/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-smallrye-opentracing.xml b/sitemap-quarkus-smallrye-opentracing.xml new file mode 100644 index 0000000000..3266911594 --- /dev/null +++ b/sitemap-quarkus-smallrye-opentracing.xml @@ -0,0 +1,15 @@ + + + +https://docs.quarkiverse.io/quarkus-smallrye-opentracing/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-smallrye-opentracing/dev/includes/quarkus-smallrye-opentracing.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-smallrye-opentracing/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-systemd-notify.xml b/sitemap-quarkus-systemd-notify.xml new file mode 100644 index 0000000000..42351a1b51 --- /dev/null +++ b/sitemap-quarkus-systemd-notify.xml @@ -0,0 +1,11 @@ + + + +https://docs.quarkiverse.io/quarkus-systemd-notify/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-systemd-notify/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-tika.xml b/sitemap-quarkus-tika.xml new file mode 100644 index 0000000000..512ec8aeff --- /dev/null +++ b/sitemap-quarkus-tika.xml @@ -0,0 +1,27 @@ + + + +https://docs.quarkiverse.io/quarkus-tika/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-tika/dev/includes/quarkus-tika.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-tika/dev/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-tika/1.x/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-tika/1.x/includes/quarkus-tika.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-tika/1.x/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-unleash.xml b/sitemap-quarkus-unleash.xml new file mode 100644 index 0000000000..c607231e71 --- /dev/null +++ b/sitemap-quarkus-unleash.xml @@ -0,0 +1,27 @@ + + + +https://docs.quarkiverse.io/quarkus-unleash/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-unleash/dev/includes/quarkus-unleash.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-unleash/dev/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-unleash/0.x/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-unleash/0.x/includes/quarkus-unleash.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-unleash/0.x/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-vault.xml b/sitemap-quarkus-vault.xml new file mode 100644 index 0000000000..dc5bdb76a6 --- /dev/null +++ b/sitemap-quarkus-vault.xml @@ -0,0 +1,35 @@ + + + +https://docs.quarkiverse.io/quarkus-vault/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-vault/dev/includes/quarkus-vault.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-vault/dev/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-vault/dev/vault-auth.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-vault/dev/vault-datasource.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-vault/dev/vault-generator.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-vault/dev/vault-pki.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-vault/dev/vault-transit.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-web-bundler.xml b/sitemap-quarkus-web-bundler.xml new file mode 100644 index 0000000000..60d4a69948 --- /dev/null +++ b/sitemap-quarkus-web-bundler.xml @@ -0,0 +1,31 @@ + + + +https://docs.quarkiverse.io/quarkus-web-bundler/dev/advanced-guides.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-web-bundler/dev/config-reference.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-web-bundler/dev/examples.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-web-bundler/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-web-bundler/dev/includes/quarkus-web-bundler.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-web-bundler/dev/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-web-bundler/dev/main-concepts.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-wiremock.xml b/sitemap-quarkus-wiremock.xml new file mode 100644 index 0000000000..115296f6c0 --- /dev/null +++ b/sitemap-quarkus-wiremock.xml @@ -0,0 +1,27 @@ + + + +https://docs.quarkiverse.io/quarkus-wiremock/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-wiremock/dev/includes/quarkus-wiremock.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-wiremock/dev/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-wiremock/0.x/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-wiremock/0.x/includes/quarkus-wiremock.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-wiremock/0.x/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-zanzibar.xml b/sitemap-quarkus-zanzibar.xml new file mode 100644 index 0000000000..9f2b42695e --- /dev/null +++ b/sitemap-quarkus-zanzibar.xml @@ -0,0 +1,27 @@ + + + +https://docs.quarkiverse.io/quarkus-zanzibar/dev/annotations.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-zanzibar/dev/authzed-connector.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-zanzibar/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-zanzibar/dev/includes/quarkus-zanzibar.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-zanzibar/dev/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-zanzibar/dev/openfga-connector.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-zeebe.xml b/sitemap-quarkus-zeebe.xml new file mode 100644 index 0000000000..b4040596bc --- /dev/null +++ b/sitemap-quarkus-zeebe.xml @@ -0,0 +1,27 @@ + + + +https://docs.quarkiverse.io/quarkus-zeebe/dev/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-zeebe/dev/includes/quarkus-zeebe.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-zeebe/dev/index.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-zeebe/0.x/includes/attributes.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-zeebe/0.x/includes/quarkus-zeebe.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-zeebe/0.x/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap-quarkus-zookeeper-client.xml b/sitemap-quarkus-zookeeper-client.xml new file mode 100644 index 0000000000..9127d95cbf --- /dev/null +++ b/sitemap-quarkus-zookeeper-client.xml @@ -0,0 +1,39 @@ + + + +https://docs.quarkiverse.io/quarkus-zookeeper-client/dev/config/config-group-io-quarkiverse-zookeeper-config-client-config.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-zookeeper-client/dev/config/config-group-io-quarkiverse-zookeeper-config-sasl-config.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-zookeeper-client/dev/config/config-group-io-quarkiverse-zookeeper-config-secure-client-config.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-zookeeper-client/dev/config/config-group-io-quarkiverse-zookeeper-config-session-config.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-zookeeper-client/dev/config/quarkus-zookeeper-general-config-items.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-zookeeper-client/dev/config/quarkus-zookeeper-io-quarkiverse-zookeeper-config-zookeeper-configuration.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-zookeeper-client/dev/config/quarkus-zookeeper-io-quarkiverse-zookeeper-deployment-config-zookeeper-build-time-configuration.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-zookeeper-client/dev/config/quarkus-zookeeper.html +2024-03-08T06:49:06.499Z + + +https://docs.quarkiverse.io/quarkus-zookeeper-client/dev/index.html +2024-03-08T06:49:06.499Z + + diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000000..feb027fb8b --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,273 @@ + + + +https://docs.quarkiverse.io/sitemap-index.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-amazon-alexa.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-amazon-services.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-antivirus.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-apistax.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-arangodb-client-ext.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-artemis.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-asyncapi.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-azure-services.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-bucket4j.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-certmanager.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-config-extensions.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-couchbase.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-cucumber.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-cxf.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-dapr.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-dashbuilder.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-discord4j.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-doma.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-embedded-postgresql.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-file-vault.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-freemarker.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-fx.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-github-action.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-github-app.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-google-cloud-services.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-groovy.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-helm.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-hibernate-search-extras.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-hibernate-types.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-hivemq-client.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-ironjacamar.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-itext.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-jackson-jq.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-jaeger.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-java-embedded-framework.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-jdbc-clickhouse.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-jdbc-sqlite.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-jdbi.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-jgit.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-jgrapht.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-jnosql.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-jpastreamer.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-jsch.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-kafka-streams-processor.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-kerberos.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-kiota.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-langchain4j.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-logging-json.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-logging-logback.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-logging-sentry.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-logging-splunk.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-mailpit.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-micrometer-registry.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-minio.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-mockk.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-mockserver.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-mybatis.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-neo4j.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-ngrok.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-omnifaces.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-openapi-generator.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-openfga-client.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-opensearch.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-operator-sdk.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-pact.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-pdfbox.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-playwright.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-poi.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-pooled-jms.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-prettytime.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-primefaces.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-quinoa.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-qute-web.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-rabbitmq-client.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-reactive-messaging-http.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-reactive-messsaging-nats-jetstream.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-renarde.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-scala3.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-shardingsphere-jdbc.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-smallrye-opentracing.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-systemd-notify.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-tika.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-unleash.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-vault.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-web-bundler.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-wiremock.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-zanzibar.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-zeebe.xml + + +https://docs.quarkiverse.io/sitemap-quarkus-zookeeper-client.xml + +