Как сохранить Ваши собственные строки отладки, не регистрируя их?

Я только что нашел метод getReference в EntityManager, который получает экземпляр, состояние которого можно лениво извлекать. Как сказано в документации:

Получить экземпляр, состояние которого можно лениво извлекать. Если запрошенный экземпляр не существует в базе данных, EntityNotFoundException генерируется при первом обращении к состоянию экземпляра. (Среде выполнения поставщика постоянства разрешается генерировать исключение EntityNotFoundException при вызове getReference.) Приложение не должно ожидать, что состояние экземпляра будет доступно после отсоединения, если только оно не было доступно приложению, пока был открыт менеджер сущностей.

В качестве возможного решения для поиска и блокировки обновленной сущности по идентификатору в одном запросе мы можем использовать следующий код:

MyEntity entity = entityManager.getReference(MyEntity.class, key);
entityManager.refresh(entity, LockModeType.PESSIMISTIC_WRITE);

Этот запрос создаст сущность (без базы данных запрос), а затем обновите и заблокируйте объект.

6
задан Andreas 28 October 2008 в 16:44
поделиться

10 ответов

Если единственный objetive кода отладки, с которым у Вас есть проблемы, должен проследить значения некоторого varibles, я думаю, что то, в чем Вы действительно нуждаетесь, является отладчиком. С отладчиком можно наблюдать состояние любой переменной в в любой момент.

Если Вы не можете использовать отладчик, то можно добавить некоторый код для печати значений в некотором выводе отладки. Но этот код должен быть только несколькими строками, цель которых должна состоять в том, чтобы сделать легче фиксация, которую Вы делаете. После того как это передало для транкинга, это фиксируется, и затем Вам не должно быть нужно больше тех строк отладки, таким образом, необходимо удалить их. Не удаляют весь код отладки, хороший код отладки очень полезен, удалите только свой "персональный" код отладки трассировки.

Если фиксация является такой длинной, что Вы хотите сохранить свой успех, соглашающийся на репозиторий, то то, в чем Вы нуждаетесь, является ответвлением, в этом ответвлении можно добавить так много кода отладки, как Вы хотите, но так или иначе необходимо удалить его при слиянии в соединительной линии.

4
ответ дан 8 December 2019 в 14:49
поделиться

Но если бы я регистрировал бы это в репозиторий исходного кода, мои коллеги стали бы сердитыми на мне для загрязнения вывода Журнала и загрязнения кода.

Я надеюсь, что Ваша платформа Журнала имеет понятие уровней журнала, так, чтобы Ваша отладка могла легко быть выключена. Лично я не вижу, почему люди стали бы сердитыми на большее количество входа отладки - потому что они могут просто выключить его!

3
ответ дан 8 December 2019 в 14:49
поделиться

Почему бы не переносить их в директивы препроцессору (принимающий конструкцию существует на языке по Вашему выбору)?

#if DEBUG
    logger.debug("stuff I care about");
#endif

Кроме того, можно использовать уровень журнала как трассировка или отладку, которая не должна быть включена в производстве.

if(logger.isTraceEnabled()) {
    logger.log("My expensive logging operation");
}

Таким образом, если что-то в той области действительно неожиданно возникает однажды, можно повернуть вход на том уровне назад на и на самом деле получить некоторых (надо надеяться), полезная обратная связь.


Обратите внимание, что оба из этих решений все еще позволили бы регистрирующимся операторам быть зарегистрированными, но я не вижу серьезных оснований, чтобы не зарегистрироваться в них. Я предоставляю решения для хранения их от производственных журналов.
2
ответ дан 8 December 2019 в 14:49
поделиться

Если бы это было действительно продолжающейся проблемой, я думаю, что предположил бы, что центральный репозиторий является основной версией, и я закончил бы тем, что использовал файлы исправления для содержания различий между официальной версией (последний, что я продолжил работать), и моя версия с кодом отладки. Затем когда я должен был восстановить свою отладку, я проверю официальную версию, применю мой патч (с patch команда), решите проблему, и перед регистрацией, удалите патч с patch -R (для обратного патча).

Однако не должно быть никакой потребности в этом. Необходимо смочь договориться о методологии, которая сохраняет информацию в официальной строке кода с механизмами для управления объемом отладки, которая производится. И должно быть возможно независимо от того, имеет ли Ваш язык условную компиляцию в том смысле, что C или C++ делают с препроцессором C.

