Code Monkey home page Code Monkey logo

play-grpc's Introduction

Play gRPC

Twitter Follow Discord GitHub Discussions StackOverflow YouTube Twitch Status OpenCollective

Build Status Maven Repository size Scala Steward badge Mergify Status

Play support for akka-grpc and pekko-grpc.

Project Status

This library is ready to be used in production, but APIs are still expected to be improved and may change.

Compatibility & support

This project does not yet have to obey the rule of staying binary compatible between releases that is common for libraries under the Play Framework organization. Breaking API changes may be introduced without notice as we refine and simplify based on your feedback.

Docs

For testing documentation locally use a few next commands (for more details see Antora workflow):

cd docs
npm i -D -E @antora/cli @antora/site-generator @antora/lunr-extension @asciidoctor/tabs
npx antora local-antora-playbook.yml

Then open in browser generated documentation from <repo_path>/docs/build/site.

Releasing a new version

See https://github.com/playframework/.github/blob/main/RELEASING.md

play-grpc's People

Contributors

akkie avatar billyautrey avatar cbcwebdev avatar drzoid avatar dwijnand avatar ennru avatar ignasi35 avatar ihostage avatar marcospereira avatar mergify[bot] avatar mkurz avatar octonato avatar raboof avatar scala-steward avatar sentenza avatar tsawada avatar xuwei-k avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

play-grpc's Issues

ActorMaterializer in package stream is deprecated since 2.6.0

With 0.8.1 and Play 2.8, I get the following message:

class ActorMaterializer in package stream is deprecated (since 2.6.0): The Materializer now has all methods the ActorMaterializer used to have
[error]   private val clientState = new ClientState(settings, akka.event.Logging(mat.asInstanceOf[ActorMaterializer].system, this.getClass))

Improve port detection on testkit

To provide a client, play-grpc testkit scan the available endpoints looking for one supporting HTTP/2. The lookup should support other criteria (see comments in JavaAkkaGrpcClientHelpers)

e.g. a more correct code here should filter by HTTP/2 and user's akka.grpc.client."".use-tls and crash wonderfully if none is found.

Further improvements: what endpoint to choose if many endpoints fulfill both criteria (protocol version and use-tls) if/when we support such a setup.

Originally posted by @ignasi35 in #33

PlayGrpc code generation error

I am facing an issue while generating scala classes using PlayGrpc.
I am using:

Scala Version: 2.13.1
sbt version: 1.3.8
lagom version : 1.6

These are my settings:

.settings(
    inConfig(Compile)(
      Seq(
        PB.protoSources := Seq(file("account/src/main/protobuf")),
        PB.includePaths ++= Seq(file("account/src/main/protobuf")),
      )
    ),
    // Using Scala
    akkaGrpcGeneratedLanguages := Seq(AkkaGrpc.Scala),
    akkaGrpcGeneratedSources := Seq(AkkaGrpc.Server, AkkaGrpc.Client),
    akkaGrpcExtraGenerators in Compile += PlayScalaServerCodeGenerator,
    akkaGrpcCodeGeneratorSettings += "server_power_apis"
  )

and this is the error I am having:

