|
|
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
Как можно подавить рекурсии при вызове???? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2005, 16:20 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
Gold FishКак можно подавить рекурсии при вызове???? exception выкинуть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2005, 16:41 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
не смешно :-( Рекурсию при вызове собственного класслоадера в качестве системного ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2005, 16:56 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
Gold Fishне смешно :-( я не шутил ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2005, 17:14 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
просто насколько я понял (не особо вникал в тему), то была подобная проблема при написании своего класслудера и переопределении метода getResourceAsStream точно сейчас не скажу, что там было, но что-то типа вечной рекурсии. может и нет. дак проблема решилась таким способом: в методе getResourceAsStream: if (isRecursiveCall()) { ... } метод isRecursiveCall(): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. PS если не в тему - извини ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2005, 17:22 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
Нет рекурсия не в том месте. Рекурсия при -Dsystem.class.loade=sqlClassLoader. Подавить удалось через super(sqlClassLoader.class.getClassLoader()); в конструкторе. Но пришли к исходной точке опять ClassCastException или если убрать загружаемый класс из CLASSPATH то NoClassDefFound. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2005, 17:37 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
System.out.println(ClassLoader.getSystemClassLoader()); выдает sqlClassLoader@757aef но Welcome w = new Welcome(); всеравно продолжает грузится через sun.misc.Launcher$AppClassLoader@cc7ad6 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2005, 18:52 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
Gold Fish... Есть клиент который запускается локально, из которого пользователь конектится к БД(под савоим логином и паролем) и только потом начинает тянуть нужные объекты именно оттуда. Соостветственно отсюда выплывает 2 проблеммы: 1. Объекты клиента должны подгрузится локально. т.к. еще нет соединения с БД 2. загрузчику объектов нужно передать дескриптор соединения. Так чего тянуть то нужно?? Классы или объекты? Если классы, то какой смысл их тянуть, если они уже известны? Если объекты, то зачем тут класслоадер? Проясните, плиз, ситауцию, а то трудно так вот разобрацца... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2005, 19:22 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
Вообщето классы и объекты это одно и тоже. Или мы с вами о разном говорим?? Для точности классы!!!! Длычего тянуть? 1. Классы могут обновляться, а клиентов много и что-бы не обновлять приложения на каждом клиенте произойдет обновление только в БД и клиенты в процесе работы получат обновленное приложение. 2. В разных БД могут лежать различающиес преложения, для разных целей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2005, 11:54 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
Gold FishSystem.out.println(ClassLoader.getSystemClassLoader()); выдает sqlClassLoader@757aef но Welcome w = new Welcome(); всеравно продолжает грузится через sun.misc.Launcher$AppClassLoader@cc7ad6 Текушим у вас являецца sqlClassLoader, но парент его это AppClassLoader (передали в конструкторе). 1. КлассКаст происходит из-за того, что как правильно вы заметили, первый раз его грузит AppClassLoader.При загрузке класса Мейн ваш классдоалер найти его не может и делегирует это своему паренту, Парент же его находит в класспате и более того подгружает все классы, ссылки на которые есть в Мейне (класс Велком соответственно). Потом нужный класс явно загружаецца текущим класслоадером (sqlClassLoader) => ClassCastException. 2. Если класс убрать из класспата, то все происходит точно также, но при загрузке класса Мейн,AppClassLoader найти класс Welcome не может, делегировать это нижележащему лоадеру он не может => NoClassDefFound Gold FishВообщето классы и объекты это одно и тоже. Или мы с вами о разном говорим?? Для точности классы!!!! Длычего тянуть? 1. Классы могут обновляться, а клиентов много и что-бы не обновлять приложения на каждом клиенте произойдет обновление только в БД и клиенты в процесе работы получат обновленное приложение. 2. В разных БД могут лежать различающиес преложения, для разных целей. Насчет классов и объектов вы погарячились :)) Или мы совсем о разном говорим :) Если вы имеете класс (Велком), который явно указан в вашем основном классе (класс-клиент) и который может потом изменится, то грабли вылезут непременно при приведении классов. В данном случае вас спасет интерфейс или суперкласс, который не будет меняцца... Ваш класс-клиент( Main ) может выглядеть где-то так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Либо не приводить класс вообще и юзать рефлексию :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2005, 12:30 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
Gold FishА какой урл я ему укажу????? Он сам укажет. просто конструктор опиши и смотри как будет работать. Gold FishУ тебя есть хоть какойто пример работающего класс лоадера???? Есть в томкате org.apache.catalina.loader.WebappClassLoader, надеюсь ты его смотрел как я советовал? Из комерческого продукта извини дать не могу. Могу написать SQLClassLoader, за приемлеммую сумму ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2005, 12:48 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
С URL получилось. Но проблема в том что Main всеравно грузится Стандартным загрузчиком c = super.loadClass( name ); все класы которые были загружены так ссылаются на sun.misc.Launcher$AppClassLoader@cc7ad6 как его можно подменить чтобы ссылался на sqlClassLoader???? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2005, 14:55 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
Gold FishС URL получилось. Но проблема в том что Main всеравно грузится Стандартным загрузчиком c = super.loadClass( name ); все класы которые были загружены так ссылаются на sun.misc.Launcher$AppClassLoader@cc7ad6 как его можно подменить чтобы ссылался на sqlClassLoader???? Зачем вам вообще УРЛ? вы же грузите из базы?? А по поводу Мейн написано на два поста выше. Грузицца он AppClassLoader-ом потому что в базе его (если я правильно понимаю ) нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2005, 15:45 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
URL при том что я наследую от URLClassLoader ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2005, 17:22 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
Gold FishURL при том что я наследую от URLClassLoader А зачем вы наследуете от URLClassLoader?? У вас же классы в базе лежат...Чем простой класслоадер не подходит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2005, 17:58 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
Да дело не в том от чего наследовать. Дело в том как сказать что Main загрузился sqlClassLoader ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2005, 18:06 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
Jozic Gold FishURL при том что я наследую от URLClassLoader А зачем вы наследуете от URLClassLoader?? У вас же классы в базе лежат...Чем простой класслоадер не подходит? В базе лежат не все классы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2005, 18:29 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
Gold FishДа дело не в том от чего наследовать. Дело в том как сказать что Main загрузился sqlClassLoader sqlClassLoader может загрузить Main если мейн лежит в базе или еще где-то, где sqlClassLoader будет искать, до того как искать начнет его парент... Где находицца ваш Мейн класс?????? Евгений ПутилинВ базе лежат не все классы. где лежат не все классы??? Насколько можно понять, они лежат либо в базе либо в класспате... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2005, 19:44 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
Часть лежит в базе, а часть в classpath. Все положить в базу нереально т.к. подключение к произойдет уже в меине и передастся класс лоадеру. загрузка класов из classpath происходит явным вызовом парента c = super.loadClass(name); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2005, 11:43 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
Gold FishЧасть лежит в базе, а часть в classpath. Все положить в базу нереально т.к. подключение к произойдет уже в меине и передастся класс лоадеру. загрузка класов из classpath происходит явным вызовом парента c = super.loadClass(name); Где то тоже я и говорил Jozic где лежат не все классы??? Насколько можно понять, они лежат либо в базе либо в класспате... Непонятно все-таки УРЛКлассЛоадер тогда вам зачем? У вас жеж классы не лежат в каких то локациях, который можно достать через УРЛ... То что все положить в базу не реально, понятно. Что есть в базе грузит SQLClassLoader, остальное стандартный AppClassLoader... Вы так и не ответили, где лежит ваш Мейн класс?? в базе или в класспате?? Если в класспате, то загрузит его только AppClassLoader... Покажите, плиз, ваше код (текущее его состояние ) и по возможности укажите что где лежит... может так станет понятнее... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2005, 12:04 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
Меин в classpath текущее состояние кода: Main (ClassPath): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. sqlClassLoader(ClassPath): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. Welcome (DataBase): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2005, 12:31 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
При таком раскладе: Какой смысл наследовацца от УРЛКлассЛоадера и давать ему пустой УРЛ? ИМХО лишнее ненужное движение Класс мейн лежит в класспате. Он всегда будет грузицца AppClassLoader-ом , потому как в базе его нет. Класс велком известен на этапе компиляции, компилятор скомпилит этот класс и положит рядом с Мейн в класспат, если вы его удалите из класспата и положите в базу, то получите NoClassDefFound, так как класс мейн грузицца AppClassLoader, он же сразу пытаецца загрузить и класс Велком. Если класс оставить, то ClassCastException... Про некоторые варианты выхода из данной ситуации я писал раньше. - Мейн и Велком грузяцца одним и тем же класслоадером. Добицца этого можна засунув мейн в базу, но это я так понимаю совсем не то что нужно... - Явной ссылки на класс велком в мейне быть не должо: либо интерфейс (суперкласс), который не изменяецца и лежит в класспате, либо рефлексия. Если вы юзаете опцию -Djava.system.class.loader=SqlClassLoader, то непонятно зачем явно дергаете метод retObject. Этот класс лоадер являецца текущим системным, соответсвенно он и так должне загружать ваш класс Велком из базы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2005, 13:03 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
ты можеш сделать вместо Код: plaintext Код: plaintext Потом отконвертировать массив строк в массив URL. Или измени конструктор на Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2005, 13:50 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
Евгений Путилинты можеш сделать вместо Код: plaintext Код: plaintext Потом отконвертировать массив строк в массив URL. Или измени конструктор на Код: plaintext 1. 2. 3. 4. Смысл в этом какой? Что это даст? сделать УРЛ Класслоадер и передать ему в урл класспат... AppClassLoader итак будет искать в класспате ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2005, 14:25 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
Вопрос вообще состоит в том как ему после c = super.loadClass(name); вернуть с от имени sqlClassLader, а не AppClassLoader. Я немогу понять неужели никто подобным не занимался????? Информации по собственным загрузчикам минимум. везде идет newInstance и стоит ... типа дальше и так все понятно, хотя нихрена не работает. Нехочется писать еще и собственное считывание с винта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2005, 16:58 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=33400152&tid=2150781]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
57ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
68ms |
get tp. blocked users: |
1ms |
| others: | 252ms |
| total: | 419ms |

| 0 / 0 |
