Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also .

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also .
base repository: wildfly/wildfly
Choose a Base Repository
wildfly/wildfly
2002simon01/jboss-as
ALRubinger/wildfly
ErikWRasmussen/jboss-as
KurtStam/jboss-as
Lerm/jboss-as
LinuxEvangelist/jboss-as
Mogztter/wildfly
OndraZizka/jboss-as
PayU-EMEA/jboss-as
aaronwalker/jboss-as
agibsonccc/jboss-as
akalachm/jboss-as
alesj/jboss-as
alns/jboss-as
aloubyansky/wildfly
aminorex/jboss-as
andersnorgaard/jboss-as
andredemathe/jboss-as
andytaylor/wildfly
aprilhu0/jboss-as
ashields/jboss-as
aslakknutsen/jboss-as
asoldano/wildfly
awirayaksa/jboss-as
bershath/jboss-as
bgeorges/jboss-as
blue61/jboss-as
bosschaert/jboss-as
bstansberry/wildfly
btison/jboss-as
cbue/jboss-as
charleswmiller/jboss-as
chikin/jboss-as
chriskriel/jboss-as
coberle/jboss-as
colmsean/jboss-as
ctomc/wildfly
dandreadis/wildfly
darranl/wildfly
dcaillia/jboss-as
denuno/jboss-as
deruelle/jboss-as
dhollandAtWex/dh-old-forks-jboss-as
dmlloyd/wildfly
dobozysaurus/jboss-as
dpospisil/wildfly
edbean/jboss-as
emannuel/jboss-as
emerile1/jboss-as
emuckenhuber/wildfly
esantana/jboss-as
fbricon/jboss-as
fedora-jboss-as/wildfly
fei-yin/jboss-as
fharms/wildfly
fregaham/jboss-as
fxlambda-twickly5/wildfly
garcimouche/jboss-as
goldmann/jboss-as
gonne/jboss-as
gvagenas/jboss-as
hamanju/jboss-as
hamming229/jboss-as
heiko-braun/wildfly
hgkmiracle/jboss-as
hunter-thom/jboss-as
ikaro/jboss-as
istudens/wildfly
jaikiran/wildfly
jamezp/wildfly
janpiel/jboss-as
java-coder/jboss-as
jayhowell/jboss-as
jbossejb3/jboss-as
jdmr/jboss-as
jdpgrailsdev/jboss-as
jeenapeter/jboss-as
jeffzhang/jboss-as
jeremiahshirk/jboss-as
jiwils/jboss-as
jlindesmith/jboss-as
jmartisk/wildfly
jocstar/jboss-as
joseph2000/jboss-as
jrwhitley/jboss-as
jswordfish/jboss-as
jtoerber/jboss-as
julianzhu/jboss-as
jwulf/jboss-as
kabir/wildfly
kbys/jboss-as
koledzhikov/jboss-as
kpiwko/wildfly
kylape/wildfly
ldevrie/jboss-as
lingling788/jboss-as
liweinan/jboss-as
luksa/wildfly
lydonchandra/jboss-as
maasvdberg/wildfly
madhumita/jboss-as
madhumita12/jboss-as
maerqiang/jboss-as
maeste/jboss-as
mageshbk/jboss-as
markmc/jboss-as
markyour/jboss-as
maschmid/jboss-as
matejonnet/jboss-as
mathieuancelin/jboss-as
mathieufortin01/jboss-as
mattdrees/jboss-as
maxandersen/jboss-as
maximilienw/jboss-as
mbogoevici/jboss-as
mbrasier/jboss-as
mdemerath/jboss-as
mgencur/jboss-as
michaelschuetz/jboss-as
miclark/jboss-as
migue/wildfly
mikebrock/jboss-as
mkiman/jboss-as
mlinhard/jboss-as
mmoyses/jboss-as
mojavelinux/jboss-as
mschwartzman/jboss-as
mstruk/jboss-as
nikkack/jboss-as
nookala/jboss-as
npfr/jboss-as
nscavell/jboss-as
ochaloup/wildfly
patmcdonough/jboss-as
pbielicki/jboss-as
pentarou/jboss-as
pepite/jboss-as
petbac/jboss-as
pferraro/wildfly
pmf8/jboss-as
pmuir/jboss-as
porobd/jboss-as
prabugp/jboss-as
pragnesh/jboss-as
prasad-deshpande/jboss-as
prcg66/jboss-as
pskopek/wildfly
pslegr/jboss-as
rachmatowicz/wildfly
rachmatowicz2/jboss-as
randythomas/jboss-as
rhusar/wildfly
richmidwinter/jboss-as
richsharples/jboss-as
ringerc/jboss-as
robertpanzer/jboss-as
robstryker/jboss-as
rsvoboda/wildfly
rzimmermann/jboss-as
sacdroid/jboss-as
samuelo/jboss-as
sasgww/jboss-as
scottmarlow/wildfly
sebersole/jboss-as
seeburger-ag/jboss-as
seko2000/jboss-as
sgilda/wildfly
shadangi/jboss-as
shuawest/jboss-as
sjancke/jboss-as
skoussou/jboss-as
smcgowan/wildfly
spreadline/jboss-as
ssilvert/wildfly
starksm64/jboss-as
starksmjboss/jboss-as
stliu/jboss-as
stuartwdouglas/wildfly
sujaybawaskar/jboss-as
tdiesler/wildfly
tfennelly/jboss-as
thammoud/jboss-as
thanhvc/jboss-as
thauser/jboss-as
thomasnymand/jboss-as
thunderlei/jboss-as
tomathome/jboss-as
tomwells/jboss-as
tristantarrant/wildfly
tyasuma/jboss-as
undertow-io/jboss-as
vladimirralev/jboss-as
vmariusvv/jboss-as
vratsel/jboss-as
weld/wildfly
wfink/wildfly
wolfc/jboss-as
zhigunovs/jboss-as
zhleonix/jboss-as
Nothing to show
base: 28f528a
head repository: wildfly/wildfly
Choose a Head Repository
wildfly/wildfly
2002simon01/jboss-as
ALRubinger/wildfly
ErikWRasmussen/jboss-as
KurtStam/jboss-as
Lerm/jboss-as
LinuxEvangelist/jboss-as
Mogztter/wildfly
OndraZizka/jboss-as
PayU-EMEA/jboss-as
aaronwalker/jboss-as
agibsonccc/jboss-as
akalachm/jboss-as
alesj/jboss-as
alns/jboss-as
aloubyansky/wildfly
aminorex/jboss-as
andersnorgaard/jboss-as
andredemathe/jboss-as
andytaylor/wildfly
aprilhu0/jboss-as
ashields/jboss-as
aslakknutsen/jboss-as
asoldano/wildfly
awirayaksa/jboss-as
bershath/jboss-as
bgeorges/jboss-as
blue61/jboss-as
bosschaert/jboss-as
bstansberry/wildfly
btison/jboss-as
cbue/jboss-as
charleswmiller/jboss-as
chikin/jboss-as
chriskriel/jboss-as
coberle/jboss-as
colmsean/jboss-as
ctomc/wildfly
dandreadis/wildfly
darranl/wildfly
dcaillia/jboss-as
denuno/jboss-as
deruelle/jboss-as
dhollandAtWex/dh-old-forks-jboss-as
dmlloyd/wildfly
dobozysaurus/jboss-as
dpospisil/wildfly
edbean/jboss-as
emannuel/jboss-as
emerile1/jboss-as
emuckenhuber/wildfly
esantana/jboss-as
fbricon/jboss-as
fedora-jboss-as/wildfly
fei-yin/jboss-as
fharms/wildfly
fregaham/jboss-as
fxlambda-twickly5/wildfly
garcimouche/jboss-as
goldmann/jboss-as
gonne/jboss-as
gvagenas/jboss-as
hamanju/jboss-as
hamming229/jboss-as
heiko-braun/wildfly
hgkmiracle/jboss-as
hunter-thom/jboss-as
ikaro/jboss-as
istudens/wildfly
jaikiran/wildfly
jamezp/wildfly
janpiel/jboss-as
java-coder/jboss-as
jayhowell/jboss-as
jbossejb3/jboss-as
jdmr/jboss-as
jdpgrailsdev/jboss-as
jeenapeter/jboss-as
jeffzhang/jboss-as
jeremiahshirk/jboss-as
jiwils/jboss-as
jlindesmith/jboss-as
jmartisk/wildfly
jocstar/jboss-as
joseph2000/jboss-as
jrwhitley/jboss-as
jswordfish/jboss-as
jtoerber/jboss-as
julianzhu/jboss-as
jwulf/jboss-as
kabir/wildfly
kbys/jboss-as
koledzhikov/jboss-as
kpiwko/wildfly
kylape/wildfly
ldevrie/jboss-as
lingling788/jboss-as
liweinan/jboss-as
luksa/wildfly
lydonchandra/jboss-as
maasvdberg/wildfly
madhumita/jboss-as
madhumita12/jboss-as
maerqiang/jboss-as
maeste/jboss-as
mageshbk/jboss-as
markmc/jboss-as
markyour/jboss-as
maschmid/jboss-as
matejonnet/jboss-as
mathieuancelin/jboss-as
mathieufortin01/jboss-as
mattdrees/jboss-as
maxandersen/jboss-as
maximilienw/jboss-as
mbogoevici/jboss-as
mbrasier/jboss-as
mdemerath/jboss-as
mgencur/jboss-as
michaelschuetz/jboss-as
miclark/jboss-as
migue/wildfly
mikebrock/jboss-as
mkiman/jboss-as
mlinhard/jboss-as
mmoyses/jboss-as
mojavelinux/jboss-as
mschwartzman/jboss-as
mstruk/jboss-as
nikkack/jboss-as
nookala/jboss-as
npfr/jboss-as
nscavell/jboss-as
ochaloup/wildfly
patmcdonough/jboss-as
pbielicki/jboss-as
pentarou/jboss-as
pepite/jboss-as
petbac/jboss-as
pferraro/wildfly
pmf8/jboss-as
pmuir/jboss-as
porobd/jboss-as
prabugp/jboss-as
pragnesh/jboss-as
prasad-deshpande/jboss-as
prcg66/jboss-as
pskopek/wildfly
pslegr/jboss-as
rachmatowicz/wildfly
rachmatowicz2/jboss-as
randythomas/jboss-as
rhusar/wildfly
richmidwinter/jboss-as
richsharples/jboss-as
ringerc/jboss-as
robertpanzer/jboss-as
robstryker/jboss-as
rsvoboda/wildfly
rzimmermann/jboss-as
sacdroid/jboss-as
samuelo/jboss-as
sasgww/jboss-as
scottmarlow/wildfly
sebersole/jboss-as
seeburger-ag/jboss-as
seko2000/jboss-as
sgilda/wildfly
shadangi/jboss-as
shuawest/jboss-as
sjancke/jboss-as
skoussou/jboss-as
smcgowan/wildfly
spreadline/jboss-as
ssilvert/wildfly
starksm64/jboss-as
starksmjboss/jboss-as
stliu/jboss-as
stuartwdouglas/wildfly
sujaybawaskar/jboss-as
tdiesler/wildfly
tfennelly/jboss-as
thammoud/jboss-as
thanhvc/jboss-as
thauser/jboss-as
thomasnymand/jboss-as
thunderlei/jboss-as
tomathome/jboss-as
tomwells/jboss-as
tristantarrant/wildfly
tyasuma/jboss-as
undertow-io/jboss-as
vladimirralev/jboss-as
vmariusvv/jboss-as
vratsel/jboss-as
weld/wildfly
wfink/wildfly
wolfc/jboss-as
zhigunovs/jboss-as
zhleonix/jboss-as
Nothing to show
compare: 7d4ba27
  • 2 commits
  • 10 files changed
  • 0 commit comments
  • 2 contributors
