Forums

Home » Liferay Portal » Español » 3. Desarrollo

Combination View Flat View Tree View
Threads [ Previous | Next ]
toggle
mikel basabe
Cache de Service Builder
March 7, 2012 7:38 AM
Answer

mikel basabe

Rank: New Member

Posts: 21

Join Date: April 27, 2011

Recent Posts

Hola,

Estoy montando un portlet con Service- builder, y estoy teniendo un problema con la cache. Resulta que tengo 3 tablas (sin relacionar) a las que inserto una fila, y después realizo una lectura de las 3 tablas. 2 de las 3 tablas me muestran las nuevas filas, pero en la otra no se me muestran las nuevas filas, y tengo que ir al panel de control y borrar la cache para que me las muestre. He probado haciendo después de la inserción un clearcache, pero me sigue sin mostrar las nuevas filas.

¿Se os ocurre alguna idea?

Gracias

Un salduo
Mikel Goikoetxea
RE: Cache de Service Builder
March 7, 2012 8:27 AM
Answer

Mikel Goikoetxea

Rank: Junior Member

Posts: 56

Join Date: March 16, 2010

Recent Posts

Hola Mikel,

Lo que puedes hacer es deshabilitar la cache para esa entidad añadiendo lo siguiente en el service.xml:

1<entity name="Persona" ... cache-enabled="false">

Un saludo,

Mikel Goikoetxea Bilbao (@mgoibil)
B2B 2000
mikel basabe
RE: Cache de Service Builder
March 8, 2012 12:41 AM
Answer

mikel basabe

Rank: New Member

Posts: 21

Join Date: April 27, 2011

Recent Posts

Hola Mikel,

Antes de nada gracias por la respuesta.

Es una de las soluciones que barajaba, pero me gustaría saber antes de nada, como afectaría al rendimiento del portlet.

Además me gustaría saber porque se actualiza en las otras 2 tablas y en está no.

Un saludo.
Mikel Goikoetxea
RE: Cache de Service Builder
March 8, 2012 1:25 AM
Answer

Mikel Goikoetxea

Rank: Junior Member

Posts: 56

Join Date: March 16, 2010

Recent Posts

Buenas,

¿Podrías compartir el código que tienes en tu portlet? A ver si con eso podemos sacar algo más.
Sobre todo la definición de las entidades en el service.xml y la parte donde añades registros en BBDD.

Un saludo,

Mikel Goikoetxea Bilbao (@mgoibil)
B2B 2000
mikel basabe
RE: Cache de Service Builder
March 8, 2012 2:09 AM
Answer

mikel basabe

Rank: New Member

Posts: 21

Join Date: April 27, 2011

Recent Posts

Tengo 3 tablas que no estan relacionadas en el xml, aunque luego las relaciono yo por mi cuenta.

<?xml version="1.0"?>
<!DOCTYPE service-builder PUBLIC "-//Liferay//DTD Service Builder 6.0.0//EN"
"http://www.liferay.com/dtd/liferay-service-builder_6_0_0.dtd">
<service-builder package-path="com.andago.denHotel.facilitiesadmin.item.db">
<namespace>FacilitiesDb</namespace>
<entity name="FacilitiesHotelDB" local-service="true" remote-service="true">
<!-- PK fields -->
<column name="facilitiesId" type="String" primary="true"/>
<!-- Audit fields -->
<column name="foto" type="String"/>
</entity>



<entity name="FacilitiesTranslationHotelDB" local-service="true" remote-service="true">
<!-- PK fields -->
<column name="facilitiesId" type="String" primary="true"/>
<column name="language" type="String" primary="true" />
<!-- Audit fields -->
<column name="name" type="String"/>
<column name="location" type="String"/>
<column name="description" type="String"/>

<finder name="facilitytlanguage" return-type="Collection">
<finder-column name="language" />
</finder>
<finder name="facility" return-type="Collection">
<finder-column name="facilitiesId" />
</finder>
</entity>

<entity name="FacilitiesdisadvantagesrelationHotelDB" local-service="true" remote-service="true">
<!-- PK fields -->
<column name="facilitiesId" type="String" primary="true"/>
<column name="disadvantageId" type="int" primary="true" />
<!-- Audit fields -->
<column name="namedisadvantage" type="String"/>

<finder name="disadvantages" return-type="Collection">
<finder-column name="disadvantageId" />
</finder>

<finder name="disadvantagesoffacility" return-type="Collection">
<finder-column name="facilitiesId" />
</finder>
</entity>


</service-builder>
Mikel Goikoetxea
RE: Cache de Service Builder
March 8, 2012 2:44 AM
Answer

Mikel Goikoetxea

Rank: Junior Member

Posts: 56

Join Date: March 16, 2010

Recent Posts

Necesitaríamos el código donde haces los ADDs y también saber en qué clase lo estás haciendo.

Puede ser problema de transacciones, para que varias acciones sobre la BBDD pertenezcan a una única transacción hay que meterlas en un método en la clase ...LocalServiceImpl (service.impl).

Un saludo,

Mikel Goikoetxea Bilbao (@mgoibil)
B2B 2000
mikel basabe
RE: Cache de Service Builder
March 8, 2012 3:57 AM
Answer

mikel basabe

Rank: New Member

Posts: 21

Join Date: April 27, 2011

Recent Posts

Hola,

Realizo varias transacciones a la vez tal que asi:

FacilitiesHotelDBLocalServiceUtil.addFacilitiesHotelDB(facility);
FacilitiesTranslationHotelDBLocalServiceUtil.addFacilitiesTranslationHotelDB(facilitytransalationES);
FacilitiesTranslationHotelDBLocalServiceUtil.addFacilitiesTranslationHotelDB(facilitytransalationEN);
FacilitiesTranslationHotelDBLocalServiceUtil.addFacilitiesTranslationHotelDB(facilitytransalationEU);
FacilitiesTranslationHotelDBLocalServiceUtil.addFacilitiesTranslationHotelDB(facilitytransalationDE);
FacilitiesTranslationHotelDBLocalServiceUtil.addFacilitiesTranslationHotelDB(facilitytransalationFR);


De todos modos he probado con el cache=false , y ahora si que me los muestra al momento. No es la mejor solucion pero bueno...

Muchas gracias por todo

Un saludo
Mikel Goikoetxea
RE: Cache de Service Builder
March 8, 2012 4:32 AM
Answer

Mikel Goikoetxea

Rank: Junior Member

Posts: 56

Join Date: March 16, 2010

Recent Posts

Lo mejor sería meter todos los ADDs en un método de la clase FacilitiesHotelDBLocalServiceImpl por ejemplo.
De este modo si falla algunos de los ADDs no se completaría la transacción y se haría un rollback.

Un saludo,

Mikel Goikoetxea Bilbao (@mgoibil)
B2B 2000
mikel basabe
RE: Cache de Service Builder
March 8, 2012 9:19 AM
Answer

mikel basabe

Rank: New Member

Posts: 21

Join Date: April 27, 2011

Recent Posts

Hola,

Pero para invocar a la clase no hay que usar los *LocalServiceUtil?

Gracias

Un saludo
Mikel Goikoetxea
RE: Cache de Service Builder
March 9, 2012 12:45 AM
Answer

Mikel Goikoetxea

Rank: Junior Member

Posts: 56

Join Date: March 16, 2010

Recent Posts

Sí, eso es. El proceso sería el siguiente:
  • Implemetar tu método en el ...ServiceImpl --> este método será transaccional
    1public boolean deleteBooks(long publisherId) throws SystemException, NoSuchBookException {
    2        List<Book> books= BookLocalServiceUtil.getBooksbyPublisher(publisherId);
    3        for(Book bookActual: books){
    4            bookPersistence.remove(bookActual.getBookId());
    5        }
    6        return true;
    7}
  • Ejecutar el buid-service
  • Con el ...LocalServiceUtil tienes acceso al método creado
    1BookLocalServiceUtil.deleteBooks(publisherId);

Un saludo,

Mikel Goikoetxea Bilbao (@mgoibil)
B2B 2000
mikel basabe
RE: Cache de Service Builder
March 14, 2012 8:56 AM
Answer

mikel basabe

Rank: New Member

Posts: 21

Join Date: April 27, 2011

Recent Posts

Hola,

Muchas gracias por la respuesta.

Me servirá para mejorar mi sistema.

Un saludo!