powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Клиент-серверное приложение "Библиотека"
88 сообщений из 88, показаны все 4 страниц
Клиент-серверное приложение "Библиотека"
    #38746785
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это учебная задача. Делаю сам для себя, чтобы как можно лучше вспомнить java, освоить новые технологии и подтянуть SQL.
На эту тему я создавал 2 темы
http://www.sql.ru/forum/1114571-a/sozdal-bazu-dannyh-dlya-osvoeniya-sql
http://www.sql.ru/forum/1114581/para-voprosov-po-sintaksisu

Сейчас я приступаю непосредственно к разработке клиентской и серверной части довольно большой библиотеки.
Как она бужет у меня выглядеть.
1. БД на MySQL
2. Сервер, который взаимодействует с БД и клиентскими приложениями.
3. Клиентские приложения, установленные у библиотекарей у на их рабочем месте.

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

И вот тут у меня возникает 1-й вопрос, с помощью какой технологии лучше всего осуществить это взаимодействие . Допустим у нас локальная сеть, в которой 1 сервер и на разных компах установлены 5-10 клиентских прог. Я тут подумываю о JMS, т. к. по описанию вроде подходит и я был бы не прочь освоить эту технологию.
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38746795
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Geronemo1. БД на MySQL
2. Сервер, который взаимодействует с БД и клиентскими приложениями.
3. Клиентские приложения, установленные у библиотекарей у на их рабочем месте.

Чтобы такую фигню не расписывать, изучаем термины
2-tier
3-tier
thin client

GeronemoЕсли бы библиотека была маленькой, то п. 1, 2, 3 можно было бы разместить на одном компе, но я специально сам себе усложнил задачу, чтобы клиентские проги были отделены от сервера и между ними было какое-то взаимодействие.

Ничего не понял. При чем здесь "маленькая большая"? Как вы что собрались размещать? База и Java сервер размещаются хоть на одном физическом серверех, хоть на разных, это не принципиально. Клиент, в подавляющем большинстве случаев - удаленное приложение. Но для разработки все 3 компанента можно на одном сервере запускать. Но о чем это вообще, понять сложно.

GeronemoИ вот тут у меня возникает 1-й вопрос, с помощью какой технологии лучше всего осуществить это взаимодействие . Допустим у нас локальная сеть, в которой 1 сервер и на разных компах установлены 5-10 клиентских прог. Я тут подумываю о JMS, т. к. по описанию вроде подходит и я был бы не прочь освоить эту технологию.
Клиент-клиент взаимодействия лучше всегда реализовывать через сервер. Который сможет правильно эти взаимодействия синхронизировать, если они вдруг конфликтуют.
JMS это асинхронные очереди сообщений. К тебе особого отношения не имееют.
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38746797
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Geronemo с помощью какой технологии лучше всего осуществить это взаимодействие .
https://ru.wikipedia.org/wiki/RabbitMQ
))
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38746968
Фотография Judo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самое интересное начинается когда наворачиваем горизонтальное масштабирование для пункта 2.
Вот тогда синхронизация между узлами серверов (не трогая СУБД) заставляет попотеть )
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38746998
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczGeronemo1. БД на MySQL
2. Сервер, который взаимодействует с БД и клиентскими приложениями.
3. Клиентские приложения, установленные у библиотекарей у на их рабочем месте.

Чтобы такую фигню не расписывать, изучаем термины
2-tier
3-tier
thin client


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

У меня вопрос по взаимодействию между клиентами и сервером. Я специально не хочу делать HTTP запросы на Сервлет, т. к. этой темой я уже владею и хочу что-то новое. Ну и для большей ясности проекта надо сказать, что клиентские программы будут находиться в одной сети с сервером за фаерволлом. Думаю этот нюанс имеет значение, по сравнению с ситуации, когда клиентом может оказаться кто угодно, откуда угодно.

...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38747005
Фотография Judo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Geronemo ...
Ну и для большей ясности проекта надо сказать, что клиентские программы будут находиться в одной сети с сервером за фаерволлом
Думаю этот нюанс имеет значение, по сравнению с ситуации, когда клиентом может оказаться кто угодно, откуда угодно.
Для хорошего(безопасно сделанного) клиента - не должно иметь значения.
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38747010
Фотография Judo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Geronemo У меня вопрос по взаимодействию между клиентами и сервером. Я специально не хочу делать HTTP запросы на Сервлет, т. к. этой темой я уже владею и хочу что-то новое.
Напиши DSO под Linux под Apache - вот это будет experience! )
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38747026
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GeronemoВы как-то ехидно отвечаете на вопрос.

Когда два абзаца укладываются в три слова "пишу 3-tier систему", то сложно удержаться.

GeronemoПо-моему я довольно внятно на пальцах описал как будет выглядеть проект.
По-вашему. А по-моему написано "пишу 3-tier систему "Библиотека"" и дальше что-то неразборчивое.

GeronemoУ меня вопрос по взаимодействию между клиентами и сервером.
Вот это уже понятно. А вот в изначально формулировке:

Geronemoчтобы клиентские проги были отделены от сервера и между ними было какое-то взаимодействие
Не понятно что за "между ними"? Между клиентами? Тогда это интересный вопрос. Между клиентом и сервером? Тогда тут вариантов не много.

GeronemoЯ специально не хочу делать HTTP запросы на Сервлет, т. к. этой темой я уже владею и хочу что-то новое.
Смело. Асинхронные сервлеты из 3.0 тоже освоены?

Geronemo Ну и для большей ясности проекта надо сказать, что клиентские программы будут находиться в одной сети с сервером за фаерволлом. Думаю этот нюанс имеет значение, по сравнению с ситуации, когда клиентом может оказаться кто угодно, откуда угодно.
И вот тут начинается самое интересное. Либо мы заинтересованы в клиенте, тогда мы используем любой протокол поверх HTTP и наш транспорт работает всегда и везде. Либо нам очень нужна производительность и тогда мы используем Socket Server.

Вопрос сводится к "Пишу 3-tier систему для обучения. Посоветуйте на чем писать сервер помимо Servlet API". Вот это было бы понятно.
И вот тут уже ответ сводится к нескольким составляющим
- Транспорт - тут вариантов не много: HTTP либо TCP/UDP.
- Протокол - из актуальных: JSON, Java binary Serialization, protobuf, свой собственный.
- Framework/API - здесь уже выбор богатейший, но зависит от того что мы выбрали в качестве протокола и транспорта.
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38747232
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я тут подумал, а не лучший ли вариант вот этот

