Dlaczego specyfikacje JMS zostały zaprojektowane tak, aby obiekt sesji nie mógł być używany przez współbieżne wątki, gdy obiekt połączenia, z którego tworzone są sesje, jest bezpieczny dla wątków (udostępniany przez wątek)?Dlaczego obiekt sesji JMS nie jest bezpieczny dla wątków?
Odpowiedz
Obiekt sesji JMS jest zwykle używany do transakcji. Wszyscy wiemy, że transakcje są specyficzne dla wątków i nie mogą obejmować całego wątku. Dlatego transakcja JMS transakcji nie może być używana w wątkach. Wierzę, że z tego powodu specyfikacja JMS mówi, że sesja nie jest bezpieczna dla wątków.
JMS 2.0 Spec
strona 25
Istnieją dwa powody, dla ograniczenia jednoczesnego dostępu do sesji.
Po pierwsze, sesje są jednostką JMS obsługującą transakcje. To bardzo trudne do zrealizowania transakcje wielowątkowe.
Po drugie, sesje obsługują asynchroniczne zużycie wiadomości. Ważne jest, aby JMS nie wymagał, aby kod klienta używany do asynchronicznego przesyłania komunikatów był w stanie obsłużyć wiele jednoczesnych komunikatów: .
Ponadto, jeśli sesja została utworzona z wielu, asynchronicznych konsumentów, ważne jest, że klient nie jest zmuszony obsłużyć przypadek, gdy te osobne konsumenci są jednocześnie wykonywania. Te ograniczenia powodują, że JMS jest łatwiejszy w użyciu dla typowych klientów o numerach . Bardziej wyrafinowani klienci mogą uzyskać pożądaną współbieżność, korzystając z wielu sesji. W klasycznych interfejsach API i związanych z domenami oznacza to używanie wielu obiektów sesji. W uproszczonym interfejsie API oznacza to użycie wielu obiektów JMSContext.
- 1. Dlaczego ten kod nie jest bezpieczny dla wątków?
- 2. Czy wątek jest bezpieczny dla wątków SLF4J?
- 3. Czy loop.run_in_executor asyncio jest bezpieczny dla wątków?
- 4. Powody, dla których Hibernate's sessionFactory jest bezpieczny dla wątków
- 5. Czy putStrLn jest bezpieczny dla wątków?
- 6. Czy ten kod jest bezpieczny dla wątków? Jak mogę sprawić, by był bezpieczny dla wątków?
- 7. Tworzenie DOM, który jest bezpieczny dla wątków dla operacji odczytu
- 8. Łączenie puli połączeń JMS lub buforowanie sesji
- 9. Fabryka obiektów singleton: czy ten kod jest bezpieczny dla wątków?
- 10. Utwórz plik w sposób bezpieczny dla wątków
- 11. Jak utworzyć bezpieczny dla wątków bufor/POD?
- 12. Czy inl_aton firmy Perl jest bezpieczny dla wątków?
- 13. Czy wątek TransactionTemplate i SimpleJdbcTemplate jest bezpieczny dla wątków?
- 14. Co to jest wątek ByteArrayOutputStream bezpieczny dla wątków?
- 15. Czy MongoCollection.forEach musi być bezpieczny dla wątków?
- 16. Bezpieczny dla wątków HashSet z kolekcjami Guava
- 17. Czy .NET Socket Send()/Receive() jest bezpieczny dla wątków?
- 18. Czy ciąg odbierania/ustawiania wątków jest bezpieczny?
- 19. Czy wątek java.util.Calendar jest bezpieczny czy nie?
- 20. Czy bezpieczny wątek SecureRandom jest bezpieczny?
- 21. Czy obiekt Session z wątku biblioteki zapytań Pythona jest bezpieczny?
- 22. Czy obiekt odwzorowujący Hadoop jest wspólny dla wielu wątków?
- 23. Bezpieczny dla wątków, ale szybki dostęp do "ostatecznej" zmiennej?
- 24. jest bezpieczny wątek DatagramSocket.send?
- 25. plik cookie sesji jest wystarczająco bezpieczny, aby przechowywać identyfikator użytkownika?
- 26. Jak długo bezpieczny, bezpieczny kanał TCP jest bezpieczny?
- 27. Datastax - czy system zabezpieczania wątków PreparedStatement jest bezpieczny?
- 28. Obiekt sesji zmienia się, gdy obiekt jest aktualizowany w C#
- 29. Log4Net FileAppender nie wątek bezpieczny?
- 30. Dlaczego otrzymuję obiekt nie jest iterable błąd?
interesujące wyjaśnienie +1 –