1
22
23 package com.liferay.portal.security.permission;
24
25 import com.liferay.portal.kernel.log.Log;
26 import com.liferay.portal.kernel.log.LogFactoryUtil;
27 import com.liferay.portal.model.User;
28 import com.liferay.portal.util.PropsValues;
29
30 import org.apache.commons.pool.BasePoolableObjectFactory;
31 import org.apache.commons.pool.ObjectPool;
32 import org.apache.commons.pool.impl.StackObjectPool;
33
34
41 public class PermissionCheckerFactory {
42
43 public static PermissionChecker create(User user, boolean checkGuest)
44 throws Exception {
45
46 if (PropsValues.COMMONS_POOL_ENABLED) {
47 if (_log.isDebugEnabled()) {
48 _log.debug(
49 "Borrowing:\t" + _instance._pool.getNumIdle() + "\t" +
50 _instance._pool.getNumActive());
51 }
52 }
53
54 PermissionChecker permissionChecker = null;
55
56 if (PropsValues.COMMONS_POOL_ENABLED) {
57 permissionChecker =
58 (PermissionChecker)_instance._pool.borrowObject();
59 }
60 else {
61 permissionChecker = (PermissionChecker)Class.forName(
62 PropsValues.PERMISSIONS_CHECKER).newInstance();
63 }
64
65 permissionChecker.init(user, checkGuest);
66
67 return permissionChecker;
68 }
69
70 public static void recycle(PermissionChecker permissionChecker)
71 throws Exception {
72
73 if (PropsValues.COMMONS_POOL_ENABLED) {
74 if (permissionChecker == null) {
75 return;
76 }
77
78 if (_log.isDebugEnabled()) {
79 _log.debug(
80 "Recycling:\t" + _instance._pool.getNumIdle() + "\t" +
81 _instance._pool.getNumActive());
82 }
83
84 _instance._pool.returnObject(permissionChecker);
85 }
86 else if (permissionChecker != null) {
87 permissionChecker.recycle();
88 }
89 }
90
91 private PermissionCheckerFactory() {
92 _pool = new StackObjectPool(new Factory());
93 }
94
95 private static Log _log =
96 LogFactoryUtil.getLog(PermissionCheckerFactory.class);
97
98 private static PermissionCheckerFactory _instance =
99 new PermissionCheckerFactory();
100
101 private ObjectPool _pool;
102
103 private class Factory extends BasePoolableObjectFactory {
104
105 public Object makeObject() {
106 try {
107 return Class.forName(
108 PropsValues.PERMISSIONS_CHECKER).newInstance();
109 }
110 catch (Exception e) {
111 _log.error(e);
112
113 return null;
114 }
115 }
116
117 public void passivateObject(Object obj) {
118 PermissionChecker permissionChecker = (PermissionChecker)obj;
119
120 permissionChecker.recycle();
121 }
122
123 }
124
125 }