Eclipselink caching behaviour

View: New views
4 Messages — Rating Filter:   Alert me  

Eclipselink caching behaviour

by elygre :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Some parts of this message have been removed. Learn more about Nabble's security policy.

I'm working on understanding the eclipselink cache, and I still have quite a way to go J

 

I have an entity with a single column primary key (String). If i use "em.find(key)", this is cached, so that repeated lookups don't go to the database. If i create a Query referring the  key ("select o from IkbPage o where key = ?1"), and then use query.getSingleResult(), it is not cached, and I see multiple identical queries.

 

Is there a configuration option I need to switch on?

Or is this just not possible?

 

Eirik


_______________________________________________
eclipselink-users mailing list
eclipselink-users@...
https://dev.eclipse.org/mailman/listinfo/eclipselink-users

Re: Eclipselink caching behaviour

by Gaurav Malhotra :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

May be following code snippet helps you

I have positive result with the following usage

@Entity
@Cache (
            type=CacheType.WEAK,
            expiry=600000,
            alwaysRefresh =true,
            disableHits=false,
            coordinationType=CacheCoordinationType.SEND_NEW_OBJECTS_WITH_CHANGES
            )
@NamedQueries( {
                @NamedQuery(name = "CodFlexCodesB.findAll",
                            query = "select o from CodFlexCodesB o"),
                @NamedQuery(name  = "CodFlexCodesB.timeValidity",
                                    query = "SELECT em FROM CodFlexCodesB em " +
                                    "WHERE em.codFlexCodeSystemsB.id =  :id AND " +
                                    "(em.startDate <= :endDate) AND (em.endDate >= :startDate OR  em.endDate IS NULL) ",
                                    hints = @QueryHint(name=QueryHints.CACHE_USAGE, value=CacheUsage.ConformResultsInUnitOfWork )
                                   
                                   )
})

Yes, if I see my log it does shows the query being hit many time. I think its querying object not DB (please verify. It should you show the same thing in Hibernate also)

[Eclipselink team please verify my assumptons]

EL Fine]: 2008.08.05 11:35:30.843--ClientSession(2347637)--Connection(30283254)--Thread(Thread[main,5,main])--SELECT ID, CODE, CREATED_BY, CREATION_DATE, DESCR, INSTALLED_FLAG, LAST_UPDATED_BY, LAST_UPDATED_DATE, LAST_UPDATE_LOGIN, NLS_LANGUAGE, OBJECT_VERSION_NUMBER, STATUS_ID FROM OHI_LANGUAGES
[EL Fine]: 2008.08.05 11:35:30.859--ClientSession(2347637)--Connection(30283254)--Thread(Thread[main,5,main])--SELECT COD_FLEX_CODE_S1.NEXTVAL FROM DUAL
[EL Fine]: 2008.08.05 11:35:30.875--ClientSession(2347637)--Connection(30283254)--Thread(Thread[main,5,main])--SELECT ID FROM COD_FLEX_CODE_SYSTEMS_B WHERE (ID = ?)
        bind => [10001]
[EL Fine]: 2008.08.05 11:35:30.875--ClientSession(2347637)--Connection(30283254)--Thread(Thread[main,5,main])--INSERT INTO COD_FLEX_CODES_B (ID, CREATED_BY, CREATION_DATE, END_DATE, LAST_UPDATED_BY, LAST_UPDATED_DATE, LAST_UPDATE_LOGIN, OBJECT_VERSION_NUMBER, START_DATE, VALUE_DATE1, VALUE_DATE2, VALUE_DATE3, VALUE_DATE4, VALUE_DATE5, VALUE_DATE6, VALUE_DATE7, VALUE_DATE8, VALUE_NR1, VALUE_NR2, VALUE_NR3, VALUE_NR4, VALUE_NR5, VALUE_NR6, VALUE_NR7, VALUE_NR8, FCSY_ID, FLCO_ID8, FLCO_ID3, STATUS_ID, FLCO_ID1, FLCO_ID7, FLCO_ID9, FLCO_ID4, FLCO_ID6, FLCO_ID2, FLCO_ID5) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
        bind => [9548, 1217928930828, 2008-08-05 11:35:30.828, 2008-08-15 11:35:30.828, 1217928930828, 2008-08-05 11:35:30.828, test, 1, 2008-08-05 11:35:30.828, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 10001, null, null, null, null, null, null, null, null, null, null]
