![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
LLIbIcpEP |
|
||||
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 20.10.2010 Репутация: нет Всего: нет |
Доброго времени суток.
Есть синглтон:
Дальше этот синглтон использую хочу использовать так:
Может я чего-то не понимаю, но в юнит-тестах получаю NullPointerException ![]() drp почему-то null. Никаких static { } конструкций не юзаю. Логгер (не синглтон, моя обертка к log4j для отложенной обработки строк) работает нормально, хотя объявляется и инициализируется там-же и так-же. log.info("Created EntityManagerFactory"); - отрабатывает. Как так? |
||||
|
|||||
Kircul |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 20.2.2007 Репутация: 6 Всего: 7 |
LLIbIcpEP, стектрэйс в студию.
|
|||
|
||||
LLIbIcpEP |
|
||||
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 20.10.2010 Репутация: нет Всего: нет |
Config унаследован от Unit. Метод save() в Unit:
Вылетаем при попытке drp.saveUnit(this), drp - null. Это сообщение отредактировал(а) LLIbIcpEP - 9.2.2011, 13:20 |
||||
|
|||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Есть подозрение что LoggerFilter.getLoggerFilter(Unit.class) вызывает метод save(), а значит он будет вызван до того как будет проинициализирован drp. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
LLIbIcpEP |
|
|||
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 20.10.2010 Репутация: нет Всего: нет |
Да нет, это разные компоненты, функционально не связанные. LoggerFilter - простая обертка для log4j, в которую передаю String format и аргументы, а конкатенация строк и toString() аргументов происходит только если соответствует уровень логов в конфиге. Я в курсе, что slf4j умеет такое из коробки, но вот...
Метод save() вызывается в не пустых конструкторах сущностей, если это важно. Это сообщение отредактировал(а) LLIbIcpEP - 9.2.2011, 14:14 |
|||
|
||||
LLIbIcpEP |
|
|||
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 20.10.2010 Репутация: нет Всего: нет |
Насколько правильно будет определять drp только в тех методах, где он юзается? Это ведь синглтон, по производительности ударить не должно?
|
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Честно говоря, я вообще не понимаю зачем тут такие сложности. Зачем внутри DataRepositoryProducer объявлять класс DataRepositoryProducerHolder все назначение которого держать ссылку на внешний класс? Тут явно не в том порядке инициализируются поля, отсюда и null.
Добавлено через 2 минуты и 56 секунд Если все таки решишь разобраться, что там и как - добавь в каждый класс:
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
LLIbIcpEP |
|
||||
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 20.10.2010 Репутация: нет Всего: нет |
Это просто такая реализация синглтона.
![]() Смена реализации на классический вариант не помогает. ![]() У этой реализации недостаток - нельзя обработать исключения в конструкторе синглтона. Но мне это не надо. Зато есть выгода - нет лишних ифов и synchronized-блоков при поддержке многопоточности и отложенной инициализации, плюс к перфомансу. Добавлено через 9 минут и 26 секунд PS:
Это сообщение отредактировал(а) LLIbIcpEP - 9.2.2011, 18:22 |
||||
|
|||||
LLIbIcpEP |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 20.10.2010 Репутация: нет Всего: нет |
Это вообще смешно)
Добавлено через 7 минут и 30 секунд Ага, все стало на свои места. Сделал в синглтоне:
И оставил первое. Выводится следующее:
Юнит инициализируется до статик поля в DataRepositoryProducerHolder. Как бороться? У меня уже чисто спортивный интерес) Это сообщение отредактировал(а) LLIbIcpEP - 9.2.2011, 18:39 |
||||||||
|
|||||||||
_sten_ |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 184 Регистрация: 29.9.2006 Репутация: нет Всего: 3 |
а какая JVM?
--------------------
WARNING: Condition 'to_be || !to_be' is always 'true' ! |
|||
|
||||
techmax |
|
|||
Новичок Профиль Группа: Участник Сообщений: 45 Регистрация: 5.9.2007 Где: Красноярск Репутация: 2 Всего: 2 |
Как вариант:
|
|||
|
||||
LLIbIcpEP |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 20.10.2010 Репутация: нет Всего: нет |
Добавлено через 1 минуту и 10 секунд
Да, вариант, просто не хотелось бы делать громоздкое объявление DataRepositoryProducer в каждом методе, где он нужен... |
||||||||
|
|||||||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |