Foren
acceso a base de datos desde jsp
antonio martin perez, geändert vor 14 Jahren.
acceso a base de datos desde jsp
Junior Member Beiträge: 49 Beitrittsdatum: 11.11.09 Neueste Beiträge
Estoy haciendo un sitemap de la aplicación que muestre unicamente las paginas que el usuario puede acceder. Para ello necesito acceder a la base de datos y traerme los datos del usuario. Mi problema ocurre cuando voy a buscar el usuario en BD donde me da este error al abrir la session :
No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
en este punto:
public User fetchByPrimaryKey(long userId) throws SystemException {
User user = (User)EntityCacheUtil.getResult(UserModelImpl.ENTITY_CACHE_ENABLED,
UserImpl.class, userId, this);
if (user == null) {
Session session = null; <--AQUI SALTA LA EXCEPCION
try {
session = openSession();
user = (User)session.get(UserImpl.class, new Long(userId));
}
catch (Exception e) {
throw processException(e);
}
finally {
if (user != null) {
cacheResult(user);
}
closeSession(session);
}
}
return user;
}
dicho metodo se encuentra en la clase UserPersistenceImpl.
este es el codigo del action donde me salta:
public class BasicAction extends PortletAction{
public ActionForward render(
ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
RenderRequest renderRequest, RenderResponse renderResponse)
throws Exception {
String a = new String("");
if (renderRequest.getPortletSession().getAttribute("modulo") != null) {
a = renderRequest.getPortletSession().getAttribute("modulo").toString();
}
a = "consejeria";//esta linea es para ir probando mientras engancho con lo de juanfran
renderResponse.addProperty(a, "modulo");
try{
User listaUsuarios = UserUtil.findByPrimaryKey(11101);
}catch(com.liferay.portal.SystemException e ){
e.printStackTrace();
}
return mapping.findForward("portlet.ext.Sitemap.view");
}
}
Espero me podais dar alguna idea de que es lo que pasa, porque estoy perdidisimo.
No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
en este punto:
public User fetchByPrimaryKey(long userId) throws SystemException {
User user = (User)EntityCacheUtil.getResult(UserModelImpl.ENTITY_CACHE_ENABLED,
UserImpl.class, userId, this);
if (user == null) {
Session session = null; <--AQUI SALTA LA EXCEPCION
try {
session = openSession();
user = (User)session.get(UserImpl.class, new Long(userId));
}
catch (Exception e) {
throw processException(e);
}
finally {
if (user != null) {
cacheResult(user);
}
closeSession(session);
}
}
return user;
}
dicho metodo se encuentra en la clase UserPersistenceImpl.
este es el codigo del action donde me salta:
public class BasicAction extends PortletAction{
public ActionForward render(
ActionMapping mapping, ActionForm form, PortletConfig portletConfig,
RenderRequest renderRequest, RenderResponse renderResponse)
throws Exception {
String a = new String("");
if (renderRequest.getPortletSession().getAttribute("modulo") != null) {
a = renderRequest.getPortletSession().getAttribute("modulo").toString();
}
a = "consejeria";//esta linea es para ir probando mientras engancho con lo de juanfran
renderResponse.addProperty(a, "modulo");
try{
User listaUsuarios = UserUtil.findByPrimaryKey(11101);
}catch(com.liferay.portal.SystemException e ){
e.printStackTrace();
}
return mapping.findForward("portlet.ext.Sitemap.view");
}
}
Espero me podais dar alguna idea de que es lo que pasa, porque estoy perdidisimo.
Julio Camarero, geändert vor 14 Jahren.
RE: acceso a base de datos desde jsp
Liferay Legend Beiträge: 1668 Beitrittsdatum: 15.07.08 Neueste Beiträge
Hola Antonio,
es una buena práctica que no accedas directamente a base de datos desde los jsp.
En concreto, en Liferay, siempre se accede desde el jsp a los servicios, y estos son los que internamente te abstraen de la base de datos.
Te aconsejo que hagas esto mismo, así por ejemplo, para acceder a algún método del servicio de usuarios puedas hacer: User user = UserServiceUtil.getUserById("123");
Un saludo!
Julio Camarero
Liferay España
es una buena práctica que no accedas directamente a base de datos desde los jsp.
En concreto, en Liferay, siempre se accede desde el jsp a los servicios, y estos son los que internamente te abstraen de la base de datos.
Te aconsejo que hagas esto mismo, así por ejemplo, para acceder a algún método del servicio de usuarios puedas hacer: User user = UserServiceUtil.getUserById("123");
Un saludo!
Julio Camarero
Liferay España
antonio martin perez, geändert vor 14 Jahren.
RE: acceso a base de datos desde jsp
Junior Member Beiträge: 49 Beitrittsdatum: 11.11.09 Neueste Beiträge
Hola Julio, gracias por tu ayuda, si bien he conseguido solucionarlo ya use el mismo método que tu me indicastes.
Un saludo.
Un saludo.