Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Чудесное исчезновение / 15 сообщений из 15, страница 1 из 1
01.08.2014, 15:09
    #38710927
Rebeled
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чудесное исчезновение
Имеется два приклада.
Первый приклад вызывает метод второго по WS.
В методе второго приклада
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
 public EntityObj magicMethod(){
        EntityObj obj = null;
        EntityObj result = null;
        EntityManager em = getEntityManager();
        Query query = em.createNamedQuery("EntityObj.findBySomeThing");
        obj = (EntityObj) query.getSingleResult();
        result = obj;//Вот это важно
        return result;
    }


Из базы через Hibernate извлекается Entity объект, переприсваевается другой переменной и отправляется в ретурн по вебсервису.
В чем беда: почему то одно из полей EntityObj с типом java.util.Date при этом обнуляется. Т.е. на втором прикладе оно перед ретурном есть, а в первом его уже нет, после прохождения через SOAP WS.
Очень похоже на то, что это поле присваивается какой то локальной переменной, которая уничтожается после отрабатывания метода вебсервиса.
Если перед ретурном сделать
Код: java
1.
         result.setMagicDate(new Date(ret.getMagicDate().getTime()));


или вместо переприсваивания клонировать весь объект EntityObj obj в EntityObj result, то проблема решается.
В чем вопрос: с чем связанно такое "выборочное" обнуление полей EntityObj? Почему не обнулились другие поля или весь result? В каких ещё случаях такое возможно?
...
Рейтинг: 0 / 0
01.08.2014, 15:12
    #38710935
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чудесное исчезновение
Поставить breakpoint на setMagicDate() и посмотреть?
...
Рейтинг: 0 / 0
01.08.2014, 15:14
    #38710939
Rebeled
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чудесное исчезновение
BlazkowiczПоставить breakpoint на setMagicDate() и посмотреть?
Ставил, не вызывается сеттер. По коду тоже рыскал, не нашел.
...
Рейтинг: 0 / 0
01.08.2014, 15:15
    #38710942
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чудесное исчезновение
new EntityObj().getMagicDate() - вернет null? Или есть какое-то значение по-умолчанию?
...
Рейтинг: 0 / 0
01.08.2014, 15:18
    #38710950
Rebeled
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чудесное исчезновение
Blazkowicznew EntityObj().getMagicDate() - вернет null? Или есть какое-то значение по-умолчанию?
null
...
Рейтинг: 0 / 0
01.08.2014, 15:21
    #38710957
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чудесное исчезновение
Можно поставить field breakpoint. Но тормозить будет жутко.
...
Рейтинг: 0 / 0
01.08.2014, 15:24
    #38710964
Rebeled
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чудесное исчезновение
Листинг EntityObj:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
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.
package com.entity;

import java.io.Serializable;
import java.math.BigInteger;
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