Blazkowiczthin client


Вся работа с БД, логика и даже интерфейс того, что мы видим на экране будет делаться/задаваться сервером, а веб-клиенты будут просто отображать информацию, которую им предоставит сервер.
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38747254
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GeronemoИ вот тут у меня возникает 1-й вопрос, с помощью какой технологии лучше всего осуществить это взаимодействие . Допустим у нас локальная сеть, в которой 1 сервер и на разных компах установлены 5-10 клиентских прог. Я тут подумываю о JMS, т. к. по описанию вроде подходит и я был бы не прочь освоить эту технологию.

БД на MySQL -- на MySQL, и БД

Сервер, который взаимодействует с БД и клиентскими приложениями. -- любой сервер приложений, типа JBOSS/TOMCAT и какой-то фреймворк, который позволит строит WEB-приложение. На самом деле вроде бы тебе нужно MVC, значит --уже не любой фреймворк.

Клиентские приложения, установленные у библиотекарей у на их рабочем месте. -- WEB-броузер.
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38747256
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Geronemoнас локальная сеть, в которой 1 сервер и на разных компах установлены 5-10 клиентских прог. Я тут подумываю о JMS,



JMS тут -- самая неподходящая технология. Ну её никуда не запихать.
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38747313
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivGeronemoИ вот тут у меня возникает 1-й вопрос, с помощью какой технологии лучше всего осуществить это взаимодействие . Допустим у нас локальная сеть, в которой 1 сервер и на разных компах установлены 5-10 клиентских прог. Я тут подумываю о JMS, т. к. по описанию вроде подходит и я был бы не прочь освоить эту технологию.

БД на MySQL -- на MySQL, и БД

Сервер, который взаимодействует с БД и клиентскими приложениями. -- любой сервер приложений, типа JBOSS/TOMCAT и какой-то фреймворк, который позволит строит WEB-приложение. На самом деле вроде бы тебе нужно MVC, значит --уже не любой фреймворк.

Клиентские приложения, установленные у библиотекарей у на их рабочем месте. -- WEB-броузер.


Как думаете Glassfish4 + Spring хорошо подходит в моем случае (а у меня 2 важных критерия - чтобы подходило по предметной области и чтобы были технологии, с которыми я раньше не имел (мало имел) дела).
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38747314
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
читаю и удивляюсь, можно же из довольно простых вещей делать такие сложные системы, главное ведь "как" преподнести, а сколько умных фраз:-) а в итоге все сводится к: связующий фреймворк (пусть даже Servlets), представление(jsp), сервер, и база.
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38748009
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем, я решил делать проект на основе thin client, сервер - Glassfish4

Читаю http://habrahabr.ru/post/192434/

и создал вот такой input_number.xhtml файл

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
  <?xml version="1.0" encoding="UTF-8"?>
  
  <!DOCTYPE html
        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  
  <html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html">
  
  <h:head>
  </h:head>

<h:head>
  <title>JSF Demo</title>
</h:head>


  <h:body>
    <h:outputText value="METERS TO INCHES CONVERSION"/><br/><br/>
    <h:outputText value="Enter amount in meters (m):"/> 
    <h:inputText size="16"/><br/><br/>
    <h:commandButton value="Convert into inches"/>
  </h:body>
  
</html>



Все работает, но почему-то кнопка (я текст выделил жирным шрифтом) имеет размеры 20 на 5 пикселей примерно. При этом я добавлял всякой отсебятины, типа width="100" height="20", но все равно видна только маленькая часть кнопки.
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38748065
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Geronemo,
JSF каким боком к сабжу?
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38748091
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Geronemo, может потому что ты ее запихнул в b тег
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38748098
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
публикация вроде не старая, а ауткамы на оcнове xml - не феерично
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38748100
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rema174публикация вроде не старая, а ауткамы на оcнове xml - не феерично

да и Glassfish говно
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38748117
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rema174Geronemo, может потому что ты ее запихнул в b тег
я этот тэг запихнул только тут, хотел выделить жирным шрифтом, не сработало.

Вот текст

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
<h:body>
    <h:outputText value="METERS TO INCHES CONVERSION"/><br/><br/>
    <h:form>
        <h:commandButton  text="Convert into inches"/>
        <h:outputText value="Enter amount in meters (m):"/>
        <h:inputText size="16"/><br/><br/>
        <h:commandButton value="Convert into inches"/>
    </h:form>
</h:body>



забыл никrema174публикация вроде не старая, а ауткамы на оcнове xml - не феерично

да и Glassfish говно

а чего там говняного ? Я попробовал сунуться в ASP.net, но понял, что мне понадобится очень много времени на освоение. Проект сервлетов под Томкат у меня есть. Я хочу что-то новое и чтобы работало.
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38748120
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никда и Glassfish говно
А вот у BMW обязателен к использованию. Видать на откатах в Oracle Support сидят. :D
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38748158
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Geronemo,
попробуй такое
Код: html
1.
2.
3.
<h:form>
   <h:commandButton value="Click Me!" onclick="alert('Hello World!');" />
 </h:form>
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38748179
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rema174Geronemo,
попробуй такое
Код: html
1.
2.
3.
<h:form>
   <h:commandButton value="Click Me!" onclick="alert('Hello World!');" />
 </h:form>



Попробовал. Вот, что получается. Там где курсор, это и есть кнопка commandButton
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38748181
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Курсора почему-то на Принтскри не нету. Кнопка это голубенькая хрень под словом Hello.
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38748187
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Geronemo,
я чет не понял, это что интернет эксплорер? )
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38748194
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rema174,

да, в Хроме то же самое
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38748202
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
возможно из-за того что на странице лишний тег h:head
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38748204
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Geronemorema174,

да, в Хроме то же самое

В опере заработало lol
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38748225
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GeronemoВ опере заработало lol
В Хроме вдруг тоже заработало. В IE все так же помойка. Вероятно надо его обновить, х. з. Файрфокс не получается проверить, т. к. он у меня portable, вылетает какая-то ошибка при попытке запустить через него.