[error] /Users/arsene/dev/accounts-service/account/target/scala-2.13/src_managed/main/com/namely/account/AbstractAccountGrpcServicePowerApiRouter.scala:11:13: object grpc is not a member of package play
[error] import play.grpc.internal.PlayRouter
[error]             ^
[error] /Users/arsene/dev/accounts-service/account/target/scala-2.13/src_managed/main/com/namely/account/AbstractAccountGrpcServicePowerApiRouter.scala:19:13: not found: type PlayRouter
[error]     extends PlayRouter(AccountGrpcService.name)
[error]             ^
[error] /Users/arsene/dev/accounts-service/account/target/scala-2.13/src_managed/main/com/namely/account/AbstractAccountGrpcServicePowerApiRouter.scala:19:43: no arguments allowed for nullary constructor Object: ()Object
[error]     extends PlayRouter(AccountGrpcService.name)
[error]                                           ^
[error] /Users/arsene/dev/accounts-service/account/target/scala-2.13/src_managed/main/com/namely/account/AbstractAccountGrpcServicePowerApiRouter.scala:5:25: Unused import
[error] import scala.concurrent.Future
[error]                         ^
[error] /Users/arsene/dev/accounts-service/account/target/scala-2.13/src_managed/main/com/namely/account/AbstractAccountGrpcServicePowerApiRouter.scala:7:35: Unused import
[error] import akka.http.scaladsl.model.{ HttpRequest, HttpResponse }
[error]                                   ^
[error] /Users/arsene/dev/accounts-service/account/target/scala-2.13/src_managed/main/com/namely/account/AbstractAccountGrpcServicePowerApiRouter.scala:7:48: Unused import
[error] import akka.http.scaladsl.model.{ HttpRequest, HttpResponse }
[error]                                                ^
[error] /Users/arsene/dev/accounts-service/account/target/scala-2.13/src_managed/main/com/namely/account/AbstractAccountGrpcServicePowerApiRouter.scala:11:27: Unused import
[error] import play.grpc.internal.PlayRouter
[error]                           ^
[error] /Users/arsene/dev/accounts-service/account/target/scala-2.13/src_managed/main/com/namely/account/AbstractRouter.scala:11:13: object grpc is not a member of package play
[error] import play.grpc.internal.PlayRouter
[error]             ^
[error] /Users/arsene/dev/accounts-service/account/target/scala-2.13/src_managed/main/com/namely/account/AbstractRouter.scala:19:13: not found: type PlayRouter
[error]     extends PlayRouter(AccountGrpcService.name)
[error]             ^
[error] /Users/arsene/dev/accounts-service/account/target/scala-2.13/src_managed/main/com/namely/account/AbstractRouter.scala:19:43: no arguments allowed for nullary constructor Object: ()Object
[error]     extends PlayRouter(AccountGrpcService.name)
[error]                                           ^
[error] /Users/arsene/dev/accounts-service/account/target/scala-2.13/src_managed/main/com/namely/account/AbstractRouter.scala:5:25: Unused import
[error] import scala.concurrent.Future
[error]                         ^
[error] /Users/arsene/dev/accounts-service/account/target/scala-2.13/src_managed/main/com/namely/account/AbstractRouter.scala:7:35: Unused import
[error] import akka.http.scaladsl.model.{ HttpRequest, HttpResponse }
[error]                                   ^
[error] /Users/arsene/dev/accounts-service/account/target/scala-2.13/src_managed/main/com/namely/account/AbstractRouter.scala:7:48: Unused import
[error] import akka.http.scaladsl.model.{ HttpRequest, HttpResponse }
[error]                                                ^
[error] /Users/arsene/dev/accounts-service/account/target/scala-2.13/src_managed/main/com/namely/account/AbstractRouter.scala:11:27: Unused import
[error] import play.grpc.internal.PlayRouter
[error]                           ^
[error] 14 errors found
[error] (account / Compile / compileIncremental) Compilation failed

Amazingly when I checked the classes are generated. But whenever I run sbt compile I got that error.

[0.12.0] Play 3 - NoClassDefFoundError: play/twirl/api/Template1

After upgrading to Play 3.0.1 and Pekko I get the following error message at compile time if I exclude transitive dependencies with

excludeDependencies ++= Seq(
  // As of Play 3.0, groupId has changed to org.playframework; exclude transitive dependencies to the old artifacts
  ExclusionRule(organization = "com.typesafe.play")
)

NOTE: If I remove the previous exclusion rule I can compile the project but then I hit lloydmeta/enumeratum#388

Play 3.0.1
Scala 2.13.12
JDK 17.0.9
play-grpc 0.12.0

[info] Compiling 1 protobuf files to /target/scala-2.13/pekko-grpc/main
--jvm_1_out: java.lang.reflect.InvocationTargetException
java.lang.reflect.InvocationTargetException
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  | => tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at org.apache.pekko.grpc.sbt.GeneratorBridge$SandboxedProtocBridgeSbtPluginCodeGenerator.run(GeneratorBridge.scala:76)
	at protocbridge.frontend.PluginFrontend$.$anonfun$runWithBytes$1(PluginFrontend.scala:51)
	at scala.util.Try$.apply(Try.scala:213)
	at protocbridge.frontend.PluginFrontend$.runWithBytes(PluginFrontend.scala:51)
	at protocbridge.frontend.PluginFrontend$.runWithInputStream(PluginFrontend.scala:121)
	at protocbridge.frontend.PosixPluginFrontend$.$anonfun$prepare$2(PosixPluginFrontend.scala:40)
	at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
	at scala.concurrent.impl.ExecutionContextImpl$DefaultThreadFactory$$anon$1$$anon$2.block(ExecutionContextImpl.scala:75)
	at java.base/java.util.concurrent.ForkJoinPool.compensatedBlock(ForkJoinPool.java:3451)
	at java.base/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3434)
	at scala.concurrent.impl.ExecutionContextImpl$DefaultThreadFactory$$anon$1.blockOn(ExecutionContextImpl.scala:87)
	at scala.concurrent.package$.blocking(package.scala:146)
	at protocbridge.frontend.PosixPluginFrontend$.$anonfun$prepare$1(PosixPluginFrontend.scala:38)
	at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
	at scala.concurrent.Future$.$anonfun$apply$1(Future.scala:659)
	at scala.util.Success.$anonfun$map$1(Try.scala:255)
	at scala.util.Success.map(Try.scala:213)
	at scala.concurrent.Future.$anonfun$map$1(Future.scala:292)
	at scala.concurrent.impl.Promise.liftedTree1$1(Promise.scala:33)
	at scala.concurrent.impl.Promise.$anonfun$transform$1(Promise.scala:33)
	at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:64)
	at java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1395)
	at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373)
	at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182)
	at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655)
	at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622)
	at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165)
