egeria icon indicating copy to clipboard operation
egeria copied to clipboard

Usage of spring in non-spring modules

Open planetf1 opened this issue 5 years ago • 12 comments

Our service architecture is to capture all business logic in our '-service' modules, and have our spring rest binding within '-spring' modules.

This isolates spring from the remainder of egeria, making it easier to adopt other, future technologies for service bindings such as microprofile, or perhaps gRPC.

The following modules appear to breach this principle:

./open-metadata-conformance-suite/open-metadata-conformance-suite-server/pom.xml

This is used in TestOpenMetadataOrigin - use of RestTemplate where probably use of our dedicated spring rest connector would be preferable

./open-metadata-implementation/governance-servers/security-sync-services/security-sync-services-server/pom.xml

This is making a fair bit of use of spring for client access to the ranger server - I suspect again we could use the spring rest connector

./open-metadata-implementation/governance-servers/security-officer-services/security-officer-services-server/pom.xml

As above -> spring rest connector

./open-metadata-implementation/access-services/data-engine/data-engine-client/pom.xml

We seem to make use of org.springfamework.util.CollectionUtils - could we use alternative collections?

./open-metadata-implementation/access-services/data-engine/data-engine-server/pom.xml

Making use of collections, and rest client (could use rest connector)

./open-metadata-implementation/access-services/glossary-view/glossary-view-server/pom.xml

This is making use of spring reflection utilities - though is in test code

./open-metadata-implementation/access-services/glossary-view/glossary-view-client/pom.xml

Also in test code

./open-metadata-implementation/access-services/information-view/information-view-server/pom.xml

A lot of spring manipulation

./open-metadata-implementation/access-services/asset-catalog/asset-catalog-client/pom.xml

Reflection (test)

./open-metadata-implementation/access-services/asset-catalog/asset-catalog-server/pom.xml

Reflection (test)

./open-metadata-implementation/access-services/subject-area/subject-area-client/pom.xml

Used for client rest calls (should use connector)

./open-metadata-implementation/access-services/data-platform/data-platform-server/pom.xml

A few light utilities

./open-metadata-implementation/access-services/governance-engine/governance-engine-client/pom.xml

rest api (use connector)

./open-metadata-implementation/access-services/governance-engine/governance-engine-server/pom.xml

A little use for string fn?

./open-metadata-implementation/adapters/governance-engines-plugins/gaian-ranger-plugin/pom.xml

Used for rest client (use connector)

./open-metadata-implementation/adapters/open-connectors/governance-daemon-connectors/security-sync-connectors/ranger-connector/pom.xml

Used as rest client

Open for discussion, but to adhere to our architecural principles I think we need to

  • Replace use of spring RestClient with our spring rest connector
  • Evaluate if different collection/string classes can be used in other cases
  • Refactor test code - only -spring tests should have spring dependencies

planetf1 avatar Dec 05 '19 15:12 planetf1

Good catch - but we should address for 1.3...

mandy-chessell avatar Dec 06 '19 10:12 mandy-chessell

For the very first part of this (only) - relating to the conformance suite - the use of the Spring RestTemplate is in the testing of platform conformance. If this were in the repository workbench I think I would know enough to fix it - but I am less sure about the platform - do we have a platform connector (analogous to the repository connectors)?

grahamwallis avatar Dec 09 '19 12:12 grahamwallis

There is a REST Client connector that can be used.

mandy-chessell avatar Dec 31 '19 13:12 mandy-chessell

Note #3031 removes some spring dependency from the data platform server

planetf1 avatar May 05 '20 16:05 planetf1

This issue has been automatically marked as stale because it has not had recent activity. It will be closed in 20 days if no further activity occurs. Thank you for your contributions.

github-actions[bot] avatar Jul 05 '20 00:07 github-actions[bot]

This issue has been automatically marked as stale because it has not had recent activity. It will be closed in 20 days if no further activity occurs. Thank you for your contributions.

github-actions[bot] avatar Sep 05 '20 00:09 github-actions[bot]

This issue has been automatically marked as stale because it has not had recent activity. It will be closed in 20 days if no further activity occurs. Thank you for your contributions.

github-actions[bot] avatar Nov 14 '20 00:11 github-actions[bot]

This issue has been automatically marked as stale because it has not had recent activity. It will be closed in 20 days if no further activity occurs. Thank you for your contributions.

github-actions[bot] avatar Jan 16 '21 00:01 github-actions[bot]

