[{"data":1,"prerenderedAt":402},["ShallowReactive",2],{"content-svc-lambda-guides-effectively-running-java-on-serverless-functional":3},{"markdown":4,"frontMatterAttributes":5,"bodyRaw":20,"menu":21,"menuType":393,"isCollapseableMenu":24,"nextDocItem":289,"previousDocItem":271,"contributorPaths":394,"contentName":401,"slug":288,"readingTime":258},"\u003Cp>Functional or End-to-end testing is a way\nto assert on the behavior of the application when it runs in production environment.\nFor serverless application, it will be mainly tested in the cloud without using mocks or emulators.\u003C\u002Fp>\n\u003Cp>The advantage\nof doing end-to-end or functional test on AWS for Java based serverless application or any serverless application is\nthat\nyour non-prod environment (a sandbox AWS Account) is an exact copy of your production environment\n(a centrally managed AWS account). \u003C\u002Fp>\n\u003Ch4>Testing in the Cloud\u003C\u002Fh4>\n\u003Cp>When you run tests against cloud-based code that also interacts with cloud-based services, \nyou get the most accurate measure of the code quality.\u003C\u002Fp>\n\u003Cp>Although the test runs locally, it interacts with cloud-based resources. \nThese resources could have been deployed using AWS SAM, or AWS CDK, CloudFormation, or Terraform. \nThe test code first retrieves the deployed stack outputs, which includes the API endpoint, function ARN, \nand security role. \u003C\u002Fp>\n\u003Cp>\u003Cimg src=\"\u002Fassets\u002Fexternal\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fassets\u002Ftesting_simple_api.png\" alt=\"TestingSimpleApi\">\u003C\u002Fp>\n\u003Cp>Following the above API example,\nthe test sends a request to the API endpoint to create a ticket in \u003Ccode>Ticket\u003C\u002Fcode> DynamoDB table, \nand responds with the newly created \u003Ccode>ticketId\u003C\u002Fcode>. \nThis test runs entirely against cloud-based resources to verify those resources are deployed, \nsecured, and work as expected.\u003C\u002Fp>\n\u003Cp>The \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Faws-samples\u002Fserverless-test-samples\u002Fblob\u002Fmain\u002Fjava-test-samples\u002Fapigw-lambda-ddb\u002FTicketsFunction\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fexample\u002FTicketFunction.java\">TicketFunction\u003C\u002Fa> handles the request.\nThe function test would use an HTTP Client to call the actual endpoint that has been provisioned on AWS.\u003C\u002Fp>\n\u003Cp>Before running the tests, you make sure that the \u003Ccode>endpointUrl\u003C\u002Fcode> can be retrieved from the CloudFormation stack,\nand optionally, you have created a DynamoDB \nclient to assert the newly created ticket:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-java\">@BeforeAll\nstatic void setUp() {\n  ddbClient = DynamoDbClient.builder()\n    .region(Region.US_EAST_1)\n    .build();\n\n  cloudFormationClient = CloudFormationClient\n    .builder().region(Region.US_EAST_1).build();\n\n  DescribeStacksResponse response = cloudFormationClient.describeStacks(DescribeStacksRequest.builder()\n    .stackName(STACK_NAME)\n    .build());\n  apiEndPoint = response.stacks().get(0).outputs().get(0).outputValue();\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>The actual test case would look like following.\nThe test case uses \u003Ca href=\"https:\u002F\u002Frest-assured.io\u002F\">\u003Ccode>RestAssured\u003C\u002Fcode>\u003C\u002Fa> to create tests that correspond to \n\u003Ca href=\"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FBehavior-driven_development\">Behavior-driven Development (BDD)\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-java\">@Test\npublic void testPost() {\n  String ticketId =\n    given()\n      .header(&quot;Content-Type&quot;, &quot;application\u002Fjson&quot;)\n      .header(&quot;Accept&quot;, &quot;application\u002Fjson&quot;)\n      .body(&quot;{\\&quot;description\\&quot;: \\&quot;Lambda rocks\\&quot;, \\&quot;userId\\&quot;: \\&quot;testuser\\&quot;}&quot;)\n    .when()\n      .post(apiEndPoint)\n    .then()\n      .assertThat().statusCode(HttpStatusCode.OK)\n      .body(notNullValue())\n      .extract()\n      .asString();\n\n  ticketList.add(ticketId.substring(1, ticketId.length() - 1));\n  DynamoTestUtil.validateItems(ticketList, ddbClient);\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>A negative test case would look like:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-java\">@Test\npublic void testPostWithBadPayload() {\n  given()\n    .header(&quot;Content-Type&quot;, &quot;application\u002Fjson&quot;)\n    .header(&quot;Accept&quot;, &quot;application\u002Fjson&quot;)\n    .body(&quot;{\\&quot;description\\&quot;:, \\&quot;userId\\&quot;: \\&quot;testuser\\&quot;}&quot;)\n  .when()\n    .post(apiEndPoint)\n  .then()\n    .assertThat().statusCode(HttpStatusCode.BAD_REQUEST);\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Refer \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Faws-samples\u002Fserverless-test-samples\u002Fblob\u002Fmain\u002Fjava-test-samples\u002Fapigw-lambda-ddb\u002FTicketsFunction\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Fexample\u002FTicketEnd2EndTest.java\">TicketEnd2EndTest.java\u003C\u002Fa> for the complete implementation.\u003C\u002Fp>\n\u003Cp>This tests assumes that the DynamoDB table is provisioned in your AWS account, \nand you have the appropriate credentials locally to access this account (for example in \u003Ccode>~\u002F.aws\u002Fcredentials\u003C\u002Fcode>). \nTo do that, you need first to deploy the SAM Template provided in the repository using the commands \n\u003Ccode>sam build\u003C\u002Fcode> and \u003Ccode>sam deploy\u003C\u002Fcode> as follows:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">$ sam build\n...\nBuild Succeeded\n\n$ sam deploy --guided\nConfiguring SAM deploy\n======================\n\n  Looking for config file [samconfig.toml] :  Found\n  Reading default arguments  :  Success\n\n  Setting default arguments for &#39;sam deploy&#39;\n  =========================================\n  Stack Name [apigw-lambda-ddb]: apigw-lambda-ddb\n  AWS Region [us-east-2]: us-east-2\n  ....\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cblockquote>\n\u003Cp>Make sure to specify the AWS Region us-east-2 as TicketFunctionIntegrationTest.java assumes that the DynamoDb table is deployed in us-east-2\u003C\u002Fp>\n\u003C\u002Fblockquote>\n",{"title":6,"order":7,"authors":8,"callout":11,"resources":15},"Functional Testing",8,[9,10],"Lorenzo Micheli","Dhiraj Mahapatro",{"title":12,"description":13,"link":14},"Read the Serverless testing guide","This guide dives deeper into Serverless testing","https:\u002F\u002Fserverlessland.com\u002Ftesting",[16],{"link":17,"text":18,"type":19},"https:\u002F\u002Fgithub.com\u002Faws-samples\u002Fserverless-test-samples\u002Ftree\u002Fmain\u002Fjava-test-samples","Serverless Java test samples","GitHub","Functional or End-to-end testing is a way\nto assert on the behavior of the application when it runs in production environment.\nFor serverless application, it will be mainly tested in the cloud without using mocks or emulators.\n\nThe advantage\nof doing end-to-end or functional test on AWS for Java based serverless application or any serverless application is\nthat\nyour non-prod environment (a sandbox AWS Account) is an exact copy of your production environment\n(a centrally managed AWS account). \n\n#### Testing in the Cloud\nWhen you run tests against cloud-based code that also interacts with cloud-based services, \nyou get the most accurate measure of the code quality.\n\nAlthough the test runs locally, it interacts with cloud-based resources. \nThese resources could have been deployed using AWS SAM, or AWS CDK, CloudFormation, or Terraform. \nThe test code first retrieves the deployed stack outputs, which includes the API endpoint, function ARN, \nand security role. \n\n![TestingSimpleApi](\u002Fassets\u002Fexternal\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fassets\u002Ftesting_simple_api.png)\n\nFollowing the above API example,\nthe test sends a request to the API endpoint to create a ticket in `Ticket` DynamoDB table, \nand responds with the newly created `ticketId`. \nThis test runs entirely against cloud-based resources to verify those resources are deployed, \nsecured, and work as expected.\n\nThe [TicketFunction](https:\u002F\u002Fgithub.com\u002Faws-samples\u002Fserverless-test-samples\u002Fblob\u002Fmain\u002Fjava-test-samples\u002Fapigw-lambda-ddb\u002FTicketsFunction\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fexample\u002FTicketFunction.java) handles the request.\nThe function test would use an HTTP Client to call the actual endpoint that has been provisioned on AWS.\n\nBefore running the tests, you make sure that the `endpointUrl` can be retrieved from the CloudFormation stack,\nand optionally, you have created a DynamoDB \nclient to assert the newly created ticket:\n\n```java\n@BeforeAll\nstatic void setUp() {\n  ddbClient = DynamoDbClient.builder()\n    .region(Region.US_EAST_1)\n    .build();\n\n  cloudFormationClient = CloudFormationClient\n    .builder().region(Region.US_EAST_1).build();\n\n  DescribeStacksResponse response = cloudFormationClient.describeStacks(DescribeStacksRequest.builder()\n    .stackName(STACK_NAME)\n    .build());\n  apiEndPoint = response.stacks().get(0).outputs().get(0).outputValue();\n}\n```\n\nThe actual test case would look like following.\nThe test case uses [`RestAssured`](https:\u002F\u002Frest-assured.io\u002F) to create tests that correspond to \n[Behavior-driven Development (BDD)](https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FBehavior-driven_development).\n\n```java\n@Test\npublic void testPost() {\n  String ticketId =\n    given()\n      .header(\"Content-Type\", \"application\u002Fjson\")\n      .header(\"Accept\", \"application\u002Fjson\")\n      .body(\"{\\\"description\\\": \\\"Lambda rocks\\\", \\\"userId\\\": \\\"testuser\\\"}\")\n    .when()\n      .post(apiEndPoint)\n    .then()\n      .assertThat().statusCode(HttpStatusCode.OK)\n      .body(notNullValue())\n      .extract()\n      .asString();\n\n  ticketList.add(ticketId.substring(1, ticketId.length() - 1));\n  DynamoTestUtil.validateItems(ticketList, ddbClient);\n}\n```\n\nA negative test case would look like:\n\n```java\n@Test\npublic void testPostWithBadPayload() {\n  given()\n    .header(\"Content-Type\", \"application\u002Fjson\")\n    .header(\"Accept\", \"application\u002Fjson\")\n    .body(\"{\\\"description\\\":, \\\"userId\\\": \\\"testuser\\\"}\")\n  .when()\n    .post(apiEndPoint)\n  .then()\n    .assertThat().statusCode(HttpStatusCode.BAD_REQUEST);\n}\n```\n\nRefer [TicketEnd2EndTest.java](https:\u002F\u002Fgithub.com\u002Faws-samples\u002Fserverless-test-samples\u002Fblob\u002Fmain\u002Fjava-test-samples\u002Fapigw-lambda-ddb\u002FTicketsFunction\u002Fsrc\u002Ftest\u002Fjava\u002Fcom\u002Fexample\u002FTicketEnd2EndTest.java) for the complete implementation.\n\nThis tests assumes that the DynamoDB table is provisioned in your AWS account, \nand you have the appropriate credentials locally to access this account (for example in `~\u002F.aws\u002Fcredentials`). \nTo do that, you need first to deploy the SAM Template provided in the repository using the commands \n`sam build` and `sam deploy` as follows:\n\n```bash\n$ sam build\n...\nBuild Succeeded\n\n$ sam deploy --guided\nConfiguring SAM deploy\n======================\n\n  Looking for config file [samconfig.toml] :  Found\n  Reading default arguments  :  Success\n\n  Setting default arguments for 'sam deploy'\n  =========================================\n  Stack Name [apigw-lambda-ddb]: apigw-lambda-ddb\n  AWS Region [us-east-2]: us-east-2\n  ....\n```\n\n> Make sure to specify the AWS Region us-east-2 as TicketFunctionIntegrationTest.java assumes that the DynamoDb table is deployed in us-east-2\n",[22,42,68,197,249,298,314,353,375],{"title":23,"collapsible":24,"isCollapsed":25,"content":26},"Introduction",false,true,[27],{"title":28,"order":29,"authors":30,"callout":31,"prerequisite":35,"time":38,"path":39,"id":40,"link":41},"Getting Started",1,[10],{"title":32,"description":33,"link":34},"Watch this video","This Devoxx Belgium 2023 presentation shows effectively running Java on Serverless","https:\u002F\u002Fyoutu.be\u002Fu3tgOE8qFjI?t=5549",[36,37],"Understanding of Java","Understanding of AWS Lambda","2 min","1-introduction","1-introduction.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002F1-introduction",{"title":43,"collapsible":24,"isCollapsed":25,"content":44},"History",[45,53,60],{"title":46,"order":47,"authors":48,"time":49,"path":50,"id":51,"link":52},"Evolution of Java",3,[10],"1 min","history","history.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fhistory",{"title":54,"order":55,"authors":56,"time":38,"path":57,"id":58,"link":59},"Evolution of Compute",4,[10],"compute","compute.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fcompute",{"title":61,"order":62,"authors":63,"time":38,"path":65,"id":66,"link":67},"Challenges",5,[10,64],"Maximilian Schellhorn","challenge","challenge.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fchallenge",{"title":69,"collapsible":24,"isCollapsed":25,"content":70},"Best Practices",[71,89,99,105,122,139,157,173,187],{"title":72,"order":73,"youtubeVideoID":74,"authors":75,"callout":77,"resources":80,"time":85,"path":86,"id":87,"link":88},"Lambda Snapstart",6,"ZbnAithBNYY",[76,10],"Vipan Kumar",{"title":32,"description":78,"link":79},"This serverless office hours session dives deeper into Lambda SnapStart.","https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=Y5b8_KToeDY",[81],{"link":82,"text":83,"type":84},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=IIKe2dx9Ag0","Spring IO (Barcelona)","video","8 min","snapstart","snapstart.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fsnapstart",{"title":90,"order":73,"authors":91,"callout":92,"time":49,"path":96,"id":97,"link":98},"Tiered Compilation",[76],{"title":93,"description":94,"link":95},"Read this blog","This AWS blog explains Tiered compilation in details","https:\u002F\u002Faws.amazon.com\u002Fblogs\u002Fcompute\u002Fincreasing-performance-of-java-aws-lambda-functions-using-tiered-compilation\u002F","tiered-compilation","tiered-compilation.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Ftiered-compilation",{"title":100,"order":73,"authors":101,"time":49,"path":102,"id":103,"link":104},"Utilize initialization phase",[10],"init-heavy-lifting","init-heavy-lifting.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Finit-heavy-lifting",{"title":106,"order":73,"authors":107,"youtubeVideoID":109,"resources":110,"time":118,"path":119,"id":120,"link":121},"Using RDS Proxy",[108,10],"Sonali Jena","ZQOqmMn_8jw",[111,115],{"link":112,"text":113,"type":114},"https:\u002F\u002Faws.amazon.com\u002Fgetting-started\u002Fhands-on\u002Fset-up-shared-database-connection-amazon-rds-proxy\u002F","Shared DB connections with RDS Proxy","user guide",{"link":116,"type":114,"text":117},"https:\u002F\u002Fdocs.aws.amazon.com\u002FAmazonRDS\u002Flatest\u002FAuroraUserGuide\u002Frds-proxy.html","RDS Proxy","4 min","rds-proxy","rds-proxy.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Frds-proxy",{"title":123,"order":73,"authors":124,"callout":125,"prerequisite":129,"resources":131,"time":38,"path":136,"id":137,"link":138},"Choice of HTTP Clients",[76,10],{"title":126,"description":127,"link":128},"Read this Blog","This blog explains how AWS CRT HTTP Client offers faster startup time and small memory footprint","https:\u002F\u002Faws.amazon.com\u002Fblogs\u002Fdeveloper\u002Fannouncing-availability-of-the-aws-crt-http-client-in-the-aws-sdk-for-java-2-x\u002F",[130],"Before moving on to HTTP clients, the first and foremost requirement to improve performance in Lambda functions is to upgrade from AWS SDK Java v1 to AWS SDK Java v2 as soon as possible. Version 2 of the AWS SDK was released in Nov 2018 with a lot of performance upgrades.",[132],{"link":133,"type":134,"text":135},"https:\u002F\u002Faws.amazon.com\u002Fblogs\u002Fdeveloper\u002Faws-sdk-for-java-2-x-released\u002F","blog","AWS SDK for Java v2","http-clients","http-clients.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fhttp-clients",{"title":140,"order":73,"authors":141,"youtubeVideoID":142,"resources":143,"time":118,"path":154,"id":155,"link":156},"Hexagonal Architecture",[76],"kRFg6fkVChQ",[144,148,151],{"link":145,"text":146,"type":147},"https:\u002F\u002Fdocs.aws.amazon.com\u002Fprescriptive-guidance\u002Flatest\u002Fhexagonal-architectures\u002Fwelcome.html","Hexagonal architecture","guidance",{"link":149,"text":150,"type":134},"https:\u002F\u002Faws.amazon.com\u002Fblogs\u002Fcompute\u002Fdeveloping-portable-aws-lambda-functions\u002F","Portable Lambda functions",{"link":152,"type":134,"text":153},"https:\u002F\u002Faws.amazon.com\u002Fblogs\u002Fcompute\u002Fdeveloping-evolutionary-architecture-with-aws-lambda\u002F","Building evolutionary architecture on AWS Lambda","hexagonal","hexagonal.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fhexagonal",{"title":158,"order":73,"authors":159,"youtubeVideoID":161,"resources":162,"time":38,"path":170,"id":171,"link":172},"Powertools for AWS Lambda",[160],"Lavanya Tangutur","dH2GP6Lydj8",[163,167],{"link":164,"text":165,"type":166},"https:\u002F\u002Fgithub.com\u002Faws-powertools\u002Fpowertools-lambda-java","Powertools for AWS Lambda (Java)","github",{"link":168,"type":134,"text":169},"https:\u002F\u002Faws.amazon.com\u002Fblogs\u002Fopensource\u002Fsimplifying-serverless-best-practices-with-aws-lambda-powertools-java\u002F","Best practices with Powertools","powertools","powertools.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fpowertools",{"title":174,"order":73,"authors":175,"youtubeVideoID":176,"callout":177,"resources":181,"time":49,"path":184,"id":185,"link":186},"Lambda Power tuning ",[160,10],"z8wGSykEauI",{"title":178,"description":179,"link":180},"Watch the video","This video covers a variety of AWS Lambda performance and cost optimization techniques including use of Power tuning.","https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=z8wGSykEauI",[182,183],{"link":112,"text":113,"type":114},{"link":116,"type":114,"text":117},"powertuning","powertuning.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fpowertuning",{"title":188,"order":73,"authors":189,"resources":190,"time":38,"path":194,"id":195,"link":196},"Using Graviton2",[10],[191],{"link":192,"text":193,"type":134},"https:\u002F\u002Faws.amazon.com\u002Fblogs\u002Fcompute\u002Fmigrating-aws-lambda-functions-to-arm-based-aws-graviton2-processors\u002F","Using Arm-based Graviton2 processors","graviton","graviton.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fgraviton",{"title":198,"collapsible":24,"isCollapsed":25,"content":199},"Java frameworks",[200,214,223,239],{"title":201,"order":202,"authors":203,"resources":204,"time":38,"path":211,"id":212,"link":213},"Micronaut",7,[160,10],[205,208],{"link":206,"text":207,"type":19},"https:\u002F\u002Fgithub.com\u002Faws-samples\u002Fserverless-java-frameworks-samples\u002Ftree\u002Fmain","Serverless Java Frameworks",{"link":209,"text":210,"type":19},"https:\u002F\u002Fgithub.com\u002Faws-samples\u002Fserverless-patterns\u002Ftree\u002Fmain\u002Fapigw-lambda-rds-snapstart","Micronaut with RDS","micronaut","micronaut.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fmicronaut",{"title":215,"order":202,"authors":216,"resources":217,"time":38,"path":220,"id":221,"link":222},"Quarkus",[160,10],[218],{"link":206,"text":219,"type":19},"Quarkus sample application","quarkus","quarkus.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fquarkus",{"title":224,"order":202,"authors":225,"resources":226,"time":118,"path":236,"id":237,"link":238},"Spring",[160,64],[227,228,232],{"link":206,"text":219,"type":19},{"link":229,"text":230,"type":231},"https:\u002F\u002Fcatalog.workshops.aws\u002Fjava-on-aws-lambda\u002Fen-US","Java on AWS Lambda","workshop",{"link":233,"text":234,"type":235},"https:\u002F\u002Faws.amazon.com\u002Fblogs\u002Fdevops\u002Fdeveloping-with-java-and-spring-boot-using-amazon-codewhisperer\u002F","Build Spring Boot using Amazon CodeWhisperer","Blog","springboot","springboot.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fspringboot",{"title":240,"order":202,"authors":241,"resources":242,"time":38,"path":246,"id":247,"link":248},"GraalVM Native Image",[160,10],[243,245],{"link":206,"text":244,"type":19},"GraalVM sample application",{"link":229,"text":230,"type":231},"graalvm","graalvm.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fgraalvm",{"title":250,"collapsible":24,"isCollapsed":24,"content":251},"Testing a Java application",[252,262,271,281,289],{"title":253,"order":7,"authors":254,"callout":255,"resources":256,"time":258,"path":259,"id":260,"link":261},"Testing Serverless",[9],{"title":12,"description":13,"link":14},[257],{"link":17,"text":18,"type":19},"3 min","testing","testing.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Ftesting",{"title":263,"order":7,"authors":264,"callout":265,"resources":266,"time":118,"path":268,"id":269,"link":270},"Unit Testing",[9],{"title":12,"description":13,"link":14},[267],{"link":17,"text":18,"type":19},"unit","unit.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Funit",{"title":272,"order":7,"authors":273,"callout":274,"resources":275,"time":277,"path":278,"id":279,"link":280},"Integration Testing",[9,10],{"title":12,"description":13,"link":14},[276],{"link":17,"text":18,"type":19},"5 min","integration","integration.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fintegration",{"title":6,"order":7,"authors":282,"callout":283,"resources":284,"time":258,"path":286,"id":287,"link":288},[9,10],{"title":12,"description":13,"link":14},[285],{"link":17,"text":18,"type":19},"functional","functional.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Ffunctional",{"title":290,"order":7,"authors":291,"callout":292,"resources":293,"time":38,"path":295,"id":296,"link":297},"Load Testing",[10],{"title":12,"description":13,"link":14},[294],{"link":17,"text":18,"type":19},"load","load.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fload",{"title":299,"collapsible":24,"isCollapsed":25,"content":300},"Local Development",[301,308],{"title":302,"order":303,"authors":304,"time":49,"path":305,"id":306,"link":307},"IntelliJ",10,[10],"intellij","intellij.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fintellij",{"title":309,"order":303,"authors":310,"time":49,"path":311,"id":312,"link":313},"Visual Studio Code",[10],"vscode","vscode.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fvscode",{"title":315,"collapsible":24,"isCollapsed":25,"content":316},"Infrastructure as Code",[317,324,330,340],{"title":318,"order":319,"authors":320,"time":38,"path":321,"id":322,"link":323},"CloudFormation",9,[108],"cloudformation","cloudformation.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fcloudformation",{"title":325,"order":319,"authors":326,"time":277,"path":327,"id":328,"link":329},"AWS CDK",[108],"cdk","cdk.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fcdk",{"title":331,"order":319,"authors":332,"resources":333,"time":38,"path":337,"id":338,"link":339},"AWS SAM",[108],[334],{"link":335,"text":336,"type":134},"https:\u002F\u002Faws.amazon.com\u002Fblogs\u002Fcompute\u002Fbuilding-serverless-java-applications-with-the-aws-sam-cli\u002F","Java Serverless AWS SAM CLI","sam","sam.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fsam",{"title":341,"order":319,"authors":342,"resources":343,"time":38,"path":350,"id":351,"link":352},"Terraform",[10],[344,347],{"link":345,"type":19,"text":346},"https:\u002F\u002Fgithub.com\u002Faws-samples\u002Fserverless-patterns\u002Ftree\u002Fmain\u002Fapigw-lambda-snapstart-terraform","Java sample with Terraform",{"link":348,"text":349,"type":114},"https:\u002F\u002Fdocs.aws.amazon.com\u002Fserverless-application-model\u002Flatest\u002Fdeveloperguide\u002Fwhat-is-terraform-support.html","AWS SAM CLI Terraform support","terraform","terraform.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fterraform",{"title":354,"collapsible":24,"isCollapsed":25,"content":355},"Benchmarking",[356],{"title":357,"order":358,"youtubeVideoID":359,"authors":360,"resources":361,"time":49,"path":372,"id":373,"link":374},"Performance Benchmarking",11,"wmEIMWigXGc",[10],[362,364,366,369],{"link":363,"text":230,"type":231},"https:\u002F\u002Fcatalog.workshops.aws\u002Fjava-on-aws-lambda\u002Fen-US\u002F01-migration\u002F02-optimizations\u002Fbenchmark",{"link":206,"text":365,"type":19},"Benchmark: Micronaut, Quarkus, and SpringBoot",{"link":367,"text":368,"type":19},"https:\u002F\u002Fgithub.com\u002Faws-samples\u002Fserverless-graalvm-demo","GraalVM native image on AWS Lambda Benchmarking",{"link":370,"text":371,"type":19},"https:\u002F\u002Fgithub.com\u002Faws-samples\u002Fserverless-kotlin-demo","Benchmark Kotlin on Serverless","benchmark","benchmark.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fbenchmark",{"title":376,"collapsible":24,"isCollapsed":25,"content":377},"Migration",[378],{"title":379,"order":380,"authors":381,"youtubeVideoID":382,"resources":383,"time":49,"path":390,"id":391,"link":392},"Migration Guide",12,[10],"u3tgOE8qFjI",[384,388],{"link":385,"text":386,"type":387},"https:\u002F\u002Fserverlessland.com\u002Fcontent\u002Fservice\u002Flambda\u002Fpaved-path\u002Fjava-replatforming\u002Fintroduction","Java re-platforming guide","Guide",{"link":229,"text":230,"type":389},"Workshop","migration","migration.md","\u002Fcontent\u002Fservice\u002Flambda\u002Fguides\u002Feffectively-running-java-on-serverless\u002Fmigration","LIST",[395,396,397,398,399,400],"content\u002Fcontributors\u002Fdhiraj-mahapatro.json","content\u002Fcontributors\u002Fsonali-jena.json","content\u002Fcontributors\u002Flavanya-tangutur.json","content\u002Fcontributors\u002Fvipan-kumar.json","content\u002Fcontributors\u002Florenzo-micheli.json","content\u002Fcontributors\u002Fmaximilian-schellhorn.json","Effectively running Java on Serverless",1792665272487]