[EL Fine]: 2008.08.05 11:35:30.875--ClientSession(2347637)--Connection(30283254)--Thread(Thread[main,5,main])--INSERT INTO COD_FLEX_CODES_TL (LANGUAGE, CREATED_BY, CREATION_DATE, KEY_VALUE, LAST_UPDATED_BY, LAST_UPDATED_DATE, LAST_UPDATE_LOGIN, OBJECT_VERSION_NUMBER, SOURCE_LANG, VALUE_CHAR1, VALUE_CHAR2, VALUE_CHAR3, VALUE_CHAR4, VALUE_CHAR5, VALUE_CHAR6, VALUE_CHAR7, VALUE_CHAR8, ID) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
        bind => [US, 1217928930828, 2008-08-05 11:35:30.828, GMTEst, 1217928930828, 2008-08-05 11:35:30.828, test, 1, NL, null, null, null, null, null, null, null, null, 9548]
[EL Fine]: 2008.08.05 11:35:30.890--ClientSession(2347637)--Connection(30283254)--Thread(Thread[main,5,main])--INSERT INTO COD_FLEX_CODES_TL (LANGUAGE, CREATED_BY, CREATION_DATE, KEY_VALUE, LAST_UPDATED_BY, LAST_UPDATED_DATE, LAST_UPDATE_LOGIN, OBJECT_VERSION_NUMBER, SOURCE_LANG, VALUE_CHAR1, VALUE_CHAR2, VALUE_CHAR3, VALUE_CHAR4, VALUE_CHAR5, VALUE_CHAR6, VALUE_CHAR7, VALUE_CHAR8, ID) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
        bind => [NL, 1217928930828, 2008-08-05 11:35:30.828, GMTEst, 1217928930828, 2008-08-05 11:35:30.828, test, 1, NL, null, null, null, null, null, null, null, null, 9548]
[EL Fine]: 2008.08.05 11:35:30.890--ClientSession(2347637)--Connection(30283254)--Thread(Thread[main,5,main])--SELECT t1.ID, t1.CREATED_BY, t1.CREATION_DATE, t1.END_DATE, t1.LAST_UPDATED_BY, t1.LAST_UPDATED_DATE, t1.LAST_UPDATE_LOGIN, t1.OBJECT_VERSION_NUMBER, t1.START_DATE, t1.VALUE_DATE1, t1.VALUE_DATE2, t1.VALUE_DATE3, t1.VALUE_DATE4, t1.VALUE_DATE5, t1.VALUE_DATE6, t1.VALUE_DATE7, t1.VALUE_DATE8, t1.VALUE_NR1, t1.VALUE_NR2, t1.VALUE_NR3, t1.VALUE_NR4, t1.VALUE_NR5, t1.VALUE_NR6, t1.VALUE_NR7, t1.VALUE_NR8, t1.FCSY_ID, t1.FLCO_ID8, t1.FLCO_ID3, t1.STATUS_ID, t1.FLCO_ID1, t1.FLCO_ID7, t1.FLCO_ID9, t1.FLCO_ID4, t1.FLCO_ID6, t1.FLCO_ID2, t1.FLCO_ID5 FROM COD_FLEX_CODE_SYSTEMS_B t0, COD_FLEX_CODES_B t1 WHERE ((((t0.ID = ?) AND (t1.START_DATE <= ?)) AND ((t1.END_DATE >= ?) OR (t1.END_DATE IS NULL))) AND (t0.ID = t1.FCSY_ID))
        bind => [10001, 2008-08-15 11:35:30.828, 2008-08-05 11:35:30.828]
Size 1
[EL Fine]: 2008.08.05 11:35:30.890--ClientSession(2347637)--Connection(30283254)--Thread(Thread[main,5,main])--SELECT t1.ID, t1.CREATED_BY, t1.CREATION_DATE, t1.END_DATE, t1.LAST_UPDATED_BY, t1.LAST_UPDATED_DATE, t1.LAST_UPDATE_LOGIN, t1.OBJECT_VERSION_NUMBER, t1.START_DATE, t1.VALUE_DATE1, t1.VALUE_DATE2, t1.VALUE_DATE3, t1.VALUE_DATE4, t1.VALUE_DATE5, t1.VALUE_DATE6, t1.VALUE_DATE7, t1.VALUE_DATE8, t1.VALUE_NR1, t1.VALUE_NR2, t1.VALUE_NR3, t1.VALUE_NR4, t1.VALUE_NR5, t1.VALUE_NR6, t1.VALUE_NR7, t1.VALUE_NR8, t1.FCSY_ID, t1.FLCO_ID8, t1.FLCO_ID3, t1.STATUS_ID, t1.FLCO_ID1, t1.FLCO_ID7, t1.FLCO_ID9, t1.FLCO_ID4, t1.FLCO_ID6, t1.FLCO_ID2, t1.FLCO_ID5 FROM COD_FLEX_CODE_SYSTEMS_B t0, COD_FLEX_CODES_B t1 WHERE ((((t0.ID = ?) AND (t1.START_DATE <= ?)) AND ((t1.END_DATE >= ?) OR (t1.END_DATE IS NULL))) AND (t0.ID = t1.FCSY_ID))
        bind => [10001, 2008-08-26 11:35:30.89, 2008-08-16 11:35:30.89]
