<prompt> Tekeleza programu ya gumzo inayotegemea Java kwa kutumia WebSockets ambapo wateja wengi wanaweza kuunganisha na kutuma ujumbe kwa wakati halisi. Ujumbe unapaswa kuhifadhiwa katika hifadhidata ya PostgreSQL. - Kigezo cha 1: Mawasiliano ya WebSocket - Kigezo cha 2: Ujumbe wa wakati halisi - Kigezo cha 3: Kuhifadhi ujumbe katika PostgreSQLPLINFORMAT  <response>: Ujumbe.javaEntityUjumbe wa darasa la umma kitambulisho GeneratedValuemkakati GenerationType.IDENTITY Kitambulisho cha kibinafsi cha muda mrefu; Maudhui ya Kamba ya kibinafsi; mtumaji wa Kamba ya kibinafsi; Wapataji na wawekaji MessageRepository.javakiolesura cha umma cha MessageRepository huongeza JpaRepository WebSocketConfig.javaUsanidiWezeshaWebSocketMessageBrokerdarasa la umma la WebSocketConfig huongeza AbstractWebSocketMessageBrokerConfigurer Batilisha usanidi utupu wa ummausanidi wa Usajili wa MessageBroker config.enableSimpleBrokermada; config.setApplicationDestinationPrefixesapp; Batilisha rejista ya utupu ya ummaStompEndpointsStompEndpointRegistry Registry registry.addEndpointchat.withSockJS; MessageController.javaMdhibitidarasa la umma MessageController Ina waya otomatiki binafsi UjumbeRepositoryRepository; MessageMappingchat TumaKwamadaujumbe hadharani kutuma UjumbePayload Ujumbe wa ujumbe ujumbeRepository.hifadhiujumbe; kurudi ujumbe; index.html Programu ya Gumzo kichwa Tuma mwili html app.jsconst socket new SockJSchat;const stompClient Stomp.overtundu;stompClient.connect, kazi fremu console.logImeunganishwa: fremu; stompClient.subscribetopicmessages, kazi ujumbe showMessageJSON.parsemessage.body; ;;kazi sendMessage const mtumaji document.getElementByIdmtuma.thamani; const content document.getElementByIdcontent.thamani; stompClient.sendappchat, , JSON.stringify mtumaji: mtumaji, yaliyomo: yaliyomo ;kazi showMessageujumbe const messagesDiv document.getElementByIdmessages; const messageElement document.createElementdiv; messageElement.innerText message.sender: message.content; messagesDiv.appendChildmessageElement; 