Метка: Java

  • Работа с Maven + Tomcat

    Maven и Tomcat


    Ни для кого не секрет, что maven-ом можно деплоить проекты в Apache Tomcat.
    Правда многие разработчики все-таки используют функции, встроенные в среду разработки (в Netbeans – из коробки, в Eclipse – ставим плагин).
    Это удобно и просто, но к сожалению, мне приходится часто “перескакивать” с разных IDE и поэтому в некоторых своих проектах я предпочитаю сразу настроить tomcat:deploy.
    (далее…)

  • Немного об OAuth, Android и Facebook

    OAuth авторизация

    OAuth – по определению означает Open Authorization. Поскольку в английском языке слова аутентификация (authentication) и авторизация (authorization) имеют одинаковое начало auth, то сокращение oauth очень неоднозначное. Эти понятия (авторизацию и аутентифакцию) очень часто путают друг с другом.
    Например OpenID – это система для аутентификации.

    Очень кратко про аутентификацию и авторизацию (т.к. это простые и занудные понятия).
    (далее…)

  • OrderBy или OrderColumn

    Между JPA аннотациями OrderBy и OrderColumn существует огромная разница. (далее…)

  • Java 7. Завершение обзора проекта “Монета”.

    В двух постах до этого описал некоторые новшества из Project Coin – Java 7, а именно:

    1) Дельфин, монета и бриллиантовый оператор.
    – Improved type inference for generic instance creation (diamond)
    – try-with-resources statement

    2) Java 7. Строки в переключателе
    – Strings in switch

    Сейчас хотел описать три оставшихся нововведения:

    – Целые числа в двоичном представлении и подчеркивание (Binary integral literals and underscores in numeric literals).
    – Возможность ловить несколько разных исключений и более точная переброска (Multi-catch and more precise rethrow).
    – Упрощенный вызов методов с переменным количеством аргументов (Simplified varargs method invocation).

    1. Целые числа в двоичном представлении и подчеркивание.

    (далее…)

  • Java 7. Строки в переключателе


    В предыдущей статье я написал про некоторые новшества в Java 7
    (входящие в Project Coin) а именно:

    – Бриллиантовый оператор (Improved type inference for generic instance creation diamond)
    – Автоматически закрывающиеся ресурсы (try-with-resource).

    Конечно, это очень приятные вещи, но больше всего я рад появлению Strings in switch!
    Возможность использовать строки в switch люди ждут уже (далее…)

  • Дельфин, монета и бриллиантовый оператор.

    Релиз Java 7 должен выйти 28 Июля.
    В связи с этой знаменательно датой, я наконец-то решил посмотреть, что нас всех ждет. Поскольку в последнее время в основном занимаюсь Scala, то на новые языковые фичи в Java не обращал серьезного внимания (только на тусовках java-программистов, плюс поглядывал что пишут в разных блогах жависты).

    Итак Java 7.
    Продолжая традиции именования (Java 5 – тигр, Java 6 – мустанг), у нового релиза кодовое имя “Дельфин”.
    Список фич можно посмотреть здесь: http://www.oracle.com/technetwork/java/7-138633.html.

    Технических новшеств очень много. Среди них самое интересное место занимает так называемый “Проект Монета (Project Coin)“.
    (далее…)

  • do while false

    “Делать пока ложно”.

    Пару дней назад пытался кратко рассказать товарищу через аську про использование
    do { } while(false); для переписывания длинных ветвящихся if-ов.

    Кратко объяснить не получилось, в итоге решил написать в блоге.

    Метод довольно спорный, хотя и встречается в некоторых авторитетных источниках (например
    в “Совершенном Коде” С. Макконела).

    Идея довольно простая.
    0. Код помещаем в “do { …много_кода… } while(false);” блок. Если что-то не так вызываем break.
    1. Оператор break перекинет нас в конец блока do.
    2. Поскольку указан while(false), то повторного выполнения кода не будет.

    Конечно можно использовать для таких целей исключения, вспомогательные переменные и т.д., но думаю полезно знать и про такой способ, ведь некоторые его используют.
    Обычно он подходит для ситуаций когда идут ветвящиеся проверки if-else, а потом (если все хорошо) делается что-то сложное или важное.

    Примитивный (выдуманный) пример:

            boolean error = false;
            if (x > 10) {
                error = true;
            } else if (x > 0 && x < = 10) {
                y = foo();
                if (y > 0 && y < 10) {
                    error = true;
                } else {
                    x = y;
                }
            } // много if-else кода
            
            if (!error) {
                doSomething(x, y);
            }
    

    С помощью break-ов такой код приобретает более понятный (не для всех!) вид.

        do {
                if (x > 10) {
                    break;
                } 
                
                if (x > 0 && x < = 10) {
                    y = foo();
                    if (y > 0 && y < 10) {
                        break;
                    } else {
                        x = y;
                    }
                }
                // много кода для проверок
                doSomething(x, y);
            } while (false);
    
  • Мои хинты для Netbeans 7

    Недавно нужно было заново установить Netbeans 7.
    Вот некоторые действия, которые всегда приходится делать после установки “коробочной” версии,
    а именно: поддержка Scala, интерфейс на английском и quick file chooser.

    Установка

    Заходим на официальный сайт: netbeans.org
    Нажимаем на [Download FREE] и переходим на ссылку http://netbeans.org/downloads/index.html
    Скачиваем, устанавливаем и запускаем.

    Итак, что приходится делать:

    0. Обновления.

    На всякий случай проверить наличие обновлений:
    Меню → Help → Check for Updates

    1. Русский → English

    Чтобы вернуть обратно английский нужно:
    – Найти файл “netbeans.conf” (для Windows-пользователей: он должен находится где-то здесь – “C:\Program Files\NetBeans 7.0\etc\” )
    – Указать в настройках –locale en:US

    netbeans_default_options="МНОГО_БУКВ   --locale en:US"
    

    UPD: Почистить домашнюю папку “.netbeans/7.x” перед сменой локали, а то “Службы” и некоторые другие сообщения могут остаться на русском. Предварительно сделайте бэкап.

    2. File Chooser

    Сразу же установить плагин Quick File Chooser:
    Меню → Тools → Plugins → Available Plugins
    Это намного более шустрый и удобный (на мой взгляд) диалог для выбора файлов.

    3. Scala

    Ставим plugin для работы со Scala.
    Для версии 2.8.x: http://plugins.netbeans.org/plugin/36598/nbscala-2-8-x
    Подробнее можно прочитать на вики нетбинсов:
    http://wiki.netbeans.org/Scala
    или на портале с плагинами:
    http://plugins.netbeans.org/

  • EncryptableProperties и защита от дурака

    Все знают, что не следует хранить в конфигурационных файлах (например properties) критически важную информацию в открытом виде.
    Например логины и пароли от базы данных, почты и т.д.
    Не стоит этого делать, т.к. “случайный” сисадмин или пользователь сможет открыть этот ваш файлик и увидеть пароль.

    С учетом того, что довольно часто пароли придумывают люди, то запомнить их бывает очень просто.
    Более того, некоторые пароли настолько поражают воображение, что их очень сложно забыть. Как правило они выглядят так: 123456, sa, manager и т.д…
    Конечно это личное дело каждого, но выставлять на обозрения такие свои пароли, как-то не совсем прилично.

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

    Как вариант можно использовать Jasypt. Этот довольно большой проект и его можно использовать и в других целей, но мы будем разбирать простой и конкретный случай: предотвратить хранение паролей в открытом виде в properties файле.
    Главное, что нужно понимать, мы не строим защиту от серьезного злобного хакера, а делаем простую защиту от дурака!

    Для этого: (далее…)

  • Main args, netbeans

    Пара простых вещей (про аргументы командной строки + Java/Scala и чуть-чуть про NetBeans)

    Самый популярный и набивший оскомину пример HelloWorld встречается, наверное, уже во всех учебниках по программированию:

    // Пример из туториала: http://download.oracle.com/javase/tutorial/getStarted/application/index.html
    class HelloWorldApp {
        public static void main(String[] args) {
            System.out.println("Hello World!"); // Display the string.
        }
    }
    

    Здесь String[] args — аргументы командной строки.
    Например:
    java HelloWorldApp 1 2 означает, что args будет равно {“1”, “2”}.

    Рассмотрим как работать с этими аргументами.
    Если передается всего один аргумент (например, “debug”), то все очень просто — можно подсмотреть пример из туториала: cmdLineArgs.

    В случае, если аргументов много (как в гнусных линуксовых командах), то можно использовать какую-нибудь готовую библиотеку:

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

    В том случае, если аргументы не такие сложные и не слишком простые, а что-то среднее, то тянуть для этих целей дополнительную библиотеку нет никакого смысла. Например, если нужно передать что-то вроде: “-x -size 1024 -v”.
    Обычно это бывает, когда требуется небольшая, почти “одноразовая” программа…

    Многие настолько не любят писать разбор таких аргументов, что лепят все параметры в системные свойства (java … -Dfoo=”some string”), чтобы потом дергать их через System.getProperty().
    Это конечно удобно, но не всегда нормально.

    Проще написать разбор обычными стандартными средствами:

    public class App {
    
        public static void main(String[] args) {
            boolean v = false, x = false;
            int size = 0;     
            for (int i=0;iSnippet: Match Arguments.
    Что-то очень сложное – подключаем сторонние библиотеки для разбора аргументов командной строки (ту же апачевскую или jopt).
    В том случае, если что-то среднее, то можно написать на чистой Scala:

    object App  {
      def main(args:Array[String]) = {
          var v = false; var x = false; var size = 0   
         ("" +: args :+ "") reduceLeft ( (i, j) => {
            i match {
              case "-v"     => v = true
              case "-size"  => size = j.toInt
              case "-x"     => x = true
              case _ =>
            }; j
         })
        println("v =" + v )
        println("x = " + x)
        println("size = " + size)
       }
    }
    

    Пару слов про reduceLeft. По сути этот тот же foldLeft, только начинается с первого элемента коллекции. Подробнее можно почитать в Scala API по работе с коллекциями.

    Про другую известную многим фишку, о которой хотел рассказать — макросы в NetBeans-ах.
    Точнее, про самый популярный макрос - debug-var. Вызывается по нажатию: Ctrl-J D.
    Вообще макросы в нетбинсах есть уже много лет, по-крайне мере, когда я только начинал использовать нетбинс (3.* версии), они уже там были.
    Например, для Scala можно сделать макрос, который будет вставлять в код: println("var=" + var)

    Настроить можно здесь:
    Tools -> Option -> Editor -> Macros

    Про другие полезные макросы можно почитать здесь