LINUX.ORG.RU

Проект на Java


0

0

Посоветуйте, пожалуйста, достойный открытый проект на Яве, дабы можно было бы полистать и поглядеть как люди пишут, правильно пишут =)


Ответ на: комментарий от anonymous

Ну, желательно что-нить связанное с jdbc (базы данных и т.п.) Но, реально можно все подряд (ГУИ, Веб и т.п.)

mityaz
() автор топика
Ответ на: комментарий от Insomnium

Что приходило в голову — Azureus. Но, он как бы огромен, и не совсем то... но один есть.

mityaz
() автор топика

Из того, что я видел, мне нравится код Spring Framework. Очень хорошо всё структурировано, документировано.

Legioner ★★★★★
()

Если надо строение открытых жабских проектов (универсальные билд-скрипты, где просто меняешь имя проекта и путь, и работает везде, даже если нет анта):
комманд-лайн: http://sourceforge.net/projects/aisconvert/ (гуй там тоже есть внутри, правда свинговый, в отдельном пекедже, но скринов не много, нет деревьев, таблиц, это была проба, но пошли по пути комманд-лайна и интеграции в другие интерфейсы с наружи).

простая веб-аппликация: http://sourceforge.net/projects/aissearch/

В обычных проектах (на еду) всё конечно сложнее, но я часто использую вышеприведённые проекты как «козу» для начала. Трачу пару часов на убирание ненужного - и дальше уже пишу кастом код. Например, http://sourceforge.net/projects/ais/ тоже произведён из первого, с добавлением люцины и пр (билд скрипты и строение проектов - одни и те-же). И далее расширять - до любой сложности.

Надёжность и простота - это главное!

siberean
()

что касается JDBC - советую делать по одной функции на одно из 4х стандартных действий: select, insert, update, delete и для каждой таблицы или вью или логического энтити - иметь по классу (просто для вашей организации) и иметь десятки нужных операций в этом классе - как статических функций (объекты здесь не нужны, так как не будет инстанс-переменных).

и оформлять типа (пример - для апдейтов, селекты будут иметь ту-же структуру, только из резалт-сета положите в какие-то другие классы и вернёте, например - в хэшах или хэшах хэшев итд, также делаю для хранимых процедур, сложных джойнов итд. Вся сложности интерфейса - уходит в SQL, как и должно быть - т.е. в реляционную алгебру. А в жабе имеем всё просто):

public static void updateSomethingBlaBlaBla(String period, String fileName) throws Exception{
      String query =
          «MERGE INTO » +
             Config.getDBSchema() + «RULES a » +
          «USING » +
          "..." +
          «ON ... » +
          «WHEN ... »+
             «UPDATE ...» +
          «WHEN ...» +
             "... " +
             "...";

   PreparedStatement pstmt = null;
   Connection con = ConnectionProvider.getConnection();
   try{
       pstmt = con.prepareStatement(query);
      pstmt.setString(1, period);
      pstmt.setString(2, fileName);
      pstmt.setString(3, period);
      pstmt.setString(4, fileName);
      pstmt.executeUpdate();
}
finally{
      if(pstmt!=null)try{pstmt.close();}catch(Exception e){}
         if(con!=null)try{con.close();}catch(Exception e){}   
    }
   }


ConnectionProvider - это мой фактори коннекшенов, автоматом переключаемая в случая веб-контейнера - на коннекшн-пул, и на JDBC - при отладке и унит-тестах. Т.е. один код работает _везде_ и прозрачно даже тогда когда попадает под веб-сферу или томкат. Ну также - вместо close() можно возвращать коннекшн пулу, но это зависит от базы, как она кешит те-же PS и коннекшены и уже детали. Главное - простота! Чтобы было надёжно и после усложнения в 1000 раз - можно было ещё разобраться!

siberean
()
Ответ на: комментарий от siberean

да, в последнем посте - говорится об интерфейсе программы с реляционной базой, и понятно, что нативным языком является реляционная алгебра, а не объекты, хибернейты и прочие, кешущие по-соему, копирующие гигабайты по сети, при неправильной конфигурации, и делающие всё не так. Делайте просто - без ОРМов! В крайнем случае - если надо гарантировать атомисити - делайте ХП!

siberean
()
Ответ на: комментарий от siberean

хотя всегда можно любые вещи имплементировать через набор флагов - состояний в базе. И очереди, и всё что угодно - всё прекрасно и легко имплементируется там! Не городите велосипедов, что обычно происходит с программистами, плохо знающими реляционную базу, которую используют. А джава - только для засовывания новых данных, апдейта и отдачи коротких результатов (делайте все джойны в базе!). Всё можно сделать в базе!

siberean
()
Ответ на: комментарий от stave

