Ответы пользователя по тегу Java
  • Как деплоить war на Tomcat 10?

    @dplsoft
    если ваш war собран с пакетами javax.* а не jakarta.* , то так:

    создать рядом с webapps каталог webapps-javaee и выкладывать ваш .war туда.
    10й томкат сконвертирует javax.* приложение в jakarta.* и разместит в webapps уже рабочее в новом окружении приложение.

    https://tomcat.apache.org/migration-10.html#Specif... :
    Tomcat can convert an existing web application from Java EE 8 to Jakarta EE 9 at deployment time using the Apache Tomcat migration tool for Jakarta EE. To make use of the feature, the web application should be placed in the Host legacyAppBase folder (by default named webapps-javaee) and they will be converted to an equivalent Jakarta EE web application in the Host appBase folder (by default named webapps).
    Ответ написан
    Комментировать
  • Существует ли свежая литература по Java?

    @dplsoft
    Устаревшей информации по джаве нет, потому что джава имеет полную обратную совместимость,
    "Устаревать" может только информация по библиотекам, подходам и пр.

    Другое дело, если хотите получать информацию по новым фичам, вводимым в язык в последних версиях.
    Но, имхо, лучше изучать язык, а не вырванные из контекста фишечки.

    В качестве лучшего учебника по Java - именно по языку и тому как работает джава-машина- я бы рекомендовал руководство по подготовке к сертификационному экзамену от Мала Гупты (Mala Gupta).

    Не смотря на то, что это типа сертификационный тест, и все такое, это, тем не менее, самое системное, внятное и прямое изложение базовых фич языка - синтаксис, подходы, работа интерпретатора и др.

    Описывается так же ряд механизмов, которые часто просто пропускают в иных курсах - например, даже те кто успешно годит не первый год самоучеством, не все знают, что конструктор объекта отрабатывает не "самым первым", а "самым последним" при создании объекта. А Мала Гупла вам это подробно расскажет сразу.

    Вот вам ссылка на амазон, а pdf на просторах сети сами найдете :
    https://www.amazon.com/OCA-Java-Programmer-Certifi...

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

    Ну и экзамен заодно пройдите. Неожиданно, но OCA - это тот экзамен в котором "зубрить тесткинги" смысла не имеет - у вас по 5 вариантов одного билета, в которых отличается пара запятых в исходном коде, которые влияют на правильный ответ. В итоге - если у вас в голове нет джава машины на ходу исполняющей код - экзамен вы не пройдете. Настоятельно советую.
    Ответ написан
    Комментировать
  • Как правильно организовать хранение объектов в Android приложении?

    @dplsoft
    Можно сделать таблицу в базе данных для них, где будут соответствующие поля "время", "дата", "текст", "путь к файлу" (Тогда отслеживать, что он остался прежним).
    Но мне кажется, что такой подход не совсем верный, ведь напоминания — это объекты, с которыми удобно было бы работать, непосредственно обращаясь к ним, вызывая методы, например, note1.delete().
    Как решить эту задачу с помощью объектов я не представляю. Допустим, в приложении мы создали таких несколько, но как быть дальше? Надо их где-то хранить. В той же базе данных?


    Если вам удобно (да так в принципе и правильно, хотя и медленнее) работать с объектами а не с записями в БД - то для таких вещей есть такая штука как ORM. (у вас конечно простой случай, и потому работать с записями в вашем проекте - самое то. И тем более - если вы новичок - стоит разобраться с тем, как работать с БД напрямую. Но вообще, как только сделаете учебный проект с БД - , стоит понять, что в других сложных проектах - проблем с БД будет гораздо больше и будет сложнее и лучше осваиваться с "промышленными подходами")

    В общем есть ORM. Если расшифровывать - это "модель/правила" которая/которые позволяют вам сохранять состояния объектов в БД и восстанавливать их.
    А на практике - это набор классом которые делают за вас всю черновую работу по взаимодействию с БД (или тем хранилищем которое под ними лежит). И вы работаете не с БД, а с некой абстракцией, которая скрывает от вас что где и как она хранит в БД или том хранилище, которая ORM использует.

    Т.е. вы говорите что-то типа - "О, мой ORM! дай мне объект типа 'МояЗаметка' c идентификатором 12345!" и он сам лезет куда-то в БД (куда именно - это его личные проблемы) и отдает вам обхект класса МояЗаметка которая заполнена данными заметки с номером 12345. А дальше - "чо хошь с ним, то и делай".

    А как сделал все что надо (дургая его методы, меняя свойства или как ещё), - отдаешь его обратно своему ORM-слою ( ORM можно рассматривать как слой абстракции над БД или любым другим хранилищем ) - типа "на вот тебе объект, сохрани его в БД." - и механизмы ORM делают всю черновую работу по генерации SQL-запросов и всего прочего за вас.

    В зависимости от того что от орм хотели создатели, ORM может или нет управлять структурой БД или пытаться вытаскивать свои объекты из ранее созданной структуры; управлять метаданными ваших объектов и (например) содержать или нет данные о том, как эти свойства надо отображать или нет.

    В некоторых ORM есть кодогенератор - т.е. вы даете ему описания классов, а он вам генерирует код, который сохраняет классы в БД и восстанавливает оттуда. Часть ORM-механизмов работтают отталкиваясь от аннотаций - т.е. вы над каждым из полей которые хотите сохранять в БД надписываете его имя, тип, индексацию и другие параметры - так например делает Persistence API - но его нет на Андроиде, потому это не наш случай (да и работа через рефлекшен считается медленной).

    Ещё могу дать 2 ссылки - на сравнительную статью ОРМ для Андроид и на мой сосбвтенный ОРМ-велосипед :
    www.ninthavenue.com.au/android-orm-jpa
    https://gitorious.org/unat/pages/SimpleORM_Overvie...
    (последнее - "на правах рекламы". творение моё, но давно не обновлявшееся в публичной репе. Сейчас много изменений, как сдаим текущий проект - опубликую что поновее. В принципе, не столько для пользования, сколько вам - для освоения идей и выдачи конструктивной критики и вопросов. если что - спрашивайте - по UnAT я вам расскажу всё)))
    Ответ написан
    Комментировать
  • Как передать команду через bluetooth в android?

    @dplsoft
    блютус чат из примеров к андроид сдк смотрели?
    там при соединении с блютус-устройством открываются потоки записи и чтения , которым вы отдаете byte[].

    а его заполняете чем угодно.
    Ответ написан
    Комментировать
  • В чем претензии Oracle к Google относительно использования java для разработки android?

    @dplsoft
    По моему, основная претензия была в патентовании спецификаций и описаний Джава машины, и последующих за этим претензий типа "мы вам не давали права писать свою джава машину которая этим спецификациям (не?) соответвует". (возможно, (смотрю на пост выше) они пытались ограничить создание виртуальных машин только такими, которые полностью соответвуют их спецификациям))

    Типа вот мы придумали API, и оно "патентованное", и только мы можем говорить кто может реализовывать это API, а кто нет, и в каком виде.

    Фактически, ораклы были далеко посланы, особенно в контексте признания "высшим европейским судом"(?) что сигнатуры API-функций не подлежат патентованию.
    (*ссылки сейчас искать не буду долго, извините)) т..е сам документ - подлежит защите как объект "автоского права" , т.е. цитировать документ, использовать в создании других документов - все только в соответсвии с лицензией, но вот сами сигнатуры функций - вы не можете запретить реализовывать третьим лицам.(поправляйте меня кто знает/помнит детали)

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

    (хотя вот? если вспомнить историю - то с майкрософтом это прокалило. Их протянули за создание J++ (кажется). После чего они (MS) типа разобиделись, и сделали "свой блекджек со шлюхами" в виде дотнет и сишарп)
    Ответ написан
    Комментировать
  • Какие есть книги по GUI для Android приложений на Java (без XML)?

    @dplsoft
    А зачем вам "XML учить" пока вы новичок ?

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

    И определитесь вы хотите учить Java который SE или EE или AndroidSDK который пересекается с первыми двумя только пятком-другим базовых для Java библиотек?

    Гуй в "обычной джаве" рисуется по разному, (и этих пакетов нет в андроидном SDK), а в AndroidSDK оно рисуется совсем не так. Там достаточно внятная и нормальная технология, не так клево как в C++\Qt, но вполне терпимо) так что я не понмиаю вашего вопроса или ваших страхов...
    Идите, учите, творите хелловорды и таск-тудушки(почему то многие с этого начинают) и ничего не бойтесь ;)
    Ответ написан
    Комментировать
  • C# программист хочет разрабатывать под Android: Java с нуля или Xamarin?

    @dplsoft
    По топику. ИМХО: Если писать только под Андроид - имхо, я бы рекомендовал вам путь "изучить джаву". Это дольше, но "основательнее".

    Имхо, как "андроидовец пишущиц на Java" - вы будете более востребованы, чем "андроидовец пишущий на Xamarin" и пр.

    Кроме того : освоить сам язык - на уровне достаточном что бы с мануалами написать простой тудулист - не составит проблемы. Для андроида нужно учить не JavaSE/JavaEE, а AndroidSDK - они пересекаются с JavaSE только некоторым набором базовых библиотек.

    Т.е. "если вам и так и так учить новый SDK - так зачем учить ксамариновский SDK, если можно выучить сразу AndroidSDK"?
    Ответ написан
    4 комментария
  • Есть ли программы для приведения кода к нормальному виду?

    @dplsoft
    Насчет директории - не знаю, а вот отдельный исходник в эклипсе можно легко переделать, "кастанув" "Ctrl+Alt+F" в любом окне редактирования исходного кода.

    Причем в настройках можно менять стиль под который вы форматируете.
    Например, меня "бесит" "стандартное" джавовское форматирование в той части, в которой оно опсиывает "скобочки".

    Типа исходно оно выглядит так:
    for (int i = 0, size = params.length; i < size; i++) {
    		p += getType(params[i]) + " param" + i;
    	}

    Я же предпочитаю стиль когда скобочки одни над другими (это не правильно, но мне код в разы быстрее читать если оно так)
    for (int i = 0, size = params.length; i < size; i++) 
            {
                p += getType(params[i]) + " param" + i;
            }


    Так вот: эклипсину можно настроть и на тот, и на другой стиль принудительного переформатирования. И ещё на пяток предустановленных, или своих собственных.
    Ответ написан
    Комментировать
  • Android: Qt vs Java. Что лучше использовать?

    @dplsoft
    Посмею оспорить ход рассуждений lorus ( Android: Qt vs Java. Что лучше использовать? ).
    Итог у нас почти один, но как в математике - когда ход рассуждений ошибочен - даже если ответ верен - то задача не решена. Возможно во много субъективно, но выскажусь, на правах личного мнения человека, который любит и писал и на Qt, и на Android с его "родным" Java тоже.
    На Qt для Android не писал, потому что на момент начала последнего проекта технология была сырая.

    И так: Не агитка за Qt но несколько слов в защиту Qt.

    Забегая вперед скажу: топикстартеру - если есть небольшой опыт разработки под Андроид, вы не работали ранее с Qt, и вам не важна переносимость исходного кода между всем и вся - продолжайте осваивать Android SDK ( Java ) .
    По крайней мере, сейчас.
    Хорошее знание хотя бы одного инструмента, лучше чем посредственное знание двух. ;)
    C Qt под Андроид потом разберетесь. Да и "пообкатаннее" оно будет.


    1. Qt - это всё-таки C++. Разрабатывать на нём существенно сложнее, чем на Java. То есть дольше и с большим количеством ошибок.

    Надо отличать "просто С++" и С++\Qt. В первую очередь, Qt - это фактически диалект языка С++. Например в объявлении Qt-класса появляются дополнительные секции signal и slots, а в процессе сборки существует фаза мета-компиляции, которая делает C++ код под вашу платформу. Не удивлюсь, если для андроида генерируется сместь Java и C++ кода которая потом скармливается Android NDK.

    Во вторых, Qt - это _самодостаточный_ фреймворк. Никаких STL или "чего-что-ещё что представляют себе в комплекте с C++" типичные сторонние разработчики.
    Многих проблем, которые приводят к сложности разработки "на простом C++" в "С++\Qt" просто нет "by design".

    Например в Qt заложен замечательный механизм предотвращения от выхватывания "null-poiunter" - "сигнал-слоты". Это в разы упрощает и делает надежнее работу как с GUI, так и с например, объектами, работающими в разных потоках. В Qt это все сделать разы проще, чем городить аналогичные стандартные механизмы на Java. Я не говорю в итоге оно будет эффективнее - тут надо выяснять и можно поспорить - но вот то, что в Qt многие вопросы работы с потоками и межпоточным взаимодействием продуманы лучше а механизмы удобнее - на мой вгляд это факт.
    (Хотя вот такого классного механизма аки runnable, в Qt нет. Но ждем 11-го стандарта С++.)

    В третьих - "С++\Qt" - это хорошо продуманный фреймворк едва-ли не с лучшим дизайном классов, продуманными методлами, единым стилем решения проблем.

    Как человек писавший на Qt 4.0-4.6 и сейчас закончивший первывый коммерческий проект для Android - могу выставить в сторону Java много минусов (в сравнении с Qt4/Qt5.) Просто потому, что Java - как в первую очередь коммерческая технология, был вынужден набирать нелогичности ради совместимости с предыдущими версиями - едва-ли не из первых версий Java. Посомтрите вопросы к сертификации - много вопросов, которые когда начинаешь разбирать "почему так" - уходят корнями в далекое темное прошлое развития Java. И в итоге - современная Java - это часто нелогичное, лоскутное одеяло, где в разных классах для решения одной и той-же задачи применяется если не разный подход и стиль, то как минимум разные имена методов. Ну вот зачем это?)))

    Да Java детально описан, и в технически прогнозируем - но его надо зубрить, тупо зубрить все исключения и проблемы наследования логики первых версий, и зубрить где используется put(), а где add()....
    ... а Qt-можно _понять_ и не зубрить, понять и только изредка заглядывать в документацию. И в итоге писать на нем - легче.

    К слову: дизайн классов гуглековских классов - хотя и очень-очень-оченьсвоеобразен и местами диковенен, но он, имхо, достаточно "строен" и в общей совокупности, не страдает такой уж сильной лоскутностью логики, какая имеется в стандартных классах Java. С какого-то момента ты понимаешь "как думали в гугле" и все становится несколько проще.

    Ещё к слову про миф "на Java писать проще чем на C++"(если сравнивается Java под DalvikVM и C++\Qt5):
    Не забывайте - DalvikVM - это вам не JavaVM.
    В DalvikVM вы легко отхватите "null-pointer-exception" если вы вдруг наивно думаете, что коли у вас есть в локальной переменной ссылка на фрагмент, активити или вью - то машина не уничтожит объект "когда ей вздумается", а у вас ваша переменная не об-null-ится.

    На понимание того, какие привычки десктопного написания и дизайна приложений нельзя переносить во фреймворки Android SDK и на перестройку собственного мышления - у вас уйдет несколько месяцев. А вы _начнете_ это понимать и отхватывать такие проблемы - как только начнете писать что-то бОольшее, чем набор разрозненных активити да пары фрагментов из учебных курсов.
    И в итоге - первый ваш серьезный проект на Андроиде - может влететь вам в хорошие переработки.
    Например, в том числе и потому что нет в Android SDK v17 жизненного цикла для класса Application. Нет механизмов для созранения состояния singleton-окружения и тд.и тп.

    А когда вы пишете на Qt - у вас гарантирована поддержка единых механизмов для всех платформ.
    Вам не надо перекраивать мозг, выработанные решения и отлаженные и проверенные паттерны.
    В итоге - писать на Qt - может статься и будет быстрее. В ряде случаев.
    Но из Qt - может быть сложно поиметь доступ к сугубо-андроидным сервисам типа поставщика данных.

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

    2. Инструментарий разработки для C++ однозначно хуже такового для Java в силу, опять-таки, особенностей языка.

    Простите, но тоже малообоснованное утверждение. См пункт 1.

    Кроме того, отмечу:
    Qt-шный инструментарий позволяет вам получать одинаковое поведение на всех поддерживаемых платформах. Включая поведение GUI, Форм и одинаковую для всех систем архитектуру приложения. В идеале - с Qt - вы можете писать под Андроид так, как будто вы пишете под десктоп - не меняя архитектуру и структуру приложения.

    А когда вы пишете под Android на Java - вы всегда пишете кусок кода работающий в колнтексте DalvikVM и должны жить по предусмотренным данной машиной паттернам и сценариям, причем многие аспекты того "как это работает" - явно мало где прописаны. И если вдруг вы отсутпаете от стандартных шаблонов фреймворка Dalvik-машины - вы рискуете отгрести непонятные, трудно отловимые косяки, причем _вне_ вашего контроля, которые вы не можете корректно перехватить и обработать. Кто не знает - попробуйте уничтожить ViewGroup, id которого вы использовали как контейнер для размещения внутри него фрагмента. Как только вы делаете FragmentTransaction.commit() - вы ставите машине задачу, которую она будет выполнять "когда-то позже", вне вашего контроля, и не соизволит позволить вам корректно обработать исключение. Вплоть до возникновения ситуации, когда фрагмент пытается быть добавленным в Activity который уже отработал стандартные процедуры по Activity.finush(). Ладно бы оно выкинуло код ошибки куда, и тихо проигнорило - но это же Java - она выкинет исключение. А обернуть это дело в try...catch - вы не сможете - это не ваш кусок кода. Максимум что вы сможете - это "поймать перед смертью" Thread.UncaughtExceptionHandler. И все.
    (если я не прав - поправляйте меня, я же тоже не инженер гугля)

    3. Java - родная платформа для Android. Отсюда потенциальные проблемы с совместимостью у Qt.

    Вот зачем вы занимаетесь запугиванием?
    Android NDK (для разработки на С++) такой же родной как как и Android SDK (для разработки на Java).

    И с совместимостью у Qt с платформой Android проблем не больше, чем у любого другого приложения, которое использует вставки C++ кода и разработано с использованием стандартного Android NDK.

    --------------------------------------------
    Резюмируя: автору надо просто взвесить что зачем и как он собирается использовать.
    Если автору нужно одинаковое поведение на различных платформах - включая огрызочные поделия, Linux, разные Windows RT недопланшеты - то выбор ознозначен - курите Qt. Это возхитительнейший, ясный, хорошо продуманный и максимально логичный фреймворк, который не побоялись пересоздать с нуля ради устранения накопленных сложностей (вспоминайте переход с Qt3 на Qt4) Лично я приходил в восторг, когда работал с ним (2005-2009 гг)

    Но - в части Андроидного приклада : подозреваю, могут быть "технические риски" с использованием каких-либо особых "мобильных кусков" типа "работа со звонками, "работа с контактами", "работа с почтой" или "поставщиками контента", и пр.
    Я отошел от мира Qt когда Qt был 4.8 и я не искал там классы которые этим занимаются. Думаю что-то потомки троллей должны были создать в 5.2, но лучше проверить.
    В крайнем случае - может потребоваться стыковка с джава-объектами, и тут вам потребуется изучать Android NDK, и возможно даже писать немного оберточного кода на Java.

    Если же вам _нужна_ обязательная работа с описанными выше функциями, а на переносимость исполняемого кода - наплевать, или же у вас _уже_ есть опыт разработки с Android SDK - то конечно писать лучше на Java.

    Но в этом случае бутьте готовы к тому, что это не JavaVM, и сохранности ссылок _для_ряда_классов_ вам никто не обещает, а т.к. Java не предполагает наличия деструктора - вы _будете_ иметь определенные архитектурные сложности при построении сложных приложений.
    Например то, что в десктоп-приложении вы решили бы "простым" "синглтон-объектом" с простой функциональностью типа записал-прочитал из файла - тут вам _придется_ решать путем построения "поставщика контента" и т.п. - что значительно повышает "порог входа" для тех кто погруждается в разработку для Android.

    Но - надо отдать должное инженерам гугля - у них _были_ весомые основания поступать итак, и они максимально вас обезопасили от попадания в многие проблемы - если, конечно, вы используете фреймворк именно так, как это предполагается. И сделали многие механизмы достаточно элегантными, и приятными в использовании. Дизайн гуглековских классов мне в большей части нравится. В общем не забывайте понимать почему в примерах делается именно так как делается, а не иначе.
    Ответ написан
    5 комментариев