rsanchez
2015-01-28 fc256f48aa7e1a378f540fc1fdbde46739ff903c
#0 fix - Fixed Application modification service
9 files modified
changed files
securis/pom.xml patch | view | blame | history
securis/src/main/java/net/curisit/securis/DefaultExceptionHandler.java patch | view | blame | history
securis/src/main/java/net/curisit/securis/RestServicesApplication.java patch | view | blame | history
securis/src/main/java/net/curisit/securis/db/Application.java patch | view | blame | history
securis/src/main/java/net/curisit/securis/db/ApplicationMetadata.java patch | view | blame | history
securis/src/main/java/net/curisit/securis/ioc/RequestsInterceptor.java patch | view | blame | history
securis/src/main/java/net/curisit/securis/services/ApplicationResource.java patch | view | blame | history
securis/src/main/resources/META-INF/persistence.xml patch | view | blame | history
securis/src/main/webapp/WEB-INF/web.xml patch | view | blame | history
securis/pom.xml
....@@ -1,100 +1,101 @@
1
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
2
- <modelVersion>4.0.0</modelVersion>
3
- <groupId>net.curisit</groupId>
4
- <artifactId>securis-server</artifactId>
5
- <version>0.0.9-SNAPSHOT</version>
6
- <name>SeCuris</name>
7
- <description>CurisTEC Server Licenses</description>
8
- <dependencies>
9
- <dependency>
10
- <groupId>commons-lang</groupId>
11
- <artifactId>commons-lang</artifactId>
12
- <version>2.6</version>
13
- </dependency>
14
- <dependency>
15
- <groupId>javax.servlet</groupId>
16
- <artifactId>javax.servlet-api</artifactId>
17
- <version>3.1.0</version>
18
- <scope>provided</scope>
19
- </dependency>
20
- <dependency>
21
- <groupId>org.jboss.resteasy</groupId>
22
- <artifactId>resteasy-multipart-provider</artifactId>
23
- <version>3.0.10.Final</version>
24
- </dependency>
25
- <dependency>
26
- <groupId>org.jboss.resteasy</groupId>
27
- <artifactId>resteasy-jaxrs</artifactId>
28
- <version>3.0.10.Final</version>
29
- </dependency>
30
-<dependency>
31
- <groupId>org.jboss.weld.servlet</groupId>
32
- <artifactId>weld-servlet</artifactId>
33
- <version>2.2.9.Final</version>
34
-</dependency>
35
-<dependency>
36
- <groupId>org.jboss</groupId>
37
- <artifactId>jandex</artifactId>
38
- <version>1.2.2.Final</version>
39
-</dependency>
40
- <dependency>
41
- <groupId>net.curisit</groupId>
42
- <artifactId>commons-curis</artifactId>
43
- <version>0.0.1-SNAPSHOT</version>
44
- </dependency>
45
- <dependency>
46
- <groupId>org.hibernate</groupId>
47
- <artifactId>hibernate-entitymanager</artifactId>
48
- <version>4.3.6.Final</version>
49
- </dependency>
50
- <dependency>
51
- <groupId>net.curisit</groupId>
52
- <artifactId>securis-client</artifactId>
53
- <version>1.0.4-SNAPSHOT</version>
54
- </dependency>
55
- <dependency>
56
- <groupId>org.apache.httpcomponents</groupId>
57
- <artifactId>httpclient</artifactId>
58
- <version>4.4-beta1</version>
59
- </dependency>
60
- <dependency>
61
- <groupId>org.apache.httpcomponents</groupId>
62
- <artifactId>httpmime</artifactId>
63
- <version>4.4-beta1</version>
64
- </dependency>
65
- <dependency>
66
- <groupId>org.jboss.resteasy</groupId>
67
- <artifactId>resteasy-jackson2-provider</artifactId>
68
- <version>3.0.10.Final</version>
69
- </dependency>
70
- <dependency>
71
- <groupId>org.apache.logging.log4j</groupId>
72
- <artifactId>log4j-web</artifactId>
73
- <version>2.1</version>
74
- </dependency>
75
- <dependency>
76
- <groupId>javax.enterprise</groupId>
77
- <artifactId>cdi-api</artifactId>
78
- <version>1.2</version>
79
- <scope>provided</scope>
80
-</dependency>
81
- <dependency>
82
- <groupId>org.jboss.resteasy</groupId>
83
- <artifactId>resteasy-cdi</artifactId>
84
- <version>3.0.10.Final</version>
85
- </dependency>
86
- </dependencies>
87
- <build>
1
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3
+ <modelVersion>4.0.0</modelVersion>
4
+ <groupId>net.curisit</groupId>
5
+ <artifactId>securis-server</artifactId>
6
+ <version>1.0-SNAPSHOT</version>
7
+ <name>SeCuris</name>
8
+ <description>CurisTEC Server Licenses</description>
9
+ <dependencies>
10
+ <dependency>
11
+ <groupId>commons-lang</groupId>
12
+ <artifactId>commons-lang</artifactId>
13
+ <version>2.6</version>
14
+ </dependency>
15
+ <dependency>
16
+ <groupId>javax.servlet</groupId>
17
+ <artifactId>javax.servlet-api</artifactId>
18
+ <version>3.1.0</version>
19
+ <scope>provided</scope>
20
+ </dependency>
21
+ <dependency>
22
+ <groupId>org.jboss.resteasy</groupId>
23
+ <artifactId>resteasy-multipart-provider</artifactId>
24
+ <version>3.0.10.Final</version>
25
+ </dependency>
26
+ <dependency>
27
+ <groupId>org.jboss.resteasy</groupId>
28
+ <artifactId>resteasy-jaxrs</artifactId>
29
+ <version>3.0.10.Final</version>
30
+ </dependency>
31
+ <dependency>
32
+ <groupId>org.jboss.weld.servlet</groupId>
33
+ <artifactId>weld-servlet</artifactId>
34
+ <version>2.2.9.Final</version>
35
+ </dependency>
36
+ <dependency>
37
+ <groupId>org.jboss</groupId>
38
+ <artifactId>jandex</artifactId>
39
+ <version>1.2.2.Final</version>
40
+ </dependency>
41
+ <dependency>
42
+ <groupId>net.curisit</groupId>
43
+ <artifactId>commons-curis</artifactId>
44
+ <version>0.0.1-SNAPSHOT</version>
45
+ </dependency>
46
+ <dependency>
47
+ <groupId>org.hibernate</groupId>
48
+ <artifactId>hibernate-entitymanager</artifactId>
49
+ <version>4.3.6.Final</version>
50
+ </dependency>
51
+ <dependency>
52
+ <groupId>net.curisit</groupId>
53
+ <artifactId>securis-client</artifactId>
54
+ <version>1.0.5-SNAPSHOT</version>
55
+ </dependency>
56
+ <dependency>
57
+ <groupId>org.apache.httpcomponents</groupId>
58
+ <artifactId>httpclient</artifactId>
59
+ <version>4.4-beta1</version>
60
+ </dependency>
61
+ <dependency>
62
+ <groupId>org.apache.httpcomponents</groupId>
63
+ <artifactId>httpmime</artifactId>
64
+ <version>4.4-beta1</version>
65
+ </dependency>
66
+ <dependency>
67
+ <groupId>org.jboss.resteasy</groupId>
68
+ <artifactId>resteasy-jackson2-provider</artifactId>
69
+ <version>3.0.10.Final</version>
70
+ </dependency>
71
+ <dependency>
72
+ <groupId>org.apache.logging.log4j</groupId>
73
+ <artifactId>log4j-web</artifactId>
74
+ <version>2.1</version>
75
+ </dependency>
76
+ <dependency>
77
+ <groupId>javax.enterprise</groupId>
78
+ <artifactId>cdi-api</artifactId>
79
+ <version>1.2</version>
80
+ <scope>provided</scope>
81
+ </dependency>
82
+ <dependency>
83
+ <groupId>org.jboss.resteasy</groupId>
84
+ <artifactId>resteasy-cdi</artifactId>
85
+ <version>3.0.10.Final</version>
86
+ </dependency>
87
+ </dependencies>
88
+ <build>
8889 <plugins>
89
- <plugin>
90
- <groupId>org.apache.maven.plugins</groupId>
91
- <artifactId>maven-compiler-plugin</artifactId>
92
- <configuration>
93
- <source>1.8</source>
94
- <target>1.8</target>
95
- </configuration>
96
- </plugin>
97
- <plugin>
90
+ <plugin>
91
+ <groupId>org.apache.maven.plugins</groupId>
92
+ <artifactId>maven-compiler-plugin</artifactId>
93
+ <configuration>
94
+ <source>1.8</source>
95
+ <target>1.8</target>
96
+ </configuration>
97
+ </plugin>
98
+ <plugin>
9899 <artifactId>maven-assembly-plugin</artifactId>
99100 <version>2.4</version>
100101 <configuration>
....@@ -108,31 +109,31 @@
108109 <appendAssemblyId>false</appendAssemblyId>
109110 </configuration>
110111 </plugin>
111
- </plugins>
112
+ </plugins>
112113 </build>
113
- <repositories>
114
- <repository>
115
- <id>internal</id>
116
- <name>CurisIT Repository</name>
117
- <url>http://archiva.curisit.net/archiva/repository/internal</url>
118
- </repository>
119
- <repository>
120
- <id>curistec</id>
121
- <name>CurisTec Corporate Repository</name>
122
- <url>http://archiva.curisit.net/archiva/repository/internal/</url>
123
- <layout>default</layout>
124
- </repository>
125
- <repository>
126
- <id>curistecSnapshot</id>
127
- <name>CurisTec Snapshots</name>
128
- <url>http://archiva.curisit.net/archiva/repository/snapshots/</url>
129
- <layout>default</layout>
130
- </repository>
131
- <repository>
132
- <id>project.local</id>
133
- <name>project</name>
134
- <url>file:/opt/repo</url>
135
- </repository>
136
- </repositories>
137
-
114
+ <repositories>
115
+ <repository>
116
+ <id>internal</id>
117
+ <name>CurisIT Repository</name>
118
+ <url>http://archiva.curisit.net/archiva/repository/internal</url>
119
+ </repository>
120
+ <repository>
121
+ <id>curistec</id>
122
+ <name>CurisTec Corporate Repository</name>
123
+ <url>http://archiva.curisit.net/archiva/repository/internal/</url>
124
+ <layout>default</layout>
125
+ </repository>
126
+ <repository>
127
+ <id>curistecSnapshot</id>
128
+ <name>CurisTec Snapshots</name>
129
+ <url>http://archiva.curisit.net/archiva/repository/snapshots/</url>
130
+ <layout>default</layout>
131
+ </repository>
132
+ <repository>
133
+ <id>project.local</id>
134
+ <name>project</name>
135
+ <url>file:/opt/repo</url>
136
+ </repository>
137
+ </repositories>
138
+
138139 </project>
securis/src/main/java/net/curisit/securis/DefaultExceptionHandler.java
....@@ -1,5 +1,6 @@
11 package net.curisit.securis;
22
3
+import javax.persistence.EntityManager;
34 import javax.servlet.http.HttpServletRequest;
45 import javax.ws.rs.ForbiddenException;
56 import javax.ws.rs.core.Context;
....@@ -32,23 +33,22 @@
3233 HttpServletRequest request;
3334 @Context
3435 SecurityContext bsc;
36
+ @Context
37
+ EntityManager em;
3538
3639 @Override
3740 public Response toResponse(Exception e) {
41
+ releaseEntityManager();
3842 if (e instanceof ForbiddenException) {
3943 LOG.warn("Unauthorized access to {}, user: {}", request.getPathInfo(), bsc.getUserPrincipal());
40
- return Response.status(Status.UNAUTHORIZED)
41
- .header(ERROR_CODE_MESSAGE_HEADER, ErrorCodes.INVALID_CREDENTIALS)
42
- .header(ERROR_MESSAGE_HEADER, "Unathorized access to the application")
43
- .type(MediaType.APPLICATION_JSON).build();
44
+ return Response.status(Status.UNAUTHORIZED).header(ERROR_CODE_MESSAGE_HEADER, ErrorCodes.INVALID_CREDENTIALS)
45
+ .header(ERROR_MESSAGE_HEADER, "Unathorized access to the application").type(MediaType.APPLICATION_JSON).build();
4446 }
4547
4648 if (e instanceof SeCurisServiceException) {
4749 LOG.warn("SeCurisServiceException accessing to {}, user: {}", request.getPathInfo(), bsc.getUserPrincipal());
48
- return Response.status(DEFAULT_APP_ERROR_STATUS_CODE)
49
- .header(ERROR_CODE_MESSAGE_HEADER, ((SeCurisServiceException) e).getStatus())
50
- .header(ERROR_MESSAGE_HEADER, e.getMessage())
51
- .type(MediaType.APPLICATION_JSON).build();
50
+ return Response.status(DEFAULT_APP_ERROR_STATUS_CODE).header(ERROR_CODE_MESSAGE_HEADER, ((SeCurisServiceException) e).getStatus())
51
+ .header(ERROR_MESSAGE_HEADER, e.getMessage()).type(MediaType.APPLICATION_JSON).build();
5252 }
5353
5454 LOG.error("Unexpected error accesing to '{}' by user: {}", request.getPathInfo(), bsc.getUserPrincipal());
....@@ -56,4 +56,20 @@
5656 LOG.error("Request url: " + request.getRequestURL(), e);
5757 return Response.serverError().header(ERROR_MESSAGE_HEADER, "Unexpected error: " + e.toString()).type(MediaType.APPLICATION_JSON).build();
5858 }
59
+
60
+ private void releaseEntityManager() {
61
+ if (em != null && em.isOpen()) {
62
+ LOG.debug("CLOSING EM: {}, trans: {}", em, em.isJoinedToTransaction());
63
+ try {
64
+ if (em.isJoinedToTransaction()) {
65
+ em.getTransaction().rollback();
66
+ LOG.info("ROLLBACK");
67
+ }
68
+ em.close();
69
+ } catch (Exception ex) {
70
+ ex.printStackTrace();
71
+ LOG.error("Error closing EM: {}, {}", em, ex);
72
+ }
73
+ }
74
+ }
5975 }
securis/src/main/java/net/curisit/securis/RestServicesApplication.java
....@@ -27,7 +27,6 @@
2727 @Override
2828 public Set<Class<?>> getClasses() {
2929 Set<Class<?>> classes = new HashSet<>();
30
- // classes.add(LicenseServices.class);
3130 classes.add(UserResource.class);
3231 classes.add(ApiResource.class);
3332 classes.add(LicenseResource.class);
....@@ -37,9 +36,11 @@
3736 classes.add(LicenseTypeResource.class);
3837 classes.add(PackResource.class);
3938 classes.add(RequestsInterceptor.class);
39
+ // classes.add(TransactionsInterceptor.class);
40
+ // classes.add(JpaJacksonProvider.class);
41
+ // classes.add(JacksonConfig.class);
4042
4143 LOG.info("JAX-RS classes for services: {}", classes);
4244 return classes;
4345 }
44
-
4546 }
securis/src/main/java/net/curisit/securis/db/Application.java
....@@ -101,7 +101,6 @@
101101
102102 @JsonProperty("metadata")
103103 public Set<ApplicationMetadata> getApplicationMetadata() {
104
- LOG.info("Getting metadata from app: {}", metadata);
105104 return metadata;
106105 }
107106
securis/src/main/java/net/curisit/securis/db/ApplicationMetadata.java
....@@ -20,6 +20,7 @@
2020 import com.fasterxml.jackson.annotation.JsonInclude;
2121 import com.fasterxml.jackson.annotation.JsonInclude.Include;
2222 import com.fasterxml.jackson.annotation.JsonProperty;
23
+import com.google.common.base.Objects;
2324
2425 /**
2526 * Entity implementation class for Entity: application_metadata
....@@ -102,13 +103,13 @@
102103 if (!(obj instanceof ApplicationMetadata))
103104 return false;
104105 ApplicationMetadata other = (ApplicationMetadata) obj;
105
- return key.equals(other.key) && (application == null || application.equals(other.application));
106
+ return Objects.equal(key, other.key) && Objects.equal(application, other.application);
106107 }
107108
108109 @Override
109110 public int hashCode() {
110111
111
- return key.hashCode() + (application == null ? 0 : application.hashCode());
112
+ return (key == null ? 0 : key.hashCode()) + (application == null ? 0 : application.hashCode());
112113 }
113114
114115 @Override
securis/src/main/java/net/curisit/securis/ioc/RequestsInterceptor.java
....@@ -9,16 +9,17 @@
99 import javax.inject.Inject;
1010 import javax.persistence.EntityManager;
1111 import javax.servlet.http.HttpServletRequest;
12
+import javax.servlet.http.HttpServletResponse;
1213 import javax.ws.rs.Priorities;
1314 import javax.ws.rs.WebApplicationException;
1415 import javax.ws.rs.container.ContainerRequestContext;
1516 import javax.ws.rs.container.ContainerRequestFilter;
16
-import javax.ws.rs.container.ContainerResponseContext;
17
-import javax.ws.rs.container.ContainerResponseFilter;
1817 import javax.ws.rs.core.Context;
1918 import javax.ws.rs.core.Response;
2019 import javax.ws.rs.core.Response.Status;
2120 import javax.ws.rs.ext.Provider;
21
+import javax.ws.rs.ext.WriterInterceptor;
22
+import javax.ws.rs.ext.WriterInterceptorContext;
2223
2324 import net.curisit.securis.db.User;
2425 import net.curisit.securis.security.BasicSecurityContext;
....@@ -37,8 +38,11 @@
3738
3839 @Provider
3940 @Priority(Priorities.AUTHENTICATION)
40
-public class RequestsInterceptor implements ContainerRequestFilter, ContainerResponseFilter {
41
+public class RequestsInterceptor implements ContainerRequestFilter, WriterInterceptor {
4142 private static final Logger LOG = LogManager.getLogger(RequestsInterceptor.class);
43
+
44
+ @Context
45
+ private HttpServletResponse servletResponse;
4246
4347 @Context
4448 private HttpServletRequest servletRequest;
....@@ -58,6 +62,8 @@
5862 @Override
5963 public void filter(ContainerRequestContext containerRequestContext) throws IOException {
6064 EntityManager em = emProvider.getEntityManager();
65
+ LOG.info("GETTING EM: {}", em);
66
+
6167 ResteasyProviderFactory.pushContext(EntityManager.class, em);
6268
6369 ResourceMethodInvoker methodInvoker = (ResourceMethodInvoker) containerRequestContext
....@@ -68,12 +74,11 @@
6874
6975 boolean next = checkSecurableMethods(containerRequestContext, method);
7076 if (next) {
71
- prepareTransaction(containerRequestContext, method);
77
+ prepareTransaction(containerRequestContext, method, em);
7278 }
7379 }
7480
75
- private void prepareTransaction(ContainerRequestContext containerRequestContext, Method method) {
76
- EntityManager em = ResteasyProviderFactory.getContextData(EntityManager.class);
81
+ private void prepareTransaction(ContainerRequestContext containerRequestContext, Method method, EntityManager em) {
7782
7883 if (method.isAnnotationPresent(EnsureTransaction.class)) {
7984 LOG.debug("Beginning a new transaction");
....@@ -155,17 +160,30 @@
155160 }
156161
157162 @Override
158
- public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException {
163
+ public void aroundWriteTo(WriterInterceptorContext context) throws IOException, WebApplicationException {
164
+ context.proceed();
159165 EntityManager em = ResteasyProviderFactory.getContextData(EntityManager.class);
160
-
161
- if (em != null && em.getTransaction().isActive()) {
162
- LOG.debug("Transaction is active, ready to finish it");
163
- if (responseContext.getStatus() == Status.OK.getStatusCode()) {
164
- em.getTransaction().commit();
165
- LOG.debug("COMMIT");
166
- } else {
167
- em.getTransaction().rollback();
168
- LOG.debug("ROLLBACK");
166
+ try {
167
+ if (em != null && em.getTransaction().isActive()) {
168
+ if (servletResponse.getStatus() == Status.OK.getStatusCode()) {
169
+ em.getTransaction().commit();
170
+ LOG.debug("COMMIT");
171
+ } else {
172
+ // This code is never executed if there is an error the
173
+ // filter chain is broken
174
+ em.getTransaction().rollback();
175
+ LOG.debug("ROLLBACK");
176
+ }
177
+ }
178
+ } finally {
179
+ if (em.isOpen()) {
180
+ LOG.info("CLOSING EM: {}, trans: {}", em, em.isJoinedToTransaction());
181
+ try {
182
+ em.close();
183
+ } catch (Exception ex) {
184
+ ex.printStackTrace();
185
+ LOG.error("Error closing EM: {}, {}", em, ex);
186
+ }
169187 }
170188 }
171189 }
securis/src/main/java/net/curisit/securis/services/ApplicationResource.java
....@@ -1,7 +1,9 @@
11 package net.curisit.securis.services;
22
33 import java.util.Date;
4
+import java.util.HashMap;
45 import java.util.List;
6
+import java.util.Map;
57 import java.util.Set;
68
79 import javax.annotation.security.RolesAllowed;
....@@ -177,19 +179,24 @@
177179 currentapp.setDescription(app.getDescription());
178180
179181 Set<ApplicationMetadata> newMD = app.getApplicationMetadata();
180
- for (ApplicationMetadata currentMd : currentapp.getApplicationMetadata()) {
181
- if (newMD == null || !newMD.contains(currentMd)) {
182
+ Set<ApplicationMetadata> oldMD = currentapp.getApplicationMetadata();
183
+ Map<String, ApplicationMetadata> directOldMD = getMapMD(oldMD);
184
+ Map<String, ApplicationMetadata> directNewMD = getMapMD(newMD);
185
+ for (ApplicationMetadata currentMd : oldMD) {
186
+ if (newMD == null || !directNewMD.containsKey(currentMd.getKey())) {
182187 em.remove(currentMd);
183188 }
184189 }
185190
186191 if (newMD != null) {
187
- Set<ApplicationMetadata> oldMD = currentapp.getApplicationMetadata();
188192 for (ApplicationMetadata md : newMD) {
189
- if (oldMD.contains(md)) {
190
- em.merge(md);
193
+ if (directOldMD.containsKey(md.getKey())) {
194
+ ApplicationMetadata amd = directOldMD.get(md.getKey());
195
+ amd.setValue(md.getValue());
196
+ amd.setMandatory(md.isMandatory());
197
+ em.merge(amd);
191198 } else {
192
- md.setApplication(app);
199
+ md.setApplication(currentapp);
193200 if (md.getCreationTimestamp() == null) {
194201 md.setCreationTimestamp(app.getCreationTimestamp());
195202 }
....@@ -202,6 +209,16 @@
202209 return Response.ok(currentapp).build();
203210 }
204211
212
+ private Map<String, ApplicationMetadata> getMapMD(Set<ApplicationMetadata> amd) {
213
+ Map<String, ApplicationMetadata> map = new HashMap<String, ApplicationMetadata>();
214
+ if (amd != null) {
215
+ for (ApplicationMetadata applicationMetadata : amd) {
216
+ map.put(applicationMetadata.getKey(), applicationMetadata);
217
+ }
218
+ }
219
+ return map;
220
+ }
221
+
205222 @DELETE
206223 @Path("/{appid}")
207224 @EnsureTransaction
securis/src/main/resources/META-INF/persistence.xml
....@@ -2,7 +2,7 @@
22 <persistence version="2.0"
33 xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
44 xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
5
- <persistence-unit name="localdb" >
5
+ <persistence-unit name="localdb" transaction-type="RESOURCE_LOCAL">
66 <description>SeCuris LocalDB</description>
77 <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
88 <non-jta-data-source>java:comp/env/SeCurisDS</non-jta-data-source>
securis/src/main/webapp/WEB-INF/web.xml
....@@ -40,8 +40,7 @@
4040 <param-name>resteasy.injector.factory</param-name>
4141 <param-value>org.jboss.resteasy.cdi.CdiInjectorFactory</param-value>
4242 </context-param>
43
-
44
-
43
+
4544 <filter>
4645 <filter-name>Resteasy</filter-name>
4746 <filter-class>
....@@ -58,6 +57,9 @@
5857 <url-pattern>/*</url-pattern>
5958 </filter-mapping>
6059
60
+
61
+
62
+
6163 <welcome-file-list>
6264 <welcome-file>/index.jsp</welcome-file>
6365 </welcome-file-list>