11.07.2015 Views

ПРИНТЕРЫ СЕГОДНЯ - Xakep Online

ПРИНТЕРЫ СЕГОДНЯ - Xakep Online

ПРИНТЕРЫ СЕГОДНЯ - Xakep Online

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

110КодингХАКЕР 04 /171/ 2013сообщения JMS, в процессе которой выполняетоперации с базой данных и отправляет в ответподтверждение. От заказчика появилось требованиевести в базе данных журнал обработкисообщений, в который необходимо записыватьинформацию о результатах обработки. Для этогобыл реализован сервис LogService с методомlog(String message, Throwable cause).Измените приведенный код, добавив записьв журнал любых результатов обработки и обеспечивкорректную обработку ошибок:@Transactionalpublic void processDocument(Documentdocument) throws ServiceException,MessagingException {if (isValid(document)) {documentService.store(document);messagingService.send(Acknowledgements.documentReceived(documentt));} else {messagingService.send(Acknowledgements.documentInvalid(document));}}Расскажите, как можно протестировать полученныйкод. Расскажите, как должен быть реализованметод audit, чтобы гарантировать записьв журнал любых результатов.РЕШЕНИЕДля начала необходимо разобраться, что делаетприведенный код: мы видим здесь распределеннуютранзакцию, в которой проверяетсякорректность входящего документа, его сохранениев базу данных и отправка подтверждения.Судя по сигнатуре метода, какие-то из этихопераций могут сгенерировать исключениеServiceException, а отправка подтверждения, скореевсего, генерирует еще и MessagingException.Нельзя исключать, что в процессе обработкиможет также возникнуть RuntimeException. Мыне знаем, с какой версией Java работает этот код,АЙТИШНАЯКОМПАНИЯ! ШЛИНАМ КАЧЕСТВЕННЫЕЗАДАЧКИ, И МЫИХ ОПУБЛИКУЕМ!БЕСПЛАТНО, БЕЗРЕГИСТРАЦИИ,БЕЗ SMS, НАМАКСИМАЛЬНОЙСКОРОСТИ. И ПРОБЕСПЛАТНЫЕАЙФОНЫ САМЫМГРАМОТНЫМЧИТАТЕЛЯМ ПРОСЬБАНЕ ЗАБЫВАТЬ.ЗАДАЧИОТ КОМПАНИИABBYYРешение этих задачждет тебя на нашемдиске. Должно жебыть что-то, что моглобы подвигнутьтебя вставить егов дисковод!Предполагается, что авторизованныйна сайте пользователь получаетспециального вида cookie, которуюнам и нужно украстьРис. 1ОтветитьРедактироватьУдалитьпоэтому для краткости изложения будем считать, что это Java 7. Попробуемего модифицировать:public interface DocumentProcessor {Result processDocument(Document document) throwsProcessingException;}public class DefaultDocumentProcessor implementsDocumentProcessor {@Transactionalpublic Result processDocument(Document document) throwsProcessingException {try {if (isValid(document)) {documentService.store(document);messagingService.send(Acknowledgements.documentReceived(document));return DOCUMENT_PROCESSED;} else {messagingService.send(Acknowledgements.documentInvalid(document));return DOCUMENT_INVALID;}} catch (ServiceException | MessagingException e) {throw new ProcessingException(e);}}}public class LoggingDocumentProcessor implementsDocumentProcessor {@InjectDefaultDocumentProcessor delegate;@InjectAuditService auditService;public Result processDocument(Document document) throwsProcessingException {try {Result result = delegate.processDocument(document);auditService.audit("documentProcessed", result);return result;РЕШЕНИЕ СТАРОЙ ЗАДАЧИ ОТ ЧИТАТЕЛЯ:Владимир Гапоненко из Санкт-Петербурга (gvb81@list.ru)В декабрьском журнале «Хакер» за 2012 год на странице 101 была опубликованазадача № 3 про лягушат. Решать ее предложили с помощью круговЭйлера — не знаю, как другие читатели журнала, но я в такой способ решениятак и не въехал. Поэтому решил все-таки поломать себе мозг долгимилогическими выкладками, и у меня, как ни странно, получилось болеебыстрое и простое решение.Исходя из условий задачи, лягушата могут быть: зеленые (З) илипестренькие (П), грустные (Г) или веселые (В), сидящие на берегу (Б) илиплавающие в воде (W). Получается не так уж и много возможных комбинаций:ЗГБ, ЗГW, ЗВБ, ЗВW, ПГБ, ПГW, ПВБ, ПВW. Уточняем: если лягушонокзеленый, то он веселый — значит, вычеркиваем комбинации ЗГБ и ЗГW.Если лягушонок грустный, то он сидит на берегу — вычеркиваем ПГW. Еслилягушонок пестренький, то он плавает в воде — вычеркиваем ПГБ и ПВБ.В итоге остается только три возможных комбинации: ЗВБ, ЗВW и ПВW.Теперь сверяем их с утверждениями. Первое утверждение неверно, посколькувозможна комбинация ЗБВ. Второе утверждение неверно, потомучто возможна та же комбинация ЗБВ. Третье утверждение верно, посколькуподтверждается всеми тремя возможными комбинациями. Четвертоеутверждение неверно, поскольку возможна комбинация ПВW. Пятоеутверждение неверно, поскольку опровергается всеми тремя возможнымикомбинациями. И наконец, шестое утверждение неверно, потому что возможната же комбинация ЗВБ.Думаю, что мой логический способ решения задачи будет более понятенлюдям с математическим складом ума, чем круги Эйлера, и особенно подойдетв тех случаях, когда не нужно разбираться с десятком и более возможныхкомбинаций.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!