It turns out that when we build a call-graph when WALA (1.5.9) on various applications, we observe the following problems.
All the classes in the application are available in CHA, but there are a number of classes that are not available in the call graph as seen in [§2]().
We tried a number of context sensitivity levels, and for each level, we found a number of non-overlapping missing classes.
a. Generally, RTA has more classes that 0-CFA and 01-CFA.
b. There are some classes in 0-CFA and 01-CFA that are not seen in RTA and vice-versa.
1. Setup
We looked at 4 applications:
Daytrader JavaEE 7
Daytrader JavaEE 8
Cargotracker JakartaEE
Plantsbywebsphere JavaEE 7
We take into account the dependencies that constitute these application.
Cargotracker
Output
'Total classes in cha = 113'
'Num nodes in RTA = 80'
'Num nodes in 01-CFA= 64'
'Num nodes in 0-CFA = 65'
'Missing nodes in CHA vs. Call graphs'
{
│ 'org.eclipse.cargotracker.domain.model.location.SampleLocations',
│ 'org.eclipse.cargotracker.interfaces.tracking.web.CargoTrackingViewAdapter$1',
│ 'org.eclipse.cargotracker.interfaces.booking.web.ChangeArrivalDeadlineDialog',
│ 'org.eclipse.cargotracker.interfaces.booking.facade.BookingServiceFacade',
│ 'org.eclipse.cargotracker.infrastructure.messaging.jms.MisdirectedCargoConsumer',
│ 'org.eclipse.cargotracker.infrastructure.logging.LoggerProducer',
│ 'org.eclipse.cargotracker.infrastructure.messaging.jms.DeliveredCargoConsumer',
│ 'org.eclipse.cargotracker.interfaces.handling.file.UploadDirectoryScanner',
│ 'org.eclipse.cargotracker.domain.model.cargo.Delivery$1',
│ 'org.eclipse.cargotracker.infrastructure.messaging.jms.RejectedRegistrationAttemptsConsumer',
│ 'org.eclipse.cargotracker.infrastructure.events.cdi.CargoUpdated',
│ 'org.eclipse.cargotracker.domain.model.cargo.CargoRepository',
│ 'org.eclipse.cargotracker.application.util.ApplicationSettings',
│ 'org.eclipse.cargotracker.application.CargoInspectionService',
│ 'org.eclipse.cargotracker.domain.model.handling.HandlingEventRepository',
│ 'org.eclipse.cargotracker.interfaces.handling.file.EventItemWriter',
│ 'org.eclipse.cargotracker.domain.service.RoutingService',
│ 'org.eclipse.cargotracker.application.util.RestConfiguration',
│ 'org.eclipse.cargotracker.domain.model.voyage.VoyageRepository',
│ 'org.eclipse.cargotracker.application.ApplicationEvents',
│ 'org.eclipse.cargotracker.interfaces.handling.file.FileProcessorJobListener',
│ 'org.eclipse.cargotracker.interfaces.booking.facade.internal.assembler.TrackingEventsDtoAssembler$1',
│ 'org.eclipse.cargotracker.domain.model.voyage.SampleVoyages',
│ 'org.eclipse.cargotracker.interfaces.Coordinates',
│ 'org.eclipse.cargotracker.domain.shared.Specification',
│ 'org.eclipse.cargotracker.domain.model.cargo.Itinerary$1',
│ 'org.eclipse.cargotracker.application.BookingService',
│ 'org.eclipse.cargotracker.application.HandlingEventService',
│ 'org.eclipse.cargotracker.application.util.SampleDataGenerator',
│ 'org.eclipse.cargotracker.interfaces.booking.web.ChangeDestinationDialog',
│ 'org.eclipse.cargotracker.interfaces.booking.facade.internal.assembler.CargoStatusDtoAssembler$1',
│ 'org.eclipse.cargotracker.interfaces.FacesConfiguration',
│ 'org.eclipse.cargotracker.domain.model.location.LocationRepository'
}
'Nodes present in RTA and not in 0-CFA'
{
│ 'org.eclipse.cargotracker.interfaces.booking.web.Track',
│ 'org.eclipse.cargotracker.infrastructure.messaging.jms.HandlingEventRegistrationAttemptConsumer',
│ 'org.eclipse.cargotracker.application.internal.DefaultHandlingEventService',
│ 'org.eclipse.cargotracker.interfaces.booking.web.ListCargo',
│ 'org.eclipse.cargotracker.interfaces.booking.web.ItinerarySelection',
│ 'org.eclipse.cargotracker.interfaces.handling.file.LineParseExceptionListener',
│ 'org.eclipse.cargotracker.infrastructure.persistence.jpa.JpaVoyageRepository',
│ 'org.eclipse.cargotracker.interfaces.handling.file.EventLineParseException',
│ 'org.eclipse.cargotracker.interfaces.booking.sse.RealtimeCargoTrackingService',
│ 'org.eclipse.cargotracker.interfaces.booking.web.Booking',
│ 'org.eclipse.cargotracker.application.internal.DefaultCargoInspectionService',
│ 'org.eclipse.cargotracker.infrastructure.persistence.jpa.JpaLocationRepository',
│ 'org.eclipse.cargotracker.interfaces.booking.web.CargoDetails',
│ 'org.eclipse.cargotracker.interfaces.booking.web.ChangeDestination',
│ 'org.eclipse.pathfinder.internal.GraphDao'
}
'Nodes present in 0-CFA and not in RTA'
{}
'Nodes present in RTA and not in 01-CFA'
{
│ 'org.eclipse.cargotracker.interfaces.booking.web.Track',
│ 'org.eclipse.cargotracker.infrastructure.messaging.jms.HandlingEventRegistrationAttemptConsumer',
│ 'org.eclipse.cargotracker.application.internal.DefaultHandlingEventService',
│ 'org.eclipse.cargotracker.interfaces.booking.web.ListCargo',
│ 'org.eclipse.cargotracker.interfaces.booking.web.ItinerarySelection',
│ 'org.eclipse.cargotracker.interfaces.booking.web.ChangeDestination',
│ 'org.eclipse.cargotracker.interfaces.handling.file.LineParseExceptionListener',
│ 'org.eclipse.cargotracker.infrastructure.persistence.jpa.JpaVoyageRepository',
│ 'org.eclipse.cargotracker.interfaces.handling.file.EventLineParseException',
│ 'org.eclipse.cargotracker.interfaces.booking.sse.RealtimeCargoTrackingService',
│ 'org.eclipse.cargotracker.interfaces.booking.web.Booking',
│ 'org.eclipse.cargotracker.application.internal.DefaultCargoInspectionService',
│ 'org.eclipse.cargotracker.infrastructure.persistence.jpa.JpaLocationRepository',
│ 'org.eclipse.cargotracker.interfaces.booking.web.CargoDetails',
│ 'org.eclipse.cargotracker.domain.model.cargo.HandlingActivity',
│ 'org.eclipse.pathfinder.internal.GraphDao'
}
'Nodes present in 0-CFA and not in RTA'
{}
'Nodes present in 0-CFA and not in 01-CFA'
{'org.eclipse.cargotracker.domain.model.cargo.HandlingActivity'}
'Nodes present in 0-CFA and not in RTA'
{}
Daytrader 8
'Total classes in cha = 155'
'Num nodes in RTA = 118'
'Num nodes in 01-CFA= 109'
'Num nodes in 0-CFA = 109'
'Missing nodes in CHA vs. Call graphs'
{
│ 'com.ibm.websphere.samples.daytrader.interfaces.MarketSummaryUpdate',
│ 'com.ibm.websphere.samples.daytrader.jaxrs.JAXRSApplication',
│ 'com.ibm.websphere.samples.daytrader.web.prims.cdi.HitAsync',
│ 'com.ibm.websphere.samples.daytrader.web.prims.cdi.PingServletCDIBeanManagerViaJNDI',
│ 'com.ibm.websphere.samples.daytrader.interfaces.QuotePriceChange',
│ 'com.ibm.websphere.samples.daytrader.web.prims.jaxrs.JAXRSSyncService',
│ 'com.ibm.websphere.samples.daytrader.web.prims.jaxrs.TestJSONObject',
│ 'com.ibm.websphere.samples.daytrader.web.prims.PingServlet2IncludeRcv',
│ 'com.ibm.websphere.samples.daytrader.web.prims.cdi.PingInterceptor',
│ 'com.ibm.websphere.samples.daytrader.web.prims.PingJSONPStreaming$1',
│ 'com.ibm.websphere.samples.daytrader.web.prims.PingServlet30Async',
│ 'com.ibm.websphere.samples.daytrader.web.prims.cdi.PingInterceptorBinding',
│ 'com.ibm.websphere.samples.daytrader.web.prims.PingWebSocketTextSync',
│ 'com.ibm.websphere.samples.daytrader.interfaces.Trace',
│ 'com.ibm.websphere.samples.daytrader.interfaces.TradeSession2Direct',
│ 'com.ibm.websphere.samples.daytrader.web.prims.PingServletLargeContentLength',
│ 'com.ibm.websphere.samples.daytrader.web.prims.PingReentryServlet',
│ 'com.ibm.websphere.samples.daytrader.web.jsf.JSFLoginFilter',
│ 'com.ibm.websphere.samples.daytrader.web.prims.cdi.PingServletCDIBeanManagerViaCDICurrent',
│ 'com.ibm.websphere.samples.daytrader.web.prims.cdi.CDIEventProducer',
│ 'com.ibm.websphere.samples.daytrader.web.prims.cdi.PingEJBIFace',
│ 'com.ibm.websphere.samples.daytrader.web.prims.cdi.PingServletCDIEvent',
│ 'com.ibm.websphere.samples.daytrader.web.prims.cdi.PingServletCDI',
│ 'com.ibm.websphere.samples.daytrader.web.prims.cdi.PingCDIJSFBean',
│ 'com.ibm.websphere.samples.daytrader.interfaces.RuntimeMode',
│ 'com.ibm.websphere.samples.daytrader.interfaces.TradeDB',
│ 'com.ibm.websphere.samples.daytrader.web.prims.PingWebSocketBinary',
│ 'com.ibm.websphere.samples.daytrader.web.websocket.ActionMessage$1',
│ 'com.ibm.websphere.samples.daytrader.web.prims.http2.PingServletSimple',
│ 'com.ibm.websphere.samples.daytrader.interfaces.TradeJDBC',
│ 'com.ibm.websphere.samples.daytrader.web.prims.PingUpgradeServlet$1',
│ 'com.ibm.websphere.samples.daytrader.web.prims.cdi.Hit',
│ 'com.ibm.websphere.samples.daytrader.interfaces.TradeEJB',
│ 'com.ibm.websphere.samples.daytrader.web.prims.http2.PingServletPush',
│ 'com.ibm.websphere.samples.daytrader.web.prims.cdi.PingCDIBean',
│ 'com.ibm.websphere.samples.daytrader.interfaces.TradeServices',
│ 'com.ibm.websphere.samples.daytrader.web.prims.PingUpgradeServlet'
}
'Nodes present in RTA and not in 0-CFA'
{
│ 'com.ibm.websphere.samples.daytrader.jaxrs.BroadcastResource',
│ 'com.ibm.websphere.samples.daytrader.web.prims.cdi.PingEJBLocalDecorator',
│ 'com.ibm.websphere.samples.daytrader.web.prims.beanval.CDIMethodConstraintBean',
│ 'com.ibm.websphere.samples.daytrader.impl.direct.AsyncOrder',
│ 'com.ibm.websphere.samples.daytrader.impl.session2direct.DirectSLSBBean',
│ 'com.ibm.websphere.samples.daytrader.impl.ejb3.MarketSummarySingleton',
│ 'com.ibm.websphere.samples.daytrader.impl.direct.AsyncOrderSubmitter',
│ 'com.ibm.websphere.samples.daytrader.web.prims.cdi.PingEJBLocal',
│ 'com.ibm.websphere.samples.daytrader.impl.ejb3.AsyncScheduledOrderSubmitter'
}
'Nodes present in 0-CFA and not in RTA'
set()
'Nodes present in RTA and not in 01-CFA'
{
│ 'com.ibm.websphere.samples.daytrader.jaxrs.BroadcastResource',
│ 'com.ibm.websphere.samples.daytrader.web.prims.cdi.PingEJBLocalDecorator',
│ 'com.ibm.websphere.samples.daytrader.web.prims.beanval.CDIMethodConstraintBean',
│ 'com.ibm.websphere.samples.daytrader.impl.direct.AsyncOrder',
│ 'com.ibm.websphere.samples.daytrader.impl.session2direct.DirectSLSBBean',
│ 'com.ibm.websphere.samples.daytrader.impl.ejb3.MarketSummarySingleton',
│ 'com.ibm.websphere.samples.daytrader.impl.direct.AsyncOrderSubmitter',
│ 'com.ibm.websphere.samples.daytrader.web.prims.cdi.PingEJBLocal',
│ 'com.ibm.websphere.samples.daytrader.impl.ejb3.AsyncScheduledOrderSubmitter'
}
'Nodes present in 0-CFA and not in RTA'
set()
'Nodes present in 0-CFA and not in 01-CFA'
set()
'Nodes present in 0-CFA and not in RTA'
set()
Plants
'Total classes in cha = 37'
'Num nodes in RTA = 34'
'Num nodes in 01-CFA= 33'
'Num nodes in 0-CFA = 33'
'Missing nodes in CHA vs. Call graphs'
{'com.ibm.websphere.samples.pbw.bean.NoSupplierException', 'com.ibm.websphere.samples.pbw.war.ImageServlet', 'com.ibm.websphere.samples.pbw.war.AccountServlet'}
'Nodes present in RTA and not in 0-CFA'
{'com.ibm.websphere.samples.pbw.jpa.OrderKey'}
'Nodes present in 0-CFA and not in RTA'
set()
'Nodes present in RTA and not in 01-CFA'
{'com.ibm.websphere.samples.pbw.jpa.OrderKey'}
'Nodes present in 0-CFA and not in RTA'
set()
'Nodes present in 0-CFA and not in 01-CFA'
set()
'Nodes present in 0-CFA and not in RTA'
set()
It turns out that when we build a call-graph when WALA (1.5.9) on various applications, we observe the following problems.
We tried a number of context sensitivity levels, and for each level, we found a number of non-overlapping missing classes. a. Generally, RTA has more classes that 0-CFA and 01-CFA. b. There are some classes in 0-CFA and 01-CFA that are not seen in RTA and vice-versa.
1. Setup
We looked at 4 applications:
We take into account the dependencies that constitute these application.
Cargotracker
Output
Daytrader 8
Plants