diff --git a/pom.xml b/pom.xml index 0474d444d9a004fed909b8462a9cd91d0536a1d5..b617ba7083ab1504913172e36079034c455af8c1 100644 --- a/pom.xml +++ b/pom.xml @@ -31,8 +31,8 @@ <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.testSourceDirectory>src/test/java</project.build.testSourceDirectory> - <protobuf.version>3.14.0</protobuf.version> - <grpc.version>1.35.0</grpc.version> + <protobuf.version>3.14.0</protobuf.version> + <grpc.version>1.35.0</grpc.version> </properties> <repositories> <repository> @@ -59,7 +59,7 @@ <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> - <version>2.3.2</version> + <version>2.3.2</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> @@ -102,7 +102,7 @@ <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> - <version>8.0.19</version> + <version>8.0.19</version> </dependency> <dependency> <groupId>org.xerial</groupId> @@ -184,32 +184,31 @@ <artifactId>log4j-core</artifactId> <version>2.11.1</version> </dependency> - <dependency> - <groupId>io.grpc</groupId> - <artifactId>grpc-netty</artifactId> - <version>${grpc.version}</version> - </dependency> - <dependency> - <groupId>io.grpc</groupId> - <artifactId>grpc-protobuf</artifactId> - <version>${grpc.version}</version> - </dependency> - <dependency> - <groupId>io.grpc</groupId> - <artifactId>grpc-stub</artifactId> - <version>${grpc.version}</version> - </dependency> - <dependency> - <groupId>javax.annotation</groupId> - <artifactId>javax.annotation-api</artifactId> - <version>1.3.2</version> - </dependency> - <dependency> - <groupId>com.google.protobuf</groupId> - <artifactId>protobuf-java</artifactId> - <version>${protobuf.version}</version> -</dependency> - + <dependency> + <groupId>io.grpc</groupId> + <artifactId>grpc-netty</artifactId> + <version>${grpc.version}</version> + </dependency> + <dependency> + <groupId>io.grpc</groupId> + <artifactId>grpc-protobuf</artifactId> + <version>${grpc.version}</version> + </dependency> + <dependency> + <groupId>io.grpc</groupId> + <artifactId>grpc-stub</artifactId> + <version>${grpc.version}</version> + </dependency> + <dependency> + <groupId>javax.annotation</groupId> + <artifactId>javax.annotation-api</artifactId> + <version>1.3.2</version> + </dependency> + <dependency> + <groupId>com.google.protobuf</groupId> + <artifactId>protobuf-java</artifactId> + <version>${protobuf.version}</version> + </dependency> </dependencies> <build> <sourceDirectory>${basedir}/src/main/java</sourceDirectory> @@ -353,41 +352,38 @@ <excludeArtifactIds>easy-units</excludeArtifactIds> </configuration> </plugin> - - <plugin> - <groupId>kr.motd.maven</groupId> - <artifactId>os-maven-plugin</artifactId> - <version>1.6.2</version> - <executions> - <execution> - <phase>initialize</phase> - <goals> - <goal>detect</goal> - </goals> - </execution> - </executions> - </plugin> - + <plugin> + <groupId>kr.motd.maven</groupId> + <artifactId>os-maven-plugin</artifactId> + <version>1.6.2</version> + <executions> + <execution> + <phase>initialize</phase> + <goals> + <goal>detect</goal> + </goals> + </execution> + </executions> + </plugin> <!-- code generation protobuf/grpc --> - <plugin> - <groupId>org.xolstice.maven.plugins</groupId> - <artifactId>protobuf-maven-plugin</artifactId> - <version>0.6.1</version> - <configuration> - <protocArtifact>com.google.protobuf:protoc:${protobuf.version}:exe:${os.detected.classifier}</protocArtifact> - <pluginId>grpc-java</pluginId> - <pluginArtifact>io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier}</pluginArtifact> - </configuration> - <executions> - <execution> - <goals> - <goal>compile</goal> - <goal>compile-custom</goal> - </goals> - </execution> - </executions> - </plugin> - + <plugin> + <groupId>org.xolstice.maven.plugins</groupId> + <artifactId>protobuf-maven-plugin</artifactId> + <version>0.6.1</version> + <configuration> + <protocArtifact>com.google.protobuf:protoc:${protobuf.version}:exe:${os.detected.classifier}</protocArtifact> + <pluginId>grpc-java</pluginId> + <pluginArtifact>io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier}</pluginArtifact> + </configuration> + <executions> + <execution> + <goals> + <goal>compile</goal> + <goal>compile-custom</goal> + </goals> + </execution> + </executions> + </plugin> </plugins> </build> <url>caosdb.org</url> diff --git a/src/main/python/grpc-prototype-client/EntityService.proto b/src/main/python/grpc-prototype-client/EntityService.proto new file mode 120000 index 0000000000000000000000000000000000000000..30fe4bcdacf7e4f2a7a7ccf3a845da7d87d7c4a4 --- /dev/null +++ b/src/main/python/grpc-prototype-client/EntityService.proto @@ -0,0 +1 @@ +../../proto/EntityService.proto \ No newline at end of file diff --git a/src/main/python/grpc-prototype-client/EntityService_pb2.py b/src/main/python/grpc-prototype-client/EntityService_pb2.py new file mode 100644 index 0000000000000000000000000000000000000000..e74166ce5a132bb2ec34b4d7f5266fb44fab027a --- /dev/null +++ b/src/main/python/grpc-prototype-client/EntityService_pb2.py @@ -0,0 +1,111 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: EntityService.proto + +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='EntityService.proto', + package='org.caosdb.grpc', + syntax='proto3', + serialized_options=b'P\001', + create_key=_descriptor._internal_create_key, + serialized_pb=b'\n\x13\x45ntityService.proto\x12\x0forg.caosdb.grpc\"8\n\x06\x45ntity\x12\x0b\n\x03\x65id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t2X\n\x18\x45ntityTransactionService\x12<\n\x08retrieve\x12\x17.org.caosdb.grpc.Entity\x1a\x17.org.caosdb.grpc.EntityB\x02P\x01\x62\x06proto3' +) + + + + +_ENTITY = _descriptor.Descriptor( + name='Entity', + full_name='org.caosdb.grpc.Entity', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='eid', full_name='org.caosdb.grpc.Entity.eid', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='name', full_name='org.caosdb.grpc.Entity.name', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='description', full_name='org.caosdb.grpc.Entity.description', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=40, + serialized_end=96, +) + +DESCRIPTOR.message_types_by_name['Entity'] = _ENTITY +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + +Entity = _reflection.GeneratedProtocolMessageType('Entity', (_message.Message,), { + 'DESCRIPTOR' : _ENTITY, + '__module__' : 'EntityService_pb2' + # @@protoc_insertion_point(class_scope:org.caosdb.grpc.Entity) + }) +_sym_db.RegisterMessage(Entity) + + +DESCRIPTOR._options = None + +_ENTITYTRANSACTIONSERVICE = _descriptor.ServiceDescriptor( + name='EntityTransactionService', + full_name='org.caosdb.grpc.EntityTransactionService', + file=DESCRIPTOR, + index=0, + serialized_options=None, + create_key=_descriptor._internal_create_key, + serialized_start=98, + serialized_end=186, + methods=[ + _descriptor.MethodDescriptor( + name='retrieve', + full_name='org.caosdb.grpc.EntityTransactionService.retrieve', + index=0, + containing_service=None, + input_type=_ENTITY, + output_type=_ENTITY, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), +]) +_sym_db.RegisterServiceDescriptor(_ENTITYTRANSACTIONSERVICE) + +DESCRIPTOR.services_by_name['EntityTransactionService'] = _ENTITYTRANSACTIONSERVICE + +# @@protoc_insertion_point(module_scope) diff --git a/src/main/python/grpc-prototype-client/EntityService_pb2_grpc.py b/src/main/python/grpc-prototype-client/EntityService_pb2_grpc.py new file mode 100644 index 0000000000000000000000000000000000000000..ca5986d694d67f33179a765c309adf477ad58b24 --- /dev/null +++ b/src/main/python/grpc-prototype-client/EntityService_pb2_grpc.py @@ -0,0 +1,65 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc + +import EntityService_pb2 as EntityService__pb2 + + +class EntityTransactionServiceStub(object): + """Missing associated documentation comment in .proto file.""" + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.retrieve = channel.unary_unary( + '/org.caosdb.grpc.EntityTransactionService/retrieve', + request_serializer=EntityService__pb2.Entity.SerializeToString, + response_deserializer=EntityService__pb2.Entity.FromString, + ) + + +class EntityTransactionServiceServicer(object): + """Missing associated documentation comment in .proto file.""" + + def retrieve(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_EntityTransactionServiceServicer_to_server(servicer, server): + rpc_method_handlers = { + 'retrieve': grpc.unary_unary_rpc_method_handler( + servicer.retrieve, + request_deserializer=EntityService__pb2.Entity.FromString, + response_serializer=EntityService__pb2.Entity.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'org.caosdb.grpc.EntityTransactionService', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) + + + # This class is part of an EXPERIMENTAL API. +class EntityTransactionService(object): + """Missing associated documentation comment in .proto file.""" + + @staticmethod + def retrieve(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/org.caosdb.grpc.EntityTransactionService/retrieve', + EntityService__pb2.Entity.SerializeToString, + EntityService__pb2.Entity.FromString, + options, channel_credentials, + call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/src/main/python/grpc-prototype-client/minimal_client.py b/src/main/python/grpc-prototype-client/minimal_client.py new file mode 100644 index 0000000000000000000000000000000000000000..b5dbcd772f07ac084d20f97023b620f8004ec7db --- /dev/null +++ b/src/main/python/grpc-prototype-client/minimal_client.py @@ -0,0 +1,26 @@ +import grpc +import EntityService_pb2_grpc as pb2_grpc +import EntityService_pb2 as pb2 + + +class Client(): + + def __init__(self): + self.host = 'localhost' + self.port = 8080 + + # instantiate a channel + self.channel = grpc.insecure_channel(f'{self.host}:{self.port}') + + # bind the client and the server + self.stub = pb2_grpc.EntityTransactionServiceStub(self.channel) + + def get(self, entity_id): + message = pb2.Entity(eid=entity_id) + print(f'{message}') + return self.stub.retrieve(message) + +if __name__ == '__main__': + client = Client() + result = client.get("25") + print(f'{result}')