✨️Szkolenie Live: Spring Boot i WebSockety w Akcji!✨️

WebSockety odgrywają kluczową rolę w komunikacji w czasie rzeczywistym, uzupełniając możliwości tradycyjnego protokołu HTTP. Podczas szkolenia:
✅ omówimy działanie i specyfikację protokołu WebSocket,
✅ przejdziemy przez proces tworzenia aplikacji czatu z wykorzystaniem Spring Boot 3,
✅ uruchomimy aplikację na serwerze, demonstrując jej działanie w praktyce.

To doskonała okazja, aby zgłębić tematykę WebSocket w kontekście Spring Boot. Zarezerwuj swoje miejsce korzystając z linku: https://live.bykowski.pl

Pobierz SoftBull - ✨️Szkolenie Live: Spring Boot i WebSockety w Akcji!✨️

WebSockety odgrywaj...
źródło: websockety1200
Jak w takiej metodzie zrobić logowanie? Popsuć ten zapis tzn. usunąć wyrażenie lambda itd., czy można tam w jakiś ładny sposób wcisnąć loggera?

Drugie pytanie jest takie - czy powinienem używać w logach ID bazodanowego? W encjach mam tak właściwie trzy unikalne pola, tj. email jako username, id bazodanowe i uuid. Czy np. taki zapis "Event with ID X updated by user with ID Y" jest poprawny? Jak poprawnie powinny takie logi
Pobierz VirtualSlimShady - Jak w takiej metodzie zrobić logowanie? Popsuć ten zapis tzn. usun...
źródło: logging
@ch1nczyk: chodziło mi o to, że w implementacji ogólnie masz same relacje one-to-one i tylko jedną many-to-one w Variant (wiele wariantów może mieć jeden model?), nie mówiłem nic o Gender i SizeCategory. To co jest na diagramie różni się od tego co jest w implementacji i na to chciałem zwrócić Ci uwagę. Jak ta baza według Ciebie powinna być zaprojektowana?
@VirtualSlimShady: nie możesz być autoryzowany, jeśli się nie uwierzytelnisz.

Autoryzacja: uprawnienia do zasobu.
Uwierzytelnienie: potwierdzenie swojej tożsamości.

Jak mogę dać Ci dostęp do mojego porfela, jak nie wiem, kim jesteś? To, że podajesz się za mnie, nie wystarczy: udowodnij, pokaż dowód tożsamości (uwierzytelnij się). A później możemy pogadać o uprawnieniach, jakie masz...

JWT, OAuth2 itp. to autoryzacja, ale uwierzytelnienie niejako załatwiają przy okazji.
@VirtualSlimShady: @draxgar:

Kluczową różnicą między uwierzytelnianiem a autoryzacją jest to, że uwierzytelnianie potwierdza tożsamość użytkownika (czy jesteś tym, za kogo się podajesz), podczas gdy autoryzacja kontroluje, co dany użytkownik ma prawo zrobić po tym, jak jego tożsamość została potwierdzona.

Terminologia może być czasem myląca, ale:

Uwierzytelnianie: To proces potwierdzania tożsamości użytkownika. Polega na dostarczeniu danych uwierzytelniających, takich jak login i hasło, aby system mógł zweryfikować, czy dana osoba faktycznie
???? Zanurzyłem się w świecie ofert dla Java Developerów na jednym z największych job boardów w Polsce! ????

???? Krótkie spostrzeżenia z 24 sierpnia 2023:
Na całej mapie Polski, w jednym z największych job boardów było jedynie 312 ofert pracy dla Javowców:
Java Junior – 38 ofert
Java Mid - 90 ofert
Senior Java – 184 oferty