Мы со своими гигабайтовыми данными часто смеёмся - как хибернейт-программисты качают по сети гигабайты туда-сюда. С позором уходят после больших тормозов. На крохотных данных они орлы. Потом множественные джойны и запросы на несколько страниц - им не осилить. Если базе десятилетия и никто схемы и констрейнты менять не собирается. А данные собирать, скажем надо аутер-джойнами со вложенными запросами итд. Не говорите мне про хибернейт лучше. Он - для форумов, где простые объекты юзер, сессия, корзина. И максимум - один джойн.

siberean
()

spring - эталон кода.

JFreeM ★★★☆
()
Ответ на: комментарий от siberean

>Потом множественные джойны и запросы на несколько страниц - им не осилить.

Реляционная логика - вещь в себе. Нужно долго и упорно перестраивать мышление. Жалко, что в свое время в угоду быдломенеджерам, чтобы они могли набрать в шелле SELECT * FROM ... WHERE ... и фапать на результаты, полностью зарубили Datalog.

Если программер не может составить более-менее сложный запрос, то с помощью гибернейта он не сможет и подавно. А уж работать с серьезными базами, где запрос даже с крохотной ошибкой не выполнится НИКОГДА, в гибернейте еще сложнее.

Macil ★★★★★
()
Ответ на: комментарий от siberean

Если базе десятилетия и никто схемы и констрейнты менять не собирается. А данные собирать, скажем надо аутер-джойнами со вложенными запросами итд.


Не говорите мне про хибернейт лучше


Какбэ если базе десятилетия и она проектировалась ad-hoc, как младшему сыну директора «программисту» заблагорассудится, то конечно лучше не рассчитывать на прогрессивные средства aka хибернейт. Только закопать, вместе с DBA

Karapuz ★★★★★
()

И мне, и мне, пожалуйста.
Технологии: JPA, EJB.

urxvt ★★★★★
()
Ответ на: комментарий от Karapuz

> Ну, желательно что-нить связанное с jdbc (базы данных и т.п.)

если надо хорошо, надо хибернейт, а не чистый jdbc =)

stevejobs ★★★★☆
()
Ответ на: комментарий от siberean

«Если базе десятилетия и никто схемы и констрейнты менять не собирается.»

А если бы да кабы, росли б во рту баобабы :)

Хорошо придумать пример БД, разработанной под «аутер-джойны со вложенными запросами», которая поди еще в 90х годах делалась, и потом возмущаться, а чего хибернейт так тормозит.

База, заранее рассчитанная под орм так делать не будет.

Чтобы база не протухала, google Schema migrations for Java

stevejobs ★★★★☆
()
Ответ на: комментарий от siberean

Мы со своими гигабайтовыми данными часто смеёмся - как хибернейт-программисты качают по сети гигабайты туда-сюда.


Хиб гавно, но это не значит, что надо запросы руками рисовать как индусы, а не нарисовать свою (т.е. учитывающую ваши особенности) объектную реализацию построения запросов. SQL (и других его наречий) строками в java это классический пример уг проекта.

vtVitus ★★★★★
()
Ответ на: комментарий от Macil

> Datalog

че-то я в инете не нашел хорошей книжки по нему, посоветуй

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от anonymous

> Вероятно, тебе еще не рассказали про object-relational impedance mismatch

вероятно, siberean в этом противостоянии выбрал сторону БД, а ява служит обвязкой и играет подчиненную роль

www_linux_org_ru ★★★★★
()

Мой проект, но я вам его не покажу. Причина банальна - любой проект имеющий больше одного публичного релиза несет в себе бациллу обратной совместимости, и ежели он вовремя от нее не очистится, то заболет и умрет как это сделала Java

wfrr ★★☆
()
Ответ на: комментарий от siberean

Для умедренного опытом старпера у которого дето болит от гигабайтный кусков SQL кода, я расскажу страшный секрет что у меня работает динамическая генерация этого кода на лету, причем, ежели в вашем подходе никто «никто схемы и констрейнты менять не собирается» - ибо боится вызвать пандемию геммороя, то у меня это делается одним кликом мышки - все запросы будут перестроены автоматически.

ps. да hibernate я не юзаю, так что придется вам плакать а не смеяться.

wfrr ★★☆
()
Ответ на: комментарий от stevejobs

Хорошо придумать пример БД, разработанной под «аутер-джойны со вложенными запросами», которая поди еще в 90х годах делалась, и потом возмущаться, а чего хибернейт так тормозит.

Как только все осилят динамически изменяемые объекты, а лучше объекты с переменным числом полей, так сразу, а пока можете покурить ваши рекламные куски «Папир туалетнi».

wfrr ★★☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.