vlw Mario, minha preocupacao e justamente esssa... a performace do banco... vou aperfeiçoar essa ideia. De qualquer forma vlw... vou dar uma olha no TIDE...
abrass... Em 10 de maio de 2010 13:10, Mário Júnior <[email protected]> escreveu: > Sim... desde que a consulta nao seja tao grande (ter muitos filhos > associados ao registro pai) tudo bem. > > Senao, vc pode matar seu server... para essas situações é bem propício q > apareça o classico "out of memory: pergem space". > > > Bom.. dá uma olhada no TIDE do GraniteDS, derepente seja uma boa solucao > pra vc. Ou, manipular os VOs para q traga so qndo vc realmente precisar > desses dados. > > > []s > > > > > Em 10 de maio de 2010 09:18, Marcelo Caser <[email protected]>escreveu: > > opa!! >> >> grande Mário! >> >> Finalmente uma luz... qual seria sua sugestão!?! rsrsrs... >> >> Apriore o que fiz foi fazer o usar a anotacao @ManyToOne sem >> FetchType.LAZY, assim ele me traz os objetos filhos... >> >> Em 10 de maio de 2010 00:21, Mário Júnior <[email protected]>escreveu: >> >> Vc esta tentando fazer isso para fugir do famoso (e difamado) problema de >>> lazy-load na serializacao das consultas? >>> Se sim, creio q nao vá funcionar, pq no momento da serializacao, o >>> JavaAdapter "padrao" do blaze não vai conseguir ler o objeto pq a lista >>> ainda "nao existe". Até existe uma referencia lá, mas repare q não sao os >>> objetos (registros) relacionados ao registro pai... na verdade é apenas um >>> para o interceptor do Hibernate poder ter referencia do objeto pai para >>> anexar os filhos, depois de carrega-los do banco Vc vai perceber tb q uma >>> série de atributos q vc não declarou estará sendo mostrado naquele objeto, >>> pq o Hibernate usa o . >>> >>> Enfim, oq poderia tentar fazer (veja só, "tentar" significa q eu ainda >>> nao fiz, mas teoricamente não vai funcionar também :P) seria estender o >>> adapter e dar um Hibernate.initialize() na colecao que vc quer, mas isso num >>> pontos específico onde vc teria q varrer todos os objetos passados pela >>> decodificacao da classe Amf3Output.java para só dar initialize quando >>> realmente precisar. >>> >>> Na pratica, é mais-ou-menos isso que o GraniteDS faz, mas de uma forma >>> bem mais estruturada (não só estendendo o adapter, mas criando outras >>> factories e um interceptor. Isso ficou melhor no framework que o Frank Wolf >>> criou, chamando de TIDE). >>> >>> Concluindo, não é algo relativamente "simples". >>> >>> Boa sorte, []s >>> >>> >>> >>> >>> Em 9 de maio de 2010 22:16, Marcelo Caser <[email protected]>escreveu: >>> >>>> nao, nao... estou trabalhando com hibernate+spring+blazeds+java... estou >>>> mapeando as classes do java, os "TO", Externalizable. >>>> >>>> Para entender melhor o quadro segue abaixo o que estou fazendo: sao 3 >>>> classes java que estou usando no momento. >>>> >>>> *Classes Java:* >>>> >>>> package br.org.oabgo.saeo.entidade; >>>> >>>> import static javax.persistence.GenerationType.IDENTITY; >>>> >>>> import java.io.Externalizable; >>>> import java.io.IOException; >>>> import java.io.ObjectInput; >>>> import java.io.ObjectOutput; >>>> import java.io.Serializable; >>>> import java.sql.Timestamp; >>>> import java.util.HashSet; >>>> import java.util.Set; >>>> >>>> import javax.persistence.CascadeType; >>>> import javax.persistence.Column; >>>> import javax.persistence.Entity; >>>> import javax.persistence.FetchType; >>>> import javax.persistence.GeneratedValue; >>>> import javax.persistence.Id; >>>> import javax.persistence.OneToMany; >>>> import javax.persistence.Table; >>>> import javax.persistence.Transient; >>>> >>>> import core.dao.TransferObject; >>>> >>>> @Entity >>>> @Table(name = "tbDsCertameExameOrdem") >>>> public class *CertameTO* extends TransferObject implements >>>> Externalizable { >>>> >>>> @Id >>>> @GeneratedValue(strategy = IDENTITY) >>>> @Column(name = "Id", unique = true, nullable = false, precision = >>>> 18, scale = 0) >>>> private Long id; >>>> >>>> @Column(name = "intNumeroLivro") >>>> private Integer intNumeroLivro; >>>> >>>> @Column(name = "vchDescricao", nullable = false, length = 50) >>>> private String vchDescricao; >>>> >>>> @Column(name = "datDataProvaObjetiva", length = 23) >>>> private Timestamp datDataProvaObjetiva; >>>> >>>> @Column(name = "datDataProvaEscrita", length = 23) >>>> private Timestamp datDataProvaEscrita; >>>> >>>> @Column(name = "datDataProvaOral", length = 23) >>>> private Timestamp datDataProvaOral; >>>> >>>> @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, >>>> mappedBy = "certameTO") >>>> private Set<CandidatoTO> candidatoTOs = new HashSet<CandidatoTO>(0); >>>> >>>> public CertameTO() { >>>> } >>>> >>>> // *** Gets and Sets *** >>>> >>>> @Transient >>>> public Serializable getKey() { >>>> return getId(); >>>> } >>>> >>>> public void setId(Serializable id) { >>>> this.id = (Long) id; >>>> } >>>> >>>> public Long getId() { >>>> return id; >>>> } >>>> >>>> public Integer getIntNumeroLivro() { >>>> return intNumeroLivro; >>>> } >>>> >>>> public void setIntNumeroLivro(Integer intNumeroLivro) { >>>> this.intNumeroLivro = intNumeroLivro; >>>> } >>>> >>>> public String getVchDescricao() { >>>> return vchDescricao; >>>> } >>>> >>>> public void setVchDescricao(String vchDescricao) { >>>> this.vchDescricao = vchDescricao; >>>> } >>>> >>>> public Timestamp getDatDataProvaObjetiva() { >>>> return datDataProvaObjetiva; >>>> } >>>> >>>> public void setDatDataProvaObjetiva(Timestamp datDataProvaObjetiva) >>>> { >>>> this.datDataProvaObjetiva = datDataProvaObjetiva; >>>> } >>>> >>>> public Timestamp getDatDataProvaEscrita() { >>>> return datDataProvaEscrita; >>>> } >>>> >>>> public void setDatDataProvaEscrita(Timestamp datDataProvaEscrita) { >>>> this.datDataProvaEscrita = datDataProvaEscrita; >>>> } >>>> >>>> public Timestamp getDatDataProvaOral() { >>>> return datDataProvaOral; >>>> } >>>> >>>> public void setDatDataProvaOral(Timestamp datDataProvaOral) { >>>> this.datDataProvaOral = datDataProvaOral; >>>> } >>>> >>>> public Set<CandidatoTO> getCandidatoTOs() { >>>> return candidatoTOs; >>>> } >>>> >>>> public void setCandidatoTOs(Set<CandidatoTO> candidatoTOs) { >>>> this.candidatoTOs = candidatoTOs; >>>> } >>>> >>>> public void setId(Long id) { >>>> this.id = id; >>>> } >>>> >>>> @SuppressWarnings("unchecked") >>>> @Override >>>> public void readExternal(ObjectInput in) throws IOException, >>>> ClassNotFoundException { >>>> id = in.readLong(); >>>> intNumeroLivro = (Integer) in.readObject(); >>>> vchDescricao = (String) in.readObject(); >>>> datDataProvaObjetiva = (Timestamp) in.readObject(); >>>> datDataProvaEscrita = (Timestamp) in.readObject(); >>>> datDataProvaOral = (Timestamp) in.readObject(); >>>> candidatoTOs = (Set<CandidatoTO>) in.readObject(); >>>> } >>>> >>>> @Override >>>> public void writeExternal(ObjectOutput out) throws IOException { >>>> out.writeObject(id); >>>> out.writeObject(intNumeroLivro); >>>> out.writeObject(vchDescricao); >>>> out.writeObject(datDataProvaObjetiva); >>>> out.writeObject(datDataProvaEscrita); >>>> out.writeObject(datDataProvaOral); >>>> out.writeObject(candidatoTOs); >>>> } >>>> >>>> } >>>> >>>> package br.org.oabgo.saeo.entidade; >>>> >>>> import static javax.persistence.GenerationType.IDENTITY; >>>> >>>> import java.io.Externalizable; >>>> import java.io.IOException; >>>> import java.io.ObjectInput; >>>> import java.io.ObjectOutput; >>>> import java.io.Serializable; >>>> >>>> import javax.persistence.Column; >>>> import javax.persistence.Entity; >>>> import javax.persistence.FetchType; >>>> import javax.persistence.GeneratedValue; >>>> import javax.persistence.Id; >>>> import javax.persistence.JoinColumn; >>>> import javax.persistence.ManyToOne; >>>> import javax.persistence.Table; >>>> import javax.persistence.Transient; >>>> >>>> import core.dao.TransferObject; >>>> >>>> @Entity >>>> @Table(name = "tbCdCandidatoAnteriorExameOrdem") >>>> public class *CandidatoTO* extends TransferObject implements >>>> Externalizable { >>>> >>>> @Id >>>> @GeneratedValue(strategy = IDENTITY) >>>> @Column(name = "Id", unique = true, nullable = false, precision = >>>> 18, scale = 0) >>>> private Long id; >>>> >>>> @ManyToOne(fetch = FetchType.LAZY) >>>> @JoinColumn(name = "IdCertame") >>>> private CertameTO certameTO; >>>> >>>> @ManyToOne(fetch = FetchType.LAZY) >>>> @JoinColumn(name = "IdAreaAtuacao") >>>> private AreaAtuacaoTO areaAtuacao; >>>> >>>> @Column(name = "intNumeroSequencia", nullable = false) >>>> private Integer intNumeroSequencia; >>>> >>>> @Column(name = "intPaginaLivro", nullable = false) >>>> private Integer intPaginaLivro; >>>> >>>> @Column(name = "vchNomeCandidato", nullable = false, length = 60) >>>> private String vchNomeCandidato; >>>> >>>> @Column(name = "bitSituacao", nullable = false) >>>> private Boolean bitSituacao; >>>> >>>> @Column(name = "texObservacao") >>>> private String texObservacao; >>>> >>>> >>>> public CandidatoTO() { >>>> } >>>> >>>> // *** Gets and Sets *** >>>> >>>> @Transient >>>> public Serializable getKey() { >>>> return getId(); >>>> } >>>> >>>> public void setId(Serializable id) { >>>> this.id = (Long)id; >>>> } >>>> >>>> public Long getId() { >>>> return id; >>>> } >>>> >>>> public void setId(Long id) { >>>> this.id = id; >>>> } >>>> >>>> public CertameTO getCertameTO() { >>>> return certameTO; >>>> } >>>> >>>> public void setCertameTO(CertameTO certameTO) { >>>> this.certameTO = certameTO; >>>> } >>>> >>>> public AreaAtuacaoTO getAreaAtuacao() { >>>> return areaAtuacao; >>>> } >>>> >>>> public void setAreaAtuacao(AreaAtuacaoTO areaAtuacao) { >>>> this.areaAtuacao = areaAtuacao; >>>> } >>>> >>>> public Integer getIntNumeroSequencia() { >>>> return intNumeroSequencia; >>>> } >>>> >>>> public void setIntNumeroSequencia(Integer intNumeroSequencia) { >>>> this.intNumeroSequencia = intNumeroSequencia; >>>> } >>>> >>>> public Integer getIntPaginaLivro() { >>>> return intPaginaLivro; >>>> } >>>> >>>> public void setIntPaginaLivro(Integer intPaginaLivro) { >>>> this.intPaginaLivro = intPaginaLivro; >>>> } >>>> >>>> public String getVchNomeCandidato() { >>>> return vchNomeCandidato; >>>> } >>>> >>>> public void setVchNomeCandidato(String vchNomeCandidato) { >>>> this.vchNomeCandidato = vchNomeCandidato; >>>> } >>>> >>>> public Boolean getBitSituacao() { >>>> return bitSituacao; >>>> } >>>> >>>> public void setBitSituacao(Boolean bitSituacao) { >>>> this.bitSituacao = bitSituacao; >>>> } >>>> >>>> public String getTexObservacao() { >>>> return texObservacao; >>>> } >>>> >>>> public void setTexObservacao(String textObservacao) { >>>> this.texObservacao = textObservacao; >>>> } >>>> >>>> @Override >>>> public void readExternal(ObjectInput in) throws IOException, >>>> ClassNotFoundException { >>>> id = in.readLong(); >>>> certameTO = (CertameTO) in.readObject(); >>>> areaAtuacao = (AreaAtuacaoTO) in.readObject(); >>>> intNumeroSequencia = (Integer) in.readObject(); >>>> intPaginaLivro = (Integer) in.readObject(); >>>> vchNomeCandidato = (String) in.readObject(); >>>> bitSituacao = in.readBoolean(); >>>> texObservacao = (String) in.readObject(); >>>> } >>>> >>>> @Override >>>> public void writeExternal(ObjectOutput out) throws IOException { >>>> out.writeObject(id); >>>> out.writeObject(certameTO); >>>> out.writeObject(areaAtuacao); >>>> out.writeObject(intNumeroSequencia); >>>> out.writeObject(intPaginaLivro); >>>> out.writeObject(vchNomeCandidato); >>>> out.writeObject(bitSituacao); >>>> out.writeObject(texObservacao); >>>> } >>>> >>>> } >>>> >>>> package br.org.oabgo.saeo.entidade; >>>> >>>> import static javax.persistence.GenerationType.IDENTITY; >>>> >>>> import java.io.Externalizable; >>>> import java.io.IOException; >>>> import java.io.ObjectInput; >>>> import java.io.ObjectOutput; >>>> import java.io.Serializable; >>>> >>>> import javax.persistence.Column; >>>> import javax.persistence.Entity; >>>> import javax.persistence.GeneratedValue; >>>> import javax.persistence.Id; >>>> import javax.persistence.Table; >>>> import javax.persistence.Transient; >>>> import javax.persistence.UniqueConstraint; >>>> >>>> import core.dao.TransferObject; >>>> >>>> @Entity >>>> @Table(name = "tbDsAreasAtuacoes", uniqueConstraints = >>>> @UniqueConstraint(columnNames = "vchDescricao")) >>>> public class *AreaAtuacaoTO* extends TransferObject implements >>>> Externalizable { >>>> >>>> @Id >>>> @GeneratedValue(strategy = IDENTITY) >>>> @Column(name = "Id", unique = true, nullable = false, precision = >>>> 18, scale = 0) >>>> private Long id; >>>> >>>> @Column(name = "intCodigo") >>>> private Integer intCodigo; >>>> >>>> @Column(name = "vchDescricao", unique = true, nullable = false, >>>> length = 50) >>>> private String vchDescricao; >>>> >>>> public AreaAtuacaoTO() { >>>> } >>>> >>>> // *** Gets and Sets *** >>>> >>>> @Transient >>>> public Serializable getKey() { >>>> return getId(); >>>> } >>>> >>>> public void setId(Serializable id) { >>>> this.id = (Long) id; >>>> } >>>> >>>> public Long getId() { >>>> return id; >>>> } >>>> >>>> public void setId(Long id) { >>>> this.id = id; >>>> } >>>> >>>> public Integer getIntCodigo() { >>>> return intCodigo; >>>> } >>>> >>>> public void setIntCodigo(Integer intCodigo) { >>>> this.intCodigo = intCodigo; >>>> } >>>> >>>> public String getVchDescricao() { >>>> return vchDescricao; >>>> } >>>> >>>> public void setVchDescricao(String vchDescricao) { >>>> this.vchDescricao = vchDescricao; >>>> } >>>> >>>> @Override >>>> public void readExternal(ObjectInput in) throws IOException, >>>> ClassNotFoundException { >>>> id = in.readLong(); >>>> intCodigo = (Integer) in.readObject(); >>>> vchDescricao = (String) in.readObject(); >>>> } >>>> >>>> @Override >>>> public void writeExternal(ObjectOutput out) throws IOException { >>>> out.writeObject(id); >>>> out.writeObject(intCodigo); >>>> out.writeObject(vchDescricao); >>>> } >>>> >>>> } >>>> >>>> e abaixo eu tenho minhas classes em AS3 mapeadas: >>>> >>>> package br.org.oabgo.saeo.entidade >>>> { >>>> import flash.utils.IDataInput; >>>> import flash.utils.IDataOutput; >>>> import flash.utils.IExternalizable; >>>> >>>> import mx.collections.ArrayCollection; >>>> >>>> >>>> [RemoteClass(alias="br.org.oabgo.saeo.entidade.CertameTO")] >>>> [Bindable] >>>> public class* CertameTO* implements IExternalizable >>>> { >>>> >>>> public var id:Number; >>>> >>>> public var intNumeroLivro:int; >>>> >>>> public var vchDescricao:String; >>>> >>>> public var datDataProvaObjetiva:Date; >>>> >>>> public var datDataProvaEscrita:Date; >>>> >>>> public var datDataProvaOral:Date; >>>> >>>> public var candidatoTOs:ArrayCollection; >>>> >>>> public function CertameTO() >>>> { >>>> } >>>> >>>> public function readExternal(input:IDataInput):void >>>> { >>>> id = input.readObject() as Number; >>>> intNumeroLivro = input.readObject() as int; >>>> vchDescricao = input.readObject() as String; >>>> datDataProvaObjetiva = input.readObject() as Date; >>>> datDataProvaEscrita = input.readObject() as Date; >>>> datDataProvaOral = input.readObject() as Date; >>>> candidatoTOs = input.readObject() as ArrayCollection; >>>> } >>>> >>>> public function writeExternal(output:IDataOutput):void >>>> { >>>> output.writeObject(id); >>>> output.writeObject(intNumeroLivro); >>>> output.writeObject(vchDescricao); >>>> output.writeObject(datDataProvaObjetiva); >>>> output.writeObject(datDataProvaEscrita); >>>> output.writeObject(datDataProvaOral); >>>> output.writeObject(candidatoTOs); >>>> } >>>> } >>>> } >>>> >>>> package br.org.oabgo.saeo.entidade >>>> { >>>> import flash.utils.IDataInput; >>>> import flash.utils.IDataOutput; >>>> import flash.utils.IExternalizable; >>>> >>>> [RemoteClass(alias="br.org.oabgo.saeo.entidade.CandidatoTO")] >>>> [Bindable] >>>> public class *CandidatoTO* implements IExternalizable >>>> { >>>> >>>> public var id:Number; >>>> >>>> public var certameTO:CertameTO; >>>> >>>> public var areaAtuacao:AreaAtuacaoTO; >>>> >>>> public var intNumeroSequencia:int; >>>> >>>> public var intPaginaLivro:int; >>>> >>>> public var vchNomeCandidato:String; >>>> >>>> public var bitSituacao:Boolean; >>>> >>>> public var texObservacao:String; >>>> >>>> public function CandidatoTO() >>>> { >>>> } >>>> >>>> public function readExternal(input:IDataInput):void >>>> { >>>> id = input.readObject() as Number; >>>> certameTO = input.readObject() as CertameTO; >>>> areaAtuacao = input.readObject() as AreaAtuacaoTO; >>>> intNumeroSequencia = input.readObject() as int; >>>> intPaginaLivro = input.readObject() as int; >>>> vchNomeCandidato = input.readObject() as String >>>> bitSituacao = input.readBoolean(); >>>> texObservacao = input.readObject() as String; >>>> } >>>> >>>> public function writeExternal(output:IDataOutput):void >>>> { >>>> output.writeObject(id); >>>> output.writeObject(certameTO); >>>> output.writeObject(areaAtuacao); >>>> output.writeObject(intNumeroSequencia); >>>> output.writeObject(intPaginaLivro); >>>> output.writeObject(vchNomeCandidato); >>>> output.writeObject(bitSituacao); >>>> output.writeObject(texObservacao); >>>> } >>>> } >>>> } >>>> >>>> package br.org.oabgo.saeo.entidade >>>> { >>>> import flash.utils.IDataInput; >>>> import flash.utils.IDataOutput; >>>> import flash.utils.IExternalizable; >>>> >>>> [RemoteClass(alias="br.org.oabgo.saeo.entidade.AreaAtuacaoTO")] >>>> [Bindable] >>>> public class* AreaAtuacaoTO* implements IExternalizable >>>> { >>>> >>>> public var id:Number; >>>> >>>> public var intCodigo:Number; >>>> >>>> public var vchDescricao:String; >>>> >>>> public function AreaAtuacaoTO() >>>> { >>>> } >>>> >>>> public function readExternal(input:IDataInput):void >>>> { >>>> id = input.readObject() as Number; >>>> intCodigo = input.readObject() as int; >>>> vchDescricao = input.readObject() as String; >>>> } >>>> >>>> public function writeExternal(output:IDataOutput):void >>>> { >>>> output.writeObject(id); >>>> output.writeObject(intCodigo); >>>> output.writeObject(vchDescricao); >>>> } >>>> >>>> } >>>> } >>>> >>>> O erro ocorre quando eu trago todos os "Certames" cadastrados, vindos de >>>> um metodo List<CertamesTO>. Estou fazendo algo errado? >>>> >>>> -- >>>> Você recebeu esta mensagem porque está inscrito na lista "flexdev" >>>> Para enviar uma mensagem, envie um e-mail para [email protected] >>>> Para sair da lista, envie um email em branco para >>>> [email protected] >>>> Mais opções estão disponíveis em http://groups.google.com/group/flexdev >>>> >>> >>> >>> >>> -- >>> Mario Junior >>> http://blog.mariojunior.com/ >>> @mariojunior >>> >>> -- >>> Você recebeu esta mensagem porque está inscrito na lista "flexdev" >>> Para enviar uma mensagem, envie um e-mail para [email protected] >>> Para sair da lista, envie um email em branco para >>> [email protected] >>> Mais opções estão disponíveis em http://groups.google.com/group/flexdev >>> >> >> -- >> Você recebeu esta mensagem porque está inscrito na lista "flexdev" >> Para enviar uma mensagem, envie um e-mail para [email protected] >> Para sair da lista, envie um email em branco para >> [email protected] >> Mais opções estão disponíveis em http://groups.google.com/group/flexdev >> > > > > -- > Mario Junior > http://blog.mariojunior.com/ > @mariojunior > > -- > Você recebeu esta mensagem porque está inscrito na lista "flexdev" > Para enviar uma mensagem, envie um e-mail para [email protected] > Para sair da lista, envie um email em branco para > [email protected] > Mais opções estão disponíveis em http://groups.google.com/group/flexdev > -- Você recebeu esta mensagem porque está inscrito na lista "flexdev" Para enviar uma mensagem, envie um e-mail para [email protected] Para sair da lista, envie um email em branco para [email protected] Mais opções estão disponíveis em http://groups.google.com/group/flexdev