Commits on Apr 15, 2019
… interfaces that do not have concrete subclasses
Commits on Apr 24, 2019
WFLY-11870 Do not process resource annotations on abstract classes or …
@@ -47,6 +47,9 @@
import org.jboss.as.server.deployment.DeploymentUnit;
import org.jboss.as.server.deployment.DeploymentUnitProcessingException;
import org.jboss.as.server.deployment.DeploymentUnitProcessor;
import org.jboss.as.server.deployment.annotation.CompositeIndex;
import org.jboss.jandex.ClassInfo;
import org.jboss.jandex.DotName;
import org.jboss.modules.Module;
import org.jboss.msc.service.CircularDependencyException;
import org.jboss.msc.service.DuplicateServiceException;
@@ -61,6 +64,7 @@
import org.jboss.msc.service.StartException;
import org.jboss.msc.service.StopContext;

import java.lang.reflect.Modifier;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -158,8 +162,9 @@ public void deploy(final DeploymentPhaseContext phaseContext) throws DeploymentU
//were only intended to be installed when running as an app client
boolean appClient = DeploymentTypeMarker.isType(DeploymentType.APPLICATION_CLIENT, deploymentUnit) || this.appclient;


if (!MetadataCompleteMarker.isMetadataComplete(phaseContext.getDeploymentUnit()) && !appClient) {
final CompositeIndex index = deploymentUnit.getAttachment(org.jboss.as.server.deployment.Attachments.COMPOSITE_ANNOTATION_INDEX);

for (EEModuleClassDescription config : eeModuleDescription.getClassDescriptions()) {
if (handledClasses.contains(config.getClassName())) {
continue;
@@ -168,6 +173,16 @@ public void deploy(final DeploymentPhaseContext phaseContext) throws DeploymentU
continue;
}
final Set<BindingConfiguration> classLevelBindings = new HashSet<>(config.getBindingConfigurations());
// only process concrete classes and their superclasses
// (An Index contains info on all classes in a jar, and the CompositeIndex in the 'index' var aggregates
// all the Index objects for the jars visible to the deployment unit. So it can be scanned for relationships
// between classes and not miss out on any.)
if (!classLevelBindings.isEmpty()) {
ClassInfo classInfo = index.getClassByName(DotName.createSimple(config.getClassName()));
if (!isConcreteClass(classInfo) && !hasConcreteSubclass(index, classInfo)) {
continue;
}
}
for (BindingConfiguration binding : classLevelBindings) {
final String bindingName = binding.getName();
final boolean compBinding = bindingName.startsWith("java:comp") || !bindingName.startsWith("java:");
@@ -304,6 +319,25 @@ public static boolean equals(Object one, Object two) {
return one == two || (one != null && one.equals(two));
}

private static boolean isConcreteClass(ClassInfo classInfo) {
return !Modifier.isAbstract(classInfo.flags()) && !Modifier.isInterface(classInfo.flags());
}

private static boolean hasConcreteSubclass(CompositeIndex index, ClassInfo classInfo) {
final Set<ClassInfo> subclasses;
if (Modifier.isInterface(classInfo.flags())) {
subclasses = index.getAllKnownImplementors(classInfo.name());
} else {
subclasses = index.getAllKnownSubclasses(classInfo.name());
}
for (ClassInfo subclass: subclasses) {
if (isConcreteClass(subclass)) {
return true;
}
}
return false;
}

public void undeploy(DeploymentUnit context) {
}

@@ -0,0 +1,13 @@
package org.jboss.as.test.integration.ejb.annotationprocessing;

import javax.ejb.EJB;

public abstract class AbstractReferencingBeanA {

@EJB
private ReferencedBeanInterface referencedBean;

public String relayHello() {
return referencedBean.sayHello();
}
}
@@ -0,0 +1,11 @@
package org.jboss.as.test.integration.ejb.annotationprocessing;

import javax.ejb.Stateless;

@Stateless
public class ReferencedBean implements ReferencedBeanInterface {
@Override
public String sayHello() {
return "Hello!";
}
}
@@ -0,0 +1,5 @@
package org.jboss.as.test.integration.ejb.annotationprocessing;

public interface ReferencedBeanInterface {
String sayHello();
}
@@ -0,0 +1,10 @@
package org.jboss.as.test.integration.ejb.annotationprocessing;

import javax.ejb.EJB;

public interface ReferencingBeanBInterface {

@EJB
ReferencedBeanInterface refencedBean = null;

}
@@ -0,0 +1,4 @@
package org.jboss.as.test.integration.ejb.annotationprocessing;

public class ReferencingClassA extends AbstractReferencingBeanA {
}
@@ -0,0 +1,4 @@
package org.jboss.as.test.integration.ejb.annotationprocessing;

public class ReferencingClassB implements ReferencingBeanBInterface {
}
@@ -0,0 +1,7 @@
package org.jboss.as.test.integration.ejb.annotationprocessing;

import javax.ejb.Stateless;

@Stateless
public class ReferencingComponentA extends AbstractReferencingBeanA {
}
@@ -0,0 +1,7 @@
package org.jboss.as.test.integration.ejb.annotationprocessing;

import javax.ejb.Stateless;

@Stateless
public class ReferencingComponentB implements ReferencingBeanBInterface {
}
@@ -0,0 +1,128 @@
package org.jboss.as.test.integration.ejb.annotationprocessing;

import org.jboss.arquillian.container.spi.client.container.DeploymentException;
import org.jboss.arquillian.container.test.api.Deployer;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.arquillian.test.api.ArquillianResource;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.junit.Test;
import org.junit.runner.RunWith;

@RunWith(Arquillian.class)
public class ResourceAnnotationsProcessingTestCase {

private static final String ABSTRACT_REFERENCING_INTERFACE_WITHOUT_IMPL = "abstract-referencing-interface-without-impl";
private static final String INTERFACE_REFERENCING_INTERFACE_WITHOUT_IMPL = "interface-referencing-interface-without-impl";
private static final String EJBS_REFERENCING_INTERFACE_WITH_IMPL = "ejbs-referencing-interface-with-impl";
private static final String EJBS_REFERENCING_INTERFACE_WITHOUT_IMPL = "ejbs-referencing-interface-without-impl";
private static final String CLASSES_REFERENCING_INTERFACE_WITH_IMPL = "classes-referencing-interface-with-impl";
private static final String CLASSES_REFERENCING_INTERFACE_WITHOUT_IMPL = "classes-referencing-interface-without-impl";

@ArquillianResource
private Deployer deployer;

@Deployment(name = ABSTRACT_REFERENCING_INTERFACE_WITHOUT_IMPL, managed = false)
public static WebArchive createDeployment1() {
final WebArchive war = ShrinkWrap.create(WebArchive.class,
ABSTRACT_REFERENCING_INTERFACE_WITHOUT_IMPL + ".war");
war.addClass(ReferencedBeanInterface.class);
war.addClass(AbstractReferencingBeanA.class);
return war;
}

@Deployment(name = INTERFACE_REFERENCING_INTERFACE_WITHOUT_IMPL, managed = false)
public static WebArchive createDeployment2() {
final WebArchive war = ShrinkWrap.create(WebArchive.class,
INTERFACE_REFERENCING_INTERFACE_WITHOUT_IMPL + ".war");
war.addClass(ReferencedBeanInterface.class);
war.addClass(ReferencingBeanBInterface.class);
return war;
}

@Deployment(name = EJBS_REFERENCING_INTERFACE_WITH_IMPL, managed = false)
public static WebArchive createDeployment3() {
final WebArchive war = ShrinkWrap.create(WebArchive.class,
EJBS_REFERENCING_INTERFACE_WITH_IMPL + ".war");
war.addClass(ReferencedBeanInterface.class);
war.addClass(ReferencedBean.class);
war.addClass(AbstractReferencingBeanA.class);
war.addClass(ReferencingComponentA.class);
war.addClass(ReferencingBeanBInterface.class);
war.addClass(ReferencingComponentB.class);
return war;
}

@Deployment(name = EJBS_REFERENCING_INTERFACE_WITHOUT_IMPL, managed = false)
public static WebArchive createDeployment4() {
final WebArchive war = ShrinkWrap.create(WebArchive.class,
EJBS_REFERENCING_INTERFACE_WITHOUT_IMPL + ".war");
war.addClass(ReferencedBeanInterface.class);
war.addClass(AbstractReferencingBeanA.class);
war.addClass(ReferencingComponentA.class);
war.addClass(ReferencingBeanBInterface.class);
war.addClass(ReferencingComponentB.class);
return war;
}

@Deployment(name = CLASSES_REFERENCING_INTERFACE_WITH_IMPL, managed = false)
public static WebArchive createDeployment5() {
final WebArchive war = ShrinkWrap.create(WebArchive.class,
CLASSES_REFERENCING_INTERFACE_WITH_IMPL + ".war");
war.addClass(ReferencedBeanInterface.class);
war.addClass(ReferencedBean.class);
war.addClass(AbstractReferencingBeanA.class);
war.addClass(ReferencingClassA.class);
war.addClass(ReferencingBeanBInterface.class);
war.addClass(ReferencingClassB.class);
return war;
}

@Deployment(name = CLASSES_REFERENCING_INTERFACE_WITHOUT_IMPL, managed = false)
public static WebArchive createDeployment6() {
final WebArchive war = ShrinkWrap.create(WebArchive.class,
CLASSES_REFERENCING_INTERFACE_WITHOUT_IMPL + ".war");
war.addClass(ReferencedBeanInterface.class);
war.addClass(AbstractReferencingBeanA.class);
war.addClass(ReferencingClassA.class);
war.addClass(ReferencingBeanBInterface.class);
war.addClass(ReferencingClassB.class);
return war;
}

@Test
public void testAbstractReferencingInterfaceWithoutImpl() {
tryDeployment(ABSTRACT_REFERENCING_INTERFACE_WITHOUT_IMPL);
}

@Test
public void testInterfaceReferencingInterfaceWithoutImpl() {
tryDeployment(INTERFACE_REFERENCING_INTERFACE_WITHOUT_IMPL);
}

@Test
public void testEjbsReferencingInterfaceWithImpl() {
tryDeployment(EJBS_REFERENCING_INTERFACE_WITH_IMPL);
}

@Test(expected = DeploymentException.class)
public void testEjbsReferencingInterfaceWithoutImpl() {
tryDeployment(EJBS_REFERENCING_INTERFACE_WITHOUT_IMPL);
}

@Test
public void testClassesReferencingInterfaceWithImpl() {
tryDeployment(CLASSES_REFERENCING_INTERFACE_WITH_IMPL);
}

@Test(expected = DeploymentException.class)
public void testClassesReferencingInterfaceWithoutImpl() {
tryDeployment(CLASSES_REFERENCING_INTERFACE_WITHOUT_IMPL);
}

private void tryDeployment(String name) {
deployer.deploy(name);
deployer.undeploy(name);
}
}

No commit comments for this range

You can’t perform that action at this time.