>>>>><<<<< false
Size 0
[EL Fine]: 2008.08.05 11:35:30.890--ClientSession(2347637)--Connection(30283254)--Thread(Thread[main,5,main])--SELECT t1.ID, t1.CREATED_BY, t1.CREATION_DATE, t1.END_DATE, t1.LAST_UPDATED_BY, t1.LAST_UPDATED_DATE, t1.LAST_UPDATE_LOGIN, t1.OBJECT_VERSION_NUMBER, t1.START_DATE, t1.VALUE_DATE1, t1.VALUE_DATE2, t1.VALUE_DATE3, t1.VALUE_DATE4, t1.VALUE_DATE5, t1.VALUE_DATE6, t1.VALUE_DATE7, t1.VALUE_DATE8, t1.VALUE_NR1, t1.VALUE_NR2, t1.VALUE_NR3, t1.VALUE_NR4, t1.VALUE_NR5, t1.VALUE_NR6, t1.VALUE_NR7, t1.VALUE_NR8, t1.FCSY_ID, t1.FLCO_ID8, t1.FLCO_ID3, t1.STATUS_ID, t1.FLCO_ID1, t1.FLCO_ID7, t1.FLCO_ID9, t1.FLCO_ID4, t1.FLCO_ID6, t1.FLCO_ID2, t1.FLCO_ID5 FROM COD_FLEX_CODE_SYSTEMS_B t0, COD_FLEX_CODES_B t1 WHERE ((((t0.ID = ?) AND (t1.START_DATE <= ?)) AND ((t1.END_DATE >= ?) OR (t1.END_DATE IS NULL))) AND (t0.ID = t1.FCSY_ID))
        bind => [10001, 2008-07-25 11:35:30.89, 2008-07-26 11:35:30.89]
Size 0
[EL Fine]: 2008.08.05 11:35:30.890--ClientSession(2347637)--Connection(30283254)--Thread(Thread[main,5,main])--DELETE FROM COD_FLEX_CODES_TL WHERE ((ID = ?) AND (LANGUAGE = ?))
        bind => [9548, US]
[EL Fine]: 2008.08.05 11:35:30.890--ClientSession(2347637)--Connection(30283254)--Thread(Thread[main,5,main])--DELETE FROM COD_FLEX_CODES_TL WHERE ((ID = ?) AND (LANGUAGE = ?))
        bind => [9548, NL]
[EL Fine]: 2008.08.05 11:35:30.890--ClientSession(2347637)--Connection(30283254)--Thread(Thread[main,5,main])--DELETE FROM COD_FLEX_CODES_B WHERE (ID = ?)
        bind => [9548]



elygre wrote:
I'm working on understanding the eclipselink cache, and I still have quite a
way to go J

 

I have an entity with a single column primary key (String). If i use
"em.find(key)", this is cached, so that repeated lookups don't go to the
database. If i create a Query referring the  key ("select o from IkbPage o
where key = ?1"), and then use query.getSingleResult(), it is not cached,
and I see multiple identical queries.

 

Is there a configuration option I need to switch on?

Or is this just not possible?

 

Eirik


_______________________________________________
eclipselink-users mailing list
eclipselink-users@eclipse.org
https://dev.eclipse.org/mailman/listinfo/eclipselink-users

Re: Eclipselink caching behaviour

by James Sutherland :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

By default only the find() operation will get a cache hit, queries will always go to the database.

You can allow a query to get a cache hit using the "eclipselink.query-type"="ReadObject" query hint.


elygre wrote:
I'm working on understanding the eclipselink cache, and I still have quite a
way to go J

 

I have an entity with a single column primary key (String). If i use
"em.find(key)", this is cached, so that repeated lookups don't go to the
database. If i create a Query referring the  key ("select o from IkbPage o
where key = ?1"), and then use query.getSingleResult(), it is not cached,
and I see multiple identical queries.

 

Is there a configuration option I need to switch on?

Or is this just not possible?

 

Eirik

compact JPA jar file for distribution ?

by Gustav Trede-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hello,

Javawebstarted swing app using JPA dont need server related code with
its xsd files etc.
Are there any plans for such a compact jar file at least as build option
, that only contains what an embedded JPA client needs ?.

Using a custom "masking" classloader i have tracked the loaded classes,
resources in runtime and saved it to a a custom jar file ,
and there is a noticable difference in size.
Problem is i need to cover all possible usage cases that can happen with
error handling etc inorder for this to be a safe way to do it.
Its hard to know for sure that i managed to do that.
Hence my request.

regards
  gustav
_______________________________________________
eclipselink-users mailing list
eclipselink-users@...
https://dev.eclipse.org/mailman/listinfo/eclipselink-users