Постинг
03.07.2008 20:39 -
За Maven, JSF, Hibernate и още нещо...
Автор: nofearinc
Категория: Технологии
Прочетен: 3574 Коментари: 0 Гласове:
Последна промяна: 03.07.2008 20:45
Прочетен: 3574 Коментари: 0 Гласове:
0
Последна промяна: 03.07.2008 20:45
Наскоро се наложи да setup- вам проект с "Oh, Mighty Java!", използващ сравнително "модерни", нови технологии. По- голямата част добре, но се наложи отново да прибегна към един относително популярен напоследък web framework - един от многото, съществуващи изобщо в jee света. Напоследък обаче стана стандарт, намеша се в JEE5 версията и започна да покорява върхове. Който обаче е писал поне малко на JSF, знае каква мъка е изобщо коденето на тази щуротия.
Възмущавам се, защото в този свят на отворения код, всеки втори човек си пише фреймуърк. Щом го използват 50 човека, вече става я стандарт, я някаква друга иновативна и рекламирана продукция. То бива, бива, ама всяка година се пише на нещо абсолютно ново и различно от старото - аз поне имах сблъсъци със Spring, GWT, JSF и, разбира се, стандартните JSP/Servlet- чета. Сблъсках се с абсурдни на пръв поглед неща във въпросния JSF, които, меко казано, ми вдигаха периодично кръвното. Било то липса на attach на обект в listBox, или на дългия цикъл от фази, които се прескачат... Понякога просто не ми е ясно какво точно се случва. Както беше и с един requestBean, чийто конструктор се извикваше както преди, така и след изпълнение - и въпреки това след второто извикване данните се запазваха. Странна работа.
Друга занимавка беше разучаването на Maven - отрочето на Apache, което реших да използвам като заместител на Ant, но с доста по- богата функционалност. Инструментът цели да улесни управлението и разбирането на проектите като цяло - като задава единни шаблони са изграждане на проекти и дава лесно и бързо създаване на нови такива, или намиране на коректните библиотеки според нечии зависимости (тежък проблем в джавешкия свят като цяло). Това поне е на теория.
Ето и какви са objectives според Апаш:
Примерно, http://appfuse.org/ - позволява ти да си дръпнеш готов, сетъпнат проект на множество уеб фреймурци, persistant framework- и за работа с бази от данни, и други. Спомням си, когато започвах дипломната си работа - 2 седмици ми бяха необходими само за събирането на библиотеките за празен проект, защото бяха около 20- тина парчета, всяка от която не можеше да работи без останалите 19 и то с точно специфичните им версии. Ако дори една от версиите не пасва, всичко крашва. Тогава бях ползвал и един чисто потребителски продукт на един закъсал като мен китаец, който беше донаписал библиотеката и я беше издал с по- нова версия от производителя - просто, защото нямаше време да ги чака те да я издадат :D Та, с фюз-а тези неща излизат готово - викаш 1 ред код на мейвъна и ги точиш директно на твърдия диск. Класика. Да, друго предимство е интегрирането им в IDE : mvn eclipse:eclipse създава .project и .classpath файлчетата, които са болезнено необходими, за да си ги вмъкне еклипс. В интерес на истината, проблем съществува при вмъкването на динамичен уеб проект - но с помощта на няколко хитри реда код, това е решимо.
Постъпково, и може би на части, това беше процедурата, по която стигнах до крайния резултат на сетъпнат проект (който, впрочем, в момента работи) и нещо, което пращам с 1 клик в уеб- контейнера.
1. Необходими продукти
-"ми... Хардуер с операционна система. Тъй като става въпрос за Java, Windows не е единствена алтернатива - в момента пиша от Slackware.
-JDK 6.0
-Apache Tomcat 6.0.14
-Eclipse Europe с WTP (Web Tools Platform) IDE (по избор на клиента, но моя сетъп беше специално за Eclipse - NetBeans някак си има по- интелигентен интегратор на JSF)
-Maven 2.0.19
Май е това. И една редица библиотеки, повечето от тях които са зависими за определения проект и не са важни на сто процента.
2. Сетъпване на продуктите и инструментите
JDK- то ни трябва инсталирано, заедно с променлива на обкръжението JAVA_HOME (environment variable сиреч). В Windows - дясно копче на My Computer -> Properties -> Advanced -> Environment Variables. Там си добавяте променливата - независимо дали потребителска или глобална. По желание (ако не и като изискване) е добре да го има в PATH- a - global променливата, която отговаря за стартирането на един изпълним файл от конзолата, независимо от директорията, в която се намираме. Разбирай - ако файлът е в C:dir1, ние може да го стартираме и от D:somedir , стига първата директория да е в пътя. Anyway. В Linux си има други трикове за environment variable - обикновено стига
JAVA_HOME=/user/lib/java
или export JAVA_HOME=/user/lib/java
...
Аз лично имам едно файлче .profile в домашната директория (/home/юзъра_ми), в което са добавени така няколко променливи.
Tomcat и Eclipse само се разархивират някъде, общо взето това им стига - самият Томкет е добре също да се добави към пътя, за по- лесно извикване.
Мейвън е малко по- специален, изисква си няколко директории и малко играчка. Два бързи туториъла за него има тук:
http://maven.apache.org/download.html#Installation
http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html
Не са лоши впрочем, макар и на мен да ми трябваше да прочета още 10-тина. Все пак трябват M2_HOME в пътя и M2_REPO по- нататък, в еклипс.
3. Инициализация
Трябва да създадем двата проекта - един за Hibernate и един за JSF. По принцип няма проблем да ги интегрирате в 1 проект - дори е доста по- лесно - просто е добре да се спазва логиката за отделно разделение на логическите модули, така че да се преизползват при необходимост. Нищо не пречи да използвате модула за базата от данни за Swing interface, нали?
Как се създават проектите - пак е описано по- горе в мейвънските наръчници, ето как аз лично ги създадох:
mvn archetype:create -DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=bg.firmatami.proekta -DartifactId=ReportingEngine
Първото ID е типът архетип, който се създава; второто е пакетната конвенция, която се използва; а третото - името на проекта. В тоя ред на мисли, за не- мейвън джависти, продуктът си има своя собствена конвенция на именоването, с която ще се сблъскате. Има си директории src/main с поддиректории java/resources/webapp/test и прочие, но е важно да се спазва първоначалната структура. Това може да бъде проблем за вашия Eclipse, тъй като за него началната source директория е src, а не src/main/java. В момента уеб проектът ми има 4 сорс директории (2 истински и 2 linked source от проекта за СУБД, така че да се спазва конвенцията и всичко да работи добре. Възможно е да има и друга алтернатива (отново се извинявам на експертите, но неволята учи и за този момент се спирам на това решение). Свързвам за работа двата дяла - src и resources, като първите се компилират и се архивират с компилираните си данни, а вторите са работни файлове в чист текст - xml, log, jsp и т.н.
Създаваме проект, след което го приспособяваме за Еклипс:
mvn eclipse:eclipse
Има 2 важни типа файлове от страна на Maven. Първият са .POM files - Project Object Model, подобно на ДОМ дърво, но не за документи, а за проекти. Един вид конвенция за структурата на всеки един проект, форматирана като XML. Всеки проект си има .pom, може да имате допълнителни помощни, изобщо "свободата да избираш".
Вторият тип е settings.xml - аз лично го ползвам за добавяне на източници за теглене на ресурси, както и за някои настройки. Settings.xml се създава в папката на Мейвън, която е в потребителската директория под име .m2 (под Линукс не се вижда по подразбиране, заради точката префикс). В .m2 трябва да има 2 неща - директория repository и settings.xml - и двете се създават рано или късно, автоматично или от вас.
Примерен settings file:
standard-extra-repos
true
jboss
http://repository.jboss.com/maven2
true
false
javanet
http://download.java.net/maven/2
true
false
repo1
http://repo1.maven.org/maven2
true
false
jboss-snapshot
http://snapshots.jboss.org/maven2
true
true
jboss-plugins
http://repository.jboss.com/maven2
true
false
Няколко полезни източника на ресурси, в които открих библиотеки, неоткриваеми другаде.
.pom файловете? Ще пусна набързо структурата на уеб проекта, с 2-3 обяснения каква е схемата:
4.0.0
bg.firmatami.project
ReportingEngine
war
1.0-SNAPSHOT
Maven Webappzz
http://maven.apache.org
ReportingEngine
org.mortbay.jetty
maven-jetty-plugin
6.1.7
org.apache.maven.plugins
maven-compiler-plugin
1.5
1.5
org.apache.maven.plugins
maven-eclipse-plugin
1.2
2.5
5.0
org.eclipse.wst.common.project.facet.core.nature
org.eclipse.jdt.core.javanature
org.eclipse.wst.common.modulecore.ModuleCoreNature
org.eclipse.jem.workbench.JavaEMFNature
org.eclipse.wst.common.project.facet.core.builder
org.eclipse.wst.validation.validationbuilder
.settingsorg.eclipse.wst.common.project.facet.core.xml
]]>
.settingsorg.eclipse.jdt.core.prefs
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
org.eclipse.jdt.core.compiler.compliance=1.5
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.5]]>
.settingsorg.eclipse.jst.common.project.facet.core.prefs
classpath.helper/org.eclipse.jdt.launching.JRE_CONTAINER::org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType::jre1.6.0_02/owners=jst.java:5.0
classpath.helper/org.eclipse.jst.server.core.container::org.eclipse.jst.server.tomcat.runtimeTarget::Apache Tomcat v6.0/owners=jst.web:2.5
eclipse.preferences.version=1]]>
1.5
org.mortbay.jetty
maven-jetty-plugin
6.1.5
/
${basedir}/webapp
3
${basedir}/webapp/WEB-INF
**/*.jsp
**/*.xhtml
**/*.properties
**/*.xml
org.codehaus.cargo
cargo-maven2-plugin
tomcat5x
remote
runtime
localhost
8080
tomcat
tomcat
...
bg.firmatami.project
Report_Hibernate
Snapshot-1.0
Тъй като вече ми отряза постинга, ще продължа само следното:
-горното е настройки по билда, фиксване на версията на Java, както и dependency- та.
Същото се репликира като малък , помощен .pom в главната директория на двата проекта (бащината им) - помощен пом с модули, за компилиране на двете отделно.
Създаване на уеб проект и компилация:
mvn archetype:create -DgroupId=bg.firmatami.project -DartifactId=ReportEngine -DarchetypeArtifactId=maven-archetype-webapp
mvn compile
mvn package
Толкова от мен, като имам повече място за съобщението, ще допълня. Наздраве и успех на всички ентусиасти!@
Възмущавам се, защото в този свят на отворения код, всеки втори човек си пише фреймуърк. Щом го използват 50 човека, вече става я стандарт, я някаква друга иновативна и рекламирана продукция. То бива, бива, ама всяка година се пише на нещо абсолютно ново и различно от старото - аз поне имах сблъсъци със Spring, GWT, JSF и, разбира се, стандартните JSP/Servlet- чета. Сблъсках се с абсурдни на пръв поглед неща във въпросния JSF, които, меко казано, ми вдигаха периодично кръвното. Било то липса на attach на обект в listBox, или на дългия цикъл от фази, които се прескачат... Понякога просто не ми е ясно какво точно се случва. Както беше и с един requestBean, чийто конструктор се извикваше както преди, така и след изпълнение - и въпреки това след второто извикване данните се запазваха. Странна работа.
Друга занимавка беше разучаването на Maven - отрочето на Apache, което реших да използвам като заместител на Ant, но с доста по- богата функционалност. Инструментът цели да улесни управлението и разбирането на проектите като цяло - като задава единни шаблони са изграждане на проекти и дава лесно и бързо създаване на нови такива, или намиране на коректните библиотеки според нечии зависимости (тежък проблем в джавешкия свят като цяло). Това поне е на теория.
Ето и какви са objectives според Апаш:
- Making the build process easy
- Providing a uniform build system
- Providing quality project information
- Providing guidelines for best practices development
- Allowing transparent migration to new features
Примерно, http://appfuse.org/ - позволява ти да си дръпнеш готов, сетъпнат проект на множество уеб фреймурци, persistant framework- и за работа с бази от данни, и други. Спомням си, когато започвах дипломната си работа - 2 седмици ми бяха необходими само за събирането на библиотеките за празен проект, защото бяха около 20- тина парчета, всяка от която не можеше да работи без останалите 19 и то с точно специфичните им версии. Ако дори една от версиите не пасва, всичко крашва. Тогава бях ползвал и един чисто потребителски продукт на един закъсал като мен китаец, който беше донаписал библиотеката и я беше издал с по- нова версия от производителя - просто, защото нямаше време да ги чака те да я издадат :D Та, с фюз-а тези неща излизат готово - викаш 1 ред код на мейвъна и ги точиш директно на твърдия диск. Класика. Да, друго предимство е интегрирането им в IDE : mvn eclipse:eclipse създава .project и .classpath файлчетата, които са болезнено необходими, за да си ги вмъкне еклипс. В интерес на истината, проблем съществува при вмъкването на динамичен уеб проект - но с помощта на няколко хитри реда код, това е решимо.
Постъпково, и може би на части, това беше процедурата, по която стигнах до крайния резултат на сетъпнат проект (който, впрочем, в момента работи) и нещо, което пращам с 1 клик в уеб- контейнера.
1. Необходими продукти
-"ми... Хардуер с операционна система. Тъй като става въпрос за Java, Windows не е единствена алтернатива - в момента пиша от Slackware.
-JDK 6.0
-Apache Tomcat 6.0.14
-Eclipse Europe с WTP (Web Tools Platform) IDE (по избор на клиента, но моя сетъп беше специално за Eclipse - NetBeans някак си има по- интелигентен интегратор на JSF)
-Maven 2.0.19
Май е това. И една редица библиотеки, повечето от тях които са зависими за определения проект и не са важни на сто процента.
2. Сетъпване на продуктите и инструментите
JDK- то ни трябва инсталирано, заедно с променлива на обкръжението JAVA_HOME (environment variable сиреч). В Windows - дясно копче на My Computer -> Properties -> Advanced -> Environment Variables. Там си добавяте променливата - независимо дали потребителска или глобална. По желание (ако не и като изискване) е добре да го има в PATH- a - global променливата, която отговаря за стартирането на един изпълним файл от конзолата, независимо от директорията, в която се намираме. Разбирай - ако файлът е в C:dir1, ние може да го стартираме и от D:somedir , стига първата директория да е в пътя. Anyway. В Linux си има други трикове за environment variable - обикновено стига
JAVA_HOME=/user/lib/java
или export JAVA_HOME=/user/lib/java
...
Аз лично имам едно файлче .profile в домашната директория (/home/юзъра_ми), в което са добавени така няколко променливи.
Tomcat и Eclipse само се разархивират някъде, общо взето това им стига - самият Томкет е добре също да се добави към пътя, за по- лесно извикване.
Мейвън е малко по- специален, изисква си няколко директории и малко играчка. Два бързи туториъла за него има тук:
http://maven.apache.org/download.html#Installation
http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html
Не са лоши впрочем, макар и на мен да ми трябваше да прочета още 10-тина. Все пак трябват M2_HOME в пътя и M2_REPO по- нататък, в еклипс.
3. Инициализация
Трябва да създадем двата проекта - един за Hibernate и един за JSF. По принцип няма проблем да ги интегрирате в 1 проект - дори е доста по- лесно - просто е добре да се спазва логиката за отделно разделение на логическите модули, така че да се преизползват при необходимост. Нищо не пречи да използвате модула за базата от данни за Swing interface, нали?
Как се създават проектите - пак е описано по- горе в мейвънските наръчници, ето как аз лично ги създадох:
mvn archetype:create -DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=bg.firmatami.proekta -DartifactId=ReportingEngine
Първото ID е типът архетип, който се създава; второто е пакетната конвенция, която се използва; а третото - името на проекта. В тоя ред на мисли, за не- мейвън джависти, продуктът си има своя собствена конвенция на именоването, с която ще се сблъскате. Има си директории src/main с поддиректории java/resources/webapp/test и прочие, но е важно да се спазва първоначалната структура. Това може да бъде проблем за вашия Eclipse, тъй като за него началната source директория е src, а не src/main/java. В момента уеб проектът ми има 4 сорс директории (2 истински и 2 linked source от проекта за СУБД, така че да се спазва конвенцията и всичко да работи добре. Възможно е да има и друга алтернатива (отново се извинявам на експертите, но неволята учи и за този момент се спирам на това решение). Свързвам за работа двата дяла - src и resources, като първите се компилират и се архивират с компилираните си данни, а вторите са работни файлове в чист текст - xml, log, jsp и т.н.
Създаваме проект, след което го приспособяваме за Еклипс:
mvn eclipse:eclipse
Има 2 важни типа файлове от страна на Maven. Първият са .POM files - Project Object Model, подобно на ДОМ дърво, но не за документи, а за проекти. Един вид конвенция за структурата на всеки един проект, форматирана като XML. Всеки проект си има .pom, може да имате допълнителни помощни, изобщо "свободата да избираш".
Вторият тип е settings.xml - аз лично го ползвам за добавяне на източници за теглене на ресурси, както и за някои настройки. Settings.xml се създава в папката на Мейвън, която е в потребителската директория под име .m2 (под Линукс не се вижда по подразбиране, заради точката префикс). В .m2 трябва да има 2 неща - директория repository и settings.xml - и двете се създават рано или късно, автоматично или от вас.
Примерен settings file:
standard-extra-repos
true
jboss
http://repository.jboss.com/maven2
true
false
javanet
http://download.java.net/maven/2
true
false
repo1
http://repo1.maven.org/maven2
true
false
jboss-snapshot
http://snapshots.jboss.org/maven2
true
true
jboss-plugins
http://repository.jboss.com/maven2
true
false
Няколко полезни източника на ресурси, в които открих библиотеки, неоткриваеми другаде.
.pom файловете? Ще пусна набързо структурата на уеб проекта, с 2-3 обяснения каква е схемата:
4.0.0
bg.firmatami.project
ReportingEngine
war
1.0-SNAPSHOT
Maven Webappzz
http://maven.apache.org
ReportingEngine
org.mortbay.jetty
maven-jetty-plugin
6.1.7
org.apache.maven.plugins
maven-compiler-plugin
1.5
1.5
org.apache.maven.plugins
maven-eclipse-plugin
1.2
2.5
5.0
org.eclipse.wst.common.project.facet.core.nature
org.eclipse.jdt.core.javanature
org.eclipse.wst.common.modulecore.ModuleCoreNature
org.eclipse.jem.workbench.JavaEMFNature
org.eclipse.wst.common.project.facet.core.builder
org.eclipse.wst.validation.validationbuilder
.settingsorg.eclipse.wst.common.project.facet.core.xml
]]>
.settingsorg.eclipse.jdt.core.prefs
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
org.eclipse.jdt.core.compiler.compliance=1.5
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.5]]>
.settingsorg.eclipse.jst.common.project.facet.core.prefs
classpath.helper/org.eclipse.jdt.launching.JRE_CONTAINER::org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType::jre1.6.0_02/owners=jst.java:5.0
classpath.helper/org.eclipse.jst.server.core.container::org.eclipse.jst.server.tomcat.runtimeTarget::Apache Tomcat v6.0/owners=jst.web:2.5
eclipse.preferences.version=1]]>
1.5
org.mortbay.jetty
maven-jetty-plugin
6.1.5
/
${basedir}/webapp
3
${basedir}/webapp/WEB-INF
**/*.jsp
**/*.xhtml
**/*.properties
**/*.xml
org.codehaus.cargo
cargo-maven2-plugin
tomcat5x
remote
runtime
localhost
8080
tomcat
tomcat
...
bg.firmatami.project
Report_Hibernate
Snapshot-1.0
Тъй като вече ми отряза постинга, ще продължа само следното:
-горното е настройки по билда, фиксване на версията на Java, както и dependency- та.
Същото се репликира като малък , помощен .pom в главната директория на двата проекта (бащината им) - помощен пом с модули, за компилиране на двете отделно.
Създаване на уеб проект и компилация:
mvn archetype:create -DgroupId=bg.firmatami.project -DartifactId=ReportEngine -DarchetypeArtifactId=maven-archetype-webapp
mvn compile
mvn package
Толкова от мен, като имам повече място за съобщението, ще допълня. Наздраве и успех на всички ентусиасти!@
Няма коментари
Вашето мнение
За да оставите коментар, моля влезте с вашето потребителско име и парола.
Търсене
За този блог
Гласове: 163
Блогрол