понеділок, 16 листопада 2015 р.

Java Collections: Map


     Map є частиною Java Collections Framework (docs.oracle.com). 
  • Map зберігає як ключі, так і приєднані до них дані, на відміну від Set, який зберігає тільки дані;
  •  не містить дублікати ключів;  
  • ключ може вказувати тільки на один єдиний відподний йому набір даних (набір даних -> клас);
  • залежно від імплементації, Map може або не може містити null;
  • Map - це інтерфейс, конкретні його реалізації  в Java SDK: HashMap, TreeMap, LinkedHashMap, а також інші;
  • Інтерефйс містить декілька методів, які не є обовязковими для імплементування (optional operation);
  • методи доступу до даних:

    Value get(Object ключ)
    • повертає дані, на які вказує цей ключ;
    • АБО null якщо Map не містить даного ключа;
    • АЛЕ, увага, якщо імплементація дозволяє nulls, то результат null ще не значить, що ключа немає в Map. В такому випадку перевірити наявність ключа можна методом containsKey ;
    Value put(Key ключ, Value дані)
    • якщо раніше цього ключа не було в Map - зберігає ключ та дані в Map і повертає null;
    • якщо ключ вже знаходиться в Map - знищує старі дані і записує нові, повертаючи значення старих даних;
    • АЛЕ, увага, якщо імплементація дозволяє nulls, то результат null ще не значить, що ключа не існувало в Map. Це може також значити, що ключ існував і його дані мали значення null.
    Value remove(Object ключ)
    • якщо ключ вже знаходиться в Map - знищує значення ключа та відповідні йому дані, повертаючи значення даних;
    • якщо цього ключа не було в Map - нічого не виконує і повертає null;
    • АЛЕ, увага, якщо імплементація дозволяє nulls, то результат null ще не значить, що ключа не існувало в Map. Це може також значити, що ключ існував і його дані мали значення null.

неділя, 15 листопада 2015 р.

Java Podcasts

     Про Java можна не тільки читати, але і слухати. Заодно і рівень англійської мови покращиться. Тут можна знайти підбірку декількох подкастів -  player.fm.

     Наразі мені сподобався ось цей - Java Pub House.








четвер, 12 листопада 2015 р.

Eclipse: The declared package does not match the expected package

     В моєму випадку я трохи реорганізував структуру директорій проекту, тому дерево пакетів із кодом не відповідало фізичній структурі каталогів проекту, і відповідно старі пакети вже не знаходилися в Java build class path.  Вихід - потрібно перепризначити Java build class path.





вівторок, 13 жовтня 2015 р.

Розмістити існуючий локальний проект на GitHub

     Мета - розмістити ваш існуючий локальний проект на GitHub (github.com).

     Для цього спочатку потрібно створити пустий репозитарій на GitHub.



     При створенні GitHub запитає вас, чи бажаєте ви включити до репозитарію файли  README, license, .gitignore. Зараз краще їх не доєднувати, в разі потреби ви зможете це зробити пізніше, після того, як завантажите свій локальний проект в GitHub.



     В кінці GitHub покаже вам команди Git, які ви можете скопіювати і виконати в командній стрічці Windows (або в Git Shell).


     Для цього на вашому ПК запустіть командну стрічку Windows, перемістіться до директорії, в якій знаходиться прихована директорія .git вашого проекту:

cd <path-to-git-project-file>

     Виконайте команду (atlassian.com):

git remote add <repository-synonym> <git-hub-url>
 
     Ця команда всього-навсього створить синонім до URL-адреси репозитарію. Поширеною практикою є називати центральні репозитарії origin.

     Потім власне ви можете опублікувати локальний проект на серверi GitHub командою:

git push -u <repository-synonym> --all


Ключ -u (або  --set-upstream) - створить референс до репозитарію, що потім дозволить використовувати деякі команди в скороченому вигляді, без зазначення URl-адреси репозитарію (наприклад, git pull). 

субота, 26 вересня 2015 р.

Default password for SYSMAN

     Хто не в курсі, всі версії Oracle DB тепер можна безкоштовно встановити на свій ПК, якщо використовувати базу не в комерційних цілях.

     Після встановлення бази даних Oracle потрібно виконати деякі налаштування. Для цього можна використасти web-кліент Oracle Enterprise Manager Database Express увівши в браузері http://localhost:port_number/em.

     В доцументації пишуть, що для входу в менеджер потрібно ввести користувача SYSMAN, пароль для якого ви повинні були задати під час встановлення бази даних (docs.oracle.com). Але я такого не пам'ятаю. Задавав двох системних користувачів SYS i SYSTEM, але не SYSMAN.

     Довго рився в інтернеті, але так і не знайшов вирішення. На форумі Oracle  тема з такою назвою нічого крім «розумних відповідей» не дала (community.oracle.com):

This thing called the Internet - something called Google.

   Зрештою, довго вдивляючись в діалог для вводу імені-паролю,  ввів дані системного користувача, який був ініціалізований під час встановлення - один з двох,  SYS або SYSTEM. Працює.

понеділок, 14 вересня 2015 р.

ORA-12705: cannot access NLS data files or invalid environment specified

     Можлива причина, особливо для неангломовних користувачів, змінна середовища NLS_LANG може містити неприпустиме значення мовних налаштувань (мова, територія, набір символів (language, territory, or character set)).

     Можливе вирішення проблеми - програмна установка локальних налаштувань, наприклад, десь в класі ініціалізації роботи з базою даних:

 
1
static {Locale.setDefault(Locale.ENGLISH);}


     Інші ігри із ключем NLS_LANG в реєстрі \HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE для моєї кириличної системи нічого не дали. Серед порад зустрічав:
- просто переіменувати ключ NLS_LANG;
- змінити його значення на AMERICAN_AMERICA.CL8MSWIN1251.

Spring, Hibernate, Maven: java.lang.ClassNotFoundException: oracle.jdbc.OracleDriver

     Відповідь взята з форуму stackoverflow.com.

     У вас виникла помилка, спричинена відсутністю драйвера oracle.jdbc.OracleDriver:

type Exception report
message Request processing failed; nested exception is org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is org.hibernate.exception.GenericJDBCException: Could not open connection
description The server encountered an internal error that prevented it from fulfilling this request.
exception
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is org.hibernate.exception.GenericJDBCException: Could not open connection
 org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982)
 org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
 org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)