Потребителски вход

Запомни ме | Регистрация
Постинг
03.07.2008 20:39 - За Maven, JSF, Hibernate и още нещо...
Автор: nofearinc Категория: Технологии   
Прочетен: 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 според Апаш:

  • 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
Anyway, с Мейвъна ми харесаха някои неща: направих скелета на двата проекта, за базата от данни и за уеб логиката; свързах ги, изградих им списък от библиотеките, след което нещата се поукротиха. Вместо да билдвам като животно всеки път, викам един mvn compile; mvn package - и всичко се архивира, както му е редът. По принцип има възможност и за лесно дърпане от хранилище, откъдето всичко идва "на тепсия" и готово за редакция, но е доста играчка и нямам много опит там. Знаете как е - в днешния свят имаш 2 дни да направиш нещо, което ще ти отнеме 3 дни и 10 дни за обучение - но трябва да се вмъкнеш в графика.

Примерно, 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

Толкова от мен, като имам повече място за съобщението, ще допълня. Наздраве и успех на всички ентусиасти!@


Тагове:   още,   Maven,


Гласувай:
0



Следващ постинг
Предишен постинг

Няма коментари
Вашето мнение
За да оставите коментар, моля влезте с вашето потребителско име и парола.
Търсене

За този блог
Автор: nofearinc
Категория: Забавление
Прочетен: 183697
Постинги: 15
Коментари: 12
Гласове: 163
Архив
Календар
«  Април, 2024  
ПВСЧПСН
1234567
891011121314
15161718192021
22232425262728
2930
Блогрол