PageRenderTime 41ms CodeModel.GetById 11ms RepoModel.GetById 0ms app.codeStats 0ms

/portal-impl/src/com/liferay/portal/dao/orm/hibernate/SessionImpl.java

https://github.com/ealonso/liferay-portal
Java | 391 lines | 299 code | 75 blank | 17 comment | 7 complexity | 0ac3ef96064f9d350f64421d67f57449 MD5 | raw file
  1. /**
  2. * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
  3. *
  4. * This library is free software; you can redistribute it and/or modify it under
  5. * the terms of the GNU Lesser General Public License as published by the Free
  6. * Software Foundation; either version 2.1 of the License, or (at your option)
  7. * any later version.
  8. *
  9. * This library is distributed in the hope that it will be useful, but WITHOUT
  10. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  11. * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
  12. * details.
  13. */
  14. package com.liferay.portal.dao.orm.hibernate;
  15. import com.liferay.petra.function.UnsafeConsumer;
  16. import com.liferay.petra.sql.dsl.query.DSLQuery;
  17. import com.liferay.petra.sql.dsl.spi.ast.DefaultASTNodeListener;
  18. import com.liferay.petra.string.StringBundler;
  19. import com.liferay.portal.dao.orm.common.SQLTransformer;
  20. import com.liferay.portal.kernel.dao.orm.LockMode;
  21. import com.liferay.portal.kernel.dao.orm.ORMException;
  22. import com.liferay.portal.kernel.dao.orm.Query;
  23. import com.liferay.portal.kernel.dao.orm.QueryPos;
  24. import com.liferay.portal.kernel.dao.orm.SQLQuery;
  25. import com.liferay.portal.kernel.dao.orm.Session;
  26. import java.io.Serializable;
  27. import java.sql.Connection;
  28. import java.sql.SQLException;
  29. import java.util.List;
  30. import java.util.Map;
  31. import org.hibernate.LockOptions;
  32. import org.hibernate.engine.spi.EntityKey;
  33. import org.hibernate.engine.spi.PersistenceContext;
  34. import org.hibernate.engine.spi.SessionFactoryImplementor;
  35. import org.hibernate.engine.spi.SessionImplementor;
  36. import org.hibernate.event.spi.EventSource;
  37. import org.hibernate.metamodel.spi.MetamodelImplementor;
  38. import org.hibernate.persister.entity.EntityPersister;
  39. /**
  40. * @author Brian Wing Shun Chan
  41. * @author Shuyang Zhou
  42. */
  43. public class SessionImpl implements Session {
  44. public SessionImpl(
  45. org.hibernate.Session session, ClassLoader sessionFactoryClassLoader) {
  46. _session = session;
  47. _sessionFactoryClassLoader = sessionFactoryClassLoader;
  48. }
  49. @Override
  50. public void apply(UnsafeConsumer<Connection, SQLException> unsafeConsumer)
  51. throws ORMException {
  52. try {
  53. _session.doWork(unsafeConsumer::accept);
  54. }
  55. catch (Exception exception) {
  56. throw ExceptionTranslator.translate(exception);
  57. }
  58. }
  59. @Override
  60. public void clear() throws ORMException {
  61. try {
  62. _session.clear();
  63. }
  64. catch (Exception exception) {
  65. throw ExceptionTranslator.translate(exception);
  66. }
  67. }
  68. @Override
  69. public Connection close() throws ORMException {
  70. try {
  71. _session.close();
  72. return null;
  73. }
  74. catch (Exception exception) {
  75. throw ExceptionTranslator.translate(exception);
  76. }
  77. }
  78. @Override
  79. public boolean contains(Object object) throws ORMException {
  80. try {
  81. SessionImplementor sessionImplementor =
  82. (SessionImplementor)_session;
  83. SessionFactoryImplementor sessionFactoryImplementor =
  84. sessionImplementor.getSessionFactory();
  85. MetamodelImplementor metamodelImplementor =
  86. sessionFactoryImplementor.getMetamodel();
  87. Map<String, EntityPersister> entityPersisters =
  88. metamodelImplementor.entityPersisters();
  89. Class<?> clazz = object.getClass();
  90. if (!entityPersisters.containsKey(clazz.getName())) {
  91. return false;
  92. }
  93. return _session.contains(object);
  94. }
  95. catch (Exception exception) {
  96. throw ExceptionTranslator.translate(exception);
  97. }
  98. }
  99. @Override
  100. public Query createQuery(String queryString) throws ORMException {
  101. return createQuery(queryString, true);
  102. }
  103. @Override
  104. public Query createQuery(String queryString, boolean strictName)
  105. throws ORMException {
  106. if (_sessionFactoryClassLoader == null) {
  107. return _createQuery(queryString, strictName);
  108. }
  109. Thread currentThread = Thread.currentThread();
  110. ClassLoader contextClassLoader = currentThread.getContextClassLoader();
  111. currentThread.setContextClassLoader(_sessionFactoryClassLoader);
  112. try {
  113. return _createQuery(queryString, strictName);
  114. }
  115. finally {
  116. currentThread.setContextClassLoader(contextClassLoader);
  117. }
  118. }
  119. @Override
  120. public SQLQuery createSQLQuery(String queryString) throws ORMException {
  121. return createSQLQuery(queryString, true);
  122. }
  123. @Override
  124. public SQLQuery createSQLQuery(String queryString, boolean strictName)
  125. throws ORMException {
  126. try {
  127. queryString = SQLTransformer.transformFromJPQLToHQL(queryString);
  128. return new SQLQueryImpl(
  129. _session.createSQLQuery(queryString), strictName);
  130. }
  131. catch (Exception exception) {
  132. throw ExceptionTranslator.translate(exception);
  133. }
  134. }
  135. @Override
  136. public SQLQuery createSynchronizedSQLQuery(DSLQuery dslQuery)
  137. throws ORMException {
  138. DefaultASTNodeListener defaultASTNodeListener =
  139. new DefaultASTNodeListener();
  140. SQLQuery sqlQuery = createSynchronizedSQLQuery(
  141. dslQuery.toSQL(defaultASTNodeListener), true,
  142. defaultASTNodeListener.getTableNames());
  143. List<Object> scalarValues = defaultASTNodeListener.getScalarValues();
  144. if (!scalarValues.isEmpty()) {
  145. QueryPos queryPos = QueryPos.getInstance(sqlQuery);
  146. for (Object value : scalarValues) {
  147. queryPos.add(value);
  148. }
  149. }
  150. return sqlQuery;
  151. }
  152. @Override
  153. public SQLQuery createSynchronizedSQLQuery(String queryString)
  154. throws ORMException {
  155. return createSynchronizedSQLQuery(queryString, true);
  156. }
  157. @Override
  158. public SQLQuery createSynchronizedSQLQuery(
  159. String queryString, boolean strictName)
  160. throws ORMException {
  161. return createSynchronizedSQLQuery(
  162. queryString, strictName,
  163. SQLQueryTableNamesUtil.getTableNames(queryString));
  164. }
  165. @Override
  166. public SQLQuery createSynchronizedSQLQuery(
  167. String queryString, boolean strictName, String[] tableNames)
  168. throws ORMException {
  169. try {
  170. queryString = SQLTransformer.transformFromJPQLToHQL(queryString);
  171. SQLQuery sqlQuery = new SQLQueryImpl(
  172. _session.createSQLQuery(queryString), strictName);
  173. sqlQuery.addSynchronizedQuerySpaces(tableNames);
  174. return sqlQuery;
  175. }
  176. catch (Exception exception) {
  177. throw ExceptionTranslator.translate(exception);
  178. }
  179. }
  180. @Override
  181. public void delete(Object object) throws ORMException {
  182. try {
  183. _session.delete(object);
  184. }
  185. catch (Exception exception) {
  186. throw ExceptionTranslator.translate(exception);
  187. }
  188. }
  189. @Override
  190. public void evict(Class<?> clazz, Serializable id) throws ORMException {
  191. try {
  192. EventSource eventSource = (EventSource)_session;
  193. PersistenceContext persistenceContext =
  194. eventSource.getPersistenceContext();
  195. SessionFactoryImplementor sessionFactoryImplementor =
  196. eventSource.getFactory();
  197. MetamodelImplementor metamodelImplementor =
  198. sessionFactoryImplementor.getMetamodel();
  199. EntityPersister entityPersister =
  200. metamodelImplementor.entityPersister(clazz);
  201. Object object = persistenceContext.getEntity(
  202. new EntityKey(id, entityPersister));
  203. if (object == null) {
  204. return;
  205. }
  206. eventSource.evict(object);
  207. }
  208. catch (Exception exception) {
  209. throw ExceptionTranslator.translate(exception);
  210. }
  211. }
  212. @Override
  213. public void evict(Object object) throws ORMException {
  214. try {
  215. _session.evict(object);
  216. }
  217. catch (Exception exception) {
  218. throw ExceptionTranslator.translate(exception);
  219. }
  220. }
  221. @Override
  222. public void flush() throws ORMException {
  223. try {
  224. _session.flush();
  225. }
  226. catch (Exception exception) {
  227. throw ExceptionTranslator.translate(exception);
  228. }
  229. }
  230. @Override
  231. public Object get(Class<?> clazz, Serializable id) throws ORMException {
  232. try {
  233. return _session.get(clazz, id);
  234. }
  235. catch (Exception exception) {
  236. throw ExceptionTranslator.translate(exception);
  237. }
  238. }
  239. @Override
  240. public Object get(Class<?> clazz, Serializable id, LockMode lockMode)
  241. throws ORMException {
  242. LockOptions lockOptions = new LockOptions(
  243. LockModeTranslator.translate(lockMode));
  244. try {
  245. return _session.get(clazz, id, lockOptions);
  246. }
  247. catch (Exception exception) {
  248. throw ExceptionTranslator.translate(exception);
  249. }
  250. }
  251. @Override
  252. public Object getWrappedSession() {
  253. return _session;
  254. }
  255. @Override
  256. public boolean isDirty() throws ORMException {
  257. try {
  258. return _session.isDirty();
  259. }
  260. catch (Exception exception) {
  261. throw ExceptionTranslator.translate(exception);
  262. }
  263. }
  264. @Override
  265. public Object load(Class<?> clazz, Serializable id) throws ORMException {
  266. try {
  267. return _session.load(clazz, id);
  268. }
  269. catch (Exception exception) {
  270. throw ExceptionTranslator.translate(exception);
  271. }
  272. }
  273. @Override
  274. public Object merge(Object object) throws ORMException {
  275. try {
  276. return _session.merge(object);
  277. }
  278. catch (Exception exception) {
  279. throw ExceptionTranslator.translate(exception, _session, object);
  280. }
  281. }
  282. @Override
  283. public Serializable save(Object object) throws ORMException {
  284. try {
  285. return _session.save(object);
  286. }
  287. catch (Exception exception) {
  288. throw ExceptionTranslator.translate(exception);
  289. }
  290. }
  291. @Override
  292. public void saveOrUpdate(Object object) throws ORMException {
  293. try {
  294. _session.saveOrUpdate(object);
  295. }
  296. catch (Exception exception) {
  297. throw ExceptionTranslator.translate(exception, _session, object);
  298. }
  299. }
  300. @Override
  301. public String toString() {
  302. return StringBundler.concat("{_session=", _session, "}");
  303. }
  304. private Query _createQuery(String queryString, boolean strictName)
  305. throws ORMException {
  306. try {
  307. queryString = SQLTransformer.transformFromJPQLToHQL(queryString);
  308. return new QueryImpl(_session.createQuery(queryString), strictName);
  309. }
  310. catch (Exception exception) {
  311. throw ExceptionTranslator.translate(exception);
  312. }
  313. }
  314. private final org.hibernate.Session _session;
  315. private final ClassLoader _sessionFactoryClassLoader;
  316. }