В общем буду юзать те браузеры, где "работает".
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38748228
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rema174возможно из-за того что на странице лишний тег h:head
Пробовал убрать, это не влияет.
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38748455
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Geronemorema174возможно из-за того что на странице лишний тег h:head
Пробовал убрать, это не влияет.
в хроме есить инструменты разработчика.
в мозиле есть плагины валидации
эти инструменты позволяют находить ошибки
лучше переходи на jsp
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38755780
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я тут нарисовал схему БД (т. е. часть ее, посвященная книгам).
В центре внимания у нас находится "Литературное произведение". Он связано 1toMany с таблицей "Писатели", т. к. одно произведение могут написать несколько авторов.
И также оно связано отношением ManyToMany с таблицей "Книги", т. к. в одной книге могут быть много произведений и точно также 1 книга может состоять из нескольких томов.
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38755814
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько я не помню библиотеку родного универа, единицей учёта является каталожный номер. И это всегда одна книга, даже если произведение состоит из нескольких томов.
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38759520
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО
JSF - тормозной, сделайте лучше так:
Браузер-Vaadin-EJB-JPA/ORM-База данных.

Потом можно еще добавить кэш(memcached) и отчеты (jasperreports)
Это все, как вы и хотели можно разнести по разным физически серверам(связь по socket) и каждую в отдельности объединить в кластер.
Глассфишу я бы предпочел jboss.
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38759542
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
no56892ИМХО
JSF - тормозной, сделайте лучше так:
Браузер-Vaadin-EJB-JPA/ORM-База данных.
вы же только что комментировали сайт на jsf, все шустренько работает
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38759555
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rema174,
Дак там три с половиной контрола на странице...Вот когда автор нормально доделает, тогда посмотрим будет ли так же шустренько.
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38759564
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
no56892,
на самом деле у меня тоже есть вопросы jsf, например вот сайт – не перегружен, но интерфейс не очень отзывчивый
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38760134
DPH3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
no56892ИМХО
JSF - тормозной, сделайте лучше так:
Браузер-Vaadin-EJB-JPA/ORM-База данных.

Потом можно еще добавить кэш(memcached) и отчеты (jasperreports)
Это все, как вы и хотели можно разнести по разным физически серверам(связь по socket) и каждую в отдельности объединить в кластер.
Глассфишу я бы предпочел jboss.

Я вот пытаюсь понять, я не уловил иронию или это был серьезный совет?
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38847266
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Небольшая реинкарнация темы.

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

Итак, у нас 3-tier система
1. БД на MySQL
2. Сервер (Spring), который общается с БД используя JPA и имеющий RMI-сервисы
3. Клиент, который отвечает за UI и дергает RMI-Сервисы, тем самым получая и отправляя данные.
Сервер и клиент используют maven

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

Для начала у меня вопрос - как запустить серверное приложение, чтобы оно постоянно висело в памяти и ждало обращений от клиента, а не так, чтобы метод main отработал и приложение закрылось. Возможно надо унаследоваться от кого-нибудь. В рабочем проекте, я смотрю это реализовано так - public class App implements org.apache.commons.daemon.Daemon;
Есть ли лучшее решение ?
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38847286
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GeronemoДля начала у меня вопрос - как запустить серверное приложение, чтобы оно постоянно висело в памяти и ждало обращений от клиента, а не так, чтобы метод main отработал и приложение закрылосьНаписать некий цикл внутри main.
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38847324
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GeronemoСервер и клиент используют maven
вообще-то, это проект использует мавен, а не сервер и клиент.
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38847325
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GeronemoДля начала у меня вопрос - как запустить серверное приложение, чтобы оно постоянно висело в памяти и ждало обращений от клиента, а не так, чтобы метод main отработал и приложение закрылось. Возможно надо унаследоваться от кого-нибудь.
бред.
сделай хотя бы сервлет-хелломорду, а потом будеш браться за свою "систему"
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38847669
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня почему-то в web.xml клиента вот такие строчки вызывают runtime error
Код: java
1.
2.
3.
4.
5.
6.
7.
    <listener>
        <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
    </listener>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>



Перерыл весь инет, советуют что-то прописать в pom.xml. Но ничего не помогло. У кого-нибудь есть идеи ?

SEVERE: Error configuring application listener of class org.springframework.web.context.request.RequestContextListener
java.lang.ClassNotFoundException: org.springframework.web.context.request.RequestContextListener

SEVERE: Error configuring application listener of class org.springframework.web.context.ContextLoaderListener
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38847670
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как это ClassNotFoundException

Все классы на месте, никакой красноты в коде не наблюдается. По нажажати. ctrl + mouse можно перейти в библиотеку spring-web-3.0.5
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38847673
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Походу при проведении резюме уже пора добавлять такую абилку как умение смотреть логи. печально
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38847677
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Логи не помогли, а вот кропотливая перепроверка всех файлов конфигураций помогла, но теперь ошибка переехала в другое место. У меня тут сложности с тем, что я делаю проект, используя как основу 2 других проекта, пытаясь от каждого из них взять что-то. В итоге получается много модулей, которые я хочу с собой связать и постоянно вылетают такого рода ошибки.
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38847949
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я целый день потратил, чтобы настроить как надо проект, но такое ощущение, что это была борьба с ветряными мельницами. Добавляю maven зависмость в одном месте, начинает вылетать ошибка в другом. Добавляю еще одну, снова ошибка где-то еще. Гуглю, изучаю, правлю. И вылетает ошибка, которая была в самом начале. В общем, я забил на этот rmi, решил упростить проект (у меня тут же вопрос возник, а нужен ли rmi в подобном проекте вообще).

Изучив статьи на тему Spring, JPA, я решил сделать вот такое.

@Entity
@Table(name="writer")
public class WriterDomain
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="authorId")
private Long authorId;
.........}

public interface WriterRepository extends CrudRepository<WriterDomain, Long> { }

