{"id":26714823,"url":"https://github.com/k1729p/study13","last_synced_at":"2025-03-27T13:51:07.479Z","repository":{"id":281871453,"uuid":"946755873","full_name":"k1729p/Study13","owner":"k1729p","description":null,"archived":false,"fork":false,"pushed_at":"2025-03-11T16:17:43.000Z","size":0,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-11T16:21:55.513Z","etag":null,"topics":["bmt","cmt","ejb","h2-database","interceptor","jakarta-ee","java","jboss-wildfly","jms","jpa","jpa-hibernate","jta","mdb","message-driven-beans","queue","sql","stateful-beans","stateless-beans","topic","transactions"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/k1729p.png","metadata":{"files":{"readme":"docs/README.html","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-03-11T16:16:41.000Z","updated_at":"2025-03-11T16:21:00.000Z","dependencies_parsed_at":"2025-03-11T16:32:36.199Z","dependency_job_id":null,"html_url":"https://github.com/k1729p/Study13","commit_stats":null,"previous_names":["k1729p/study13"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/k1729p%2FStudy13","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/k1729p%2FStudy13/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/k1729p%2FStudy13/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/k1729p%2FStudy13/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/k1729p","download_url":"https://codeload.github.com/k1729p/Study13/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245858872,"owners_count":20684057,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bmt","cmt","ejb","h2-database","interceptor","jakarta-ee","java","jboss-wildfly","jms","jpa","jpa-hibernate","jta","mdb","message-driven-beans","queue","sql","stateful-beans","stateless-beans","topic","transactions"],"created_at":"2025-03-27T13:51:06.909Z","updated_at":"2025-03-27T13:51:07.471Z","avatar_url":"https://github.com/k1729p.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!DOCTYPE html\u003e\r\n\u003chtml lang=\"en\"\u003e\r\n\u003cmeta charset=\"UTF-8\"\u003e\r\n\u003cbody\u003e\r\n\u003ca href=\"https://github.com/k1729p/Study13/tree/main/docs\"\u003e\u003cimg alt=\"\" src=\"images/ColorScheme.png\" height=\"25\" width=\"800\"/\u003e\u003c/a\u003e\r\n\u003ch2 id=\"contents\"\u003eStudy13 README Contents\u003c/h2\u003e\r\n\r\n\u003ch3 id=\"top\"\u003eResearch the JBoss \u003ca href=\"https://www.wildfly.org/\"\u003eWildFly\u003c/a\u003e application with EJB, JPA, JMS, CMT, BMT\u003c/h3\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/MermaidFlowchart.png\" height=\"160\" width=\"340\"/\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/blackArrowUp.png\"\u003e\r\n\u003ci\u003eThe flowchart with the WildFly application.\u003c/i\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\r\nThe sections of this project:\r\n\u003c/p\u003e\r\n\u003col\u003e\r\n\u003cli\u003e\u003ca href=\"#wildfly\"\u003eWildFly Application Deploy\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"#e_j_b\"\u003eEnterprise JavaBeans\u003c/a\u003e\r\n\u003cul\u003e\r\n\u003cli\u003e\u003ca href=\"#e_j_b_tasks\"\u003eEJB Example 'Tasks'\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"#e_j_b_checks\"\u003eEJB Example 'Checks'\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"#e_j_b_interceptor\"\u003eEJB Example 'Interceptor'\u003c/a\u003e\u003c/li\u003e\r\n\u003c/ul\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"#j_p_a\"\u003eJava Persistence API\u003c/a\u003e\r\n\u003cul\u003e\r\n\u003cli\u003e\u003ca href=\"#j_p_a_boxes\"\u003eJPA Example 'Boxes'\u003c/a\u003e\r\n(\u003ci\u003eone-to-one\u003c/i\u003e, \u003ci\u003eone-to-many\u003c/i\u003e, \u003ci\u003emany-to-one\u003c/i\u003e, and \u003ci\u003emany-to-many\u003c/i\u003e relationships)\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"#j_p_a_units\"\u003eJPA Example 'Units'\u003c/a\u003e\r\n(\u003ci\u003eprevious-next\u003c/i\u003e and \u003ci\u003eparent-child\u003c/i\u003e self-referential relationships)\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"#j_p_a_levels\"\u003eJPA Example 'Levels'\u003c/a\u003e (hierarchical multilevel relationships)\u003c/li\u003e\r\n\u003c/ul\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"#j_m_s\"\u003eJava Message Service\u003c/a\u003e\r\n\u003cul\u003e\r\n\u003cli\u003e\u003ca href=\"#j_m_s_sync\"\u003eJMS Example 'Synchronous Queue \u0026amp; Topic'\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"#j_m_s_async\"\u003eJMS Example 'Asynchronous Queue \u0026amp; Topic'\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"#j_m_s_other_scenarios\"\u003eOther JMS test scenarios\u003c/a\u003e\u003c/li\u003e\r\n\u003c/ul\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"#trans_c_m_t\"\u003eContainer-Managed Transactions\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"#trans_b_m_t\"\u003eBean-Managed Transactions\u003c/a\u003e\u003c/li\u003e\r\n\u003c/ol\u003e\r\n\r\n\u003cp\u003eJava source code. Packages in modules 'common', 'ejb':\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/aquaHR-500.png\"\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/aquaSquare.png\"\u003e module 'common' application sources: \r\n\u003ca href=\"https://github.com/k1729p/Study13/tree/master/common/src/main/java/kp/\"\u003ekp\u003c/a\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/aquaSquare.png\"\u003e module 'ejb' application sources: \r\n\u003ca href=\"https://github.com/k1729p/Study13/tree/master/ejb/src/main/java/kp/\"\u003ekp\u003c/a\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/aquaHR-500.png\"\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\r\n\u003cimg alt=\"\" src=\"images/yellowHR-500.png\"\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/yellowSquare.png\"\u003e\r\n    \u003ca href=\"http://htmlpreview.github.io/?https://github.com/k1729p/Study13/blob/main/docs/apidocs/index.html\"\u003e\r\n\tJava API Documentation\u003c/a\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/yellowHR-500.png\"\u003e\r\n\u003c/p\u003e\r\n\r\n\u003chr\u003e\r\n\u003ch2 id=\"wildfly\"\u003e❶ WildFly Application Deploy\u003c/h2\u003e\r\n\r\n\u003cp\u003eAction:\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeHR-500.png\"\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeSquare.png\"\u003e 1. With batch file \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/0_batch/01%20WildFly%20DeleteLog%20Startup.bat\"\u003e \r\n\u003ci\u003e\"01 WildFly DeleteLog Startup.bat\"\u003c/i\u003e\u003c/a\u003e start the WildFly server.\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeSquare.png\"\u003e 2. With batch file \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/0_batch/02%20MVN%20clean%20install%20deploy%20WildFly.bat\"\u003e \r\n\u003ci\u003e\"02 MVN clean install deploy WildFly.bat\"\u003c/i\u003e\u003c/a\u003e build and deploy the application\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeSquare.png\"\u003e\u003cimg alt=\"\" src=\"images/spacer-32.png\"\u003eon the WildFly server.\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeSquare.png\"\u003e 3. With the URL \u003ca href=\"http://localhost:8080/Study13/\"\u003ehttp://localhost:8080/Study13/\u003c/a\u003e \r\nopen in the web browser the '\u003ci\u003ehome page\u003c/i\u003e'.\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeHR-500.png\"\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e \r\n1.1. The '\u003ci\u003ehome page\u003c/i\u003e' file \u003cb\u003eindex.html\u003c/b\u003e: \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/web/src/main/webapp/index.html\"\u003eHTML code\u003c/a\u003e, \r\n\u003ca href=\"http://htmlpreview.github.io/?https://github.com/k1729p/Study13/blob/main/web/src/main/webapp/index.html\"\u003e\r\nHTML preview\u003c/a\u003e\r\n\u003c/p\u003e\r\n\u003cp\u003e\r\n\u003cimg alt=\"\" src=\"images/ScreenshotHomePage.png\" height=\"230\" width=\"365\"/\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/blackArrowUp.png\"\u003e\r\n\u003ci\u003eThe screenshot of the home page.\u003c/i\u003e\r\n\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e \r\n1.2. The link to the WildFly Application Server \u003ca href=\"http://localhost:8080/console\"\u003eAdministration Console\u003c/a\u003e.\r\n\u003c/p\u003e\r\n\r\n\u003ca href=\"#top\"\u003eBack to the top of the page\u003c/a\u003e\r\n\u003chr\u003e\r\n\u003ch2 id=\"e_j_b\"\u003e❷ Enterprise JavaBeans\u003c/h2\u003e\r\n\r\n\u003cp\u003eAction:\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeHR-500.png\"\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeSquare.png\"\u003e Go to page \u003ca href=\"http://localhost:8080/Study13/\"\u003ehttp://localhost:8080/Study13/\u003c/a\u003e \r\n\tand select \"Enterprise JavaBeans\".\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeHR-500.png\"\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/e_j_b_Controls.png\" width=\"1200\"/\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/blackArrowUp.png\"\u003e\r\n\u003ci\u003eScreenshot from \"Enterprise JavaBeans\" page controls.\u003c/i\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\r\nThe JSF page on the screenshot \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/web/src/main/webapp/e_j_b.xhtml\"\u003e'e_j_b.xhtml'\u003c/a\u003e uses the beans:\r\n\u003c/p\u003e\r\n\u003cul\u003e\r\n\u003cli\u003e\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/e_j_b/controller/TasksManagedBean.java\"\u003e\r\nTasksManagedBean\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/e_j_b/controller/ChecksManagedBean.java\"\u003e\r\nChecksManagedBean\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/e_j_b/controller/InterceptorsManagedBean.java\"\u003e\r\nInterceptorsManagedBean\u003c/a\u003e\u003c/li\u003e\r\n\u003c/ul\u003e\r\n\r\n\u003ca href=\"#top\"\u003eBack to the top of the page\u003c/a\u003e\r\n\u003ch3 id=\"e_j_b_tasks\"\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e \r\n2.1. EJB Example 'Tasks'\u003c/h3\u003e\r\n\u003cp\u003eThere are three batches (each having five tasks) launched with a managed executor service:\r\n\u003col\u003e\r\n  \u003cli\u003eThe button 'Tasks With Stateless' starts the tasks with the stateless session beans.\u003c/li\u003e\r\n  \u003cli\u003eThe button 'Tasks With Singleton' starts the tasks with the singleton session beans.\u003c/li\u003e\r\n  \u003cli\u003eThe button 'Tasks With Stateful' starts the tasks with the stateful session beans.\u003c/li\u003e\r\n\u003c/ol\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e \r\n2.1.1. The tasks with the \u003cb\u003estateless\u003c/b\u003e session bean \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/e_j_b/remote/StaLeBean.java\"\u003eStaLeBean\u003c/a\u003e.\r\nThis is the implementation of the interface \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/common/src/main/java/kp/e_j_b/remote/StaLe.java\"\u003eStaLe\u003c/a\u003e.\u003cbr\u003e\r\nThe method \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/e_j_b/controller/TasksManagedBean.java#L99\"\u003e\r\nTasksManagedBean::researchStateless\u003c/a\u003e submits the tasks to the 'ManagedExecutorService'.\u003cbr\u003e\r\nIt executes the method\r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/e_j_b/CommonImpl.java#L49\"\u003eCommonImpl::change\u003c/a\u003e.\u003cbr\u003e\r\n\u003c/p\u003e\r\n\r\n\u003cp\u003eAction:\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeHR-500.png\"\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeSquare.png\"\u003e Push the button \"Tasks With Stateless\" three times.\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeHR-500.png\"\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003eResults:\u003c/p\u003e\r\n\u003col\u003e\r\n  \u003cli\u003eIt is evident that the stateless bean state (the value of the bean field) as a rule is not preserved.\u003c/li\u003e\r\n  \u003cli\u003eAll five stateless beans (injected with @EJB) reference the same \u003cb\u003eproxy\u003c/b\u003e object (hash codes are equal).\u003c/li\u003e\r\n  \u003cli\u003eAll five stateless bean instances, used in launched tasks, were different objects (hash codes are not equal).\u003c/li\u003e\r\n\u003c/ol\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/TasksWithStateless.png\" height=\"564\" width=\"1014\"/\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/blackArrowUp.png\"\u003e\r\n\u003ci\u003eScreen from three 'Tasks With Stateless' actions.\u003c/i\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e \r\n2.1.2. The tasks with the \u003cb\u003esingleton\u003c/b\u003e session bean \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/e_j_b/remote/SingBean.java\"\u003eSingBean\u003c/a\u003e. \r\nThis is the implementation of the interface \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/common/src/main/java/kp/e_j_b/remote/Sing.java\"\u003eSing\u003c/a\u003e.\u003cbr\u003e\r\nThe method \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/e_j_b/controller/TasksManagedBean.java#L116\"\u003e\r\nTasksManagedBean::researchSingleton\u003c/a\u003e submits the tasks to the 'ManagedExecutorService'.\u003cbr\u003e\r\nIt executes the method\r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/e_j_b/CommonImpl.java#L49\"\u003eCommonImpl::change\u003c/a\u003e.\u003cbr\u003e\r\n\u003c/p\u003e\r\n\r\n\u003cp\u003eAction:\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeHR-500.png\"\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeSquare.png\"\u003e Push the button \"Tasks With Singleton\" three times.\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeHR-500.png\"\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003eResults:\u003c/p\u003e\r\n\u003col\u003e\r\n  \u003cli\u003eFrom the bean hash code, it is evident that the singleton bean state (the value of the bean field) is always overwritten.\u003c/li\u003e\r\n  \u003cli\u003eAll five singleton beans (injected with @EJB) reference the same \u003cb\u003eproxy\u003c/b\u003e object (hash codes are equal).\u003c/li\u003e\r\n  \u003cli\u003eAll five singleton bean instances, used in launched tasks, were the same object (hash codes are equal).\u003c/li\u003e\r\n\u003c/ol\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/TasksWithSingleton.png\" height=\"565\" width=\"1056\"/\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/blackArrowUp.png\"\u003e\r\n\u003ci\u003eScreenshot from three 'Tasks With Singleton' actions.\u003c/i\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e \r\n2.1.3. The tasks with the \u003cb\u003estateful\u003c/b\u003e session bean \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/common/src/main/java/kp/e_j_b/remote/StaFu.java\"\u003eStaFu\u003c/a\u003e. \r\nThis is the implementation of the interface \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/e_j_b/remote/StaFuBean.java\"\u003eStaFuBean\u003c/a\u003e.\u003cbr\u003e\r\nThe method \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/e_j_b/controller/TasksManagedBean.java#L133\"\u003e\r\nTasksManagedBean::researchStateful\u003c/a\u003e submits the tasks to the 'ManagedExecutorService'.\u003cbr\u003e\r\nIt executes the method\r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/e_j_b/CommonImpl.java#L49\"\u003eCommonImpl::change\u003c/a\u003e.\u003cbr\u003e\r\n\u003c/p\u003e\r\n\r\n\u003cp\u003eAction:\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeHR-500.png\"\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeSquare.png\"\u003e Push the button \"Tasks With Stateful\" three times.\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeHR-500.png\"\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003eResults:\u003c/p\u003e\r\n\u003col\u003e\r\n  \u003cli\u003eThe bean state (the value of the bean field) is always preserved.\u003c/li\u003e\r\n  \u003cli\u003eAll five stateful beans (injected with @EJB) reference different \u003cb\u003eproxy\u003c/b\u003e objects (hash codes are not equal).\u003c/li\u003e\r\n  \u003cli\u003eAll five stateful bean instances, used in launched tasks, were different objects (hash codes are not equal).\u003c/li\u003e\r\n\u003c/ol\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/TasksWithStateful.png\" height=\"563\" width=\"1022\"/\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/blackArrowUp.png\"\u003e\r\n\u003ci\u003eScreenshot from three 'Tasks With Stateful' actions.\u003c/i\u003e\u003c/p\u003e\r\n\r\n\u003ca href=\"#top\"\u003eBack to the top of the page\u003c/a\u003e\r\n\u003ch3 id=\"e_j_b_checks\"\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e \r\n2.2. EJB Example 'Checks'\u003c/h3\u003e\r\n\r\n\u003cp\u003eAction:\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeHR-500.png\"\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeSquare.png\"\u003e Push the button \"Check Stateless \u0026amp; Stateful \u0026amp; Singleton\".\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeHR-500.png\"\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e \r\n2.2.1. It executes the method\r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/e_j_b/controller/ChecksManagedBean.java#L100\"\u003e\r\n'ChecksManagedBean::researchStatelessStatefulSingleton'\u003c/a\u003e.\r\n\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e \r\n2.2.2. The bean instances invoked in this example:\r\n\u003c/p\u003e\r\n\u003col\u003e\r\n\u003cli\u003eLocal, no-interface view enterprise bean; injected with '@EJB' annotation; with class name \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/e_j_b/local/NoIntViBean.java\"\u003e'NoIntViBean'\u003c/a\u003e.\u003c/li\u003e\r\n\u003cli\u003eLocal, stateless enterprise bean; injected with '@EJB' annotation; with class name \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/e_j_b/local/StaLeLocalBean.java\"\u003e'StaLeLocalBean'\u003c/a\u003e.\u003c/li\u003e\r\n\u003cli\u003eRemote, stateless enterprise bean; injected with '@EJB' annotation; with class name \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/e_j_b/remote/StaLeBean.java\"\u003e'StaLeBean'\u003c/a\u003e.\u003c/li\u003e\r\n\u003cli\u003eRemote, stateful enterprise bean; injected with '@EJB' annotation; with class name \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/e_j_b/remote/StaFuBean.java\"\u003e'StaFuBean'\u003c/a\u003e.\u003c/li\u003e\r\n\u003cli\u003eRemote, singleton enterprise bean; injected with '@EJB' annotation; with class name \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/e_j_b/remote/SingBean.java\"\u003e'SingBean'\u003c/a\u003e.\u003c/li\u003e\r\n\u003cli\u003eLocal, no-interface view enterprise bean; injected with '@Inject' annotation; with class name \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/e_j_b/local/NoIntViBean.java\"\u003e'NoIntViBean'\u003c/a\u003e.\u003c/li\u003e\r\n\u003cli\u003eLocal, stateless enterprise bean; injected with '@Inject' annotation; with class name \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/e_j_b/local/StaLeLocalBean.java\"\u003e'StaLeLocalBean'\u003c/a\u003e.\u003c/li\u003e\r\n\u003c/ol\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/CheckStatelessStatefulSingleton.png\" height=\"334\" width=\"977\"/\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/blackArrowUp.png\"\u003e\r\n\u003ci\u003eScreenshot from 'Check Stateless \u0026amp; Stateful \u0026amp; Singleton' action.\u003c/i\u003e\u003c/p\u003e\r\n\r\n\u003ca href=\"#top\"\u003eBack to the top of the page\u003c/a\u003e\r\n\u003ch3 id=\"e_j_b_interceptor\"\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e \r\n2.3. EJB Example 'Interceptor'\u003c/h3\u003e\r\n\r\n\u003cp\u003eAction:\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeHR-500.png\"\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeSquare.png\"\u003e Push the button \"Interceptor\".\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeHR-500.png\"\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e\r\n2.3.1. There were implemented interceptors for the time elapsed capture.\r\n\u003cp\u003eIn the \u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/e_j_b/interceptors/TimeElapsedBean.java\"\u003e\r\n'TimeElapsedBean'\u003c/a\u003e, interceptors were added to these methods:\r\n\u003c/p\u003e\r\n\u003col\u003e\r\n\u003cli\u003e\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/e_j_b/interceptors/TimeElapsedBean.java#L47\"\u003e\r\n'TimeElapsedBean::pausedMilli'\u003c/a\u003e - this method stops for one millisecond.\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/e_j_b/interceptors/TimeElapsedBean.java#L35\"\u003e\r\n'TimeElapsedBean::pausedNano'\u003c/a\u003e - this method stops for one nanosecond.\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/e_j_b/interceptors/TimeElapsedBean.java#L25\"\u003e\r\n'TimeElapsedBean::notPaused'\u003c/a\u003e - this method is empty inside (has an empty body).\u003c/li\u003e\r\n\u003c/ol\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e\r\n2.3.2. It executes the method\r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/e_j_b/controller/InterceptorsManagedBean.java#L38\"\u003e\r\n'InterceptorsManagedBean::researchInterceptor'\u003c/a\u003e.\r\n\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/Interceptor.png\" height=\"79\" width=\"552\"/\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/blackArrowUp.png\"\u003e\r\n\u003ci\u003eScreenshot from 'Interceptor' action.\u003c/i\u003e\u003c/p\u003e\r\n\r\n\u003ca href=\"#top\"\u003eBack to the top of the page\u003c/a\u003e\r\n\u003chr\u003e\r\n\u003ch2 id=\"j_p_a\"\u003e❸ Java Persistence API\u003c/h2\u003e\r\n\u003cp\u003e\r\nThe data source 'Study13DS' uses an \u003cb\u003eH2 database\u003c/b\u003e with the name 'study13' and in-memory mode.\u003cbr\u003e\r\nThe configuration files:\r\n\u003c/p\u003e\r\n\u003cul\u003e\r\n\u003cli\u003e\u003ca href=\"https://github.com/k1729p/Study13/blob/main/web/src/main/webapp/WEB-INF/study03-ds.xml\"\u003e'study03-ds.xml'\u003c/a\u003e in the 'web' module\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/resources/META-INF/persistence.xml\"\u003e'persistence.xml'\u003c/a\u003e in the 'ejb' module\u003c/li\u003e\r\n\u003c/ul\u003e\r\nFor CRUD actions, criteria queries were used. There is a switch in the code to use named queries.\r\n\r\n\u003cp\u003eAction:\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeHR-500.png\"\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeSquare.png\"\u003e Go to the page \u003ca href=\"http://localhost:8080/Study13/\"\u003ehttp://localhost:8080/Study13/\u003c/a\u003e\r\n\tand select \"Java Persistence API\".\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeHR-500.png\"\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/j_p_a_Controls.png\" width=\"1200\"/\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/blackArrowUp.png\"\u003e\r\n\u003ci\u003eScreenshot from the \"Java Persistence API\" page controls.\u003c/i\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\r\nThe JSF page on the screenshot \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/web/src/main/webapp/j_p_a.xhtml\"\u003e'j_p_a.xhtml'\u003c/a\u003e uses the beans:\r\n\u003c/p\u003e\r\n\u003cul\u003e\r\n\u003cli\u003e\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_p_a/controller/BoxBean.java\"\u003e'BoxBean'\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_p_a/controller/UnitManagedBean.java\"\u003e'UnitManagedBean'\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_p_a/controller/LevelManagedBean.java\"\u003e'LevelManagedBean'\u003c/a\u003e\u003c/li\u003e\r\n\u003c/ul\u003e\r\n\r\n\u003ca href=\"#top\"\u003eBack to the top of the page\u003c/a\u003e\r\n\u003ch3 id=\"j_p_a_boxes\"\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e \r\n3.1. JPA Example 'Boxes'\u003c/h3\u003e\r\n\r\n\u003cp\u003eAction:\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeHR-500.png\"\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeSquare.png\"\u003e 1. Push the button 'Create Box' four times.\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeSquare.png\"\u003e 2. Push the button 'Read Boxes'.\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeSquare.png\"\u003e 3. Push the button 'Update \u0026 Read Boxes'.\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeSquare.png\"\u003e 4. Push the button 'Delete Box' four times.\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeHR-500.png\"\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e \r\n3.1.1. The entity classes for boxes:\r\n\u003c/p\u003e\r\n\u003cul\u003e\r\n\u003cli\u003e\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_p_a/domain/boxes/Box.java\"\u003e'Box'\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_p_a/domain/boxes/CentralBox.java\"\u003e'CentralBox'\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_p_a/domain/boxes/UpperBox.java\"\u003e'UpperBox'\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_p_a/domain/boxes/LowerBox.java\"\u003e'LowerBox'\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_p_a/domain/boxes/SingleBox.java\"\u003e'SingleBox'\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_p_a/domain/boxes/MultiBox.java\"\u003e'MultiBox'\u003c/a\u003e\u003c/li\u003e\r\n\u003c/ul\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/DiagramBoxes.png\" height=\"502\" width=\"750\"/\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/blackArrowUp.png\"\u003e\r\n\u003ci\u003eThe relationships diagram for the boxes entity classes.\u003c/i\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e \r\n3.1.2. For the 'Create Box' (method \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_p_a/controller/BoxBean.java#L85\"\u003e'BoxBean::createCentralBox'\u003c/a\u003e\r\n) only the first 3 calls were successful.\u003cbr\u003e\r\nThe 4th call failed because the allowable creation maximum is 3 \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_p_a/domain/boxes/CentralBox.java\"\u003e'CentralBox'\u003c/a\u003e objects.\u003cbr\u003e\r\nIt was a transaction rollback on the 4th call.\r\n\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/CreateBox1.png\" height=\"165\" width=\"810\"/\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/blackArrowUp.png\"\u003e\r\n\u003ci\u003eScreenshot from 1st 'Create Box' action.\u003c/i\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/CreateBox2.png\" height=\"185\" width=\"810\"/\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/blackArrowUp.png\"\u003e\r\n\u003ci\u003eScreenshot from 2nd 'Create Box' action.\u003c/i\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/CreateBox3.png\" height=\"205\" width=\"810\"/\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/blackArrowUp.png\"\u003e\r\n\u003ci\u003eScreenshot from 3rd 'Create Box' action.\u003c/i\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/CreateBox4.png\" height=\"35\" width=\"705\"/\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/blackArrowUp.png\"\u003e\r\n\u003ci\u003eScreenshot from 4th 'Create Box' action.\u003c/i\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e \r\n3.1.3. For the 'Read Boxes' (method \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_p_a/controller/BoxBean.java#L115\"\u003e'BoxBean::readCentralBoxes'\u003c/a\u003e\r\n) the report shows the 3\r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_p_a/domain/boxes/CentralBox.java\"\u003e'CentralBox'\u003c/a\u003e \r\nobjects and their dependencies.\r\n\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/ReadBoxes.png\" height=\"665\" width=\"810\"/\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/blackArrowUp.png\"\u003e\r\n\u003ci\u003eScreenshot from 'Read Boxes' action.\u003c/i\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e \r\n3.1.4. For the 'Update \u0026 Read Boxes' (method \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_p_a/controller/BoxBean.java#L143\"\u003e'BoxBean::updateCentralBoxes'\u003c/a\u003e\r\n) the \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_p_a/domain/boxes/CentralBox.java\"\u003e'CentralBox'\u003c/a\u003e \r\nfield 'cardinalDirection' was changed.\r\n\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/UpdateAndReadBoxes.png\" height=\"670\" width=\"810\"/\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/blackArrowUp.png\"\u003e\r\n\u003ci\u003eScreenshot from 'Update \u0026amp; Read Boxes' action.\u003c/i\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e \r\n3.1.5. For the 'Delete Box' (method \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_p_a/controller/BoxBean.java#L176\"\u003e'BoxBean::deleteCentralBox'\u003c/a\u003e\r\n) the 4th call failed because there were no more \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_p_a/domain/boxes/CentralBox.java\"\u003e'CentralBox'\u003c/a\u003e \r\nobjects left after three 'Delete Box' calls.\r\n\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/DeleteBox1.png\" height=\"35\" width=\"627\"/\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/blackArrowUp.png\"\u003e\r\n\u003ci\u003eScreenshot from 1st 'Delete Boxes' action.\u003c/i\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/DeleteBox2.png\" height=\"35\" width=\"627\"/\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/blackArrowUp.png\"\u003e\r\n\u003ci\u003eScreenshot from 2nd 'Delete Boxes' action.\u003c/i\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/DeleteBox3.png\" height=\"36\" width=\"627\"/\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/blackArrowUp.png\"\u003e\r\n\u003ci\u003eScreenshot from 3rd 'Delete Boxes' action.\u003c/i\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/DeleteBox4.png\" height=\"60\" width=\"627\"/\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/blackArrowUp.png\"\u003e\r\n\u003ci\u003eScreenshot from 4th 'Delete Boxes' action.\u003c/i\u003e\u003c/p\u003e\r\n\r\n\u003ca href=\"#top\"\u003eBack to the top of the page\u003c/a\u003e\r\n\u003ch3 id=\"j_p_a_units\"\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e \r\n3.2. JPA Example 'Units'\u003c/h3\u003e\r\n\r\n\u003cp\u003eAction:\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeHR-500.png\"\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeSquare.png\"\u003e 1. Push the button 'Create-Read-Delete Units' the first time.\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeSquare.png\"\u003e 2. Push the button 'Create-Read-Delete Units' the second time.\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeHR-500.png\"\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e\r\n3.2.1. For read actions, criteria queries (created with 'CriteriaBuilder') were used.\u003cbr\u003e\r\n\r\n\u003cp\u003eThe units entity classes have relationships:\u003c/p\u003e\r\n\u003cul\u003e\r\n\u003cli\u003e\u003ci\u003eOne-To-One\u003c/i\u003e self-referential relationship between 'previous' and 'next' \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_p_a/domain/units/Unit.java\"\u003e'Unit'\u003c/a\u003e objects\u003c/li\u003e\r\n\u003cli\u003e\u003ci\u003eMany-To-One\u003c/i\u003e self-referential relationship between 'parent' and 'child' \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_p_a/domain/units/Unit.java\"\u003e'Unit'\u003c/a\u003e objects\u003c/li\u003e\r\n\u003cli\u003e\u003ci\u003eOne-To-Many\u003c/i\u003e relationship between \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_p_a/domain/units/Unit.java\"\u003e'Unit'\u003c/a\u003e \r\nobject and 4 \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_p_a/domain/units/Side.java\"\u003e'Side'\u003c/a\u003e \r\nobjects using enumeration \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_p_a/domain/components/CardinalDirection.java\"\u003e\r\nCardinalDirection\u003c/a\u003e\u003c/li\u003e\r\n\u003c/ul\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/DiagramUnits.png\" height=\"200\" width=\"600\"/\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/blackArrowUp.png\"\u003e\r\n\u003ci\u003eThe units relationships diagram.\u003c/i\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e \r\n3.2.2. With the first 'Create-Read-Delete Units' action, the\r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_p_a/domain/units/Unit.java\"\u003e'Unit'\u003c/a\u003e \r\nobjects were created and persisted to the database. It executed the method \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_p_a/controller/UnitManagedBean.java#L91\"\u003e\r\n'UnitManagedBean::createUnits'\u003c/a\u003e.\r\n\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/CreateReadDeleteUnits1.png\" height=\"105\" width=\"282\"/\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/blackArrowUp.png\"\u003e\r\n\u003ci\u003eScreenshot from 1st 'Create-Read-Delete Units' action\u003c/i\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e \r\n3.2.3. With the second 'Create-Read-Delete Units' action, the\r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_p_a/domain/units/Unit.java\"\u003e'Unit'\u003c/a\u003e \r\nobjects were read from the database, presented as a report, and removed from the database.\u003cbr\u003e\r\nIt executed the method \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_p_a/controller/UnitManagedBean.java#L112\"\u003e\r\n'UnitManagedBean::readAndDeleteUnits'\u003c/a\u003e.\r\n\u003c/p\u003e\r\n\u003cp\u003eThe presented report shows the results of the query.\u003c/p\u003e\r\n\u003cul\u003e\r\n\u003cli\u003efor 3 \u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_p_a/domain/units/Unit.java\"\u003e'Unit'\u003c/a\u003e \r\nobjects, there is a \u003ci\u003eprevious - next\u003c/i\u003e relationship: A -\u003e B -\u003e C.\u003c/li\u003e\r\n\u003cli\u003efor 4 \u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_p_a/domain/units/Unit.java\"\u003e'Unit'\u003c/a\u003e \r\nobjects, there is a \u003ci\u003eparent - child\u003c/i\u003e relationship: C -\u003e (X, Y, Z).\u003c/li\u003e\r\n\u003cli\u003efor all 6 \u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_p_a/domain/units/Unit.java\"\u003e'Unit'\u003c/a\u003e \r\nobjects and 24 \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_p_a/domain/units/Side.java\"\u003e'Side'\u003c/a\u003e \r\nobjects, there is a \u003ci\u003eone-to-many\u003c/i\u003e relationship:\u003cbr\u003e\r\nevery \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_p_a/domain/units/Unit.java\"\u003e'Unit'\u003c/a\u003e \r\nobject has four unique \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_p_a/domain/units/Side.java\"\u003e'Side'\u003c/a\u003e objects.\u003c/li\u003e\r\n\u003c/ul\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/CreateReadDeleteUnits2.png\" height=\"242\" width=\"776\"/\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/blackArrowUp.png\"\u003e\r\n\u003ci\u003eScreenshot from 2nd 'Create-Read-Delete Units' action\u003c/i\u003e\u003c/p\u003e\r\n\r\n\u003ca href=\"#top\"\u003eBack to the top of the page\u003c/a\u003e\r\n\u003ch3 id=\"j_p_a_levels\"\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e \r\n3.3. JPA Example 'Levels'\u003c/h3\u003e\r\n\r\n\u003cp\u003eActions:\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeHR-500.png\"\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeSquare.png\"\u003e 1. Push the button 'Create-Read-Delete Levels' the first time.\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeSquare.png\"\u003e 2. Push the button 'Create-Read-Delete Levels' the second time.\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeHR-500.png\"\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e\r\n3.3.1. For CRUD actions, criteria queries (created with 'CriteriaBuilder') with metamodels in the package\r\n\u003ca href=\"https://github.com/k1729p/Study13/tree/main/ejb/src/main/java/kp/j_p_a/domain/levels\"\u003e'levels'\u003c/a\u003e were used.\r\n\u003c/p\u003e\r\n\u003cp\u003e\r\nThe entity classes for levels:\r\n\u003c/p\u003e\r\n\u003cul\u003e\r\n\u003cli\u003e\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_p_a/domain/levels/Level.java\"\u003e'Level'\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_p_a/domain/levels/FirstLevel.java\"\u003e'FirstLevel'\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_p_a/domain/levels/SecondLevel.java\"\u003e'SecondLevel'\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_p_a/domain/levels/ThirdLevel.java\"\u003e'ThirdLevel'\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_p_a/domain/levels/FourthLevel.java\"\u003e'FourthLevel'\u003c/a\u003e\u003c/li\u003e\r\n\u003c/ul\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/DiagramLevels.png\" height=\"350\" width=\"200\"/\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/blackArrowUp.png\"\u003e\r\n\u003ci\u003eThe levels relationships diagram. It is the 'One-To-Many' hierarchical relationships.\u003c/i\u003e\r\n\u003c/p\u003e\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e\r\n3.3.2. With the first 'Create-Read-Delete Levels' action, the\r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_p_a/domain/levels/Level.java\"\u003e'Level'\u003c/a\u003e \r\nobjects were created and persisted to the database. It executed the method \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_p_a/controller/LevelManagedBean.java#L94\"\u003e\r\n'LevelManagedBean::createLevels'\u003c/a\u003e.\r\n\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/CreateReadDeleteLevels1.png\" height=\"57\" width=\"107\"/\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/blackArrowUp.png\"\u003e\r\n\u003ci\u003eScreenshot from 1st 'Create-Read-Delete Levels' action\u003c/i\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e \r\n3.3.3. With the second 'Create-Read-Delete Levels' action, the\r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_p_a/domain/levels/Level.java\"\u003e'Level'\u003c/a\u003e \r\nobjects were read from the database, presented as a report, and removed from the database.\u003cbr\u003e\r\nThe four methods were executed in a sequence:\r\n\u003c/p\u003e\r\n\u003col\u003e\r\n\u003cli\u003eThe read method\r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_p_a/controller/LevelManagedBean.java#L126\"\u003e\r\n'LevelManagedBean::readWithQueryUsingJoins'\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003eThe read method\r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_p_a/controller/LevelManagedBean.java#L148\"\u003e\r\n'LevelManagedBean::readWithCriteriaUsingJoins'\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003eThe read method\r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_p_a/controller/LevelManagedBean.java#L245\"\u003e\r\n'LevelManagedBean::readWithCriteriaUsingAggregateFunctions'\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003eThe delete method\r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_p_a/controller/LevelManagedBean.java#L290\"\u003e\r\n'LevelManagedBean::deleteLevels'\u003c/a\u003e\u003c/li\u003e\r\n\u003c/ol\u003e\r\n\r\n\u003cp\u003eThe presented report shows the results of the four queries:\r\n\u003c/p\u003e\r\n\u003col\u003e\r\n\u003cli\u003eThe query using string with pattern \"\u003cb\u003eSELECT ... FROM ... JOIN ... WHERE ... IN ...\u003c/b\u003e\"\u003c/li\u003e\r\n\u003cli\u003eThe query using string with pattern \"\u003cb\u003eSELECT ... FROM ... IN   ... WHERE ... IN ...\u003c/b\u003e\"\u003c/li\u003e\r\n\u003cli\u003eThe query using criteria with '\u003cb\u003ejoin\u003c/b\u003e'\u003c/li\u003e\r\n\u003cli\u003eThe aggregate function query using criteria with '\u003cb\u003egroupBy\u003c/b\u003e'\u003c/li\u003e\r\n\u003c/ol\u003e\r\n\u003cp\u003eFor the 1st, 2nd, and 3rd queries, the result is identical.\u003cbr\u003e\r\nThe result of the 4th query is the intersection of the '\u003cb\u003ehaving\u003c/b\u003e' restriction and the '\u003cb\u003ewhere\u003c/b\u003e' restriction.\r\n\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/CreateReadDeleteLevels2.png\" height=\"703\" width=\"938\"/\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/blackArrowUp.png\"\u003e\r\n\u003ci\u003eScreenshot from 2nd 'Create-Read-Delete Levels' action\u003c/i\u003e\u003c/p\u003e\r\n\r\n\u003ca href=\"#top\"\u003eBack to the top of the page\u003c/a\u003e\r\n\u003chr\u003e\r\n\u003ch2 id=\"j_m_s\"\u003e❹ Java Message Service\u003c/h2\u003e\r\n\u003cp\u003e\r\nThe initial JMS configuration in the WildFly server was done with the batch file \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/0_batch/04%20CLI%20Config%20Queue%20%26%20Topic.bat\"\u003e'04 CLI Config Queue \u0026 Topic.bat'\u003c/a\u003e.\u003cbr\u003e\r\nThe changed batch script was used for creating the topics.\r\n\u003c/p\u003e\r\n\r\n\u003cp\u003eInitial actions:\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeHR-500.png\"\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeSquare.png\"\u003e 1. Go to the page \u003ca href=\"http://localhost:8080/Study13/\"\u003ehttp://localhost:8080/Study13/\u003c/a\u003e\r\n\tand select \"Java Message Service\".\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeHR-500.png\"\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/j_m_s_Controls.png\" width=\"1200\"/\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/blackArrowUp.png\"\u003e\r\n\u003ci\u003eScreenshot from \"Java Message Service\" page controls.\u003c/i\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\r\nThe JSF page  on the screenshot \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/web/src/main/webapp/j_m_s.xhtml\"\u003e'j_m_s.xhtml'\u003c/a\u003e uses the beans:\r\n\u003c/p\u003e\r\n\u003ctable style=\"border:solid\"\u003e\u003ctbody\u003e\u003ctr\u003e\r\n\u003ctd style=\"border:solid\"\u003e\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_m_s/sync/queue/QueueProducerSync.java\"\u003e\r\n'QueueProducerSync'\u003c/a\u003e\u003c/td\u003e\r\n\u003ctd style=\"border:solid\"\u003e\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_m_s/sync/queue/QueueConsumerSync.java\"\u003e\r\n'QueueConsumerSync'\u003c/a\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\u003ctr\u003e\r\n\u003ctd style=\"border:solid\"\u003e\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_m_s/sync/topic/TopicProducerSync.java\"\u003e\r\n'TopicProducerSync'\u003c/a\u003e\u003c/td\u003e\r\n\u003ctd style=\"border:solid\"\u003e\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_m_s/sync/topic/TopicConsumerSync.java\"\u003e\r\n'TopicConsumerSync'\u003c/a\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\u003ctr\u003e\r\n\u003ctd style=\"border:solid\"\u003e\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_m_s/async/queue/QueueProducerAsync.java\"\u003e\r\n'QueueProducerAsync'\u003c/a\u003e\u003c/td\u003e\r\n\u003ctd style=\"border:solid\"\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\u003ctr\u003e\r\n\u003ctd style=\"border:solid\"\u003e\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_m_s/async/topic/TopicProducerAsync.java\"\u003e\r\n'TopicProducerAsync'\u003c/a\u003e\u003c/td\u003e\r\n\u003ctd style=\"border:solid\"\u003e\u003c/td\u003e\r\n\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\r\n\r\n\u003cbr\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/DiagramQueuesAndTopics.png\" height=\"800\" width=\"1100\"/\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/blackArrowUp.png\"\u003e\r\n\u003ci\u003eQueues \u0026amp; topics diagram.\u003c/i\u003e\u003c/p\u003e\r\n\r\n\u003ca href=\"#top\"\u003eBack to the top of the page\u003c/a\u003e\r\n\u003ch3 id=\"j_m_s_sync\"\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e \r\n4.1. JMS Example 'Synchronous Queue \u0026amp; Topic'\u003c/h3\u003e\r\n\r\n\u003cp\u003eActions:\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeHR-500.png\"\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeSquare.png\"\u003e 1. Using the link 'Open Page in New Browser Tab', open the second browser tab.\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeSquare.png\"\u003e 2. In the \u003cb\u003e2nd tab\u003c/b\u003e, push the button \"Queue Receive (Sync)\".\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeSquare.png\"\u003e 3. In the \u003cb\u003e1st tab\u003c/b\u003e, push the button \"Queue Send (Sync)\".\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeSquare.png\"\u003e 4. In the \u003cb\u003e2nd tab\u003c/b\u003e, push the button \"Topic Receive (Sync)\".\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeSquare.png\"\u003e 5. In the \u003cb\u003e1st tab\u003c/b\u003e, push the button \"Topic Send (Sync)\".\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeSquare.png\"\u003e 6. In the \u003cb\u003e1st tab\u003c/b\u003e, click the link \"Reload Report\".\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeHR-500.png\"\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e \r\n4.1.1. The synchronous queue methods:\r\n\u003c/p\u003e\r\n\u003col\u003e\r\n\u003cli\u003e\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_m_s/sync/queue/QueueProducerSync.java#L46\"\u003e\r\n'QueueProducerSync::sendQueueMessages'\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_m_s/sync/queue/QueueConsumerSync.java#L46\"\u003e\r\n'QueueConsumerSync::receiveQueueMessages'\u003c/a\u003e\u003c/li\u003e\r\n\u003c/ol\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e \r\n4.1.2. The synchronous topic methods:\r\n\u003c/p\u003e\r\n\u003col\u003e\r\n\u003cli\u003e\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_m_s/sync/topic/TopicProducerSync.java#L46\"\u003e\r\n'TopicProducerSync::sendTopicMessages'\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_m_s/sync/topic/TopicConsumerSync.java#L46\"\u003e\r\n'TopicConsumerSync::receiveTopicMessages'\u003c/a\u003e\u003c/li\u003e\r\n\u003c/ol\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e \r\n4.1.3. The methods used on reply queue:\r\n\u003cul\u003e\r\n\u003cli\u003e\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_m_s/reply/ReplyHelper.java#L40\"\u003e\r\n'ReplyHelper::processControlMessage'\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_m_s/reply/ReplyQueueMDB.java#L56\"\u003e\r\n'ReplyQueueMDB::onMessage'\u003c/a\u003e\u003c/li\u003e\r\n\u003c/ul\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/SynchronousQueueAndTopicSendReceive.png\" height=\"472\" width=\"374\"/\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/blackArrowUp.png\"\u003e\r\n\u003ci\u003eScreenshot from synchronous queue \u0026amp; topic send/receive actions.\u003c/i\u003e\u003c/p\u003e\r\n\r\n\u003ca href=\"#top\"\u003eBack to the top of the page\u003c/a\u003e\r\n\u003ch3 id=\"j_m_s_async\"\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e \r\n4.2. JMS Example 'Asynchronous Queue \u0026amp; Topic'\u003c/h3\u003e\r\n\r\n\u003cp\u003eAction:\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeHR-500.png\"\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeSquare.png\"\u003e 1. Push the button \"Queue Send (Async)\".\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeSquare.png\"\u003e 2. Push the button \"Topic Send (Async)\".\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeSquare.png\"\u003e 3. Click the link \"Reload Report\".\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeHR-500.png\"\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e \r\n4.2.1. The asynchronous queue methods:\r\n\u003c/p\u003e\r\n\u003col\u003e\r\n\u003cli\u003e\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_m_s/async/queue/QueueProducerAsync.java#L46\"\u003e\r\n'QueueProducerAsync::sendQueueMessages'\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_m_s/async/queue/QueueConsumerMDB.java#L43\"\u003e\r\n'QueueConsumerMDB::onMessage'\u003c/a\u003e\u003c/li\u003e\r\n\u003c/ol\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e \r\n4.2.2. The asynchronous topic methods:\r\n\u003c/p\u003e\r\n\u003col\u003e\r\n\u003cli\u003e\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_m_s/async/topic/TopicProducerAsync.java#L46\"\u003e\r\n'TopicProducerAsync::sendTopicMessages'\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_m_s/async/topic/TopicConsumerMDB.java#L43\"\u003e\r\n'TopicConsumerMDB::onMessage'\u003c/a\u003e\u003c/li\u003e\r\n\u003c/ol\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e \r\n4.2.3. The methods used on reply queue:\r\n\u003c/p\u003e\r\n\u003cul\u003e\r\n\u003cli\u003e\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_m_s/reply/ReplyHelper.java#L40\"\u003e\r\n'ReplyHelper::processControlMessage'\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/j_m_s/reply/ReplyQueueMDB.java#L56\"\u003e\r\n'ReplyQueueMDB::onMessage'\u003c/a\u003e\u003c/li\u003e\r\n\u003c/ul\u003e\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/AsynchronousQueueAndTopicSendReceive.png\" height=\"440\" width=\"375\"/\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/blackArrowUp.png\"\u003e\r\n\u003ci\u003eScreenshot from asynchronous queue \u0026amp; topic send/receive actions.\u003c/i\u003e\u003c/p\u003e\r\n\r\n\u003ca href=\"#top\"\u003eBack to the top of the page\u003c/a\u003e\r\n\u003ch3 id=\"j_m_s_other_scenarios\"\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e \r\n4.3. Other JMS test scenarios\u003c/h3\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e \r\n4.3.1. \"First send then receive\" test scenario for synchronous queue:\r\n\u003c/p\u003e\r\n\u003col\u003e\r\n\t\u003cli\u003eSend to the queue.\u003c/li\u003e\r\n\t\u003cli\u003eRestart the server.\u003c/li\u003e\r\n\t\u003cli\u003eReceive from the queue.\u003c/li\u003e\r\n\t\u003cli\u003eResult: messages were \u003cb\u003enot lost\u003c/b\u003e.\u003c/li\u003e\r\n\u003c/ol\u003e\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e\r\n4.3.2. \"First send then receive\" test scenario for synchronous topic:\r\n\u003c/p\u003e\r\n\u003col\u003e\r\n\t\u003cli\u003eSend to the topic.\u003c/li\u003e\r\n\t\u003cli\u003eReceive from the topic.\u003c/li\u003e\r\n\t\u003cli\u003eBecause the receiver waits for messages (page hangs), repeat the sending to the topic.\u003c/li\u003e\r\n\t\u003cli\u003eResult: messages sent in the 1st action were \u003cb\u003elost\u003c/b\u003e.\u003c/li\u003e\r\n\u003c/ol\u003e\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e\r\n4.3.3. \"Two consumers\" test scenario for synchronous queue:\r\n\u003c/p\u003e\r\n\u003col\u003e\r\n\t\u003cli\u003eOpen the 2nd \u0026 the 3rd tab.\u003c/li\u003e\r\n\t\u003cli\u003eIn the 2nd tab, push the button \"Queue Receive (Sync)\".\u003c/li\u003e\r\n\t\u003cli\u003eIn the 3rd tab, push the button \"Queue Receive (Sync)\".\u003c/li\u003e\r\n\t\u003cli\u003eIn the 1st tab, push the button \"Queue Send (Sync)\" \u003cb\u003etwo times\u003c/b\u003e and click the link \"Reload Report\".\u003c/li\u003e\r\n\t\u003cli\u003eResult: for two consumers, two queues were used because this is point-to-point messaging.\u003c/li\u003e\r\n\u003c/ol\u003e\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e\r\n4.3.4. \"Two subscribers\" test scenario for synchronous topic:\r\n\u003c/p\u003e\r\n\u003col\u003e\r\n\t\u003cli\u003eOpen the 2nd \u0026 the 3rd tab.\u003c/li\u003e\r\n\t\u003cli\u003eIn the 2nd tab, push the button \"Topic Receive (Sync)\".\u003c/li\u003e\r\n\t\u003cli\u003eIn the 3rd tab, push the button \"Topic Receive (Sync)\".\u003c/li\u003e\r\n\t\u003cli\u003eIn the 1st tab, push the button \"Queue Send (Sync)\" \u003cb\u003eone time\u003c/b\u003e and click the link \"Reload Report\".\u003c/li\u003e\r\n\t\u003cli\u003eResult: for two subscribers, a single topic was used because this is 'publish/subscribe' messaging.\u003c/li\u003e\r\n\u003c/ol\u003e\r\n\r\n\u003ca href=\"#top\"\u003eBack to the top of the page\u003c/a\u003e\r\n\u003chr\u003e\r\n\u003ch2 id=\"trans_c_m_t\"\u003e❺ Container-Managed Transactions\u003c/h2\u003e\r\n\r\n\u003cp\u003e\r\nThe queues initializer for the message-driven beans \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/trans_c_m_t/queues/ParcelQueuesInitializer.java\"\u003e\r\n'ParcelQueuesInitializer'\u003c/a\u003e creates the queues:\r\n\u003c/p\u003e\r\n\u003cul\u003e\r\n\u003cli\u003eCreateParcelQueue\u003c/li\u003e\r\n\u003cli\u003eConfirmCreateParcelQueue\u003c/li\u003e\r\n\u003cli\u003eReadParcelQueue\u003c/li\u003e\r\n\u003c/ul\u003e\r\n\r\n\u003cp\u003eAction:\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeHR-500.png\"\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeSquare.png\"\u003e 1. Go to the page \u003ca href=\"http://localhost:8080/Study13/\"\u003ehttp://localhost:8080/Study13/\u003c/a\u003e\r\n\tand select \"Container-Managed Transactions\".\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeSquare.png\"\u003e 2. Push the button \"Send to 'CreateParcelQueue'\" three times and the button \"Reload Report\".\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeSquare.png\"\u003e 3. Push the button \"Send to 'ReadParcelQueue'\" and the button \"Reload Report\".\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeSquare.png\"\u003e 4. Push the button \"Show Audit\" and the button \"Reload Report\".\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeHR-500.png\"\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/transactions_c_m_t_Controls.png\" width=\"1200\"/\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/blackArrowUp.png\"\u003e\r\n\u003ci\u003eScreenshot from \"Container-Managed Transactions\" page controls.\u003c/i\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\r\nThe JSF page on the screenshot \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/web/src/main/webapp/transactions_c_m_t.xhtml\"\u003e'transactions_c_m_t.xhtml'\u003c/a\u003e uses the bean\r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/trans_c_m_t/controller/TransCmtManagedBean.java\"\u003e\r\n'TransCmtManagedBean'\u003c/a\u003e\r\n\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e \r\n5.1. The \u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/trans_c_m_t/domain/Parcel.java\"\u003e'Parcel'\u003c/a\u003e \r\nobjects are created with the method \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/trans_c_m_t/service/ParcelAdministratorBean.java#L65\"\u003e\r\n'ParcelAdministratorBean::create'\u003c/a\u003e\r\nand read with the method\r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/trans_c_m_t/service/ParcelAdministratorBean.java#L80\"\u003e\r\n'ParcelAdministratorBean::read'\u003c/a\u003e. \r\nThe auditing is done with the methods \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/trans_c_m_t/service/AuditorBean.java#L56\"\u003e\r\n'AuditorBean::recordCreated'\u003c/a\u003e and \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/trans_c_m_t/service/AuditorBean.java#L69\"\u003e\r\n'AuditorBean::recordApproved'\u003c/a\u003e.\r\n\u003c/p\u003e\r\n\u003cp\u003e\r\nThe \u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/trans_c_m_t/domain/Parcel.java\"\u003e'Parcel'\u003c/a\u003e \r\napproving logic in method \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/trans_c_m_t/helper/Approver.java#L59\"\u003e'Approver::approve'\u003c/a\u003e:\r\n\u003c/p\u003e\r\n\u003cul\u003e\r\n\u003cli\u003eEvery newly created \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/trans_c_m_t/domain/Parcel.java\"\u003e'Parcel'\u003c/a\u003e \r\nobject is validated.\u003c/li\u003e\r\n\u003cli\u003eThe \u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/trans_c_m_t/domain/Parcel.java\"\u003e'Parcel'\u003c/a\u003e \r\nwith an odd id value (1, 3, 5, ...) is not approved and the transaction is marked for rollback.\u003c/li\u003e\r\n\u003cli\u003eThe \u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/trans_c_m_t/domain/Parcel.java\"\u003e'Parcel'\u003c/a\u003e \r\nwith an even id value (2, 4, 6, ...) is approved.\u003c/li\u003e\r\n\u003c/ul\u003e\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/DiagramResearchCMT.png\" height=\"1398\" width=\"1200\"/\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/blackArrowUp.png\"\u003e\r\n\u003ci\u003eThe CMT sequence diagram.\u003c/i\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e \r\n5.2. For these three repeated actions \"Send to 'CreateParcelQueue'\" (method \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/trans_c_m_t/controller/TransCmtManagedBean.java#L67\"\u003e\r\n'TransCmtManagedBean::create'\u003c/a\u003e):\r\n\u003c/p\u003e\r\n\r\n\u003col\u003e\r\n\u003cli\u003eThe message from the 'CreateParcelQueue' is consumed and a new \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/trans_c_m_t/domain/Parcel.java\"\u003e'Parcel'\u003c/a\u003e \r\nis created.\u003c/li\u003e\r\n\u003cli\u003eThe confirmation message is sent to the 'ConfirmCreateParcelQueue'.\u003c/li\u003e\r\n\u003cli\u003eThe created \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/trans_c_m_t/domain/Parcel.java\"\u003e'Parcel'\u003c/a\u003e \r\nhas an odd id value and is not approved.\u003c/li\u003e\r\n\u003cli\u003eTherefore, the transaction is marked for rollback.\u003c/li\u003e\r\n\u003cli\u003eThe message is \u003cb\u003eredelivered\u003c/b\u003e to the 'CreateParcelQueue' and from this message a new \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/trans_c_m_t/domain/Parcel.java\"\u003e'Parcel'\u003c/a\u003e \r\nis created.\u003c/li\u003e\r\n\u003cli\u003eThe confirmation message is sent to the 'ConfirmCreateParcelQueue'.\u003c/li\u003e\r\n\u003cli\u003eThe created \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/trans_c_m_t/domain/Parcel.java\"\u003e'Parcel'\u003c/a\u003e \r\nhas an even id value and is approved.\u003c/li\u003e\r\n\u003cli\u003eFrom the 'ConfirmCreateParcelQueue', only the 2nd confirmation message is consumed.\u003c/li\u003e\r\n\u003c/ol\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/CreateParcel1.png\" height=\"196\" width=\"575\"/\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/blackArrowUp.png\"\u003e\r\n\u003ci\u003eScreenshot from 1st \"Send to 'CreateParcelQueue'\" action\u003c/i\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/CreateParcel2.png\" height=\"197\" width=\"575\"/\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/blackArrowUp.png\"\u003e\r\n\u003ci\u003eScreenshot from 2nd \"Send to 'CreateParcelQueue'\" action\u003c/i\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/CreateParcel3.png\" height=\"196\" width=\"575\"/\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/blackArrowUp.png\"\u003e\r\n\u003ci\u003eScreenshot from 3rd \"Send to 'CreateParcelQueue'\" action\u003c/i\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e \r\n5.3. The results of the action \"Send to 'ReadParcelQueue'\" (method \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/trans_c_m_t/controller/TransCmtManagedBean.java#L87\"\u003e\r\n'TransCmtManagedBean::read'\u003c/a\u003e) show that all committed \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/trans_c_m_t/domain/Parcel.java\"\u003e'Parcel'\u003c/a\u003e \r\nobjects in the database have even id values. This proves that all not approved \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/trans_c_m_t/domain/Parcel.java\"\u003e'Parcel'\u003c/a\u003e \r\nobjects were rolled back.\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/ReadParcels.png\" height=\"106\" width=\"575\"/\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/blackArrowUp.png\"\u003e\r\n\u003ci\u003eScreenshot from \"Send to 'ReadParcelQueue'\" action.\u003c/i\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e \r\n5.4. The auditing in the action \"Show Audit\" (method \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/trans_c_m_t/controller/TransCmtManagedBean.java#L99\"\u003e\r\n'TransCmtManagedBean::showAudit'\u003c/a\u003e) is always processed in a new transaction. \r\nTherefore, the audit information was not lost when the main transaction was rolled back.\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/ShowAudit.png\" height=\"34\" width=\"575\"/\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/blackArrowUp.png\"\u003e\r\n\u003ci\u003eScreenshot from \"Show Audit\" action.\u003c/i\u003e\u003c/p\u003e\r\n\r\n\u003ca href=\"#top\"\u003eBack to the top of the page\u003c/a\u003e\r\n\u003chr\u003e\r\n\u003ch2 id=\"trans_b_m_t\"\u003e❻ Bean-Managed Transactions\u003c/h2\u003e\r\n\r\n\u003ctable style=\"border:solid\"\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd style=\"border:solid\"\u003e\u003ci\u003e\r\nIn a stateless session bean with bean-managed transactions,\u003cbr\u003e\r\na business method must commit or roll back a transaction before returning.\u003cbr\u003e\r\nHowever, a stateful session bean does not have this restriction.\u003cbr\u003e\r\nIn a stateful session bean with a JTA transaction,\u003cbr\u003e\r\nthe association between the bean instance and the transaction is retained across multiple client calls.\u003cbr\u003e\r\nEven if each business method called by the client opens and closes the database connection,\u003cbr\u003e\r\nthe association is retained until the instance completes the transaction.\r\n\u003c/i\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\r\n\r\n\u003cp\u003eAction:\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeHR-500.png\"\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeSquare.png\"\u003e 1. Go to the page \u003ca href=\"http://localhost:8080/Study13/\"\u003ehttp://localhost:8080/Study13/\u003c/a\u003e\r\n\tand select \"Bean-Managed Transactions\".\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeSquare.png\"\u003e 2. Push the button \"Create Capsule\" two times.\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeSquare.png\"\u003e 3. Push the button \"Commit Transaction\" and the button \"Read Capsule\".\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeSquare.png\"\u003e 4. Push the button \"Create Capsule\" and the button \"Read Capsule\".\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeSquare.png\"\u003e\u003cimg alt=\"\" src=\"images/spacer-32.png\"\u003e\r\nThis step has created a not committed 'Capsule' object.\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeSquare.png\"\u003e 5. Push the button \"Rollback Transaction\" and the button \"Read Capsule\".\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeSquare.png\"\u003e\u003cimg alt=\"\" src=\"images/spacer-32.png\"\u003e\r\nIt was rolled back to the last commit (point 3 above).\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeSquare.png\"\u003e 6. Push the button \"Delete Capsule\" and the button \"Read Capsule\".\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeSquare.png\"\u003e\u003cimg alt=\"\" src=\"images/spacer-32.png\"\u003e\r\nThe \"Delete Capsule\" action deletes the last created 'Capsule'.\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeSquare.png\"\u003e 7. Push the button \"Rollback Transaction\" and the button \"Read Capsule\".\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeSquare.png\"\u003e\u003cimg alt=\"\" src=\"images/spacer-32.png\"\u003e\r\nAgain, it was rolled back to the last commit (point 3 above).\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/orangeHR-500.png\"\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/transactions_b_m_t_Controls.png\" width=\"1200\"/\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/blackArrowUp.png\"\u003e\r\n\u003ci\u003eScreenshot from \"Bean-Managed Transactions\" page controls.\u003c/i\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\r\nThe JSF page on the screenshot \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/web/src/main/webapp/transactions_b_m_t.xhtml\"\u003e'transactions_b_m_t.xhtml'\u003c/a\u003e uses the bean\r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/trans_b_m_t/controller/TransBmtManagedBean.java\"\u003e\r\n'TransBmtManagedBean'\u003c/a\u003e\r\n\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e \r\n6.1. The methods of the \u003cb\u003estateful\u003c/b\u003e session bean \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/trans_b_m_t/service/CapsuleAdministratorBean.java\"\u003e\r\n'CapsuleAdministratorBean'\u003c/a\u003e:\r\n\u003c/p\u003e\r\n\u003cul\u003e\r\n\u003cli\u003e\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/trans_b_m_t/service/CapsuleAdministratorBean.java#L70\"\u003e\r\n'CapsuleAdministratorBean::create'\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/trans_b_m_t/service/CapsuleAdministratorBean.java#L95\"\u003e\r\n'CapsuleAdministratorBean::read'\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/trans_b_m_t/service/CapsuleAdministratorBean.java#L122\"\u003e\r\n'CapsuleAdministratorBean::delete'\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/trans_b_m_t/service/CapsuleAdministratorBean.java#L156\"\u003e\r\n'CapsuleAdministratorBean::commit'\u003c/a\u003e\u003c/li\u003e\r\n\u003cli\u003e\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/trans_b_m_t/service/CapsuleAdministratorBean.java#L174\"\u003e\r\n'CapsuleAdministratorBean::rollback'\u003c/a\u003e\u003c/li\u003e\r\n\u003c/ul\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/DiagramResearchBMT.png\" height=\"237\" width=\"708\"/\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/blackArrowUp.png\"\u003e\r\n\u003ci\u003eBMT class diagram.\u003c/i\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e \r\n6.2. Creating the \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/trans_b_m_t/domain/Capsule.java\"\u003e'Capsule'\u003c/a\u003e \r\nobject and committing the transaction.\r\n\u003cp\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/CreateAndCommitCapsule.png\" height=\"128\" width=\"570\"/\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/blackArrowUp.png\"\u003e\r\n\u003ci\u003eScreenshot from  actions: 1st \"Create Capsule\", 2nd \"Create Capsule\", \"Commit Transaction\", \"Read Capsule\"\u003c/i\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e \r\n6.3. Creating the \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/trans_b_m_t/domain/Capsule.java\"\u003e'Capsule'\u003c/a\u003e\r\nobject and rolling back the transaction.\r\n\u003cp\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/CreateCapsule.png\" height=\"105\" width=\"570\"/\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/blackArrowUp.png\"\u003e\r\n\u003ci\u003eScreenshot from  actions: 3rd \"Create Capsule\", \"Read Capsule\"\u003c/i\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/RollbackCreatedCapsule.png\" height=\"82\" width=\"570\"/\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/blackArrowUp.png\"\u003e\r\n\u003ci\u003eScreenshot from  actions: 1st \"Rollback Transaction\", \"Read Capsule\"\u003c/i\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/greenCircle.png\"\u003e \r\n6.4. Deleting the \r\n\u003ca href=\"https://github.com/k1729p/Study13/blob/main/ejb/src/main/java/kp/trans_b_m_t/domain/Capsule.java\"\u003e'Capsule'\u003c/a\u003e\r\nobject and rolling back the transaction.\r\n\u003cp\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/DeleteCapsule.png\" height=\"59\" width=\"570\"/\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/blackArrowUp.png\"\u003e\r\n\u003ci\u003eScreenshot from  actions: \"Delete Capsule\", \"Read Capsule\"\u003c/i\u003e\u003c/p\u003e\r\n\r\n\u003cp\u003e\u003cimg alt=\"\" src=\"images/RollbackDeletedCapsule.png\" height=\"83\" width=\"570\"/\u003e\u003cbr\u003e\r\n\u003cimg alt=\"\" src=\"images/blackArrowUp.png\"\u003e\r\n\u003ci\u003eScreenshot from  actions: 2nd \"Rollback Transaction\", \"Read Capsule\"\u003c/i\u003e\u003c/p\u003e\r\n\r\n\u003ca href=\"#top\"\u003eBack to the top of the page\u003c/a\u003e\r\n\u003chr\u003e\r\n\u003c/body\u003e\r\n\u003c/html\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fk1729p%2Fstudy13","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fk1729p%2Fstudy13","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fk1729p%2Fstudy13/lists"}