This issue has been automatically marked as stale because it has not had recent activity. It will be closed in 20 days if no further activity occurs. Thank you for your contributions.

github-actions[bot] avatar Mar 21 '21 00:03 github-actions[bot]

This issue has been automatically marked as stale because it has not had recent activity. It will be closed in 20 days if no further activity occurs. Thank you for your contributions.

github-actions[bot] avatar Jun 09 '21 00:06 github-actions[bot]

Currently we have:

./open-metadata-conformance-suite/open-metadata-conformance-suite-server/pom.xml:            

 - uses spring-web

./open-metadata-implementation/common-services/ffdc-services/pom.xml:

 - spring-core
 - spring-rest-client-connector
 
./open-metadata-implementation/access-services/data-engine/data-engine-server/pom.xml:     
 - spring-core
 - spring-web
 - 
./open-metadata-implementation/access-services/glossary-view/glossary-view-server/pom.xml:            
 - spring-core
 
./open-metadata-implementation/access-services/glossary-view/glossary-view-client/pom.xml
 - spring-core
 

./open-metadata-implementation/access-services/asset-catalog/asset-catalog-client/pom.xml
 - spring-core
 
./open-metadata-implementation/access-services/asset-catalog/asset-catalog-server/pom.xml
 - spring-core
 
./open-metadata-implementation/access-services/subject-area/subject-area-client/pom.xml
 - spring-core
 
./open-metadata-implementation/access-services/security-officer/security-officer-client/pom.xml
 - spring-core
 
./open-metadata-implementation/access-services/asset-lineage/asset-lineage-client/pom.xml
 - spring-core
 
./open-metadata-implementation/adapters/open-connectors/rest-client-connectors/spring-rest-client-connector/pom.xml
 - spring-core
 
./open-metadata-implementation/adapters/open-connectors/rest-client-connectors/spring-rest-client-connector/pom.xml:  
 - spring-web
 - spring-core

The current affected java files are:

