Salvando Objeto Java+Blaze+Flex

12 respostas
R

Pessoal,

Estou com uma dificuldade para salvar um Objeto com relacionamento. O Problema Ocorre quando tento pegar os valores dos objeto relacionais no Flex.
Debuguei e a única variável que não fica nula é a this.voDesvio.cdTpjustif=cbTpjustif.selectedItem.cdTpjustif;
, justamente a única que não tem relacionamento.

Segue a função e a classe.as

private function button2_clickHandler(event:MouseEvent):void
			{		
				this.voDesvio=new Desvio();
				
				this.voDesvio.cdPeriodo=voPeriodo.cdPeriodo as Periodo;
				this.voDesvio.cdTpjustif=cbTpjustif.selectedItem.cdTpjustif;
				this.voDesvio.idMovimento=movimentoDesvio.idMovimento as com.fozci.sicorc.vo.Movimento;
				this.voDesvio.idConta=movimentoDesvio.idConta.idConta as Plconta;
				
				desvioService.justificarDesvio(voDesvio);
			}

12 Respostas

heroijapa

Precisa ver se você mapeou os relacionamentos corretamente do lado do flex com as classes certas, posta teus objetos em flex e java pra ver se da pra te ajudar melhor

R

Acredito que o mapeamento esta certo acho que nao estou sabendo passar os valores.

package com.fozci.sicorc.vo
{
	[RemoteClass(alias="com.fozci.sicorc.model.Desvio")] 
	
	[Bindable]
	public class Desvio
	{
		public function Desvio()		
		{}

			public var cdTpjustif:Number

			public var idMovimento:Movimento

			public var cdPeriodo:Periodo 

			public var idConta:Plconta

			
		}
									
}
ublic class Desvio implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = "id_desvio")
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Integer idDesvio;
    @Basic(optional = false)
    @Column(name = "cd_tpjustif")
    private short cdTpjustif;
    @JoinColumn(name = "id_movimento", referencedColumnName = "id_movimento")
    @ManyToOne(optional = false)
    private Movimento idMovimento;
    @JoinColumn(name = "cd_periodo", referencedColumnName = "cd_periodo")
    @ManyToOne(optional = false)
    private Periodo cdPeriodo;
    @JoinColumn(name = "id_conta", referencedColumnName = "id_conta")
    @ManyToOne(optional = false)
    private Plconta idConta;
heroijapa

É pra mim parece ok, precisa ver as outras classes se elas estão com o [RemoteClass] certinho.

se voce não configurar essa tag em tudo (nas classes relacionadas) pode dar erro também

R

Cara revisei as outras classes e estao tudo com RemoteClass, o estranho e que as variaveis antes de serem enviadas todas estao com valores null mesnos a tpjustif.
Fiz um teste de printar os valores na tela do flex e sao carregados normalmente.

heroijapa

tem como ativar o debug do blazeds para ver o que está rolando, dai em teoria da pra ver se o flex enviou e o blaze não entendeu ou se o problema já foi antes.

Faz uns meses que não trabalhamos em projetos flex aqui, mas pelo que lembre era alterar a tag

o level aceita All, Debug, Error, Info, None, and Warn

acho que usavamos Debug nesses casos

ai ele imprime no console do servidor o que ta rolando por trás do BlazeDS

heroijapa

esqueci de citar ondde fica, essa tag fica no WEB-INF/flex/services-config.xml

R

E so alterar a tag e debugar a aplicao normalmente? Ou tem que debugar o BlazeDS?

heroijapa

Boa pergunta, seu que tem de reinicar o servidor
Na pior das hipotedes rodar o servidor em modo debug, mas acho que não era necessário.

R

Ele retorna um erro ao Salvar:

org.hibernate.PropertyValueException: not-null property references a null or transient value: com.fozci.sicorc.model.Desvio.cdPeriodo

at org.hibernate.engine.Nullability.checkNullability(Nullability.java:95)

at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:313)

at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)

at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130)

at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)

at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56)

at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)

at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50)

at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)

at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:562)

at org.hibernate.impl.SessionImpl.save(SessionImpl.java:550)

at org.hibernate.impl.SessionImpl.save(SessionImpl.java:546)

at com.fozci.sicorc.persistence.DesvioDAO.justificarDesvio(DesvioDAO.java:22)

at com.fozci.sicorc.service.DesvioService.justificarDesvio(DesvioService.java:12)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at flex.messaging.services.remoting.adapters.JavaAdapter.invoke(JavaAdapter.java:421)

at flex.messaging.services.RemotingService.serviceMessage(RemotingService.java:183)

at flex.messaging.MessageBroker.routeMessageToService(MessageBroker.java:1495)

at flex.messaging.endpoints.AbstractEndpoint.serviceMessage(AbstractEndpoint.java:882)

at flex.messaging.endpoints.amf.MessageBrokerFilter.invoke(MessageBrokerFilter.java:121)

at flex.messaging.endpoints.amf.LegacyFilter.invoke(LegacyFilter.java:158)

at flex.messaging.endpoints.amf.SessionFilter.invoke(SessionFilter.java:44)

at flex.messaging.endpoints.amf.BatchProcessFilter.invoke(BatchProcessFilter.java:67)

at flex.messaging.endpoints.amf.SerializationFilter.invoke(SerializationFilter.java:146)

at flex.messaging.endpoints.BaseHTTPEndpoint.service(BaseHTTPEndpoint.java:278)

at flex.messaging.MessageBrokerServlet.service(MessageBrokerServlet.java:315)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)

at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)

at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)

at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)

at java.lang.Thread.run(Thread.java:637)
heroijapa

isso é por causa do @ManyToOne(optional = false)

Ou seja se o valor for null o hibernate não salva.

O Debug funcionou? deu pra ver os objetos que sairam do flex para o blaze ds?

R

Entao, no Debug o que observei foi o seguinte.

Eu declaro cada vo no flex:

<vo:Movimento id="movimentoDesvio"/>
			<vo:Tpjustif id="tpj"/>
			<vo:Plconta id="voPlconta"/>
			<vo:Periodo id="voPeriodo"/>

Todas essas declaracoes sao carregadas com seus objetos corretamente, ou seja, cada id tem seus atributos carregados normalmente.

Ja quando o debug passa pelo o Objeto voDesvio todas as variaveis que eu tento atribuir valor para salvar o Debub mostra como null menos a tpjustif isso antes mesmo de executar o desvioService.justificarDesvio(voDesvio);
Entao podemos concluir que ele nao chega a passar as variaveis para o Blaze correto?

R

Problema Resolvido!!!

Quando eu fazia:

this.voDesvio.cdPeriodo=voPeriodo.cdPeriodo as Periodo;  
                this.voDesvio.cdTpjustif=cbTpjustif.selectedItem.cdTpjustif;  
                this.voDesvio.idMovimento=movimentoDesvio.idMovimento as com.fozci.sicorc.vo.Movimento;  
                this.voDesvio.idConta=movimentoDesvio.idConta.idConta as Plconta;

eu nao estava passando o Objeto Periodo, Movimento e Plconta e sim o atributo de cada Objeto, como o voDesvio estava esperando cada Objeto o mesmo nao preenhia as variaveis.

heroijapa valeu pela ajuda!!!

Criado 25 de agosto de 2011
Ultima resposta 25 de ago. de 2011
Respostas 12
Participantes 2