Documente Academic
Documente Profesional
Documente Cultură
Spring+Hibernate+Anotaciones=DesarrolloRpidoenJava
EntraenAdictosatravsde
Email
Contrasea
Registrarme
Olvidmicontrasea
Entrar
Inicio
Quinessomos
Formacin
Comparadordesalarios
Nuestroslibros
Ms
AlejandroPrezGarca
AlejandroessociofundadordeAutentiaynuestroexpertoenJ2EE,Linuxy
optimizacindeaplicacionesempresariales.
Catlogodeservicios
Autentia
IngenieroenInformticayCertifiedScrumMaster
Seguira@alejandropgarci
1,145seguidores
Sitegustaloqueves,puedescontratarleparadarteayudaconsoporteexperto,
impartircursospresencialesentuempresaoparaquerealicemostusproyectos
comofactora(Madrid).
PuedesencontrarmeenAutentia:Ofrecemosserviciosdesoporteadesarrollo,
factorayformacin.
Vertodoslostutorialesdelautor
DIPLOMADO
DISTANCIA
Fechadepublicacindeltutorial:20080514
Tutorialvisitado147.412vecesDescargarenPDF
Spring+Hibernate+Anotaciones=DesarrolloRpidoen
Java
Creacin:09052008
Sguenosatravs
de:
ndicedecontenidos
1.Introduccin
2.Entorno
3.Laaplicacin
4.Lacapadepersistencia
4.1.Lasentidades
4.2.ElDAO
5.Lacapadenegocio
6.Lacapadecontrol
7.Lacapadepresentacin
8.Losficherosdeconfiguracin
8.1.hibernate.cfg.xml(configuracindeHibernate)
8.2.applicationContext.xml(configuracindeSpring)
8.3.facesconfig.xml(configuracindeJSF)
9.Diferenciaentrelasanotaciones@Repository,@Service,@Controller
10.Conclusiones
11.Sobreelautor
12.Colaboraciones
1.Introduccin
ltimasNoticias
2015:Volvemosala
oficina!
CursoJBossdeRedHat
Siereselresponsableo
ldertcnico,considrate
desafortunado.Nopuedes
culparanadieporsergris
Portales,gestoresde
contenidosdocumentalesy
desarrollosamedida
ComentandoellibroStart
upNation,Lahistoriadel
milagroeconmicodeIsrael,
deDanSenor&SaluSinger
Histricodenoticias
UnodelosgrandesproblemasquetienehoyendaeldesarrollodeaplicacionesWebenJavaesqueelciclode
desarrolloes,enmuchasocasiones,demasiadolargo(oporlomenosmslargodeloquenosgustara).
DebidoaesteproblemahansurgidoalternativasdelestilodeRubyonRails(http://www.rubyonrails.org/)oincluso
GoogleAppEngine(http://code.google.com/appengine/)unaalternativaqueproponeGoogle,basadaenellenguaje
Python.
Todasestasalternativaspuedenresultarmuyinteresantes,perosuelenestarbasadasenlenguajesconchequeode
tiposdbil,otrasladandoelchequeodetiposatiempodeejecucin(comoPython),loqueprovocaquepuedansermuy
tilesparahacerrpidamentepequeasaplicacionesoprototipos,peroquesepuedenconvertirenungranproblema
cuandoqueremosconstruiraplicacionesmedianasograndesdondeintervienenvariaspersonasoinclusoequiposenel
procesodedesarrollo.Paraestecasodeaplicacionesmedianasograndesygruposdedesarrollocolaborativos,sehace
http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=desarrolloRapidoJava
ltimosTutoriales
ByteCode:Sabesloque
realmenteprogramasen
Java?
PopArtalestiloAndy
1/14
16/4/2015
Spring+Hibernate+Anotaciones=DesarrolloRpidoenJava
necesariounlenguajefuertementetipado,dondepodamosdefinirjerarquasdetipos(clasesointerfaces)enlasqueel
restodelequiposepuedaapoyarparadesarrollarsinriesgos.
EnestetutorialveremoscomograciasaSpring+Hibernate+Anotacionespodemosconseguirundesarrollotanrpido
comoelquepodemosconseguirconlasalternativasantesmencionadas.
YahemosvistoenotrostutorialeselusodeSpringoHibernate,peroenestetutorialvamosaintentarsacartodoel
partidoalasAnotacionesdeJava5para,basndonosenelconceptode"convencinfrenteaconfiguracin",centrarnos
enelcdigo,olvidarnosdelabasedededatosydeesostediososficherosdeconfiguracinenXML.
ConestonoquierodecirquedebamosolvidarnosporcompletodeesosficherosXML,sinoquedebemoscentrarnosa
resolverelproblemaquenosocupa,deformarpidayconunbuendiseo,consiguiendouncdigolegibleymantenible.
Siluegoqueremoshacerciertosrefinamientos,ovirgueras,losXMLsiempreestarnesperndonosparapoder
sobreescribirelcomportamientoestablecidoconlasanotaciones.
2.Entorno
Eltutorialestescritousandoelsiguienteentorno:
Hardware:PorttilAsusG1(Core2Duoa2.1GHz,2048MBRAM,120GBHD).
NvidiaGEFORCEGO7700
SistemaOperativo:GNU/Linux,Debian(unstable),Kernel2.6.24,KDE3.5
JavaSun1.6.0_06
Spring2.5.4
Hibernate3.2.6
JSF(RI1.2)+Facelets1.1.14+ICEfaces1.7
3.Laaplicacin
Vamosahacerunapequeaaplicacindondesemuestreunlistadodeproductos.Podraquedaralgocomo:
Warhol:Photoshop
Tcnicasderealizacinde
entrevistas
Imprimiendodocumentos
OfficeyPDFexistentescon
JavaenentornoWindows.
Batch&Print
Enfrntateconxitoala
crisisdelahojaenblanco
ltimosTutorialesdel
Autor
MixinsenJavayJava8!S,
esposible!
Cmohacertesting
automticodeunappletJava
Primerospasoscon
Clojure:LeiningenyMidje
CmointegrarenGradle
unservidorJettyoTomcat
Kettlenoesunatetera,es
laherramientadeETLde
Pentaho!
CategorasdelTutorial
Spring
Hibernate
JavaEstndar
TcnicasAvanzadas
Ylapantalladeedicindeproductos:
http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=desarrolloRapidoJava
2/14
16/4/2015
Spring+Hibernate+Anotaciones=DesarrolloRpidoenJava
4.Lacapadepersistencia
Vamosaempezar"deabajoaarriba",esdecir,partiremosdefiniendonuestrasentidadespersistentesconHibernate,e
iremos"subiendo"hastalacapadepresentacinycontrolconJSF,pasandoantesporelnegocio(elmodelo)con
Spring.
4.1.Lasentidades
Ennuestroejemploslotenemoslaentidadproducto,conlosatributosnombre,descripcinyprecio.
Veamoscomonosquedaralaclase:
viewplain
01.
02.
03.
04.
05.
06.
07.
08.
09.
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.
@Entity
publicclassProduct{
@Id
@GeneratedValue
privateIntegerid;
privateStringname;
privateStringdescription;
privatefloatprice;
Product(){
//Sloelmanagerpuedeconstuirnuevasinstancias
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicStringgetDescription(){
returndescription;
}
publicvoidsetDescription(Stringdescription){
this.description=description;
}
publicfloatgetPrice(){
returnprice;
}
http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=desarrolloRapidoJava
3/14
16/4/2015
36.
37.
38.
39.
40.
41.
Spring+Hibernate+Anotaciones=DesarrolloRpidoenJava
publicvoidsetPrice(floatprice){
this.price=price;
}
Podemosvercomosetratadeunaclasetotalmentenormal,dondeenlalnea1anotamosquesetratadeunaentidad,y
enlaslneas3y4indicamoscualeseliddelaentidadyqueesteidsergeneradoporlabasededatos.
Cabedestacardoscosas:
TodaslasnotacionesusadaspertenecenalestndardeJPAporloquesonvlidastantoparaHibernatecomo
paraEJB3.0.
Hemosanotadounatributoprivadoquenoseusaenningnsitio,nisiquieratenemosgetterosetter.Estolo
hacemosapostayaqueesalgoquegestionarinternamenteHibernate,yqueremoscondicionarlomenosposible
nuestrodiseo(nuestronegocio).
4.2.ElDAO
ElDAOeselDataAccessObject,esdecir,serlaclasedonderesidalalgicademanejodeHibernate(oJDOoJDBo
JPAo...).DeestaformaconseguimosquenuestralgicadenegocionosepanadadeHibernate,ysiemprequequiera
accederalosdatosloharausandoestaclase.
Veamosunejemplosencillo:Primerodefinimosunainterfaz,aspodemosintercambiarlaimplementacinfcilmentesi
algndanoscansamosdeHibernate(nolocreo):
viewplain
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
13.
publicinterfaceDao{
publicvoidpersist(Objectentity);
publicvoidpersist(Object[]entities);
public<T>List<T>find(Class<T>entityClass);
public<T>Tload(Class<T>entityClass,Serializableid);
public<T>List<T>find(Stringhql);
Paraelejemploslohemosdefinidoalgunasoperacionessimples.Ahoraveamosunaposibleimplementacinusandolas
facilidadesquenosproporcionaSpring+Hibernate:
viewplain
01.
02.
03.
04.
05.
06.
07.
08.
09.
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.
@Repository
publicclassSpringHibernateDaoextendsHibernateDaoSupportimplementsDao{
@Autowired
publicSpringHibernateDao(SessionFactorysessionFactory){
super.setSessionFactory(sessionFactory);
}
@Transactional
publicvoidpersist(Objectentity){
getHibernateTemplate().saveOrUpdate(entity);
}
@Transactional
publicvoidpersist(Object[]entities){
for(inti=0;i<entities.length;i++){
persist(entities[i]);
}
}
@Transactional(readOnly=true)
public<T>List<T>find(Class<T>entityClass){
finalList<T>entities=getHibernateTemplate().loadAll(entityClass);
returnentities;
}
@Transactional(readOnly=true)
public<T>Tload(Class<T>entityClass,Serializableid){
finalTentity=(T)getHibernateTemplate().load(entityClass,id);
returnentity;
}
@Transactional(readOnly=true)
public<T>List<T>find(Stringhql){
finalList<T>entities=getHibernateTemplate().find(hql);
returnentities;
}
Noeselmbitodeestetutorialestudiarlaimplementacindelosmtodos,paramsinformacinsugieroallector
repasarotrostutorialesrelacionadosoacudiraladocumentacindeSpringeHibernateyladocumentacinsobre
GenericsdeJava.
http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=desarrolloRapidoJava
4/14
16/4/2015
Spring+Hibernate+Anotaciones=DesarrolloRpidoenJava
Aunqueellectorenunprincipionoentiendalaimplementacinloquecreoquequedaclaroesqueessencilla,puesto
queselimitaaunaspocaslneas(denuevosugierorepasarladocumentacin).
Dondesivamosahacerespecialhincapiesenlasnuevasanotacionesquenoshanaparecido:
Enlalnea1nosencontramoscon@Repository.EstaesunaanotacindeSpring.Estamosindicandoqueesta
esunaclaserelacionadaconlacapadepersistencia,yquedebeserunSingleton(slohabrunainstanciadela
claseHibernateDaoSupport,ytodoslosThreadsdelaaplicacinlacompartirn).
Enlalnea4nosencontramoscon@Autowired.EstaesunaanotacindeSpring.SirveparaindicarleaSpring
quecuandovayaacrearlainstanciadeHibernateDaoSupportdebe"inyectarle"(pasarle)enelconstructoruna
referenciaalSessionFactory(elSessionFactorysloconfiguraremosmedianteXML,loveremosmsadelante).
Porltimo,enlalnea9,14,20,...nosencontramosconlaanotacin@Transactional.Estaesunaanotacinde
Spring.Estamosindicandoqueelmtodoencuestinestransaccional.LoqueharSpringescomprobarsiya
existeunatransaccinabierta,siexisteseuniraella,ysinoexiste,abrirunanuevatransaccin(este
comportamientoesconfigurable).Deestaformanosaseguramosquetodaoperacindelabasededatosse
realizadentrodeunatransaccin.Ademssidurantelaejecucindelmtodoseproducealgunaexcepcinde
Runtime,seharautomticamenterollbackdelatransaccin(estecomportamientotambinesconfigurable).
Yahemosterminadoconlacapadepersistencia.Rpidoverdad?.EnningnmomentohemosvistosentenciasSQL,ni
siquieraparacrearlastablasdelabasededatos.MsadelanteveremoscomoconfiguramosHibernateparaquese
encarguedecrearnoslastablasautomticamente(Losficherosdeconfiguracinlosveremostodosalfinal,porahora
sigamosconelcdigoJava).
5.Lacapadenegocio
Enestaaplicacinelnegocionoesgrancosa,pocomsqueobtenerlosproductosoguardarlos,asquelaclasenosva
aquedarmuysencillita:
viewplain
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
@Service
publicclassProductMgr{
@Resource
privateDaodao;
publicProductnewProduct(){
returnnewProduct();
}
publicvoidpersist(Productproduct){
dao.persist(product);
}
publicList<Product>getProducts(){
finalList<Product>list=dao.find(Product.class);
returnlist;
}
}
HaciendounaclasetansencillayquelonicoquehaceesdelegarenelDAO,hayquienmepodraacusardeestar
cayendoenelantipatrn"Poltergeist",yaquedesdecontrolpodramosusardirectamenteelDAOpararecuperaro
guardarlosproductos,yquitarnosestaclasedeenmedio.PeronocreoqueesteseaelcasoyaqueprimaelMVCyel
bajoacoplamiento.
Siempredebemosintentarquelacapadecontrolypresentacinseanlomstontasposibles.Pensarporunmomento
quenousamosestaclase"manager"yqueusamoselDAOdesdelasclasesdecontroldeJSF(losmanagedbeans),si
ahoraquisiramosmontarunwebserviceparaaprovecharestaaplicacindesdeotrasaplicacionescuantocdigoque
yahabramosescritoenelmanagedbeantendramosquerepetirenelwebservice?
Perovamosallo,quehemosvenidoahablardelasanotaciones)
Enlalnea1nosencontramoscon@Service.EstaesunaanotacindeSpring,similara@Repositoryqueya
habamosvistoantes.Estamosindicandoqueestaesunaclaserelacionadaconlacapadeservicio(clasesde
negocio),yquedebeserunSingleton.
Enlalnea4nosencontramoscon@Resoruce.Estaanotacinesdelestndar,porloqueesvlidatantocon
SpringcomoconEJB3.0.Estaindicandoquealcrearlainstanciadeestaclasesedebe"inyectar"(inicializar)en
esteatributounareferenciaalainstanciadelDao(eslainstanciaquehabamosdeclaradoanteriormentecon
@Repository).
SeacaboYahemosterminadoconnegocio!!!
6.Lacapadecontrol
VamosaimplementarelcontrolconlosmanagedbeansdeJSF.Comotenemosdospantallaspodemoshacerdos
managedbean.
Eldelapantallaconellistadodeproductosnospodraquedaralgocomo:
viewplain
01.
02.
03.
@Controller
@Scope("session")
publicclassListProduct{
http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=desarrolloRapidoJava
5/14
16/4/2015
04.
05.
06.
07.
08.
09.
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.
Spring+Hibernate+Anotaciones=DesarrolloRpidoenJava
@Resource
privateProductMgrproductMgr;
@Resource
privateEditProducteditProduct;
privateUIDataproductsDataTable;
publicStringeditProduct(){
Productproduct;
try{
product=(Product)productsDataTable.getRowData();
}catch(IllegalArgumentExceptione){
//Nosehaseleccionadoningunafila;seestaadiendounnuevoelemento.
product=productMgr.newProduct();
}
editProduct.setProduct(product);
return"editProduct";
}
publicList<Product>getProducts(){
returnproductMgr.getProducts();
}
publicUIDatagetProductsDataTable(){
returnproductsDataTable;
}
publicvoidsetProductsDataTable(UIDataproductsDataTable){
this.productsDataTable=productsDataTable;
}
}
Laclaseparalaedicindelosproductos:
viewplain
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
@Controller
@Scope("session")
publicclassEditProduct{
@Resource
privateProductMgrproductMgr;
privateProductproduct;
publicStringsave(){
productMgr.persist(product);
return"home";
}
publicProductgetProduct(){
returnproduct;
}
publicvoidsetProduct(Productproduct){
this.product=product;
}
}
Fijndonosenlaclasedelistado,lasnuevasanotacionesqueaparecenson:
Enlalnea1nosencontramoscon@Controller.EstaesunaanotacindeSpring,similara@Repositoryo
@Servicequeyahabamosvistoantes.Estamosindicandoqueestaesunaclaserelacionadaconlacapade
control.
Enlalnea2nosencontramoscon@Scope("session").EstaesunaanotacindeSpring.Conellaestamos
sobreescribiendoelcomportamientopordefectodeSpring,queeshacerSingletons,yleestamosdiciendoque
noscreeunainstanciadiferentedeestaclaseporcadasesinHttp.Esdecir,cadausuariotendrsupropio
managedbean.
Tambincabedestacardesdelalnea5hastala9.Laanotacin@Resourceyalahemoscomentadoantes,pero
quierorecalcarcomoseest"inyectando"lareferenciaalmanager(laclasedenegocio)ylareferenciaaotro
managedbeandelacapadecontroldeJSF,esdecir,Springescapazdegestionarlasdependenciasentrelos
diferentesmanagedbeansdeJSF.
7.Lacapadepresentacin
EstimplementadaconJSF+Facelets+ICEfaces,peronotienenadadeespecial.Esdecirlaconstruiremoscomo
habitualmentesetrabajaconestastecnologas.
CuandoqueramosaccederalosmanagedbeansdesdeelExpressionLanguagesimplementeloharemos.Porejemplo:
viewplain
01.
<ice:commandButtonvalue="Aadirproducto"action="#{listProduct.editProduct}"/>
viewplain
http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=desarrolloRapidoJava
6/14
16/4/2015
Spring+Hibernate+Anotaciones=DesarrolloRpidoenJava
01.
<tnt:inputTextentity="#{editProduct.product}"field="name"required="true"/>
viewplain
01.
<ice:commandButtonvalue="Guardar"action="#{editProduct.save}"/>
8.Losficherosdeconfiguracin
8.1.hibernate.cfg.xml(configuracindeHibernate)
viewplain
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
13.
14.
<?xmlversion="1.0"encoding="UTF8"?>
<!DOCTYPEhibernateconfigurationPUBLIC
"//Hibernate/HibernateConfigurationDTD3.0//EN"
"http://hibernate.sourceforge.net/hibernateconfiguration3.0.dtd">
<hibernateconfiguration>
<sessionfactory>
<propertyname="hibernate.hbm2ddl.auto">create</property>
<propertyname="hibernate.show_sql">true</property>
<mappingclass="com.autentia.store.product.Product"/>
</sessionfactory>
</hibernateconfiguration>
Enlalnea9esdondeleestamosdiciendoaHiberantequequeremosquenoscreelastablasalarrancarlaaplicacin.
Ojoporquesilastablasyaexistenlasborraprimero,esdecir,estopuedesermuyconvenienteparadesarrolloo
pruebas,peronoparaproduccin!!!Loquepodemoshaceres,unavezestncreadas,hacerun"export"delabasede
datosparaobtenerlosscriptsdecreacinquepodemosretocarparadejarloslistosparaproduccin(peronos
ahorramoslogordo)
8.2.applicationContext.xml(configuracindeSpring)
viewplain
01.
02.
03.
04.
05.
06.
07.
08.
09.
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.
<?xmlversion="1.0"encoding="UTF8"?>
<beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema
instance"
xmlns:util="http://www.springframework.org/schema/util"xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring
beans2.5.xsd
http://www.springframework.org/schema/utilhttp://www.springframework.org/schema/util/spring
util2.5.xsd
http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring
context2.5.xsd
http://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/springaop
2.5.xsd
http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/springtx
2.5.xsd">
<context:annotationconfig/>
<context:componentscanbasepackage="com.autentia.store"/>
<aop:aspectjautoproxy/>
<tx:annotationdriventransactionmanager="transacctionManager"/>
<beanid="propertyConfigurer"class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
<propertyname="locations">
<list>
<value>classpath:jdbc.properties</value>
</list>
</property>
</bean>
<beanid="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<propertyname="driverClassName"value="${jdbc.driverClassName}"/>
<propertyname="url"value="${jdbc.url}"/>
<propertyname="username"value="${jdbc.username}"/>
<propertyname="password"value="${jdbc.password}"/>
</bean>
<beanid="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<propertyname="dataSource"ref="dataSource"/>
<propertyname="configurationClass"value="org.hibernate.cfg.AnnotationConfiguration"/>
<propertyname="configLocation">
<value>classpath:${hibernate.cfg.file}</value>
</property>
</bean>
<beanid="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<propertyname="sessionFactory"ref="sessionFactory"/>
</bean>
</beans>
http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=desarrolloRapidoJava
7/14
16/4/2015
Spring+Hibernate+Anotaciones=DesarrolloRpidoenJava
Puedeparecerquehaymuchoperoenrealidadslohay4cosas:configuracindeSpringparaquehagacasoalas
anotaciones,definireldatasource(dehibernate,delservidorporjndi,...),definirelsessionFactorydeHibernate,ydefinir
eltransactionManager(eldeHibernate,JTA,...)
Siosfijisnohayniunasoladefinicindebeandeclasesquehayamosescritonosotros,deformaqueesteficherose
mantendrconstanteconindependenciadelosbeansquetenganuestraaplicacin.
8.3.facesconfig.xml(configuracindeJSF)
viewplain
01.
02.
03.
04.
05.
06.
07.
08.
09.
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.
<?xmlversion="1.0"encoding="UTF8"?>
<!DOCTYPEfacesconfigPUBLIC"//SunMicrosystems,Inc.//DTD
JavaServerFacesConfig1.1//EN""http://java.sun.com/dtd/webfacesconfig_1_1.dtd">
<facesconfigxmlns="http://java.sun.com/JSF/Configuration">
<application>
<localeconfig>
<defaultlocale>es</defaultlocale>
<supportedlocale>en</supportedlocale>
</localeconfig>
<viewhandler>com.icesoft.faces.facelets.D2DFaceletViewHandler</viewhandler>
<variableresolver>org.springframework.web.jsf.DelegatingVariableResolver</variableresolver>
</application>
<!
|=================Navigationrules=================
>
<navigationrule>
<navigationcase>
<fromoutcome>home</fromoutcome>
<toviewid>/listProduct.jspx</toviewid>
</navigationcase>
</navigationrule>
<navigationrule>
<fromviewid>/listProduct.jspx</fromviewid>
<navigationcase>
<fromoutcome>editProduct</fromoutcome>
<toviewid>/editProduct.jspx</toviewid>
</navigationcase>
</navigationrule>
</facesconfig>
SepuedeapreciarcomoslohayconfiguracingeneraldeJSFyreglasdenavegacin.Peronodeclaramosningn
managedbean.Estofuncionagraciasalalnea13dondeseleindicaaJSFquedebedelegarenSpringparabuscarlos
managedbeans.Esdecir,JSFlosbuscaraentrelosquedeclaremosenelfichero(siesquedeclaramosalguno,queno
esnuestrocaso),ysinoloencuentra,lobuscarenSpring.
Comosepuedecomprobar,tambinnosahorramosescribircantidaddecdigoeneseXML.
9.Diferenciaentrelasanotaciones@Repository,@Service,@Controller
Ladiferenciaesbsicamentesemntica,esdecir,cadaunadenotaperfectamenteaque"capa"correspondelaclase
anotada.Perotodassecomportandeigualmanera(porejemploentodasnuestrasclasespodramoshaberusadola
anotacin@Serviceyhubierafuncionadoigual).
Estoseconsigueporquelastresanotacionesextiendenlaanotacin@Component.
Elhechodeusaranotacionesdiferentespuedesermuyinteresantesiluegoqueremosaplicaraspectos(AOP=Aspect
OrientedProgramming)atodaslasclasesdeunamismacapa.Esdecir,porejemplo,puedohacerunareglaparaaplicar
ciertoadviceatodaslasclasesconlaanotacin@Controller.
10.Conclusiones
GraciasaSpring+Hibernate+AnotacionespodemosconseguirreducirlostiemposdedesarrolloconJava.
YaexistenotrotipodeframeworkssimilarescomoEJB3.0oSeam(deJBoss)quetambinsebasanenanotaciones,
peropodemosveralgunasventajasdeusarSpring+Hibernate:
ConSpring+HibernatepodemosusarcontenedoresligeroscomoTomcat,mientrasqueconEJB3.0oSeam
estamoscondenadosausarunservidordeaplicacionescomoJBoss.Eltenerqueusarporobligacinunservidor
deaplicacionesaumentalostiemposdedesarrolloyaquesetardamsendesplegarenunservidorde
aplicacionesqueenunTomcat.Ademsnecesitaremosmsrecursos.
ConSpring+HibernatepodemoshacertodoeldesarrolloenunTomcat,aunquefinalmenteacabemosinstalando
enproduccinenunservidordeaplicaciones.
ConSpring+Hibernatepodemosescribiraplicacionesnormalesdeescritorioolneadecomandos,mientrasque
conEJB3.0oSeamno,esdecirconSpring+Hibernate,noesquenosvalgaconuncontenedorligero,esqueno
tenemosporqueusaruncontenedorenabsoluto.
http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=desarrolloRapidoJava
8/14
16/4/2015
Spring+Hibernate+Anotaciones=DesarrolloRpidoenJava
Springdacantidaddefacilidades,comoSeam,yposiblementemsqueEJB3.0(yaqueseintegracongran
cantidaddeotrosframeworks).AunquenohayqueolvidarqueEJB3.0permitetransaccionesdistribuidas(Spring+
Hibernatenolopermiten,aunquesepuedenuniraunatransaccinJTAgestionadaporunservidorde
aplicaciones),yademslosEJBssonporsimismosobjetosdistribuidos(muyfcilesdelocalizaryusardesde
cualquierpuntodenuestrared).
Alfinalnitodoesabsolutamentebuenonitodoesabsolutamentemalo.Poresodebemosconoceropciones,evitarel
"GoldenHammer",yquedarnosconlomejordecadacasa)
11.Sobreelautor
AlejandroPrezGarca,IngenieroenInformtica(especialidaddeIngenieradelSoftware)
SociofundadordeAutentia(Formacin,Consultora,Desarrollodesistemastransaccionales)
mailto:alejandropg@autentia.com
AutentiaRealBusinessSolutionsS.L."SoporteaDesarrollo"
http://www.autentia.com
12.Colaboraciones
AntonioMartnez,unodevosotros,noshamandadoelpom.xmlquelestusandoparaestetutorial.
Aquoslopodisdescargar.
MuchasgraciasAntonio!!!
Acontinuacinpuedesevaluarlo:
Regstrateparaevaluarlo
Porfavor,vota+1ocomprtelositepareciinteresante
Share |
AnmateycomntanosloquepiensessobreesteTUTORIAL:
Registrateyaccedeaestayotrasventajas
Fechapublicacin:2013102500:51:23
Autor:sotobotero
http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=desarrolloRapidoJava
9/14
16/4/2015
Spring+Hibernate+Anotaciones=DesarrolloRpidoenJava
Cordialsaludo,
Antetodoquierofelicitarelautor,excelentetutorial.
Quisierasabersialguientieneelfuentedelacapadepresentacindeestetutorial,otieneideadecomocrearel
componentequemanejalaentidadproductoyseencargadeleerlosdatosdellapagina.
<tnt:inputTextentity="#{editProduct.product}"field="name"required="true"/>
Agradezcosucolaboracio.
Fechapublicacin:2013030114:19:00
Autor:deadmau5
Muybuenpost!!Groso!!=)
Fechapublicacin:2012031300:12:40
Autor:alvarillo
buenastardes.graciasporcompartirestossupertutoriales.yosoynovatoenlaprogramacionjava,apenas
comenceuncursobasico,yahoritaquisierahacerunproyectomuyparecidoconspringhibernatexmlbeans.tengo
mibasededatosenpostgres,yatambientengomiarchivodto,yquisierahaceraltas,bajas,consultasyborrar
registros,teniendounfromdeadministracion.comolepodriahacer.yatambiencreemiproyectodespring.saludos
cordialesylesagradeceriasuayuda.
Fechapublicacin:2012022802:29:13
Autor:Calderas
Saludos.BuentutorialparaempezarconSpring.Tutorialesmsextendosterminanpordesanimar.
Tengode2a5clientesDesktopdiferentesperoquecompartenunmodelodenegociosencomn.Entiendoqueen
unservidordeaplicacionespuedocolocarJavaBeansEnterprisequemesirvirancomoelmodelodenegociosa
dondeseconectaranlasaplicacionesdesktoputilizandoRMI.
Luego,leoqueSpringofreceunamejorformadeusarlosJavaBeanssinemabargo,todoslosejemplosqueme
topo(comoelactual)usanclientesWebynoDesktop.
Entonces,esposibleusarSpringparahacerelmodelodenegociosyquedichomodeloseaaccesadodesdeunoo
variosclientesDesktop?
Seagradecesimedanelnorteoindicanalgnejemplootutorial.
JJ
Fechapublicacin:2012010321:48:26
http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=desarrolloRapidoJava
10/14
16/4/2015
Spring+Hibernate+Anotaciones=DesarrolloRpidoenJava
Autor:angel3d3
ltutorialestmuybueno,separecemuchoaloquenecesitoaprender,perocomosoynuevoenestotengoalgunos
problemasconlaslibrerasdespring,estoyprobandoestoenunaaplicacinqueyausaesta
formula(Spring+hibernate+anotations)peroalparecernotengolalibrera
org.springframework.stereotype.Repositorynecesariaparaelusode@Repositoryserquealguienpuede
ayudarme?estoyusandonetbeans7.0.1sobrewindows7yelerrorquemedaes:"Package
org.springframework.stereotype.Repositorydoesnotexist"
Fechapublicacin:2011032315:05:59
Autor:mpccolorado
NodeberahaberenlainterfazDaohayunmtodoremove?
Muchasgracias.
Muybuenartculo.Esjustoloquenecesitaba,porqueesfielatodoslosconsejosdadosenelmanualdereferencia
deSpring,peroatravsdeunejemplocompletamentefuncionalysencillo.
Fechapublicacin:2011013003:55:52
Autor:ARICARRARO
Buentutorial,sinembargotengounasugerencia.ApenasestoyconociendoSpringyestoyunpoco"verde",podrian
explicarunpocomssobrecomoconfigurarlasherramientascomo:
Faceletes
ICEFacesy
JSF
graciasporelaporte
Fechapublicacin:2011012014:21:41
Autor:sgomez85
Graciasporeltutorial,esexcelenteyjesustoloqueestababuscando:)
Fechapublicacin:2010111018:40:10
http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=desarrolloRapidoJava
11/14
16/4/2015
Spring+Hibernate+Anotaciones=DesarrolloRpidoenJava
Autor:Parche
Genialestesitio,osheseguidoenmuchasocaciones:)
Lacapadecontrolnomequedadeltodoclara,relamentenolaentiendo,podessubirunwarconelporyecto?os
loagradeceramuchsimo
Fechapublicacin:2010082614:42:16
Autor:chris456
Muybuentutorialperomeencantariaquepudieranponerelcodigoparadescargar,asicompararyencontrarmis
erroresalconfigurarlosframeworks
Fechapublicacin:2010010300:16:37
Autor:jcarmonaloeches
Animandoaloslectores.
Dagustoseguiroselhiloenlasevolucionestecnolgicasqueexisten.Esperoqueesteaosigisunbuenalnea,
osseguirleyendo.
Cuandoseaisabueletesynopodispensar,osrelevaremosenelcargo:)
Fechapublicacin:2009100619:14:12
Autor:oricha
MuybuenArticulo.Peroestaramuchomejorsiincluyeranalgunaformadeaccederalcodigo.
Fechapublicacin:2009082704:40:08
Autor:
http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=desarrolloRapidoJava
12/14
16/4/2015
Spring+Hibernate+Anotaciones=DesarrolloRpidoenJava
[AlfredoQuiroz]Excelente!!
Fechapublicacin:2009062306:48:36
Autor:
[raulrosenzvaig]Estariabuenoquealfinaldeltutorialsepuedabajarelwarconelcodigoyaqueamimeesta
costandointegrarestosdosframeworksysuinstalacion,saludos
Fechapublicacin:2009061106:49:03
Autor:
[PaulRomero]Interesantetuarticulo,comodicesseveunpococomplejoelApplicationContext,hubiesesidobueno
aclararunpocolasconfiguraciones,peroigualesmuybuenoelarticulo.
Fechapublicacin:2009060201:09:02
Autor:
[KrisBelucci]Hi,goodpost.Ihavebeenwonderingaboutthisissue,sothanksforposting.
Fechapublicacin:2009051205:19:03
Autor:
http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=desarrolloRapidoJava
13/14
16/4/2015
Spring+Hibernate+Anotaciones=DesarrolloRpidoenJava
[Jorge]buenoastardes
heleidoeltutorialymehaparecidomuybuenoperoestoyintentandomontarloenjboss4.2ymehansalidounos
erroresdeconfiguracionconelicefacelets
podrianayudarme
gracias
Fechapublicacin:2008051406:10:25
Autor:
[Paco]Alex,muybueno.
EstaobraestlicenciadabajolicenciaCreativeCommonsdeReconocimientoNocomercialSinobrasderivadas2.5
IMPULSA
sinclicks
Impulsores
Comunidad
Ayuda?
0personashantradoclicksaestapgina
poweredbykarmacracy
Copyright20032015AllRightsReserved|Textolegalycondicionesdeuso|Banners|PoweredbyAutentia|Contacto
http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=desarrolloRapidoJava
14/14