@Entity
@Table(name = "SCOTT.ENTITY_OBJ")
@NamedQueries({@NamedQuery(name = "EntityObj.findBySomeThing", query = "...")

public class EntityObj  implements Cloneable, Serializable{
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = "ENTITY_OBJ_UNID")
    private long entityObjUnid;
    @Column(name = "ENTITY_UNID")
    private Long entityUnid;
    @Column(name = "ENTITY_OBJ_NAME")
    private String entityObjName;
    @Column(name = "MAGIC_DATE")
    @Temporal(TemporalType.DATE)
    private Date magicDate;
    @Transient
    private boolean someField = false;
    @Transient
    private String someField2;

    public EntityObj() {
    }

    //Get/Set ...
}
...
Рейтинг: 0 / 0
01.08.2014, 15:28
    #38710970
Rebeled
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чудесное исчезновение
BlazkowiczМожно поставить field breakpoint. Но тормозить будет жутко.
Т.е. Вы думаете, что тут не магия, а какое то прямое присваивание fieldа локальной переменной из кода? Я грешил на какие то особенности маппинга дат хибернетом.
...
Рейтинг: 0 / 0
01.08.2014, 15:34
    #38710985
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чудесное исчезновение
RebeledТ.е. Вы думаете, что тут не магия, а какое то прямое присваивание fieldа локальной переменной из кода? Я грешил на какие то особенности маппинга дат хибернетом.
Сложно сказать. А на getter если поставить брейкпоинт? SOAP сериализатор его вызывает?
...
Рейтинг: 0 / 0
01.08.2014, 16:11
    #38711038
Rebeled
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чудесное исчезновение
BlazkowiczRebeledТ.е. Вы думаете, что тут не магия, а какое то прямое присваивание fieldа локальной переменной из кода? Я грешил на какие то особенности маппинга дат хибернетом.
Сложно сказать. А на getter если поставить брейкпоинт? SOAP сериализатор его вызывает?
Да, аж 3 раза. Каждый раз значение не пустое.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
public Date getMagicDate() {
        try{throw new Exception();}
        catch(Exception ex){
            java.io.StringWriter writer = new java.io.StringWriter();
            java.io.PrintWriter printWriter = new java.io.PrintWriter( writer );
            ex.printStackTrace( printWriter );
            printWriter.flush();

            String stackTrace = writer.toString();
            System.out.println(stackTrace);
            System.out.println(magicDate+"");
        }

        return magicDate;
    }


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
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.
47.
48.
49.
50.
51.
	at com.entity.EntityObj.getMagicDate(EntityObj.java:552)
	at com.entity.EntityObj$JaxbAccessorM_getMagicDate_setMagicDate_java_util_Date.get(MethodAccessor_Ref.java:56)
	at com.sun.xml.bind.v2.runtime.reflect.TransducedAccessor$CompositeTransducedAccessorImpl.writeLeafElement(TransducedAccessor.java:256)
	at com.sun.xml.bind.v2.runtime.property.SingleElementLeafProperty.serializeBody(SingleElementLeafProperty.java:129)
	at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:358)
	at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:696)
	at com.sun.xml.bind.v2.runtime.property.SingleElementNodeProperty.serializeBody(SingleElementNodeProperty.java:158)
	at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:358)
	at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:696)
	at com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:271)
	at com.sun.xml.bind.v2.runtime.BridgeImpl.marshal(BridgeImpl.java:104)
	at com.sun.xml.bind.api.Bridge.marshal(Bridge.java:145)
	at com.sun.xml.ws.db.glassfish.BridgeWrapper.marshal(BridgeWrapper.java:170)
	at com.sun.xml.ws.message.jaxb.JAXBMessage.writePayloadTo(JAXBMessage.java:393)
	at com.sun.xml.ws.message.AbstractMessageImpl.writeTo(AbstractMessageImpl.java:149)
	at com.sun.xml.ws.encoding.StreamSOAPCodec.encode(StreamSOAPCodec.java:127)
	at com.sun.xml.ws.encoding.SOAPBindingCodec.encode(SOAPBindingCodec.java:285)
	at com.sun.xml.ws.transport.http.HttpAdapter.encodePacket(HttpAdapter.java:421)
	at com.sun.xml.ws.transport.http.HttpAdapter.access$100(HttpAdapter.java:99)
	at com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:650)
	at com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:263)
	at com.sun.xml.ws.transport.http.servlet.ServletAdapter.invokeAsync(ServletAdapter.java:218)
	at com.sun.xml.ws.transport.http.servlet.WSServletDelegate.doGet(WSServletDelegate.java:159)
	at com.sun.xml.ws.transport.http.servlet.WSServletDelegate.doPost(WSServletDelegate.java:194)
	at com.sun.xml.ws.transport.http.servlet.WSServlet.doPost(WSServlet.java:80)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:688)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:770)
	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
	at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860)
	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757)
	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056)
	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229)
	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
	at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
	at java.lang.Thread.run(Thread.java:662)


При этом дата перестала пропадать после вызова WS, хотя я убрал все костыли. Причем, судя по логам, она то пропадает, то нет. Вернее на каких то сессиях пропадает стабильно, а на каких то стабильно не пропадает. Короче мистика.
...
Рейтинг: 0 / 0
01.08.2014, 16:15
    #38711047
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чудесное исчезновение
Rebeled,

Самописных Thread.dumpStack() я ещё не видел. Ещё и с таким оверхедом по памяти.
...
Рейтинг: 0 / 0
01.08.2014, 16:16
    #38711049
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чудесное исчезновение
Таки остаётся только одно. Field Breakpoint с условием.
...
Рейтинг: 0 / 0
01.08.2014, 16:40
    #38711077
Rebeled
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чудесное исчезновение
BlazkowiczRebeled,

Самописных Thread.dumpStack() я ещё не видел. Ещё и с таким оверхедом по памяти.
Не верю(с) =)
BlazkowiczТаки остаётся только одно. Field Breakpoint с условием.
Не помогает, так как проблема чудесным образом перестала проявляться в дебагере. Условие поставил magicDate==null. Правильно? Никогда условием не пользовался.
...
Рейтинг: 0 / 0
01.08.2014, 16:45
    #38711084
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чудесное исчезновение
RebeledНе помогает, так как проблема чудесным образом перестала проявляться в дебагере. Условие поставил magicDate==null. Правильно? Никогда условием не пользовался.
Нет. Я имел ввиду, что нужно фильтровать field access/field modification. magicDate==null не отработает в нужный момент, потому что значение не null, в тот момент, когда кто-то присваивает null.
...
Рейтинг: 0 / 0
05.08.2014, 15:59
    #38713229
Rebeled
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чудесное исчезновение
Проблема решилась (тьфу-тьфу-тьфу) заменой METRO с версии "валялась на гласфише" на версию "вот эта работала"
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Чудесное исчезновение / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]