Caused by: java.lang.NoClassDefFoundError: play/twirl/api/Template1
	at java.base/java.lang.ClassLoader.defineClass1(Native Method)
	at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017)
	at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
	at java.base/java.net.URLClassLoader.defineClass(URLClassLoader.java:524)
	at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:427)
	at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:421)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:712)
	at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:420)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:592)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)
	at org.apache.pekko.grpc.gen.scaladsl.ScalaTraitCodeGenerator$.$anonfun$generateServiceFile$1(ScalaTraitCodeGenerator.scala:28)
	at org.apache.pekko.grpc.gen.scaladsl.ScalaCodeGenerator.$anonfun$run$4(ScalaCodeGenerator.scala:80)
	at org.apache.pekko.grpc.gen.scaladsl.ScalaCodeGenerator.$anonfun$run$4$adapted(ScalaCodeGenerator.scala:79)
	at scala.collection.immutable.Set$Set1.foreach(Set.scala:141)
	at org.apache.pekko.grpc.gen.scaladsl.ScalaCodeGenerator.$anonfun$run$3(ScalaCodeGenerator.scala:79)
	at org.apache.pekko.grpc.gen.scaladsl.ScalaCodeGenerator.$anonfun$run$3$adapted(ScalaCodeGenerator.scala:78)
	at scala.collection.Iterator.foreach(Iterator.scala:943)
	at scala.collection.Iterator.foreach$(Iterator.scala:943)
	at scala.collection.AbstractIterator.foreach(Iterator.scala:1431)
	at scala.collection.IterableLike.foreach(IterableLike.scala:74)
	at scala.collection.IterableLike.foreach$(IterableLike.scala:73)
	at scala.collection.AbstractIterable.foreach(Iterable.scala:56)
	at org.apache.pekko.grpc.gen.scaladsl.ScalaCodeGenerator.run(ScalaCodeGenerator.scala:78)
	at org.apache.pekko.grpc.gen.CodeGenerator.run(CodeGenerator.scala:41)
	at org.apache.pekko.grpc.gen.CodeGenerator.run$(CodeGenerator.scala:38)
	at org.apache.pekko.grpc.gen.scaladsl.ScalaCodeGenerator.run(ScalaCodeGenerator.scala:27)
	... 31 more