find . -name '*.java' | xargs -n50 grep 'import org.spring' | grep -v '\-spring/' | grep -v 'spring-rest-client' | grep -v delombok                                                                                                                               [12:49:58]
./open-metadata-conformance-suite/open-metadata-conformance-suite-server/src/main/java/org/odpi/openmetadata/conformance/tests/platform/origin/TestOpenMetadataOrigin.java:import org.springframework.web.client.RestTemplate;
./open-metadata-implementation/common-services/ffdc-services/src/main/java/org/odpi/openmetadata/commonservices/ffdc/rest/FFDCRESTClientBase.java:import org.springframework.core.ParameterizedTypeReference;
./open-metadata-implementation/common-services/ffdc-services/src/main/java/org/odpi/openmetadata/commonservices/ffdc/rest/ResponseParameterization.java:import org.springframework.core.GenericTypeResolver;
./open-metadata-implementation/common-services/ffdc-services/src/main/java/org/odpi/openmetadata/commonservices/ffdc/rest/ResponseParameterization.java:import org.springframework.core.ParameterizedTypeReference;
./open-metadata-implementation/common-services/ffdc-services/src/main/java/org/odpi/openmetadata/commonservices/ffdc/rest/ResponseParameterization.java:import org.springframework.core.ResolvableType;
./open-metadata-implementation/access-services/data-engine/data-engine-server/src/test/java/org/odpi/openmetadata/accessservices/dataengine/server/service/DataEngineRESTServicesTest.java:import org.springframework.util.ReflectionUtils;
./open-metadata-implementation/access-services/data-engine/data-engine-server/src/main/java/org/odpi/openmetadata/accessservices/dataengine/server/service/DataEngineRESTServices.java:import org.springframework.http.HttpStatus;
./open-metadata-implementation/access-services/glossary-view/glossary-view-server/src/test/java/org/odpi/openmetadata/accessservices/glossaryview/server/service/GlossaryViewOmasBaseTest.java:import org.springframework.util.ReflectionUtils;
./open-metadata-implementation/access-services/glossary-view/glossary-view-client/src/test/java/org/odpi/openmetadata/accessservices/glossaryview/client/GlossaryViewClientTest.java:import org.springframework.util.ReflectionUtils;
./open-metadata-implementation/access-services/asset-catalog/asset-catalog-client/src/test/java/org/odpi/openmetadata/accessservices/assetcatalog/AssetCatalogClientTest.java:import org.springframework.util.ReflectionUtils;
./open-metadata-implementation/access-services/asset-catalog/asset-catalog-server/src/test/java/org/odpi/openmetadata/accessservices/assetcatalog/service/AssetCatalogRelationshipServiceTest.java:import org.springframework.util.ReflectionUtils;
./open-metadata-implementation/access-services/asset-catalog/asset-catalog-server/src/test/java/org/odpi/openmetadata/accessservices/assetcatalog/service/AssetCatalogServiceTest.java:import org.springframework.util.ReflectionUtils;
./open-metadata-implementation/access-services/subject-area/subject-area-client/src/main/java/org/odpi/openmetadata/accessservices/subjectarea/client/nodes/glossaries/SubjectAreaGlossaryClient.java:import org.springframework.core.ParameterizedTypeReference;
./open-metadata-implementation/access-services/subject-area/subject-area-client/src/main/java/org/odpi/openmetadata/accessservices/subjectarea/client/nodes/glossaries/SubjectAreaGlossaryClient.java:import org.springframework.core.ResolvableType;
./open-metadata-implementation/access-services/subject-area/subject-area-client/src/main/java/org/odpi/openmetadata/accessservices/subjectarea/client/nodes/projects/SubjectAreaProjectClient.java:import org.springframework.core.ParameterizedTypeReference;
./open-metadata-implementation/access-services/subject-area/subject-area-client/src/main/java/org/odpi/openmetadata/accessservices/subjectarea/client/nodes/projects/SubjectAreaProjectClient.java:import org.springframework.core.ResolvableType;
./open-metadata-implementation/access-services/subject-area/subject-area-client/src/main/java/org/odpi/openmetadata/accessservices/subjectarea/client/nodes/terms/SubjectAreaTermClient.java:import org.springframework.core.ParameterizedTypeReference;
./open-metadata-implementation/access-services/subject-area/subject-area-client/src/main/java/org/odpi/openmetadata/accessservices/subjectarea/client/nodes/terms/SubjectAreaTermClient.java:import org.springframework.core.ResolvableType;
./open-metadata-implementation/access-services/subject-area/subject-area-client/src/main/java/org/odpi/openmetadata/accessservices/subjectarea/client/nodes/AbstractSubjectAreaNode.java:import org.springframework.core.ParameterizedTypeReference;
./open-metadata-implementation/access-services/subject-area/subject-area-client/src/main/java/org/odpi/openmetadata/accessservices/subjectarea/client/nodes/AbstractSubjectAreaNode.java:import org.springframework.core.ResolvableType;
./open-metadata-implementation/access-services/subject-area/subject-area-client/src/main/java/org/odpi/openmetadata/accessservices/subjectarea/client/nodes/categories/SubjectAreaCategoryClient.java:import org.springframework.core.ParameterizedTypeReference;
./open-metadata-implementation/access-services/subject-area/subject-area-client/src/main/java/org/odpi/openmetadata/accessservices/subjectarea/client/nodes/categories/SubjectAreaCategoryClient.java:import org.springframework.core.ResolvableType;
./open-metadata-implementation/access-services/subject-area/subject-area-client/src/main/java/org/odpi/openmetadata/accessservices/subjectarea/client/SubjectAreaRestClient.java:import org.springframework.core.ParameterizedTypeReference;
./open-metadata-implementation/access-services/security-officer/security-officer-client/src/test/java/org/odpi/openmetadata/accessservices/securityofficer/client/GovernedAssetClientClientTest.java:import org.springframework.util.ReflectionUtils;
./open-metadata-implementation/access-services/security-officer/security-officer-client/src/main/java/org/odpi/openmetadata/accessservices/securityofficer/client/GovernedAssetClient.java:import org.springframework.util.CollectionUtils;
./open-metadata-implementation/access-services/asset-lineage/asset-lineage-client/src/test/java/org/odpi/openmetadata/accessservices/assetlineage/AssetLineageClientTest.java:import org.springframework.util.ReflectionUtils;

This assumes we only use spring in a) Our '-spring' modules b) Our spring rest client connector

The affected components seem to include SubjectArea, GlossaryView, Asset Lineage, AssetCatalog, DataEngine, Conformance, FFDC

Each should be checked for reasonableness

planetf1 avatar Jun 14 '21 11:06 planetf1

Assigning to re-assess the situation

planetf1 avatar Aug 24 '22 09:08 planetf1