Chcecie wiedzieć, jakie technologie są najbardziej pożądane przez pracodawców? ????????
Dowiedz się
SoftBull - ???? Zanurzyłem się w świecie ofert dla Java Developerów na jednym z najwi...
Chciałbym zrobić w swojej aplikacji chatu info, że ktoś pisze wiadomość. Backend mam w Javie i Springu i używam tam websocketów. Na froncie używam stomp.js. Obecnie po każdym naciśnięciu klawisza wywoływana jest funkcja, która wysyła informację, że ktoś pisze wiadomość i następnie z opóźnieniem 0.5s, że przestał pisać. Efekt jest taki, że ta informacja miga. Jak najlepiej zrobić takie coś w JavaScripcie, tak żeby to było płynne. Jestem bardziej backendowcem, a z
No informacja miga bo delay jest za mały. Zwiększ z tego 0.5s na 3-4 sek. i będzie dużo lepiej. Czasami ludzie robią przystanki po 1-2 sek. na zastanowienie a niektórzy (którzy piszą np. na telefonie robiąc "swipe" potrzebują nawet kilku sekund żeby napisać nowe słowo). Po wysłaniu wiadomości od razu wysyłaj że ktoś skończył pisać i będzie dobrze.
@VirtualSlimShady a zaczyna migać dopiero po 4 sek? Z kodu wynika że zaczynasz pisać (załóżmy 1 znak), zaczyna się odliczać setTimeout, po 2 sek piszesz 2 znak i znowu odpala się setTimeout, później po kolejnych 2 sekundach piszesz 3 znak i zaczyna informacja o pisaniu wiadomości migać bo wykonał się timeout z pierwszego znaku. To co potrzebujesz to clearTimeout na sam początek startTyping żeby scancelowac setTimeout a sam setTimeout powinieneś mieć przypisany
Mam 2 encje JPA w relacji one-to-many - Seat i Booking. Chciałbym pobrać Seat po id z Bookings ze statusem "ACTIVE'. Jeśli Booking nie miałby takich Seats to powinno zostać zwrócone Seat z pustą listą Bookings.

Takie query działa w konsoli do SQL:

select * from seats s left join bookings b on b.seat_id=s.id and b.status='ACTIVE' where s.id=1
Przerobiłem je na query do Spring Data JPA:

@query("select s from Seat s left
@Nofenak: Musisz najpewniej użyć podzapytania (piszę z palca więc na pewno nie pójdzie od razu). select * from seats s left join (select seatid from bookings b where and b.status='ACTIVE') as bo on bo.seatid=s.id where s.id=1
Chciałbym pobrać Screening (seans) z Seat (miejscem) i z Booking (rezerwacją) po bookingId. Screening ma relację one-to-many z Seat a Seat one-to-many z Booking (miejsce może mieć wiele rezerwacji, ale tylko jedna moża być aktywna, reszta musi być anulowana).
Napisałem taką metodę, ale dostaje MultipleBagFetchException:

@query("select s from booking_screening s join fetch s.seats se join fetch se.bookings b where b.id = :bookingId")
Optional<Screening> readByBookingId(@Param("bookingId") Long booking);

#java #spring #sql #naukaprogramowania #programowanie
Czytam długo o stateful vs stateless microservices i dalej nie czaję tematu i mam wrażenie, że każdy w google pisze co innego.

Jak mam koszyk w sklepie internetowym i dodaje produkty to mikroserwis, gdzie mamy endpoint /cart/addItem POST i zapisujemy w bazie koszyk jest stateless czy stateful? Bo teoretycznie w tym poscie wysyłamy id koszyka, które już wcześniej otrzymaliśmy z endpointa (więc kolejne requesty polegają na poprzednich) oraz produkty, a z drugiej
@LazyInitializationException: Mam docker compose:

version: "3"
services:
api:
image: api
environment:
- SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/CinemaDb
- SPRING_DATASOURCE_USERNAME=postgres
- SPRING_DATASOURCE_PASSWORD=12345
- SPRING_JPA_HIBERNATE_DDL_AUTO=create
- SPRING_LIQUIBASE_ENABLED=false
build:
context: ./
dockerfile: Dockerfile
ports:
- "8080:8080"
depends_on:
- db
db:
image: postgres
ports:
- "5432:5432"
environment:
- POSTGRES_DB=CinemaDb
- POSTGRES_USE=postgres
- POSTGRES_PASSWORD=12345
@whoru: jeszcze pewnie do tego używają JUnit 4 wypuszczonego w 2006 roku albo Serializable z javy 1.1 o którym samo Oracle jedzie że to gówno XD jak mnie jeden z drugim pytaja na rozmowie to od razu jako czerwona flaga bo musi być jakieś ostre legacy
tubidubidam - @whoru: jeszcze pewnie do tego używają JUnit 4 wypuszczonego w 2006 rok...
Kurde, muszę się poradzić, bo chyba trochę się pogubiłem. Mam takie trzy metody jak na obrazku. Pierwsza zwraca profil użytkownika, jako argument przyjmuje użytkownika, który przychodzi z fasady. Jak widać, mapowanie i zwrot obiektu DTO. Zastanawiam się czy ten Optional ma tam sens. Wykorzystuję go w kontrolerze i dzięki temu zwracam status 200, albo 404.

Sama fasada o której wcześniej wspominałem wygląda tak, że jest w niej jedna metoda w której pobierany
Pobierz VirtualSlimShady - Kurde, muszę się poradzić, bo chyba trochę się pogubiłem. Mam taki...
źródło: kod
@draxgar: no to właśnie tak robię... wstrzykuję użytkownika i przepycham go przez wszystkie warstwy, przecież po to jest ta fasada. Tylko teraz przy API i JWT są dwa identyczne zapytania do tabeli użytkownika, pierwsze w filtrze i drugie w kontrolerze robi ta fasada i dlatego chcę to zoptymalizować żeby chociaż w obrębie jednego requestu nie było dwóch identycznych zapytań do bazy danych.
Nie korzystałem wcześniej z bazy mongo w springu i gdy próbuję aktualizować obiekt z inną wartością jakiegoś pola to obiekt jest aktualizowany. Ale mam przypadek, że będzie wiele requestów (eventów) z aktualizacją równocześnie więc dodałem pole version z adnotacją i dostaję cały czas exception przy repository.save:

Write operation error on server mongo-replica-set-0:27017. Write error: WriteError{code=11000, message='E11000 duplicate key error collection: blabla index: id dup key: { _id: "doc1" }


Moje klasy:

public
@nick230: Nie znam się na Javie ale może ta kjak @Id mówi co jest kluczem tak samo @Version może oznaczac dla javowego clienta że pole version to także klucz i nie pozwala wrzucić obiektu z takim samym kluczem
hej mirki. Jest ktoś łopatologicznie mi wyjasnic sens uzywania liquibase w kontekscie hibernate?
Przykladowo caly czas jak chcialem robić klasy tabele albo cos pozmieniac to po prostu w danej klasie, ktora byla encja dopisywalem odpowiednie pola, ktore mi sie mapowaly na odpowiednie kolumny w tabeli.
No i teraz generalnue ten liquibase co ma na celu w tym wszystkim? czemu tworzenie tego changeloga jest bardzo wazne?
#spring #java #hibernate #programowanie
@Volantie Jeśli piszesz sobie coś do szuflady to wystarczy autogenerowanie create/update przy starcie. Jednak jeśli projekt ma być używany i utrzymywany toole w stylu liquibase robą się niezbędne.

Po pierwsze masz wtedy gwarancje że struktura bazy danych zawsze będzie taka sama, niezależnie ile razy uruchamiałeś aplikacje i w jakich wersjach. Jednak największą zaletą jest umożliwienie pisania skryptów migracyjnych. Wyobraź sobie że w wyniku implementacji jakiejś funkcji w pewnej wersji pojawiło się nowe
@Volantie: wyobraź sobie ogarnięcie 5 klientów, z ich bazami danych, z których każdy ma swoich DBA i grzebią w nich sami. Teraz dorzuć do tego, że twoja aplikacja ma 21 lat, 370 wydanych wersji. Każda z tych wersji wprowadza zmiany na bazie i każdy z klientów ma różne wersje. Każdy klient ma bardzo wrażliwe dane i nie chce niedostępności.
Flyway/liquibase czy inne systemy wersjonowania bazy zdejmują udrękę ogarniania tego. Biblioteka sama
Czemu Spring w przypadku błędów 401 i 403 zwraca sam błąd (status) bez body? Przeglądając jakieś artykuły czy Stacka widzę, że kiedyś było zwracane body (timestamp, status, error, path). Czemu to zostało zmienione? Jest jakiś powód? A może się mylę i nigdy nie było body?

#java #spring
Miraski,
ma ktoś doświadczenie z Quarkus? Dostałem ofertę za prawie 2x tyle co mam teraz(junior z ponad rokiem expa) + masa innych benefitów których aktualnie nie mam. Z tym, że musiałbym się przesiąść ze Spring na Quarkus. Na popularnych polskich portalach brak ogłoszeń z wymaganym Quarkusem, przez co mam trochę mętlik w głowie czy warto spróbować, jakieś rady?

#java #programowanie #spring
@centaurusX: wymaganiem to jest znajomosc javy / kotlina a nie jakiegos frejmworka, to mozna ogarnacz w 2-3 wieczory. tak zeby wiedziec jak tego uzywac.
co najwyzej podaja takie rzyczy jak chcac pokazac to cczego uzywaja, ale to nie jest wymaganie
@centaurusX: quarkus jest mniej popularny, zatem ma mniejszy support community. Jest ciężej znaleźć rozwiązanie problemów, ale działa podobnie do spring-a. Też kontener CDI i bardziej zgodny ze specyfikacją, niż spring.
Jak będziesz wszystko wstrzykiwał @ApplicationScope, to nie będziesz miał większych kłopotów.
Uważaj, bo większość beanów jest rozwiązywana w czasie budowania. Jak oznaczysz coś @IfBuildProperty, zbudujesz na jednym środowisku, gdzie nie ma tego property, a potem uruchomisz apkę na drugim,