Skip to content
This repository was archived by the owner on May 28, 2018. It is now read-only.

Commit 194fdcc

Browse files
committed
Merge pull request #167 from lprimak/origin/patch-1
Fix for Versioned Applications - https://java.net/jira/browse/JERSEY-2626
2 parents 53e3af6 + ba3ae4d commit 194fdcc

File tree

1 file changed

+50
-18
lines changed

1 file changed

+50
-18
lines changed

containers/glassfish/jersey-gf-ejb/src/main/java/org/glassfish/jersey/gf/ejb/internal/EjbComponentProvider.java

Lines changed: 50 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,11 @@
4040

4141
package org.glassfish.jersey.gf.ejb.internal;
4242

43+
import com.sun.ejb.containers.BaseContainer;
44+
import com.sun.ejb.containers.EjbContainerUtil;
45+
import com.sun.ejb.containers.EjbContainerUtilImpl;
46+
import com.sun.enterprise.config.serverbeans.Application;
47+
import com.sun.enterprise.config.serverbeans.Applications;
4348
import java.lang.annotation.Annotation;
4449
import java.lang.reflect.InvocationHandler;
4550
import java.lang.reflect.InvocationTargetException;
@@ -51,41 +56,35 @@
5156
import java.util.Collection;
5257
import java.util.Collections;
5358
import java.util.HashSet;
59+
import java.util.Iterator;
5460
import java.util.LinkedList;
5561
import java.util.List;
5662
import java.util.Set;
63+
import java.util.TreeSet;
5764
import java.util.concurrent.CopyOnWriteArrayList;
5865
import java.util.logging.Level;
5966
import java.util.logging.Logger;
60-
61-
import javax.ws.rs.ext.ExceptionMapper;
62-
6367
import javax.annotation.Priority;
6468
import javax.ejb.Local;
6569
import javax.ejb.Remote;
6670
import javax.inject.Singleton;
6771
import javax.naming.InitialContext;
6872
import javax.naming.NamingException;
69-
70-
import org.glassfish.jersey.internal.inject.Injections;
71-
import org.glassfish.jersey.server.ApplicationHandler;
72-
import org.glassfish.jersey.server.model.Invocable;
73-
import org.glassfish.jersey.server.spi.ComponentProvider;
74-
import org.glassfish.jersey.server.spi.internal.ResourceMethodInvocationHandlerProvider;
75-
73+
import javax.ws.rs.ext.ExceptionMapper;
74+
import org.glassfish.ejb.deployment.descriptor.EjbBundleDescriptorImpl;
75+
import org.glassfish.ejb.deployment.descriptor.EjbDescriptor;
7676
import org.glassfish.hk2.api.DynamicConfiguration;
7777
import org.glassfish.hk2.api.Factory;
7878
import org.glassfish.hk2.api.ServiceLocator;
7979
import org.glassfish.hk2.utilities.binding.ServiceBindingBuilder;
80-
81-
import org.glassfish.ejb.deployment.descriptor.EjbBundleDescriptorImpl;
82-
import org.glassfish.ejb.deployment.descriptor.EjbDescriptor;
8380
import org.glassfish.internal.data.ApplicationInfo;
81+
import org.glassfish.internal.data.ApplicationRegistry;
8482
import org.glassfish.internal.data.ModuleInfo;
85-
86-
import com.sun.ejb.containers.BaseContainer;
87-
import com.sun.ejb.containers.EjbContainerUtil;
88-
import com.sun.ejb.containers.EjbContainerUtilImpl;
83+
import org.glassfish.jersey.internal.inject.Injections;
84+
import org.glassfish.jersey.server.ApplicationHandler;
85+
import org.glassfish.jersey.server.model.Invocable;
86+
import org.glassfish.jersey.server.spi.ComponentProvider;
87+
import org.glassfish.jersey.server.spi.internal.ResourceMethodInvocationHandlerProvider;
8988

9089
/**
9190
* EJB component provider.
@@ -156,12 +155,45 @@ public void initialize(final ServiceLocator locator) {
156155
configuration.commit();
157156
}
158157

158+
private ApplicationInfo getApplicationInfo(EjbContainerUtil ejbUtil) throws NamingException {
159+
ApplicationRegistry appRegistry = ejbUtil.getServices().getService(ApplicationRegistry.class);
160+
Applications applications = ejbUtil.getServices().getService(Applications.class);
161+
String appNamePrefix = (String) initialContext.lookup("java:app/AppName");
162+
Set<String> appNames = appRegistry.getAllApplicationNames();
163+
Set<String> disabledApps = new TreeSet<>();
164+
for (String appName : appNames) {
165+
if (appName.startsWith(appNamePrefix)) {
166+
Application appDesc = applications.getApplication(appName);
167+
if (appDesc != null && !ejbUtil.getDeployment().isAppEnabled(appDesc)) {
168+
// skip disabled version of the app
169+
disabledApps.add(appName);
170+
} else {
171+
return ejbUtil.getDeployment().get(appName);
172+
}
173+
}
174+
}
175+
176+
// grab the latest one, there is no way to make
177+
// sure which one the user is actually enabling,
178+
// so use the best case, i.e. upgrade
179+
Iterator<String> it = disabledApps.iterator();
180+
String lastDisabledApp = null;
181+
while (it.hasNext()) {
182+
lastDisabledApp = it.next();
183+
}
184+
if (lastDisabledApp != null) {
185+
return ejbUtil.getDeployment().get(lastDisabledApp);
186+
}
187+
188+
throw new NamingException("Application Information Not Found");
189+
}
190+
159191
private void registerEjbInterceptor() {
160192
try {
161193
final Object interceptor = new EjbComponentInterceptor(locator);
162194
initialContext = getInitialContext();
163195
final EjbContainerUtil ejbUtil = EjbContainerUtilImpl.getInstance();
164-
final ApplicationInfo appInfo = ejbUtil.getDeployment().get((String) initialContext.lookup("java:app/AppName"));
196+
final ApplicationInfo appInfo = getApplicationInfo(ejbUtil);
165197
final List<String> tempLibNames = new LinkedList<>();
166198
for (ModuleInfo moduleInfo : appInfo.getModuleInfos()) {
167199
final String jarName = moduleInfo.getName();

0 commit comments

Comments
 (0)