|
|
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
Есть такой тестовый пример: SqlClassLoader.java: Код: 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. Welcome.java: Код: 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. и Main.java: Код: 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. Проблема в том что в Main.java в строке wel = (Welcome)we; Выдает ClassCastException в БД точно находится класс Welcome. Еще если я заменяю a = sql.loadClass("Welcome"); на a = Class.forName("Welcome"); все работает. Плз подскажите вчем причина. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2005, 12:12 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
Только что попытался добавить проверку if ( we instanceof Welcome ) wel = (Welcome)we; else System.out.println("Not inst"); он ее не проходит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2005, 14:14 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
Да и еще System.out.println(we.toString()); выдает Welcome@c1b531 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2005, 14:20 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
Gold FishПлз подскажите вчем причина. Убери свой класс из classpath. Если классы загруженны разными classLoader они разные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2005, 15:24 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
Непомогло :-( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2005, 17:35 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
Выполни это разные классы System.out.println(sql.loadClass("Welcome")); System.out.println(Class.forName("Welcome")); Если ты убрал Welcome из classPath то тогда у тебя на вот этой строке должен кидаться ClassNotFoundException wel = (Welcome)we; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2005, 19:26 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
Вначале когда я удалил этот клас. Он мне всеравно кидал ClassCastException, а после перезагрузки начал кидать ClassNotFoundException. Я что-то не могу понять как его всетаки заставить работать???? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2005, 21:42 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
Gold FishЯ что-то не могу понять как его всетаки заставить работать???? Именно для твоего примера надо чтобы классы Main и Welcome грузились одним classLoader'ом Достич этого можно несколькими способами -- заменить истемный класслоадер на свой параметр запуска явы -Djava.system.class.loader=MyClassLoader -- грузить Main через sqlClassLoader Вообще посмотри готовый код где это работает например в томже Tomcat ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2005, 10:40 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
Но в таких решениях есть несколько проблем: 1. Мне в загрузчик нужно передать дескриптор подключения к БД 2. Main я не могу загрузить через свой лоадер кроме как с использованием -Djava.system.class.loader=sqlClassLoader. Может я конечно что-то не понимаю? 3. -Djava.system.class.loader=sqlClassLoader выдает ошибку Error occurred durin initialization of VM java.lang.Error: java.lang.NoSuchMethodException: sqlClassLoader.<init>(java.lang.ClassLoader) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2005, 12:07 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
Суть этого в том, что есть клиентская часть которая загружается локально и из нее происходит подключение к нужному серверу БД, а остальные объекты тянутся непосредственно с сервера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2005, 14:29 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
Gold FishНо в таких решениях есть несколько проблем: 1. Мне в загрузчик нужно передать дескриптор подключения к БД 2. Main я не могу загрузить через свой лоадер кроме как с использованием -Djava.system.class.loader=sqlClassLoader. Может я конечно что-то не понимаю? 3. -Djava.system.class.loader=sqlClassLoader выдает ошибку Error occurred durin initialization of VM java.lang.Error: java.lang.NoSuchMethodException: sqlClassLoader.<init>(java.lang.ClassLoader) Можеш. можеш. Ты должен отталкиватся от URLClassLoader или все классы включая то что лежит в rt.jar грузить через свой classLoader. Но выгоднее всетаки через URLClassLoader и если нет в базе то грузить через super. Потом посмотри исходные файлы TomCat там есть использования classLoader. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2005, 17:14 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
Я конечно наверное достал. Но что ты имеешь ввиду под Ты должен отталкиватся от URLClassLoader????? Можно немного поподробнее, я уже просто запутался. Начнем с самого начала: Есть клиент который запускается локально, из которого пользователь конектится к БД(под савоим логином и паролем) и только потом начинает тянуть нужные объекты именно оттуда. Соостветственно отсюда выплывает 2 проблеммы: 1. Объекты клиента должны подгрузится локально. т.к. еще нет соединения с БД 2. загрузчику объектов нужно передать дескриптор соединения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2005, 18:15 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
Gold FishЯ конечно наверное достал. Но что ты имеешь ввиду под Ты должен отталкиватся от URLClassLoader????? Можно немного поподробнее, я уже просто запутался. Начнем с самого начала: Есть клиент который запускается локально, из которого пользователь конектится к БД(под савоим логином и паролем) и только потом начинает тянуть нужные объекты именно оттуда. Соостветственно отсюда выплывает 2 проблеммы: 1. Объекты клиента должны подгрузится локально. т.к. еще нет соединения с БД 2. загрузчику объектов нужно передать дескриптор соединения. Тебе нужно чтото типа. Код: 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. Твоя основная проблемма в том что ты не доконца представляеш как работает ClassLoader :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2005, 10:50 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
ты имеешь ввиду java.net.URLClassLoader????? у него нет метода LoadClassData ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2005, 12:41 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
Gold Fishты имеешь ввиду java.net.URLClassLoader????? у него нет метода LoadClassData да. тебе надо переопределить protected Class findClass(String name) throws ClassNotFoundException. чтобы он искал сначала в SQL базе потом в super.find ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2005, 13:40 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
дык он и так ищет if (data == null) { c = getParent().loadClass( name ); cache.put(name, c); return c; } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2005, 13:50 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
Gold Fishдык он и так ищет Ага понял. Ты его переопредели от URLClassLoader, сделай конструктор по умолчанию(у тебя на его отсуствие ошибка была java.lang.NoSuchMethodException: sqlClassLoader.<init>(java.lang.ClassLoader) Сделай static Connection conn; И попробуй с тем чтобы он был системным classLoader'om ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2005, 14:51 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
Переопредделил от URLClassLoader и создал конструктор по умолчанию. И всеравно дает ava.lang.NoSuchMethodException: sqlClassLoader.<init>(java.lang.ClassLoader) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2005, 15:39 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
Gold FishПереопредделил от URLClassLoader и создал конструктор по умолчанию. И всеравно дает ava.lang.NoSuchMethodException: sqlClassLoader.<init>(java.lang.ClassLoader) Хм он вот это хочет :-( sqlClassLoader (ClassLoader parent) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2005, 16:28 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
И че делать??? Я пробовал наследовать от ClassLoader и SecureClassLoader тоже дает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2005, 16:48 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
Gold FishИ че делать??? Я пробовал наследовать от ClassLoader и SecureClassLoader тоже дает. Он конструктор хочет sqlClassLoader (ClassLoader parent) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2005, 17:27 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
Ну смертвой точки уже удалось сойти. Теперь новые проблемы. Если я наследую от УРЛКлассЛоадер и в конструкторе инициализирую как super(null, parent); вылазит NullPointerException при инициализации ВМ, а если я наследую от КлассЛоадер или СекьюриКлассЛоадер то при запуске ругается на рекурсивный вызов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2005, 17:54 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
up ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2005, 11:49 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
Gold FishНу смертвой точки уже удалось сойти. Теперь новые проблемы. Если я наследую от УРЛКлассЛоадер и в конструкторе инициализирую как super(null, parent); вылазит NullPointerException при инициализации ВМ, а если я наследую от КлассЛоадер или СекьюриКлассЛоадер то при запуске ругается на рекурсивный вызов А ты попробуй наследоваться от УРЛКлассЛоадер и переопределить только его конструкторы, т.е. вызывать не super(null, parent) а super(url, parent) Все таки советую поискать в сети как минимам есть классы JDBCClassLoader ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2005, 15:21 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
А какой урл я ему укажу????? У тебя есть хоть какойто пример работающего класс лоадера???? Что-то в сети по класс лоадерам вообще фанарь информации!!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2005, 16:02 |
|
||
|
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 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
Gold FishВопрос вообще состоит в том как ему после c = super.loadClass(name); вернуть с от имени sqlClassLader, а не AppClassLoader. Извините канешна, но, ЕСЛИ КЛАСС ЗАГРУЖЕН AppClassLoader-ОМ, ТО ОН ЗАГРУЖЕН ИМЕННО AppClassLoader-ОМ. И ВСЕ. ВОПРОС ПОСТАВЛЕН НЕКОРРЕКТНО!!! Gold FishЯ немогу понять неужели никто подобным не занимался????? Информации по собственным загрузчикам минимум. везде идет newInstance и стоит ... типа дальше и так все понятно, хотя нихрена не работает. Нехочется писать еще и собственное считывание с винта. ВСЕ ХОРОШО РАБОТАЕТ. Я ВАМ НАСТОЙЧИВО ПРЕДЛАГАЛ ДВА ВАРИАНТА.( больше не буду ). ВОЗМОЖНО ЕСТЬ И ДРУГИЕ... ИНТЕРЕСА РАДИ, Я НАВАЯЛ ТЕСТОВЫЙ КЛАССЛОАДЕР (чтит не из база, а из определенного каталога). ВОСПРОИЗВЕЛ ВАШИ ПРОБЛЕМЫ, РЕШИЛ ИХ ВЫШЕУКАЗАННЫМИ СПОСОБАМИ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2005, 17:19 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
Я не понимаю какой смысл приводить его к родителю????? Я смогу юзать методы только родителя (причем не перегруженые насколько я понимаю). Рефлекшины юзать очень не удобно. А ваш класслоадер будет работать и без всех этих извратов т.к. к каталогу он может достучаться сразу, а в моем случае к базетолько после того как юзер утановит соединение с базой ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2005, 18:33 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
Gold FishЯ не понимаю какой смысл приводить его к родителю????? Я смогу юзать методы только родителя (причем не перегруженые насколько я понимаю). Рефлекшины юзать очень не удобно. Эти фразы меня пугают :). имхо вы очень неверно понимаете... Привидите к интерфейсу и будете юзать то, что достанете из базы, но понятно дело по интерфейсу. Насчет рефлекшна согласен. Но интерфейс ИМХО здесь именно то, что нужно... Gold Fish А ваш класслоадер будет работать и без всех этих извратов т.к. к каталогу он может достучаться сразу, а в моем случае к базетолько после того как юзер утановит соединение с базой Каких извратов? Вы просто не можете засунуть класс мейн в базу, но его и не нужно туда засовывать(это класс-клиент). Я тоже оставляю его в класспате...ситуация одинаковая... гружу класс, который находицца не в класспат. Где, в данном случае не важно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2005, 18:49 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
[quot JozicЯ тоже оставляю его в класспате...ситуация одинаковая... гружу класс, который находицца не в класспат. Где, в данном случае не важно.[/quot] А каким classLoader'om будет грузиться класс которы статически прилинкован к классу загружаемому вашим classLoader'om? Человеку четко сказали где смотреть примеры про WebappClassLoader Он смотрел? если не понимать как работают classLoader'ы целиком будет тыкаться и ждать когда ему напишут принесут готовый код. В сети уйма документов и примеров про JDBCClassLoader, в том числе есть книги где он описан. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2005, 18:56 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
Евгений Путилин JozicЯ тоже оставляю его в класспате...ситуация одинаковая... гружу класс, который находицца не в класспат. Где, в данном случае не важно. А каким classLoader'om будет грузиться класс которы статически прилинкован к классу загружаемому вашим classLoader'om? Попытаецца сперва текущим, потом передаст паренту если не найдет, парент будет смотреть в класспате... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2005, 19:04 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
2Jozic: Можешь кинуть код твоего тестового класс лоадера????? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2005, 11:37 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
Gold Fish2Jozic: Можешь кинуть код твоего тестового класс лоадера????? Могу, куда? Только здаецца мне у вас не в класслоадере проблема то была... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2005, 17:00 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
кинь на roodjuriy[at]gmail[dot]com сенкс ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.12.2005, 17:05 |
|
||
|
ClassLoader и ClassCastException
|
|||
|---|---|---|---|
|
#18+
Gold Fishкинь на roodjuriy[at]gmail[dot]com сенкс вроде ушло... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2005, 12:00 |
|
||
|
|

start [/forum/topic.php?all=1&fid=59&tid=2150781]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
70ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
87ms |
get tp. blocked users: |
2ms |
| others: | 247ms |
| total: | 443ms |

| 0 / 0 |
