diff --git a/tools.descartes.prisma.agent.wildfly/src/main/java/tools/descartes/prisma/agent/wildfly/interceptors/JDBCStatementInterceptor.java b/tools.descartes.prisma.agent.wildfly/src/main/java/tools/descartes/prisma/agent/wildfly/interceptors/JDBCStatementInterceptor.java index e575409c3151695334afede7bd1cc89c5d2cc368..6a16e81f910518b984b9a8f92e16809f9a12a273 100644 --- a/tools.descartes.prisma.agent.wildfly/src/main/java/tools/descartes/prisma/agent/wildfly/interceptors/JDBCStatementInterceptor.java +++ b/tools.descartes.prisma.agent.wildfly/src/main/java/tools/descartes/prisma/agent/wildfly/interceptors/JDBCStatementInterceptor.java @@ -94,13 +94,17 @@ public class JDBCStatementInterceptor implements StatementInterceptorV2 { InvocationRecord currentInvocation = threadCallStack.peek(); if (currentInvocation != null) { String interf = "javax.sql.DataSource"; - String operation = "query"; + StringBuilder operation = new StringBuilder(); + operation.append("query("); + operation.append(currentInvocation.toString()); + operation.append(")"); + ComponentRecord crec = MonitoringService.INSTANCE.requireComponent(con.getHost(), "mysql", "", "database"); crec.setComponentClass("javax.sql.DataSource"); OperationRecord orec = currentInvocation.requireEndpoint(crec, interf, "jdbc", - operation); + operation.toString()); threadCallStack.push(orec.startInvocation()); diff --git a/tools.descartes.prisma.agent.wildfly/src/main/java/tools/descartes/prisma/agent/wildfly/service/ModelExtractionService.java b/tools.descartes.prisma.agent.wildfly/src/main/java/tools/descartes/prisma/agent/wildfly/service/ModelExtractionService.java index 5a8f64a4334359c84f2b8f5cd211d7e133dbf3e1..5c0527b620b93145d081cf973404aa0eedbe8f91 100644 --- a/tools.descartes.prisma.agent.wildfly/src/main/java/tools/descartes/prisma/agent/wildfly/service/ModelExtractionService.java +++ b/tools.descartes.prisma.agent.wildfly/src/main/java/tools/descartes/prisma/agent/wildfly/service/ModelExtractionService.java @@ -449,6 +449,8 @@ public class ModelExtractionService extends AgentController implements Service<M // required ProvidingDelegationConnector. addLocalCallToModule((CompositeComponent) calledComponent, calledProvidingRole, outgoingCrec, outgoingIrec); + } else if (outgoingIrec.getOperation().getProtocol().equals("jdbc")) { + addDataSource((CompositeComponent) calledComponent, calledProvidingRole, outgoingSignature); } } @@ -684,6 +686,34 @@ public class ModelExtractionService extends AgentController implements Service<M ModelSkeletonUtil.insert(module.getProvidingDelegationConnectors(), providingConnector); } + // This creates a basic component that represents the component service for + // a database access + private void addDataSource(CompositeComponent dataSourceComponent, InterfaceProvidingRole role, + Signature signature) { + BasicComponent dataBaseComponent = RepositoryFactory.eINSTANCE.createBasicComponent(); + dataBaseComponent.setName("database"); + dataBaseComponent = ModelSkeletonUtil.insert(skeleton.getRepository().getComponents(), dataBaseComponent); + + InterfaceProvidingRole innerProvidingRole = RepositoryFactory.eINSTANCE.createInterfaceProvidingRole(); + innerProvidingRole.setInterface(role.getInterface()); + innerProvidingRole.setName(toName("jdbc://javax.sql.DataSource")); + innerProvidingRole = ModelSkeletonUtil.insert(dataBaseComponent.getInterfaceProvidingRoles(), + innerProvidingRole); + + AssemblyContext databaseContext = RepositoryFactory.eINSTANCE.createAssemblyContext(); + databaseContext.setName("database"); + databaseContext.setEncapsulatedComponent(dataBaseComponent); + databaseContext = ModelSkeletonUtil.insert(dataSourceComponent.getAssemblyContexts(), databaseContext); + + ProvidingDelegationConnector delegation = RepositoryFactory.eINSTANCE.createProvidingDelegationConnector(); + delegation.setAssemblyContext(databaseContext); + delegation.setInnerInterfaceProvidingRole(innerProvidingRole); + delegation.setOuterInterfaceProvidingRole(role); + ModelSkeletonUtil.insert(dataSourceComponent.getProvidingDelegationConnectors(), delegation); + + createComponentInternalBehavior(dataBaseComponent, innerProvidingRole, signature); + } + private FineGrainedBehavior createComponentInternalBehavior(BasicComponent implementationComponent, InterfaceProvidingRole implementationProvidingRole, Signature signature) { FineGrainedBehavior behavior = ServicebehaviorFactory.eINSTANCE.createFineGrainedBehavior();