55
66import com .google .common .base .Preconditions ;
77import com .googlecode .objectify .util .Closeable ;
8+ import jakarta .servlet .FilterChain ;
9+ import jakarta .servlet .FilterConfig ;
10+ import jakarta .servlet .ServletException ;
11+ import jakarta .servlet .ServletRequest ;
12+ import jakarta .servlet .ServletResponse ;
13+
14+ import java .io .IOException ;
815
916/**
1017 * <p>Most applications connect to a single datastore. To make your life easy, we offer this
@@ -156,4 +163,90 @@ public static <T> Ref<T> ref(final Key<T> key) {
156163 public static <T > Ref <T > ref (final T value ) {
157164 return factory ().ref (value );
158165 }
166+
167+ /**
168+ * <p>This version is for the newer jakarta.servlet.* API. If you are using the older javax.servlet.*, use {@code FilterJavax}.</p>
169+ *
170+ * <p>Configure this filter to use Objectify in your application. It works in concert with {@code ObjectifyService}
171+ * to provide the correct {@code Objectify} instance when {@code ObjectifyService.ofy()} is called.</p>
172+ *
173+ * <p>In your web.xml:</p>
174+ *<pre>
175+ * <filter>
176+ * <filter-name>ObjectifyFilter</filter-name>
177+ * <filter-class>com.googlecode.objectify.ObjectifyService$Filter</filter-class>
178+ * </filter>
179+ * <filter-mapping>
180+ * <filter-name>ObjectifyFilter</filter-name>
181+ * <url-pattern>/*</url-pattern>
182+ * </filter-mapping>
183+ *</pre>
184+ *
185+ * <p>Or, if you use Guice:</p>
186+ *
187+ *<pre>
188+ * filter("/*").through(ObjectifyService.Filter.class);
189+ *</pre>
190+ *
191+ * <p>If you use the Objectify outside of the context of a request (say, using the remote
192+ * API or from a unit test), then you should use the ObjectifyService.run() method.</p>
193+ *
194+ * @author Jeff Schnitzer
195+ */
196+ public static class Filter implements jakarta .servlet .Filter {
197+ @ Override
198+ public void doFilter (final ServletRequest request , final ServletResponse response , final FilterChain chain ) throws IOException , ServletException {
199+ try (Closeable closeable = ObjectifyService .begin ()) {
200+ chain .doFilter (request , response );
201+ }
202+ }
203+
204+ @ Override
205+ public void init (final FilterConfig filterConfig ) throws ServletException {}
206+ @ Override
207+ public void destroy () {}
208+ }
209+
210+ /**
211+ * <p>This version is for the older javax.servlet.* API. If you are using the newer jakarta.servlet.*, use {@code ObjectifyFilter}.</p>
212+ *
213+ * <p>Configure this filter to use Objectify in your application. It works in concert with {@code ObjectifyService}
214+ * to provide the correct {@code Objectify} instance when {@code ObjectifyService.ofy()} is called.</p>
215+ *
216+ * <p>In your web.xml:</p>
217+ *<pre>
218+ * <filter>
219+ * <filter-name>ObjectifyFilter</filter-name>
220+ * <filter-class>com.googlecode.objectify.ObjectifyService$FilterJavax</filter-class>
221+ * </filter>
222+ * <filter-mapping>
223+ * <filter-name>ObjectifyFilter</filter-name>
224+ * <url-pattern>/*</url-pattern>
225+ * </filter-mapping>
226+ *</pre>
227+ *
228+ * <p>Or, if you use Guice:</p>
229+ *
230+ *<pre>
231+ * filter("/*").through(ObjectifyService.FilterJavax.class);
232+ *</pre>
233+ *
234+ * <p>If you use the Objectify outside of the context of a request (say, using the remote
235+ * API or from a unit test), then you should use the ObjectifyService.run() method.</p>
236+ *
237+ * @author Jeff Schnitzer
238+ */
239+ public static class FilterJavax implements javax .servlet .Filter {
240+ @ Override
241+ public void doFilter (javax .servlet .ServletRequest request , javax .servlet .ServletResponse response , javax .servlet .FilterChain chain ) throws IOException , javax .servlet .ServletException {
242+ try (Closeable closeable = ObjectifyService .begin ()) {
243+ chain .doFilter (request , response );
244+ }
245+ }
246+
247+ @ Override
248+ public void init (final javax .servlet .FilterConfig filterConfig ) throws javax .servlet .ServletException {}
249+ @ Override
250+ public void destroy () {}
251+ }
159252}
0 commit comments