@Service
public class WritersServiceImpl implements WritersService {

@Autowired
private WriterRepository writerRepository;

public List<WriterDto> findAll() {
Iterable<WriterDomain> listOfWriterRecords = writerRepository.findAll();
List<WriterDto> listOfWriters = new ArrayList<>();
...........
return listOfWriters;
}


public interface WritersService
{
public List<WriterDto> findAll();
}

И теперь возник вопрос, как этим пользоваться. Потому что я по аналогии с имеющтимся кодом и тем, что нарыл в инете делаю такое

public class NoMatterClass extends WebPage {

@Autowired
WritersService writersService;

public NoMatterClass (final PageParameters parameters) {

List<WriterDto> list = writersService.findAll();
..........

И у меня вылетает ошибка java.lang.NullPointerException как в последней строчке, так и если сделать
WritersService writersService = new writersServiceImpl();
и Iterable<WriterDomain> listOfWriterRecords = writerRepository.findAll(); также NullPointerException

Что не так
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38847955
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вы в конструкторе что-ли вызываете? Так вроде поля инжектятся после создания объекта? нет разве?
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38847986
Nebo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Geronemo,

Взгляните пожалуйста на книгу Якова Файна: Enterprise Web Development: From Desktop to Mobile
http://enterprisewebbook.com
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38847987
Nebo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Geronemo,

В этом уроке вы познакомитесь с основами RESTful Web Services и базовыми аннотациями для создания Resтful endpoint на сервере.
YouTube Video
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38847989
Nebo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Geronemo,


Ещё

YouTube Video
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38848101
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Nebo, Спасибо. Приступил к просмотру.

Тем временем, играю с spring-config.xml Я получаю вот такое исключение
Line 36 in XML document from class path resource [spring-config.xml] is invalid; nested exception is org.xml.sax.SAXParseException; systemId: http://www.springframework.org/schema/data/jpa/spring-jpa.xsd; lineNumber: 36; columnNumber: 63; src-resolve: Cannot resolve the name 'repository:auditing-attributes' to a(n) 'attribute group' component.
org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 36 in XML document from class path resource [spring-config.xml] is invalid; nested exception is org.xml.sax.SAXParseException; systemId: http://www.springframework.org/schema/data/jpa/spring-jpa.xsd; lineNumber: 36; columnNumber: 63; src-resolve: Cannot resolve the name 'repository:auditing-attributes' to a(n) 'attribute group' component.
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38848107
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Какой-то геморрой. Поменял пару вещей в pom.xml, и вышеоказанная ошибка пропала, но появилась другая.

Unexpected exception parsing XML document from class path resource [spring-config.xml]; nested exception is org.springframework.beans.FatalBeanException: Invalid NamespaceHandler class [org.springframework.data.jpa.repository.config.JpaRepositoryNameSpaceHandler] for namespace [ http://www.springframework.org/schema/data/jpa%5D:]http://www.springframework.org/schema/data/jpa]: problem with handler class file or dependent class; nested exception is java.lang.NoClassDefFoundError: org/springframework/data/config/AuditingHandlerBeanDefinitionParser
org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [spring-config.xml]; nested exception is org.springframework.beans.FatalBeanException: Invalid NamespaceHandler class [org.springframework.data.jpa.repository.config.JpaRepositoryNameSpaceHandler] for namespace [ http://www.springframework.org/schema/data/jpa%5D:]http://www.springframework.org/schema/data/jpa]: problem with handler class file or dependent class; nested exception is java.lang.NoClassDefFoundError: org/springframework/data/config/AuditingHandlerBeanDefinitionParser
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38848164
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем, разобрался с исключениями. Пришлось гуглить, добавлять зависимости в maven, удалять их, менять version и т. д.

Заработал Hibernate, соединение с базой установлено. Прописал вот такую штуку<prop key="hibernate.hbm2ddl.auto">validate</prop>, чтобы оно мне базу не пересоздавало каждый раз.

Но есть проблема в сервисах. Например, лог выдает такое
INFO - DefaultListableBeanFactory - Overriding bean definition for bean 'writerRepository': replacing [Root bean: class [org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null] with [Root bean: class [org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null]
Честно говоря я не знаю, хорошо это или плохо, но написано Info, никакхи error или exception нету.

Но потом, когда приложение уже работает, я делаю такю штуку

public interface WriterRepository extends CrudRepository<WriterDomain, Long> { }

@Service("WritersService")
@Repository
@Transactional
public class WritersServiceImpl implements WritersService {

@Autowired
private WriterRepository writersRepository;

public List<WriterDto> findAll() {

Iterable<WriterDomain> listOfWriterRecords = writersRepository.findAll();
}
}

И там, где помечено красным вылетает NullPointerException
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38848216
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
xml файл выглядит вот так вот

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:jpa="http://www.springframework.org/schema/data/jpa"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
                       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
                       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 
                       http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd">
    
    <context:component-scan base-package="ru.Corp"/>
    <context:annotation-config />
    <aop:aspectj-autoproxy proxy-target-class="true"/>

    <bean id="dataSource"
          class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/library"/>
        <property name="username" value="root"/>
        <property name="password" value="123"/>
    </bean>

    <bean id="transactionManager"
          class="org.springframework.orm.jpa.JpaTransactionManager">

        <property name="entityManagerFactory" ref="emf" />
    </bean>

    <tx:annotation-driven transaction-manager="transactionManager"/>

    <bean id="emf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource"/>

        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
        </property>
        <property name="packagesToScan" value="ru.Corp.domain,ru.Corp.Dao"/>
        <property name="jpaProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.hbm2ddl.auto">validate</prop>
            </props>
        </property>
    </bean>

    <jpa:repositories base-package="ru.Corp.Dao.repository" entity-manager-factory-ref="emf" 
          query-lookup-strategy="create-if-not-found" transaction-manager-ref="transactionManager"/>

    <bean class="ru.Corp.Dao.repository.AutowireHelper" factory-method="getInstance" />

</beans>
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38848225
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Почему такая тишина. 150 млн. в стране и никто не в теме ?
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38848332
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Geronemo,

Страна отдыхает. И всем лень вникать в твои неформатированые логи, неподкюченые библиотеки и т.п.
Есть общая рекомендация не мешать в кучу инъекции через XML и аннотации. Выбери один способ и его используй.
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38848378
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczGeronemo,

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

По поводу логов, можно и отформатировать, но несильно это отличается от того, что было.

INFO - DefaultListableBeanFactory - Overriding bean definition for bean 'writerRepository':
replacing [Root bean: class [org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean];

scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false;
factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null] with [Root bean: class
[org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean]; scope=; abstract=false; lazyInit=false; autowireMode=0;
dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null;
destroyMethodName=null]

Есть общая рекомендация не мешать в кучу инъекции через XML и аннотации. Выбери один способ и его используй.
Ну я делаю по аналогии с реальным проектом, в котором все работает. Что именно вам не нравится. В xml файле прописаны общие вещи, которые для всего проекта.
А в куче классов сущностей, репозиториев и т. д. я уже прописываю аннотации. Разве это не оптимально ?
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38848381
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GeronemoНу я делаю по аналогии с реальным проектом, в котором все работает.
За такое в универе даже тройку не всегда ставили. Где и как WritersServiceImpl инстанциируется? Как показывает история форума все удивления обычно занканчиваются на банальном new WritersServiceImpl(). У тебя не так?
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38848458
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz, это у меня сделано. В как быть с
private UserRepository userRepository;

его же я не должен создавать, и по идее имею право делать вот такое

userRepository.findAll();

Но оно выдает NullPointerException
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38848460
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Geronemo,

Так WriterRepository или UserRepository?
Варианта два.
Либо Spring Data не сконфигурирован и репозиториев не создаёт.
Либо WritersServiceImpl инстанциирован без контекста и в него вообще ничего не инжектится. Кстати, почему он и Service и Repository одновременно?

Stacktrace NPE покажи. WritersServiceImpl откуда берется у вызывающего класса?
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38848538
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczGeronemo,
Так WriterRepository или UserRepository?

У меня есть и тот и тот. И еще несколько репозиториев.
Варианта два.
Либо Spring Data не сконфигурирован и репозиториев не создаёт.

По поводу Спринг Дата, выше я указал конфиг.
В приложениии я делаю такую штуку
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
    private GenericXmlApplicationContext gxac;

.......
            gxac = new GenericXmlApplicationContext();
            gxac.load("classpath:/spring-config.xml");
            gxac.refresh();
            gxac.registerShutdownHook();
        LOG.info("Spring init done");



При запуске лог выглядит так

автор[2015-01-05 04:48:12,842] Artifact HelloWorld:war exploded: Artifact is being deployed, please wait...
янв 05, 2015 4:48:14 PM org.apache.catalina.core.ApplicationContext log
INFO: No Spring WebApplicationInitializer types detected on classpath ?????????????
.....................................
INFO - Application - Application start.
INFO - XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [spring-config.xml]
INFO - DefaultListableBeanFactory - Overriding bean definition for bean 'writerRepository': replacing [Root bean: class ????????????
[org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null] with [Root bean: class [org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null]
................... тут еще 3 записи INFO - DefaultListableBeanFactory - Overriding bean definition для осталбных репозиториев
INFO - nericXmlApplicationContext - Refreshing org.springframework.context.support.GenericXmlApplicationContext@507d5db9: startup date [Mon Jan 05 16:48:15 FET 2015]; root of context hierarchy
INFO - DriverManagerDataSource - Loaded JDBC driver: com.mysql.jdbc.Driver
INFO - erEntityManagerFactoryBean - Building JPA container EntityManagerFactory for persistence unit 'default'
WARN - HibernatePersistence - HHH015016: Encountered a deprecated javax.persistence.spi.PersistenceProvider [org.hibernate.ejb.HibernatePersistence]; use [org.hibernate.jpa.HibernatePersistenceProvider] instead.
INFO - LogHelper - HHH000204: Processing PersistenceUnitInfo [ name: default...]
INFO - Version - HHH000412: Hibernate Core {4.3.7.Final}
INFO - Environment - HHH000206: hibernate.properties not found
INFO - Environment - HHH000021: Bytecode provider name : javassist
INFO - Version - HCANN000001: Hibernate Commons Annotations {4.0.5.Final}
INFO - Dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect
INFO - ASTQueryTranslatorFactory - HHH000397: Using ASTQueryTranslatorFactory
INFO - SchemaValidator - HHH000229: Running schema validator
INFO - SchemaValidator - HHH000102: Fetching database metadata
INFO - TableMetadata - HHH000261: Table found: library.book
INFO - TableMetadata - HHH000037: Columns: [numberofbooks, bookname, currentnumberofbooks, bookid]
INFO - TableMetadata - HHH000261: Table found: library.bookinfo
INFO - TableMetadata - HHH000037: Columns: [literaryworkid, bookid]
INFO - TableMetadata - HHH000261: Table found: library.literarywork
INFO - TableMetadata - HHH000037: Columns: [literaryworkid, literaryworkname, authorid]
INFO - TableMetadata - HHH000261: Table found: library.users
INFO - TableMetadata - HHH000037: Columns: [firstname, id, login, lastname, userpassword]
INFO - TableMetadata - HHH000261: Table found: library.writerofliterarywork
INFO - TableMetadata - HHH000037: Columns: [literaryworkid, authorid]
INFO - TableMetadata - HHH000261: Table found: library.writer
INFO - TableMetadata - HHH000037: Columns: [firstname, fullname, authorid, info, lastname]
INFO - Application - Spring init done
Либо WritersServiceImpl инстанциирован без контекста и в него вообще ничего не инжектится. Кстати, почему он и Service и Repository одновременно?
Вкратце класс выглядит так
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
@Repository
@Transactional
public class WritersServiceImpl implements WritersService {

    @Autowired
    private WriterRepository writersRepository;

    public List<WriterDto> findAll() {

        Iterable<WriterDomain> listOfWriterRecords = writersRepository.findAll();
    }
}


Слово сервис я убрал. Я много вариантов аннотаций перепробовал. Вот 2 примера из инета
http://habrahabr.ru/post/238487/ http://habrahabr.ru/post/139421/
Stacktrace NPE покажи. WritersServiceImpl откуда берется у вызывающего класса?
Вот как я вызываю service. (В идеале, я бы хотел, чтобы этот сервис был бы RMI И было несколько проектов, но я упростил задачу и буду усложнять ее по мере надобности)

Стектрейс очен длинный, суть его вот в
Caused by: java.lang.NullPointerException
at ru.Bakai.services.impl.UsersServiceImpl.findAll(UsersServiceImpl.java:57)
at ru.Bakai.pages.LoginPage.<init>(LoginPage.java:108)
... 37 more
sersServiceImpl.java:57 - это Iterable<WriterDomain> listOfWriterRecords = writersRepository.findAll();
WritersService service = new WritersServiceImpl ();
service.findAll();
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38848543
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GeronemoINFO: No Spring WebApplicationInitializer types detected on classpath ?????????????

С этим разобрался, прописал кое-что в Project Structure

но все равно NPT
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38848547
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Geronemo WritersService service = new WritersServiceImpl ();
service.findAll();
Ха-ха. Сеанс телепатии прошел успешно. Почему ты просто проигнорировал моё замечание про new WritersServiceImpl ()?
Ах, не удобно читать без подсветки кода?

Ты знаешь что такое объект?
Ты знаешь что Spring IoC берет одни объекты и помещает в них ссылки на других. Это называется Dependency Injection.
Ты знаешь что new WritersServiceImpl() создаёт новый объект?
А теперь следи за руками. Spring про этот новый объект ничего не знает и поместить туда ничего не может. Ты его создал сам себе. И хочешь что Spring через какую-то магию туда наижектил зависимостей? Нет никакой магии.

Не нужно пытаться проглотить весь пирог целиком. Начините с основ Dependency Injection, прежде чем использовать всю мощь Spring.
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38848615
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

Так сначала я не создавал объекта и не работало. Потом стал экспериментировать.

Так что не так в коде. Если у товарище по ссылкам якобы все работает, почему у меня нет.

Я вернул, как было, убрал создание объекта. У меня снова writerService.findAll(); выкидывает исключение.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
...................
    @Autowired
    WritersService writerService;

    public LoginPage() {

        writerService.findAll();
    }



Код: java
1.
2.
3.
4.
public interface WritersService extends Serializable
{
    public List<WriterDto> findAll();
}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
@Repository
@Transactional
public class WritersServiceImpl implements WritersService {

    @Autowired
    private WriterRepository writersRepository;

        public List<WriterDto> findAll() {
            Iterable<WriterDomain> listOfWriterRecords = writersRepository.findAll();
        }
}



Я играюсь с ключевыми словами Service. Autowired и еще несколькими, смотрю, как сделано по ссылкам, но все время NPE
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38848645
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Geronemo,

NPE значит что нет зависимости.
Зависимости нет потому что Spring её не инжектит.
Если Spring не инжектит, значит он не знает про этот объект потому что тот создан вне контекста.
Метод научного тыка проб и ошибок замечательная штука, но не для таких сложных фреймверков.

По стеку кто-то вызывает LoginPage, а тот вызывает Service.
LoginPage это контроллер? Service туда инжектится?
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38848712
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczGeronemo,

NPE значит что нет зависимости.
Зависимости нет потому что Spring её не инжектит.
Если Spring не инжектит, значит он не знает про этот объект потому что тот создан вне контекста.
Метод научного тыка проб и ошибок замечательная штука, но не для таких сложных фреймверков.

По стеку кто-то вызывает LoginPage, а тот вызывает Service.
LoginPage это контроллер? Service туда инжектится?

LoginPage вызывается главным классом, где прописано вот такое
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
        LOG.info("Application start.");
        try {
            gxac = new GenericXmlApplicationContext();
            gxac.load("classpath:/spring-config.xml");
            gxac.refresh();
            gxac.registerShutdownHook();
        } catch (Throwable t) {
            LOG.error(t.getMessage(), t);
        }
        LOG.info("Spring init done");



Кстати, в spring-config.xml есть такая строчка
<bean class="ru.corp.Dao.repository.AutowireHelper" factory-method="getInstance" />

И есть такой класс, который я нарыл в инете. Слева от названия класса стоит значок, который означает, что это Spring Bean и если на него нажать, то мы попадаем на эту самую строчку
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
public final class AutowireHelper implements ApplicationContextAware {

    private static final AutowireHelper INSTANCE = new AutowireHelper();
    private static ApplicationContext applicationContext;

    private AutowireHelper() {
    }

    public static void autowire(Object classToAutowire, Object... beansToAutowireInClass) {
        for (Object bean : beansToAutowireInClass) {
            if (bean == null) {
                applicationContext.getAutowireCapableBeanFactory().autowireBean(classToAutowire);
            }
        }
    }

    @Override
    public void setApplicationContext(final ApplicationContext applicationContext) {
        AutowireHelper.applicationContext = applicationContext;
    }

    public static AutowireHelper getInstance() {
        return INSTANCE;
    }
}


Этот класс нигде в программе явно не вызывается.
Кстати, очень любопытный момент. Я поставил во всех 3-х методах брейкпойнтах. При запуске программы я побывал во 2-м и 3-м методе и пока гулял дебаггером по разным методам всяких spring классов, в одном месте я увидел, что программа создала 23 бина, из них все мои repository и и все Impl классы. А также куча каких-то системных бинов.
Т. е. бины создаются, но в LoginPage они не видны.
В метод autowire класса AutowireHelper я так ни разу не попал.
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38848771
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Любопытно, сделал вот такую штуку из главного класса

автор @Override
public void init() {

List<WriterDto> list;

LOG.info("Application start.");
try {
gxac = new GenericXmlApplicationContext();
gxac.load("classpath:/spring-config.xml");
gxac.refresh();
gxac.registerShutdownHook();

list = ((WritersService)gxac.getBean("writersService")).findAll();

} catch (Throwable t) {
LOG.error(t.getMessage(), t);
}
LOG.info("Spring init done");
}

Выделенная красным строчка действительно вернуло то, что находится в БД.
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38849106
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Придумал временное решение проблемы.

Создал вот такой метод в главном классе Application

Код: java
1.
2.
3.
    public static  <T> T  getService(String serviceName) {
        return (T)gxac.getBean(serviceName);
    }


А потом вызываю откуда захочу

Код: java
1.
        WritersService writersService =  Application.getService("writersService");



Немного извращение, но это хотя бы работает.
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38849246
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЭтот класс нигде в программе явно не вызывается.
Кстати, очень любопытный момент. Я поставил во всех 3-х методах брейкпойнтах. При запуске программы я побывал во 2-м и 3-м методе и пока гулял дебаггером по разным методам всяких spring классов, в одном месте я увидел, что программа создала 23 бина, из них все мои repository и и все Impl классы. А также куча каких-то системных бинов.
Т. е. бины создаются, но в LoginPage они не видны.
В метод autowire класса AutowireHelper я так ни разу не попал.
Бросьте эту ахинею, запутаетесь и потеряете время. Изучайте лучше основы программирования.
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38849256
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Geronemo,

Что такое LoginPage для меня до сих пор загадка. Похоже что проекту остро не хватает Spring MVC, чтобы ваш LoginPage попал под управление Spring.
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38849378
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Йуный джавистЪБросьте эту ахинею, запутаетесь и потеряете время. Изучайте лучше основы программирования.
Почему ахинею ? И почему вы считаете, что ваш комментарий полезен и компетентен ?

У меня большой опыт програмирования на Java, но у меня был и очень большой перерыв. Я многое забыл, также появилось много новых технологий, фреймворков и т. д. Надо основами Java я работаю итак. Несколько месяцев назад прочитал хорошую книжку, сейчас смотрю видеоуроки (чуть выше товарищ посоветовал, там 18 уроков, я начал их смотреть сначала, очень рекомендую).

По поводу времени. Самый большой поглотитель времени у меня это когда я натыкаюсь на вот такие вот проблемки, когда в теории должно работать, но я что-то где-то забыл прописать, чаще всего по незнанию каких-то нюансов. Можно понимать вопрос в целом, на 80% где-то, но задачу надо решить на 100% и вот эти 20% это какие-то мелочи, которые отнимают кучу времени. И тогда я задаю вопрос на форуме, а сам параллельно пытаюсь найти решение. Вам кажется вопрос глупым, а для меня это препятствие, чтобы продолжить работу. И это надо как-то разрешить. Сейчас я придумал некоторое корявое решение, как получить доступ к сервисам, чтобы была полноценная возможность продолжить работу. Когда знакомые программисты приедут с какого-нибудь Таиланда, я проконсультируюсь и сделаю как надо. А пока есть как есть и я буду сюда задавать глупые вопросы. Мне нечего стесняться Вас или кого-то еще. Я специально задал проекту высокий уровень, чтобы мозг напрягался. Потому что на работе такого рода проекты уже разработаны с т. з. архитектуры. И у меня стоят много каких-то узких задач, которые я делаю по аналогии какими-то более ранними проектами. А мне хочется максимально быстрого прогресса, т. к. я несколько лет потерял в профессиональном плане как программист.
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38849392
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczGeronemo,

Что такое LoginPage для меня до сих пор загадка. Похоже что проекту остро не хватает Spring MVC, чтобы ваш LoginPage попал под управление Spring.

Вкратце как-то так.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
public class Application extends WebApplication
{

    private static    GenericXmlApplicationContext gxac;

	@Override
	public Class<? extends WebPage> getHomePage()
	{
        return LoginPage.class;
	}
.............

	@Override
	public void init() {
               //Spring init
        }
}



Сразу же при запуске открывается страница LoginPage.
Доступ к бину имею только из GenericXmlApplicationContext gxac; Почему-то бины не инжектятся (или как это называется) я х. з. Я на это проблему убил очень много времени (похоже надо перечитать книгу про тайм-менеджмент). И поэтому оставлю так и продолжу работу над модификацией БД, созданием страниц, сервисов, Domain, Dto классов, потому как это у меня работает, но тут надо очень много чего сделать.
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38849489
Nebo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>(чуть выше товарищ посоветовал, там 18 уроков, я начал их смотреть сначала, очень рекомендую).

Файна слушаем!

Товарищ ещё посоветует:)

Книжечка: Гибкая разработка приложений на Java с помощью Spring, Hibernate и Eclipse. Анил Хемраджани

Самый длинный путь бывает самым коротким)

https://www.youtube.com/user/ytkach
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38849491
Nebo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Geronemo,

и вот ещё книжка по Spring

http://www.ozon.ru/context/detail/id/18601936/
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38849493
Nebo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Geronemo,

на самом деле читать надо очень много. Вдумчиво, последовательно, не торопясь
Со временем, количество перейдёт в качество.
Ребята здесь правы, что надо взяться за теорию. Без неё никак.
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38849570
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тю, так это что Wicket чтоли? LoginPage унаследован от IPage? Если да - то все должно инжектится автоматически, и все эти пляски с созданием контекста выкинуть немеделнно
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38849599
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПочему ахинею ?

Потому что требуются нечеловеческие усилия для написания простых вещей, все глючит и отваливается внутри каких-то фреймворков, которые интерпретируют xml. Это все лишняя сложность, которая берется из-за оперирования выдуманными сущностями. Вам нужно сделать какую-то формочку для логина, по сути это один html документ, пара http и sql запросов. Все просто и понятно. Теперь вы берете спринг, JSF и hibernate и получаете
авторjava.lang.NoClassDefFoundError: org/springframework/data/config/AuditingHandlerBeanDefinitionParser

Что такое этот AuditingHandlerBeanDefinitionParser? Для чего он нужен? Открываем код и видим:
http://grepcode.com/file/repo1.maven.org/maven2/org.springframework.data/spring-data-commons/1.6.1.RELEASE/org/springframework/data/config/AuditingHandlerBeanDefinitionParser.java
Код: java
1.
2.
3.
0		ParsingUtils.setPropertyValue(builder, element, "set-dates", "dateTimeForNow");
71		ParsingUtils.setPropertyReference(builder, element, "date-time-provider-ref", "dateTimeProvider");
72		ParsingUtils.setPropertyValue(builder, element, "modify-on-creation", "modifyOnCreation");


Это какой-то таинственный говнокод, зачем он нужен и что он делает - загадка.
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38849698
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл никТю, так это что Wicket чтоли? LoginPage унаследован от IPage? Если да - то все должно инжектится автоматически, и все эти пляски с созданием контекста выкинуть немеделнно

Да, оно самое, унаслеловано от WebPage (кстати, может кто-то посоветует для фронт-енда фреймворк более удобный/функционалный). Автоматически не инжектится. Я решил временно забить на этот вопрос. Буду читать книги, делать те задачи в рамках проекта, которые я знаю как делать, а потом разберусь с тем, что сделано временно.
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38849699
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NeboСамый длинный путь бывает самым коротким)

https://www.youtube.com/user/ytkach
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38849865
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вылизал запрос для поиска Читателя по частичным совпадениям (надо бы еще сортировку добавить).

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
@Service("readersService")
@Repository
@Transactional
public class ReadersServiceImpl implements ReadersService 
..................................
    @PersistenceContext
    protected EntityManager entityManager;

    public List<ReaderDto> findReaders(ReaderDto readerDto) {

        List<ReaderDomain> listOfReaderRecords;
        StringBuilder sb = new StringBuilder();
        sb.append("select * from reader where ");
        if (readerDto.getId() != null) {
            sb.append("id=").append(readerDto.getId()).append(";");
        } else {
            if (readerDto.getLastName() != null)
                sb.append("lastName like '%").append(readerDto.getLastName()).append("%' ");
            if (readerDto.getFirstName() != null)
                sb.append("firstName like '%").append(readerDto.getFirstName()).append("%' ");
            if (readerDto.getPhone() != null)
                sb.append("phone like '%").append(readerDto.getPhone()).append("%' ");
            if (readerDto.getAddress() != null)
                sb.append("address like '%").append(readerDto.getAddress()).append("%'");
            sb.append(";");
        }

        TypedQuery<ReaderDomain> query = entityManager.createQuery(sb.toString(), ReaderDomain.class);
        listOfReaderRecords = query.getResultList();

        List<ReaderDto> listOfReaders = new ArrayList<>();

        for (ReaderDomain readerDomain : listOfReaderRecords)
            listOfReaders.add(new ReaderDto().convertToDto(readerDomain));

        return  listOfReaders;
    }



Но немного смущают габариты этой функции. Можно ли покороче, при данной поставленной задаче (см. логику построения запроса)
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38849887
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да что за бред. Вдруг ни с того ни с сего все запросы на поиск Читателя стали выкидывать исключения.

Last cause: unexpected char: ';' [select * from reader where id=4;]

Я копирую текст запроса в dbForge, там он прекрасно себя чувствует
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38849897
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Удалил ; в конце, теперь вылетает вот такое
Last cause: unexpected token: * near line 1, column 8 [select * from reader where id=6]

Я же когда выкладывал 2-мя сообщениями выше, все норм работало.
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38849937
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашел 2 ошибки у себя.

Во-первых надо пользоваться вот такой штукой
Query query = entityManager.createNativeQuery(sb.toString(), ReaderDomain.class);

а если хочется TypedQuery, то там какой-то другой формат запроса, х. з. какой. Ему и ; и * не нравится

Во-вторых какой-то гемор с кэштрованием. Т. к. я сначала сделал createNativeQuery, а потом в погоне за красотой кода привел его к тому виду, как несколькими сообщениями выше. И какое-то время у меня это работало, похоже из-за кэширования какого-то. А потом перестало работать и я не мог понять почему, ведь я ничего не менял. А на самом деле менял, но полчаса до этого. Очень пренеприятная ситуация возникла. Столько времени потратил на ровном месте из-за чего-то, чего и быть то не должно.
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38849963
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще больше потратите, пока наконец документацию не прочтете.
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38850068
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл никИ еще больше потратите, пока наконец документацию не прочтете.

Читаю потихоньку. Нашел примеры, как создавать TypedQuery но не вижу большого смысла делать именно таким способом. Все-таки в проекте итак слишком много нового для меня, а какого-то особого преимущества у использования createNamedQuery(java.lang.String s, java.lang.Class<T> aClass); перед
Query createNativeQuery(java.lang.String s, java.lang.Class aClass); я не вижу.В версии 1.0 Я буду делать так, чтобы работало и не было ошибок. Далее следующий шаг это оптимизация и решение той же задачи нескольким другим путем.

Я бы хотел особо отметить, что для меня важно в первую очередь не сделать проект, а чтобы в процессе работы научиться максимуму, что можно выжать из поставленной задачи. Поэтому не вижу ничего зазорного в том, чтобы сделать сначала так, апаралелльно в процессе почитывать/слушать разного рода документацию. И когда все будет более менее красиво работать заняться украшательствами. А пока моей личной оперативной памяти и времени не хватит, чтобы объять столько новых тем.
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38850748
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
До чего же прикольная штука эта JPA persistence. Я замутил SQL запрос такого рода

Код: plsql
1.
2.
3.
SELECT * FROM literarywork l WHERE l.literaryWorkName LIKE '%i%' and l.literaryWorkId = 
(select w.literaryWorkId FROM writerofliterarywork w WHERE w.literaryWorkId = l.literaryWorkId AND 
w.authorId IN ( SELECT authorId FROM writer wr WHERE wr.firstName like '%s%' AND  wr.lastName like '%z%'));



Вызвал Query query = entityManager.createNativeQuery(sb.toString(), LiteraryWorkDomain.class);
List<LiteraryWorkDomain> listOfLiteraryWorksRecords = entityManager.createNativeQuery(sb.toString(), LiteraryWorkDomain.class);

И получил список записей, в каждой из которых кроме полей таблицы literarywork есть поля списков записей из других таблиц, отвечающие критериям запроса. Т. е. Мне не надо делать несколько запросов, типа
1. найти все произведения по названия,
2. найти все произведения по автору,
3. На все книги, содержащие данные произведения.
и не надо разводить при этом зоопарк списков разных сущностей
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38850751
Geronemo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хм. в функционалу форума явная дыра. Нету функции редактирования сообщения

в пред. сообщении п. 3 звучит так
3. Найти все книги, содержащие данные произведения.
...
Рейтинг: 0 / 0
Клиент-серверное приложение "Библиотека"
    #38850804
feomatr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Geronemo,
Код: sql
1.
2.
3.
SELECT * FROM literarywork l WHERE l.literaryWorkName LIKE '%i%' and l.literaryWorkId = 
(select w.literaryWorkId FROM writerofliterarywork w WHERE w.literaryWorkId = l.literaryWorkId AND 
w.authorId IN ( SELECT authorId FROM writer wr WHERE wr.firstName like '%s%' AND  wr.lastName like '%z%'));




Ваш запрос можно переписать в более удобочитаемом виде:
Код: sql
1.
2.
3.
4.
SELECT l.* FROM literarywork l,  writerofliterarywork w, writer wr 
WHERE  l.literaryWorkId = w.literaryWorkId AND -- соединяем по ID
	w.authorId = wr.authorId  AND -- соединяем по ID
	l.literaryWorkName LIKE '%i%' AND wr.firstName like '%s%' AND  wr.lastName like '%z%';



Или так:
Код: sql
1.
2.
3.
4.
5.
SELECT l.* FROM literarywork l 
	join writerofliterarywork w on l.literaryWorkId = w.literaryWorkId -- соединяем по ID
	join writer wr on w.authorId = wr.authorId -- соединяем по ID
WHERE
	l.literaryWorkName LIKE '%i%' AND wr.firstName like '%s%' AND  wr.lastName like '%z%'
...
Рейтинг: 0 / 0
88 сообщений из 88, показаны все 4 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Клиент-серверное приложение "Библиотека"
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]