A lateral thought - is there a reason the column is declared as TIMESTAMP 
instead of DATE?

> On 30 Mar 2016, at 2:50 PM, g kuczera <gkucz...@gmail.com> wrote:
> 
> I also checked the default PostgreSQL timezone (in the postgresql.conf
> file), which is set to "Poland".
> 
> 2016-03-30 8:47 GMT+02:00 g kuczera <gkucz...@gmail.com>:
> 
>> I observed that behavior on the production server and then confirmed it on
>> the test server, which is not accessed by any client, etc. I forgot to
>> mention that the calendar.getTimeZone().getDisplayName() call returns
>> "Central European Time".
>> 
>> 2016-03-30 3:56 GMT+02:00 Kalle Korhonen <kalle.o.korho...@gmail.com>:
>> 
>>> The same thread really reads the same value from the database every few
>>> seconds and it may come out different? I don't buy it, there must be
>>> something else going on at the same time. Are you sure it's the same
>>> value?
>>> Is there something else writing to it at the same time? Can the system
>>> default timezone change (perhaps also print out TimeZone.getDefault(),
>>> Date
>>> initialized to the default timezone). I'd still suspect some type of
>>> timezone issue.
>>> 
>>> Kalle
>>> 
>>> On Tue, Mar 29, 2016 at 3:39 PM, g kuczera <gkucz...@gmail.com> wrote:
>>> 
>>>> Hi guys,
>>>> First of all, thanks for the answer and the effort you put into writing
>>>> them.
>>>> 
>>>> I checked few things and read couple of articles about similar problems
>>> and
>>>> here is my little summary:
>>>> 
>>>>   - my PostgreSQL birthDate column's type is 'birthDate TIMESTAMP
>>> WITHOUT
>>>>   TIME ZONE'
>>>>   - the values contained by the column do not have the time part, the
>>>>   year-month-day is used, eg. 1982-03-28
>>>>   - then the user Entity has the birth date field with annotations
>>>> 
>>>>  @Column(name = "birthDate ")
>>>> 
>>>>  @Temporal(TemporalType.DATE)
>>>> 
>>>>  private java.util.Date birthDate;
>>>> 
>>>> 
>>>>   - the call calendar.getTimeZone().getDisplayName() returns
>>>> 
>>>> The Calendar instance is created in this way:
>>>> 
>>>>    Calendar calendar = Calendar.getInstance();
>>>>    calendar.setTime(user.getBirthDate());
>>>> 
>>>> 
>>>> So the TIMESTAMP value from the database is interpreted as the
>>>> java.util.Date, what is achieved by putting the Temporal annotation.
>>> Then,
>>>> when I call the getter (getBirthDate method) the "truncated" TIMESTAMP
>>> is
>>>> returned.
>>>> 
>>>> But still, after fetching  the birthDate for 4 times, the fifth one
>>> becomes
>>>> corrupted:
>>>> 
>>>> 30-03-16 00:25:36:746 - {INFO} profil.ProfilEdition Thread
>>>> [qtp1357767732-54];  birth date equals (setupRender - getting from raw
>>>> query): 1982-03-28 00:00:00.0, 1982-03-28 00:00:00.0
>>>> 30-03-16 00:25:44:497 - {INFO} profil.ProfilEdition Thread
>>>> [qtp1357767732-65];  birth date equals (setupRender - getting from raw
>>>> query): 1982-03-28 00:00:00.0, 1982-03-28 00:00:00.0
>>>> 30-03-16 00:25:46:037 - {INFO} profil.ProfilEdition Thread
>>>> [qtp1357767732-60];  birth date equals (setupRender - getting from raw
>>>> query): 1982-03-28 00:00:00.0, 1982-03-28 00:00:00.0
>>>> 30-03-16 00:25:46:884 - {INFO} profil.ProfilEdition Thread
>>>> [qtp1357767732-62];  birth date equals (setupRender - getting from raw
>>>> query): 1982-03-28 00:00:00.0, 1982-03-28 00:00:00.0
>>>> 30-03-16 00:25:48:843 - {INFO} profil.ProfilEdition Thread
>>>> [qtp1357767732-63];  birth date equals (setupRender - getting from raw
>>>> query): 1982-03-27 23:00:00.0, 1982-03-27 23:00:00.0
>>>> 
>>>> The log comes from casting the raw query result to java.sql.Timestamp.
>>> The
>>>> value after comma is the same one, but casted to java.util.Date (these
>>> are
>>>> results of toString method)..
>>>> 
>>>> I will continue to investigate the thing tomorrow.
>>>> 
>>>> 2016-03-24 15:47 GMT+01:00 Cezary Biernacki <cezary...@gmail.com>:
>>>> 
>>>>> Hi,
>>>>> I doubt it is a Tapestry related problem. I have seen similar issues,
>>> and
>>>>> they are generally caused by time zone translations. My guess is that
>>>> your
>>>>> database stores date birth as a timestamp (i.e. including specific
>>> hours
>>>>> and minutes) in some specific time zone, and your Java code retrieving
>>>>> timestamps translates it to a different time zone. To diagnose, you
>>>> should
>>>>> check what is actually stored in the database, what kind of data type
>>> is
>>>>> used to store date of birth (database engines often have many options
>>> to
>>>>> store dates and timestamps including or not time zones), what Java
>>> type
>>>> is
>>>>> returned by user.getBirthDate() and what is the actual returned value
>>>>> (exact content, not result of toString()), and what assumptions about
>>>> using
>>>>> time zones your JDBC driver is making. Typically problems arise when
>>> some
>>>>> parts of the systems treat time stamps as set in UTC and others apply
>>>> user
>>>>> (client) default time zone. To fix this, one should have methodically
>>>>> ensure that all parts are using consistent time zone policy, and any
>>> time
>>>>> zone translations occur only when necessary.
>>>>> 
>>>>> Best regards,
>>>>> Cezary
>>>>> 
>>>>> 
>>>>> On Tue, Mar 22, 2016 at 8:55 PM, g kuczera <gkucz...@gmail.com>
>>> wrote:
>>>>> 
>>>>>> Hi guys,
>>>>>> I do not really know if it is connected with tapestry or only the
>>>>>> Hibernate, but maybe that is the case. So there is a embedded
>>> calendar
>>>> on
>>>>>> the site, the one from tapestry-jquery library:
>>>>>> http://tapestry5-jquery.com/mixins/docscustomdatepicker
>>>>>> 
>>>>>> If the user chose - during registration - the 28/03/1982 date, the
>>>> value
>>>>>> will be correctly save to the database. But if you want to change
>>> this
>>>>> date
>>>>>> and the calendar is going to be prepared, the date retrieved by the
>>>>> UserDao
>>>>>> (the birthDate field) equals to 27/03/1982.
>>>>>> 
>>>>>> I use the DAOs layer, which uses the Hibernate session. It is
>>>>> automatically
>>>>>> passed as an argument during the binding process (in the AppModule
>>>>> class):
>>>>>> 
>>>>>> binder.bind(UserDao.class,
>>>>>> UserDaoImpl.class).scope(ScopeConstants.PERTHREAD);
>>>>>> 
>>>>>> The UserDao is used in setupRender and onActivate methods of my page
>>>>> (user
>>>>>> is an javax Entity):
>>>>>> 
>>>>>> user = userDao.load(userId);
>>>>>> user.getBirthDate().toString()
>>>>>> 
>>>>>> What's funny, if I use the Hibernate in the different way
>>>>>> 
>>>>>> List<Object> birthDatesList =
>>>> userDao.getSession().createSQLQuery("select
>>>>>> birthdate from user where id = " + userId).list();
>>>>>> java.sql.Timestamp birthDate =
>>>>> (java.sql.Timestamp)(birthDatesList.get(0));
>>>>>> log.info("setupRender (birth date): " + birthDate.toString());
>>>>>> 
>>>>>> the returned date is correct.
>>>>>> 
>>>>>> I also logged the birth dates of the other users, and the problem
>>>> occurs
>>>>>> only in the 28/03/1982 case. Have you ever noticed anything like
>>> that?
>>>>>> 
>>>>> 
>>>> 
>>> 
>> 
>> 


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org

Reply via email to