|
Tomcat cross context: ClassCastException: class cannot be cast to class
|
|||
---|---|---|---|
#18+
Всем привет! Tomcat 8 + 2 Web Spring boot приложения. App1 пишет объект Config в контекст. App2 читает объект Config из контекста App1. Библиотека c реализацией класса Config лежит в /shared/lib. пишем в app1: Код: java 1.
читаем в app2: Код: java 1. 2. 3.
Получаем ошибку: авторjava.lang.ClassCastException: Config cannot be cast to Config ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2020, 17:50 |
|
Tomcat cross context: ClassCastException: class cannot be cast to class
|
|||
---|---|---|---|
#18+
spring-boot-devtools удоли ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2020, 18:00 |
|
Tomcat cross context: ClassCastException: class cannot be cast to class
|
|||
---|---|---|---|
#18+
dakeiras spring-boot-devtools удоли Этой нет: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2020, 18:03 |
|
Tomcat cross context: ClassCastException: class cannot be cast to class
|
|||
---|---|---|---|
#18+
Molasar Библиотека c реализацией класса Config лежит в /shared/lib. Класс Config только там? Или еще в war-ах? Из war-ок этот класс надо убрать. P.S. что вообще пытаешься сделать? - выглядит все очень не очень ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2020, 18:26 |
|
Tomcat cross context: ClassCastException: class cannot be cast to class
|
|||
---|---|---|---|
#18+
Одинаковые классы загруженные разными класслоадерами считаются разными. У каждого приложения свой класслоадер, так что вообще ничего удивительного ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2020, 19:00 |
|
Tomcat cross context: ClassCastException: class cannot be cast to class
|
|||
---|---|---|---|
#18+
забыл ник Одинаковые классы загруженные разными класслоадерами считаются разными. У каждого приложения свой класслоадер, так что вообще ничего удивительного а как тогда передавать объекты через кросс контекст? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2020, 23:14 |
|
Tomcat cross context: ClassCastException: class cannot be cast to class
|
|||
---|---|---|---|
#18+
Molasar забыл ник Одинаковые классы загруженные разными класслоадерами считаются разными. У каждого приложения свой класслоадер, так что вообще ничего удивительного а как тогда передавать объекты через кросс контекст? А смысл сего действия? Но если говорить об интеграции приложений, то есть 4 основных способа 1) файловая система 2) БД 3) Очередь сообщений 4) remote call ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2020, 23:50 |
|
Tomcat cross context: ClassCastException: class cannot be cast to class
|
|||
---|---|---|---|
#18+
забыл ник Molasar пропущено... а как тогда передавать объекты через кросс контекст? А смысл сего действия? Но если говорить об интеграции приложений, то есть 4 основных способа 1) файловая система 2) БД 3) Очередь сообщений 4) remote call 5) REST)) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2020, 07:38 |
|
Tomcat cross context: ClassCastException: class cannot be cast to class
|
|||
---|---|---|---|
#18+
Molasar Получаем ошибку: авторjava.lang.ClassCastException: Config cannot be cast to Config Не делай странного, не получишь странного. Если нужен доступ к контексту/бинам между различными приложениями. То я слышал о такой возможности только для серверов приложений (WebLogic, WebSphere, jBoss, Glassfish), а никак не для серверов сервлетов (Tomcat). Можно конечно попробовать сделать через OSGI, но там "своя атмосфера". А так. Если нужно иметь контекст двух приложений... То это должен быть один контекст, для одного приложения! ;-) Смотреть в сторону создание собственных автоконфигураций <:o) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2020, 08:15 |
|
Tomcat cross context: ClassCastException: class cannot be cast to class
|
|||
---|---|---|---|
#18+
забыл ник Одинаковые классы загруженные разными класслоадерами считаются разными. У каждого приложения свой класслоадер, так что вообще ничего удивительного Я пробовал использовать разные библиотеки с общими классами. И такую проверку: Код: java 1. 2. 3. 4. 5. 6. 7. 8.
В некоторых случаях класслоадеры одинаковые: авторObject classloader: java.net.URLClassLoader@4f8cb7b Target class classloader: java.net.URLClassLoader@4f8cb7b Там где разные такой вывод: авторObject classloader: ParallelWebappClassLoader context: ccproducer delegate: false ----------> Parent Classloader: java.net.URLClassLoader@4f8cb7b Target class classloader: ParallelWebappClassLoader context: ccconsumer delegate: false ----------> Parent Classloader: java.net.URLClassLoader@4f8cb7b Different classloaders detected! ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2020, 09:45 |
|
Tomcat cross context: ClassCastException: class cannot be cast to class
|
|||
---|---|---|---|
#18+
SpringMan Molasar Библиотека c реализацией класса Config лежит в /shared/lib. Класс Config только там? Или еще в war-ах? Из war-ок этот класс надо убрать. P.S. что вообще пытаешься сделать? - выглядит все очень не очень Ваше предположение о наличие где-то еще одной библиотеки в классом Config похоже на правду. Проверю. Кросс контекст нужен для использования общих объектов приложениями. Например, в моем случае app1 помещает объект, который содержит информацию о состоянии app1. App2 постоянно считывает состояние этого объекта. Я знаю про Очереди, БД, FS, Rest и Soap. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2020, 09:51 |
|
Tomcat cross context: ClassCastException: class cannot be cast to class
|
|||
---|---|---|---|
#18+
Molasar, >Я знаю про Очереди, БД, FS, Rest и Soap. Если знаешь, значит фигню пишешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2020, 10:08 |
|
Tomcat cross context: ClassCastException: class cannot be cast to class
|
|||
---|---|---|---|
#18+
Molasar, > Например, в моем случае app1 помещает объект, А то что повальное количество приложений общаются между собой через порт 127.0.0.1:123456. Казалось бы причем тут сеть, если они меж собой общаются. Но спринг прогерам обязательно надо через спринг))) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2020, 10:14 |
|
Tomcat cross context: ClassCastException: class cannot be cast to class
|
|||
---|---|---|---|
#18+
mad_nazgul серверов сервлетов (Tomcat). То это должен быть один контекст, для одного приложения! ;-)Можно п(р)очитать про загрузчики классов, обнаружить "общий для экземпляра" и положить туда классы, общие для обоих приложений. P.S. Да, это не защитит от "вмешательства" третьего приложения, развёрнутого в том же экземпляре. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2020, 11:09 |
|
Tomcat cross context: ClassCastException: class cannot be cast to class
|
|||
---|---|---|---|
#18+
В моём случае ошибка возникала из-за присутсвия дубликата общей библиотеки в одном из war файлов. Необходимо четко отслеживать такие моменты и исключать общие библиотеки через <scope>provided</scope> в POM файле MAVEN проектов. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2020, 13:28 |
|
Tomcat cross context: ClassCastException: class cannot be cast to class
|
|||
---|---|---|---|
#18+
В твоем случае ошибка возникала из-за отсутствия правильной архитектуры, приводящая к говнокоду. Хозяин-барин ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2020, 14:38 |
|
Tomcat cross context: ClassCastException: class cannot be cast to class
|
|||
---|---|---|---|
#18+
Basil A. Sidorov Можно п(р)очитать про загрузчики классов, обнаружить "общий для экземпляра" и положить туда классы, общие для обоих приложений. На сколько я понял ТС не классы нужны, а контекст, созданный соответствующими конфигурационными классами. Как только он создаст контекст, через кастомный класслоадер, второй вопрос будет, почему у него не работает контекст. Типа я вызываю бин, в одном приложении, а в другом ничего не меняется. Тут либо переход на сервер приложения и JavaEE. Либо поднимать приложение в одном контексте. Либо не парить мозги и делать какой-нибудь "типа RPC". ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2020, 06:35 |
|
Tomcat cross context: ClassCastException: class cannot be cast to class
|
|||
---|---|---|---|
#18+
mad_nazgul, Конечно контекст. Мы же var v = new Xxxxx() счас практически не пишем)) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2020, 07:33 |
|
Tomcat cross context: ClassCastException: class cannot be cast to class
|
|||
---|---|---|---|
#18+
mad_nazgul На сколько я понял ТС не классы нужны, а контекст, созданный соответствующими конфигурационными классами. Если хочется дёргать общие методы из разных контекстов, то эти классы должны грузиться общим загрузчиком. Для сервлет-контейнера это общий загрузчик экземпляра (${catalina.base}/lib/ для КотярыТома). Простая же логика. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2020, 07:50 |
|
Tomcat cross context: ClassCastException: class cannot be cast to class
|
|||
---|---|---|---|
#18+
Basil A. Sidorov mad_nazgul На сколько я понял ТС не классы нужны, а контекст, созданный соответствующими конфигурационными классами. Если хочется дёргать общие методы из разных контекстов, то эти классы должны грузиться общим загрузчиком. Для сервлет-контейнера это общий загрузчик экземпляра (${catalina.base}/lib/ для КотярыТома). Простая же логика. Класс доступен, а контекст нет ;-) Грубо говоря класслоадер загружает классы, а объекты создаются в контексте. ТС нужен не класс, а контекст. Т.к. все созданные бины. Если все таки пытаться создавать два приложения, то либо нужно использовать JavaEE/JakartaEE, либо OSGI. В любом случае это будет тот ещё геморрой. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2020, 14:10 |
|
|
start [/forum/topic.php?fid=59&msg=39992647&tid=2120693]: |
0ms |
get settings: |
11ms |
get forum list: |
5ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
30ms |
get topic data: |
2ms |
get forum data: |
1ms |
get page messages: |
335ms |
get tp. blocked users: |
1ms |
others: | 5ms |
total: | 392ms |
0 / 0 |