You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-user@db.apache.org by "JML (Brujula)" <jm...@brujulatelecom.com> on 2005/07/06 19:10:20 UTC

How can I put into cache memory a table with two fields as primary key?

Hi!

I want to put into cache memory a table which has a primary key 
composite of various (two) fields. In repository.xml this table is 
mapped as follow:

<class-descriptor class="com.brujulatelecom.srv.vo.ParametroOficinaVO"
                    table="T_SRV_PARAMETROOFICINA">
    <object-cache 
class="com.brujulatelecom.srv.util.ObjectCacheOSCacheImpl"/>
    <field-descriptor id="1" name="pofCodigo" column="POF_CODIGO"
                    jdbc-type="INTEGER"/>
    <field-descriptor id="2" name="pofOfiCodigo" column="POF_OFICODIGO"
                    jdbc-type="INTEGER" primarykey="true"/>
    <field-descriptor id="3" name="pofParCodigo" column="POF_PARCODIGO"
                    jdbc-type="INTEGER" primarykey="true"/>
</class-descriptor>

In DAO class, the code is:

            PersistenceBroker broker = null;
            ParametroOficinaVO parametroOficinaVO = null;
            broker = ServiceLocator.getInstance().findBroker();          
            // start caching management
            parametroOficinaVO = new  ParametroOficinaVO();
            parametroOficinaVO.setPofParCodigo(new Integer(parCodigo));
            parametroOficinaVO.setPofOfiCodigo(new Integer(ofiCodigo));
            Identity oid = new Identity(parametroOficinaVO, broker);
            ObjectCache cache = broker.serviceObjectCache();
            parametroOficinaVO = (ParametroOficinaVO)cache.lookup(oid);
            // final caching management
                if (parametroOficinaVO==null){
                    System.out.println("parametroOficinaVO not in cache: 
" + oid);
                    Criteria criteria = new Criteria();
                    criteria.addEqualTo("pofParCodigo", parCodigo);
                    criteria.addEqualTo("pofOfiCodigo", ofiCodigo);
                    Query query = new 
QueryByCriteria(ParametroOficinaVO.class, criteria);
                    parametroOficinaVO = 
(ParametroOficinaVO)broker.getObjectByQuery(query);
                } else {
                  System.out.println("parametroOficinaVO in cache: " + oid);
                }

Is this correct?

Thank you for advance!!

Joan Miralles Ramis
Junior Programmer
Development Department
Brújula Telecom


---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org


Re: How can I put into cache memory a table with two fields as primary key?

Posted by Armin Waibel <ar...@apache.org>.
Hi,

JML (Brujula) wrote:
> Thank you for your answer Alessandro, but it doesn't work with OSCache.
> 
> Anybody has another solution?
> 

Why doesn't it work with OSCache what's the problem?

Could you describe why you need to this access to cache in your method, 
why you can't use broker.getObjectByIdentity(oid):
http://db.apache.org/ojb/docu/tutorials/pb-tutorial.html#find-by-pk
This method first lookup the cache and when the object is not found it 
lookup from DB.


If you use the two-level cache
http://db.apache.org/ojb/docu/guides/objectcache.html#ObjectCacheTwoLevelImpl
with OSCache as backend you can't store objects to the second level 
cache by hand (it's suppressed to avoid synchronization problems)


regards,
Armin


> Alessandro Colantoni wrote:
> 
>> you can do:
>> broker = ServiceLocator.getInstance().findBroker();
>> FieldDescriptor[] pkFields = broker.getClassDescriptor
>> (realClass).getPkFields();
>> String[] fieldNames = new String[pkFields.length];
>> for (int i=0; i<pkFields.length ;i++){
>> fieldNames[i]=pkFields[i].getAttributeName();
>> }
>> Identity oid = broker.serviceIdentity().buildIdentity(realClass, 
>> fieldNames, pkValues);
>> result = broker.getObjectByIdentity(oid);
>> where pkValues is an array with your key values.
>> pkValues should have the same order of pk field values in repository.
>> You can have a look at it.aco.mandragora.dao.ojb.pb.OjbPbDAO in the 
>> method
>> public Object findByPrimaryKey(Class realClass,Object[] pkValues)
>> you can find it at
>> http://sourceforge.net/projects/mandragora/
>> See you
>> On 7/6/05, JML (Brujula) <jm...@brujulatelecom.com> wrote:  
>>
>>> Hi!
>>>
>>> I want to put into cache memory a table which has a primary key
>>> composite of various (two) fields. In repository.xml this table is
>>> mapped as follow:
>>>
>>> <class-descriptor class="com.brujulatelecom.srv.vo.ParametroOficinaVO"
>>> table="T_SRV_PARAMETROOFICINA">
>>> <object-cache
>>> class="com.brujulatelecom.srv.util.ObjectCacheOSCacheImpl"/>
>>> <field-descriptor id="1" name="pofCodigo" column="POF_CODIGO"
>>> jdbc-type="INTEGER"/>
>>> <field-descriptor id="2" name="pofOfiCodigo" column="POF_OFICODIGO"
>>> jdbc-type="INTEGER" primarykey="true"/>
>>> <field-descriptor id="3" name="pofParCodigo" column="POF_PARCODIGO"
>>> jdbc-type="INTEGER" primarykey="true"/>
>>> </class-descriptor>
>>>
>>> In DAO class, the code is:
>>>
>>> PersistenceBroker broker = null;
>>> ParametroOficinaVO parametroOficinaVO = null;
>>> broker = ServiceLocator.getInstance().findBroker();
>>> // start caching management
>>> parametroOficinaVO = new ParametroOficinaVO();
>>> parametroOficinaVO.setPofParCodigo(new Integer(parCodigo));
>>> parametroOficinaVO.setPofOfiCodigo(new Integer(ofiCodigo));
>>> Identity oid = new Identity(parametroOficinaVO, broker);
>>> ObjectCache cache = broker.serviceObjectCache();
>>> parametroOficinaVO = (ParametroOficinaVO)cache.lookup(oid);
>>> // final caching management
>>> if (parametroOficinaVO==null){
>>> System.out.println("parametroOficinaVO not in cache:
>>> " + oid);
>>> Criteria criteria = new Criteria();
>>> criteria.addEqualTo("pofParCodigo", parCodigo);
>>> criteria.addEqualTo("pofOfiCodigo", ofiCodigo);
>>> Query query = new
>>> QueryByCriteria(ParametroOficinaVO.class, criteria);
>>> parametroOficinaVO =
>>> (ParametroOficinaVO)broker.getObjectByQuery(query);
>>> } else {
>>> System.out.println("parametroOficinaVO in cache: " + oid);
>>> }
>>>
>>> Is this correct?
>>>
>>> Thank you for advance!!
>>>
>>> Joan Miralles Ramis
>>> Junior Programmer
>>> Development Department
>>> Brújula Telecom
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
>>> For additional commands, e-mail: ojb-user-help@db.apache.org
>>>
>>>
>>>   
>>
>>
>>  
>>
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
> For additional commands, e-mail: ojb-user-help@db.apache.org
> 
> 
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org


Re: How can I put into cache memory a table with two fields as primary key?

Posted by "JML (Brujula)" <jm...@brujulatelecom.com>.
Thank you for your answer Alessandro, but it doesn't work with OSCache.

Anybody has another solution?

Alessandro Colantoni wrote:

>you can do:
> broker = ServiceLocator.getInstance().findBroker();
>FieldDescriptor[] pkFields = broker.getClassDescriptor
>(realClass).getPkFields();
>String[] fieldNames = new String[pkFields.length];
>for (int i=0; i<pkFields.length ;i++){
>fieldNames[i]=pkFields[i].getAttributeName();
>}
>Identity oid = broker.serviceIdentity().buildIdentity(realClass, fieldNames, 
>pkValues);
>result = broker.getObjectByIdentity(oid);
> where pkValues is an array with your key values.
>pkValues should have the same order of pk field values in repository.
> You can have a look at it.aco.mandragora.dao.ojb.pb.OjbPbDAO in the method
> public Object findByPrimaryKey(Class realClass,Object[] pkValues)
> you can find it at
>http://sourceforge.net/projects/mandragora/
> See you
> On 7/6/05, JML (Brujula) <jm...@brujulatelecom.com> wrote: 
>  
>
>>Hi!
>>
>>I want to put into cache memory a table which has a primary key
>>composite of various (two) fields. In repository.xml this table is
>>mapped as follow:
>>
>><class-descriptor class="com.brujulatelecom.srv.vo.ParametroOficinaVO"
>>table="T_SRV_PARAMETROOFICINA">
>><object-cache
>>class="com.brujulatelecom.srv.util.ObjectCacheOSCacheImpl"/>
>><field-descriptor id="1" name="pofCodigo" column="POF_CODIGO"
>>jdbc-type="INTEGER"/>
>><field-descriptor id="2" name="pofOfiCodigo" column="POF_OFICODIGO"
>>jdbc-type="INTEGER" primarykey="true"/>
>><field-descriptor id="3" name="pofParCodigo" column="POF_PARCODIGO"
>>jdbc-type="INTEGER" primarykey="true"/>
>></class-descriptor>
>>
>>In DAO class, the code is:
>>
>>PersistenceBroker broker = null;
>>ParametroOficinaVO parametroOficinaVO = null;
>>broker = ServiceLocator.getInstance().findBroker();
>>// start caching management
>>parametroOficinaVO = new ParametroOficinaVO();
>>parametroOficinaVO.setPofParCodigo(new Integer(parCodigo));
>>parametroOficinaVO.setPofOfiCodigo(new Integer(ofiCodigo));
>>Identity oid = new Identity(parametroOficinaVO, broker);
>>ObjectCache cache = broker.serviceObjectCache();
>>parametroOficinaVO = (ParametroOficinaVO)cache.lookup(oid);
>>// final caching management
>>if (parametroOficinaVO==null){
>>System.out.println("parametroOficinaVO not in cache:
>>" + oid);
>>Criteria criteria = new Criteria();
>>criteria.addEqualTo("pofParCodigo", parCodigo);
>>criteria.addEqualTo("pofOfiCodigo", ofiCodigo);
>>Query query = new
>>QueryByCriteria(ParametroOficinaVO.class, criteria);
>>parametroOficinaVO =
>>(ParametroOficinaVO)broker.getObjectByQuery(query);
>>} else {
>>System.out.println("parametroOficinaVO in cache: " + oid);
>>}
>>
>>Is this correct?
>>
>>Thank you for advance!!
>>
>>Joan Miralles Ramis
>>Junior Programmer
>>Development Department
>>Brújula Telecom
>>
>>
>>---------------------------------------------------------------------
>>To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
>>For additional commands, e-mail: ojb-user-help@db.apache.org
>>
>>
>>    
>>
>
>  
>



---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org


Re: How can I put into cache memory a table with two fields as primary key?

Posted by Alessandro Colantoni <al...@gmail.com>.
you can do:
 broker = ServiceLocator.getInstance().findBroker();
FieldDescriptor[] pkFields = broker.getClassDescriptor
(realClass).getPkFields();
String[] fieldNames = new String[pkFields.length];
for (int i=0; i<pkFields.length ;i++){
fieldNames[i]=pkFields[i].getAttributeName();
}
Identity oid = broker.serviceIdentity().buildIdentity(realClass, fieldNames, 
pkValues);
result = broker.getObjectByIdentity(oid);
 where pkValues is an array with your key values.
pkValues should have the same order of pk field values in repository.
 You can have a look at it.aco.mandragora.dao.ojb.pb.OjbPbDAO in the method
 public Object findByPrimaryKey(Class realClass,Object[] pkValues)
 you can find it at
http://sourceforge.net/projects/mandragora/
 See you
 On 7/6/05, JML (Brujula) <jm...@brujulatelecom.com> wrote: 
> 
> Hi!
> 
> I want to put into cache memory a table which has a primary key
> composite of various (two) fields. In repository.xml this table is
> mapped as follow:
> 
> <class-descriptor class="com.brujulatelecom.srv.vo.ParametroOficinaVO"
> table="T_SRV_PARAMETROOFICINA">
> <object-cache
> class="com.brujulatelecom.srv.util.ObjectCacheOSCacheImpl"/>
> <field-descriptor id="1" name="pofCodigo" column="POF_CODIGO"
> jdbc-type="INTEGER"/>
> <field-descriptor id="2" name="pofOfiCodigo" column="POF_OFICODIGO"
> jdbc-type="INTEGER" primarykey="true"/>
> <field-descriptor id="3" name="pofParCodigo" column="POF_PARCODIGO"
> jdbc-type="INTEGER" primarykey="true"/>
> </class-descriptor>
> 
> In DAO class, the code is:
> 
> PersistenceBroker broker = null;
> ParametroOficinaVO parametroOficinaVO = null;
> broker = ServiceLocator.getInstance().findBroker();
> // start caching management
> parametroOficinaVO = new ParametroOficinaVO();
> parametroOficinaVO.setPofParCodigo(new Integer(parCodigo));
> parametroOficinaVO.setPofOfiCodigo(new Integer(ofiCodigo));
> Identity oid = new Identity(parametroOficinaVO, broker);
> ObjectCache cache = broker.serviceObjectCache();
> parametroOficinaVO = (ParametroOficinaVO)cache.lookup(oid);
> // final caching management
> if (parametroOficinaVO==null){
> System.out.println("parametroOficinaVO not in cache:
> " + oid);
> Criteria criteria = new Criteria();
> criteria.addEqualTo("pofParCodigo", parCodigo);
> criteria.addEqualTo("pofOfiCodigo", ofiCodigo);
> Query query = new
> QueryByCriteria(ParametroOficinaVO.class, criteria);
> parametroOficinaVO =
> (ParametroOficinaVO)broker.getObjectByQuery(query);
> } else {
> System.out.println("parametroOficinaVO in cache: " + oid);
> }
> 
> Is this correct?
> 
> Thank you for advance!!
> 
> Joan Miralles Ramis
> Junior Programmer
> Development Department
> Brújula Telecom
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
> For additional commands, e-mail: ojb-user-help@db.apache.org
> 
>