Sunteți pe pagina 1din 14

16/4/2015

Spring+Hibernate+Anotaciones=DesarrolloRpidoenJava
EntraenAdictosatravsde

Email
Contrasea
Registrarme
Olvidmicontrasea

Entrar

Inicio

Quinessomos

Formacin

Comparadordesalarios

Nuestroslibros

Ms

Estsen:Inicio Tutoriales Spring+Hibernate+Anotaciones=DesarrolloRpidoenJava

AlejandroPrezGarca
AlejandroessociofundadordeAutentiaynuestroexpertoenJ2EE,Linuxy
optimizacindeaplicacionesempresariales.

Catlogodeservicios
Autentia

IngenieroenInformticayCertifiedScrumMaster
Seguira@alejandropgarci

1,145seguidores

Sitegustaloqueves,puedescontratarleparadarteayudaconsoporteexperto,
impartircursospresencialesentuempresaoparaquerealicemostusproyectos
comofactora(Madrid).
PuedesencontrarmeenAutentia:Ofrecemosserviciosdesoporteadesarrollo,
factorayformacin.
Vertodoslostutorialesdelautor

DIPLOMADO

DISTANCIA

Cursos y Programas en lnea, Diplomados en diver

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.

print

@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.

print

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.

print

@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.

print

@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.

print

@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.

print

@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.

print

<ice:commandButtonvalue="Aadirproducto"action="#{listProduct.editProduct}"/>
viewplain

print

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.

print

<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.

print

<?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.

print

<?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.

print

<?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

S-ar putea să vă placă și