Caused by: java.lang.ClassNotFoundException: play.twirl.api.Template1
	at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:445)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:592)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)
	... 57 more
	```

object grpc is not a member of package play; PlayRouter can not be found

Hi, I am relatively new to Scala and Akka in general, so I'm hoping this won't be a big issue and I am missing something simple.
I am trying to add grpc endpoints to an existing API. After upgrading to Play 2.8.8 I run into the following issue:
On compiling, after the Server Code is generated, sbt tells me that it encountered 3 errors:

[error] /home/jan-robin.aumann/dev/caplon-rest/voip/target/scala-2.12/akka-grpc/main/com/consistec/voip/grafana/grpc/AbstractRouter.scala:11:13: object grpc is not a member of package play
[error] import play.grpc.internal.PlayRouter
[error]             ^
[error] /home/jan-robin.aumann/dev/caplon-rest/voip/target/scala-2.12/akka-grpc/main/com/consistec/voip/grafana/grpc/AbstractRouter.scala:18:13: not found: type PlayRouter
[error]     extends PlayRouter(GrafanaQueryAPI.name)
[error]             ^
[error] /home/jan-robin.aumann/dev/caplon-rest/voip/target/scala-2.12/akka-grpc/main/com/consistec/voip/grafana/grpc/AbstractRouter.scala:18:40: no arguments allowed for nullary constructor Object: ()Object
[error]     extends PlayRouter(GrafanaQueryAPI.name)
[error]                                        ^
[warn] two warnings found
[error] three errors found
[error] (Compile / compileIncremental) Compilation failed
[error] Total time: 118 s (01:58), completed Oct 18, 2021, 10:15:47 AM

Looking for solutions I found #215 #40 and #228 and at first I thought they might be related, but if they are I shouldn't be running into my issue...

General info:
sbt version: 1.5.5
scala version: 2.12.7
Play version: 2.8.8
Akka-grpc version: 1.0.3 (upgrade to 2.1.0 asap, but currently impossible due to dependency on scalapb 0.10.10 with custom changes)

Duplicate ClassicActorSystemProvider binding when using with Play 2.8.3

Play 2.8.3 provides already a binding for akka.actor.ClassicActorSystemProvider which causes the following error:

A binding to akka.actor.ClassicActorSystemProvider was already configured at play.grpc.ClassicActorsystemProviderModule.<init>(ClassicActorsystemProviderModule.scala:13):
[error] Binding(interface akka.actor.ClassicActorSystemProvider to ProviderConstructionTarget(class play.api.libs.concurrent.ActorSystemProvider)) (via modules: com.google.inject.util.Modules$OverrideModule -> play.api.inject.guice.GuiceableModuleConversions$$anon$4).

Only affects Play users (Java and Scala) using Guice.

Workaround

Users upgrading to Play 2.8.3 can disable the play-grpc Guice module providing the binding with:

play.modules.disabled += "play.grpc.ClassicActorsystemProviderModule"

See PR #309

Doesn't support multiple services in same package

When I had 2 services defined in a single package, the code generator failed with the error pregistry/AbstractRouter.scala: Tried to write the same file twice..

Looked back at the generator source code and found this is due to a simple bug at this line: https://github.com/playframework/play-grpc/blob/master/play-generators/src/main/scala/play/grpc/gen/scaladsl/PlayScalaServerCodeGenerator.scala#L27 .

Instead of

b.setName(s"${service.packageDir}/AbstractRouter.scala")

it should be

b.setName(s"${service.packageDir}/Abstract${service.name}Router.scala")

similar to https://github.com/playframework/play-grpc/blob/master/play-generators/src/main/scala/play/grpc/gen/scaladsl/PlayScalaServerCodeGenerator.scala#L40 .

New release?

This hasn't been released in > 3 years -- any chance we can get an updated release along with updated dependencies?

Drop Scala 2.11 support

Given:

  • this project is new
  • still unstable
  • and Scala 2.11 has been EOL for months

Let's drop Scala 2.11 support.

Server code generated by RouterUsingActions does not compile

Context -
I am trying to generate a play router stub which uses Actions. (as described in this issue akka/akka-grpc#420)

Problem -
The code generated using the twirl template for RouterUsingActions has compile time errors.

/AbstractRouter.scala:22:223: type mismatch;
[error]  found   : PartialFunction[Throwable,akka.grpc.Trailers]
[error]  required: PartialFunction[Throwable,io.grpc.Status]
[error]   abstract class AbstractUserServiceRouter(mat: Materializer, system: ActorSystem, parsers: PlayBodyParsers, actionBuilder: ActionBuilder[Request, AnyContent], eHandler: ActorSystem => PartialFunction[Throwable, Status] = defaultMapper) extends PlayRouterUsingActions(mat, GreeterService.name, parsers, actionBuilder) with GreeterService {

and

/AbstractRouter.scala:31:59: type mismatch;
[error]  found   : akka.actor.ActorSystem => PartialFunction[Throwable,io.grpc.Status]
[error]  required: akka.actor.ActorSystem => PartialFunction[Throwable,akka.grpc.Trailers]
[error]       val handler = GreeterServiceHandler(this, serviceName, eHandler)(mat, system)

Solution
I was able to modify the twirl template to eliminate the compilation errors and was able to use it to serve grpc via play's EssentialActions. The injected Actions and filters are working with this RouterUsingActions.

I've added a pull request that fixes this issue on top of play-grpc version 0.8.2. Apparently fixing this on latest master will take some more effort. It appears to have another issue apart from this one. I am looking into it and will open another pull request against master if I am successful.

Play gRPC not working with Play 2.8 due to incompatible binary

Play gRPC is not working with Play 2.8, because it's using a field from ServiceEndpoint that were renamed in Play 2.8 (see diff). ServiceEndpoint is marked as @ApiMayChange.

We don't want to move play-grpc to Play 2.8 because:

  1. it will be broken for Play 2.7 users
  2. it will pull Akka v2.6.x, while akka-grpc is on v2.5.x. This is a strategical choice and we want to keep it on v2.5.x.

Actually, in both cases, we want to keep it compatible with the previous Play and Akka versions (v2.7.x and v2.5.x). There is impact for Lagom 1.5.x as well.

I see the following options:

  1. Backport the new fields to 2.7.x while keeping the old ones as deprecated. Release a new play-grpc version that uses the new field. That will make the next version compatible with Play 2.8.x and will allow the previous version to still work with any Play 2.7.x version. An old play-grpc binary won't work with Play 2.8, but that's fine, IMO. People will need to update it.
  2. Re-add the fields in 2.8, but as deprecated. This has the advantage of keeping previous play-grpc compatible with Play 2.8.1 and forward, but we are only postponing the solution. We want to stop using deprecated fields.

Drop Lagom modules

Lagom is deprecated and approaching EOL (July 1, 2024). I think we shouldn't support these modules and remove all of them.

Expectation of a new release

Hello I would like to know whether we can expect a release of play-grpc sequel to this issue #228 has been addressed and play-grpc is up to date with the new akka-grpc.

ALPN must be enabled and list HTTP/2 as a supported protocol

It seems I cannot make this scala test pass, no matter what I do:

    "work with a gRPC client" in withGrpcClient[TenancyServiceClient] { client: TenancyServiceClient =>
      val tenantId  = UUID.randomUUID()
      val companyId = UUID.randomUUID()
      val reply =
        client.isCompanyIdOwnedByTenant(CheckCompanyRequest(tenantId.toString, companyId.toString)).futureValue
      reply.isOwnedByTenant mustBe false
    }

I've reported the details also in https://stackoverflow.com/q/77095588/1977778

I'm trying to enable ALPN and HTTP/2 in a Scala Play Framework 2.8.20 app running on JDK 11.0.20 and Scala 2.13.11 (SBT 1.9.3). My objective is to work with play-grpc and specifically to serve grpc calls using Play.

In project/plugins.sbt I added:

// Akka gRPC
addSbtPlugin("com.lightbend.akka.grpc" % "sbt-akka-grpc" % "2.1.6")
addSbtPlugin("com.github.sbt"    % "sbt-javaagent" % "0.1.7") // ALPN agent
// Cannot be moved into build.sbt
libraryDependencies += "com.lightbend.play" %% "play-grpc-generators" % "0.9.1"

In build.sbt:

lazy val `myProject` = (project in file("."))
  .enablePlugins(PlayScala)
  .enablePlugins(JavaAgent)
  .enablePlugins(AkkaGrpcPlugin)       // enables source generation for gRPC
  .enablePlugins(PlayAkkaHttp2Support) // enables serving HTTP/2 and gRPC
  .settings(
    akkaGrpcGeneratedLanguages := Seq(AkkaGrpc.Scala),
    akkaGrpcExtraGenerators += PlayScalaClientCodeGenerator,
    akkaGrpcExtraGenerators += PlayScalaServerCodeGenerator,
    // #grpc_server_generators
    PlayKeys.devSettings ++= Seq(
      "play.server.https.port" -> "9443",
      // Configures the keystore to use in Dev mode. This setting is equivalent to `play.server.https.keyStore.path`
      // in `application.conf`.
      "play.server.https.keyStore.path" -> "conf/selfsigned.keystore"
    )
  )

javaAgents += "org.mortbay.jetty.alpn" % "jetty-alpn-agent" % "2.0.10" % Runtime

When running tests I get:

[info] - must work with a gRPC client *** FAILED ***
[info]   java.lang.IllegalArgumentException: ALPN must be enabled and list HTTP/2 as a supported protocol.
[info]   at com.google.common.base.Preconditions.checkArgument(Preconditions.java:145)
[info]   at io.grpc.netty.shaded.io.grpc.netty.GrpcSslContexts.ensureAlpnAndH2Enabled(GrpcSslContexts.java:278)
[info]   at io.grpc.netty.shaded.io.grpc.netty.NettyChannelBuilder.sslContext(NettyChannelBuilder.java:350)
[info]   at akka.grpc.internal.NettyClientUtils$.createChannel(NettyClientUtils.scala:61)
[info]   at akka.grpc.internal.ChannelUtils$.create(ChannelUtils.scala:41)
[info]   at akka.grpc.GrpcChannel$.apply(GrpcChannel.scala:57)
[info]   at io.kode.protos.tenancy.TenancyServiceClient$.apply(TenancyServiceClient.scala:29)
[info]   at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[info]   at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[info]   at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

How should I fix this error??

ALPN must be enabled and list HTTP/2 as a supported protocol

Transfer issues from akka-grpc

There's a bunch of play-related issues in akka-grpc we should transfer here.

Unfortunately the repos belong to different organizations to GitHub's transfer issue (beta) doesn't seem to work.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.