1
22
23 package com.liferay.portal.security.permission;
24
25 import com.liferay.portal.model.User;
26 import com.liferay.portal.util.PropsValues;
27
28 import org.apache.commons.logging.Log;
29 import org.apache.commons.logging.LogFactory;
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 PermissionCheckerImpl 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 PermissionCheckerImpl permissionChecker = null;
55
56 if (PropsValues.COMMONS_POOL_ENABLED) {
57 permissionChecker =
58 (PermissionCheckerImpl)_instance._pool.borrowObject();
59 }
60 else {
61 permissionChecker = (PermissionCheckerImpl)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(PermissionCheckerImpl 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 = LogFactory.getLog(PermissionCheckerFactory.class);
96
97 private static PermissionCheckerFactory _instance =
98 new PermissionCheckerFactory();
99
100 private ObjectPool _pool;
101
102 private class Factory extends BasePoolableObjectFactory {
103
104 public Object makeObject() {
105 try {
106 return Class.forName(
107 PropsValues.PERMISSIONS_CHECKER).newInstance();
108 }
109 catch (Exception e) {
110 _log.error(e);
111
112 return null;
113 }
114 }
115
116 public void passivateObject(Object obj) {
117 PermissionCheckerImpl permissionChecker =
118 (PermissionCheckerImpl)obj;
119
120 permissionChecker.recycle();
121 }
122
123 }
124
125 }