2
ответ дан 8 December 2019 в 14:49
поделиться

Подобный

#if DEBUG #endif....

Но это будет все еще означать, что любой работающий с конфигурацией 'Отладки' поразит те строки.

Если Вы действительно хотите их пропущенный, затем используют уровень журнала, который никто больше не использует, или....

Создайте другую конфигурацию выполнения под названием MYDEBUGCONFIG и затем поместите свой код отладки промежуточные блоки как это:

#if MYDEBUGCONFIG 
...your debugging code
#endif;
1
ответ дан 8 December 2019 в 14:49
поделиться

Я знаю, что собираюсь получить отрицательные голоса за это...
Но на вашем месте, я просто создал бы свой собственный инструмент.

Вам потребуются выходные, да, но Вы сохраните свой стиль кодирования и свой репозиторий чистыми, и все будут счастливы.

Не уверенный, какое управление исходным кодом Вы используете. С моим можно легко получить список вещей, которые "находятся на рассмотрении, чтобы быть зарегистрированными". И можно инициировать фиксацию, на всем протяжении API.

Если бы у меня была та же самая потребность, то я сделал бы программу для фиксации, вместо того, чтобы использовать встроенную команду в Управлении исходным кодом GUI. Ваша программа прошла бы список незаконченных вещей, взяла бы все файлы, которые Вы добавили/изменили, сделайте копию из них, удалите все строки журнала, фиксацию, и затем замените их назад Вашей версией.

В зависимости от того, на что похожи Ваши строки журнала, Вам, вероятно, придется добавить специальный комментарий в конце их, чтобы Ваша программа распознала их.

Снова, не должен брать слишком много работы, и это не большая часть боли для использования позже.
Я не ожидаю, что Вы найдете что-то, что делает это для Вас уже сделанный (и для Вашего управления исходным кодом), это довольно конкретно, я думаю.

2
ответ дан 8 December 2019 в 14:49
поделиться

Какую систему управления исходным кодом Вы используете? Мерзавец позволяет Вам сохранять локальные ответвления. Если хуже прибывает в худший, Вы могли бы просто создать свое собственное ответвление 'Andreas' в репозитории, хотя управление ответвлением могло стать довольно болезненным.

1
ответ дан 8 December 2019 в 14:49
поделиться

Если Вы действительно делаете что-то как:

помещает оператор журнала между любой строкой кода, для печати значения всех переменных все время. Это действительно делает код трудно для чтения.

это - проблема. Рассмотрите использование среды тестирования, вместо этого, и напишите код отладки там.

С другой стороны, если Вы пишете всего несколько строк отладки, затем можно удаться избежать строк руками (например, удаление соответствующих строк с редактором перед фиксацией и отменой изменения после того, как это сделано) - но конечно это должно быть очень нечастым!

1
ответ дан 8 December 2019 в 14:49
поделиться

По моему скромному мнению, необходимо избежать #if решения. Это - C/C++ способ сделать условные отладочные программы. Вместо этого припишите весь вход/функции отладки с ConditionalAttribute. Конструктор атрибута берет в строке. Этот метод только назовут, если конкретное определение препроцессора того же имени как строка атрибута будет определено. Это имеет те же самые последствия во время выполнения как #if/#endif решение, но это смотрит чертовски много лучше в коде.

0
ответ дан 8 December 2019 в 14:49
поделиться

Это следующее предложение является безумием, не делают этого, но Вы могли...

Окружите свой персональный код входа комментариями такой как

// ##LOG-START##
logger.print("OOh A log statment");
// ##END-LOG##

И перед фиксацией кода, выполняет сценарий оболочки, который разделяет журналы.

Я действительно не был бы reccomend это, поскольку это - мусорная идея, но это никогда не останавливает никого.

Альтернатива Вы не могли также добавить комментарий в конце каждой строки журнала и иметь сценарий, удаляют их...

logger.print("My Innane log message"); //##LOG

Лично я думаю, что использование надлежащей платформы журналирования с уровнем входа отладки и т.д. должно быть достаточно хорошим. И удалите любые лишние журналы перед представлением кода.

0
ответ дан 8 December 2019 в 14:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: