| 
					
				 | 
			
			
				@@ -26,7 +26,7 @@ Hello World method. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 - Create a Go client that accesses the same Java server. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 - Update the service with more advanced features like RPC streaming. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-The complete code for the example is available in [wherever we put it]. You can 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+The complete code for the example is available in the `grpc-common` GitHub repository. You can 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 work along with the example and hack on the code in the comfort of your own 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 computer, giving you hands-on practice of really writing 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 gRPC code. We use the Git versioning system for source code management: 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -174,7 +174,7 @@ to generated code. As we're creating Java code, we use the gRPC Java plugin. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 To build the plugin: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-``` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+```sh 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 $ pushd external/grpc_java 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 $ make java_plugin 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 $ popd 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -182,7 +182,7 @@ $ popd 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 To use it to generate the code: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-``` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+```sh 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 $ mkdir -p src/main/java 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 $ protoc -I . helloworld.proto 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 --plugin=protoc-gen-grpc=external/grpc_java/bins/opt/java_plugin \ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -194,27 +194,25 @@ This generates the following classes, which contain all the generated code we ne 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 - [`Helloworld.java`](java/src/main/java/ex/grpc/Helloworld.java), which has all the protocol buffer code to populate, serialize, and retrieve our `HelloRequest` and `HelloReply` message types 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 - [`GreetingsGrpc.java`](java/src/main/java/ex/grpc/GreetingsGrpc.java), which contains (along with some other useful code): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   - an interface for `Greetings` servers to implement 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    - an interface for `Greetings` servers to implement 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-``` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ```java 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   public static interface Greetings { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public void hello(ex.grpc.Helloworld.HelloRequest request, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         com.google.net.stubby.stub.StreamObserver<ex.grpc.Helloworld.HelloReply> responseObserver); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-``` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ``` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   - _stub_ classes that clients can use to talk to a `Greetings` server. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    - _stub_ classes that clients can use to talk to a `Greetings` server. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-``` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ```java 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 public static class GreetingsStub extends 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       com.google.net.stubby.stub.AbstractStub<GreetingsStub, GreetingsServiceDescriptor> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       implements Greetings { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    ... 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-``` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-_Does gRPC output multiple Java classes per proto by default?_ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ``` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 <a name="server"></a> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ### Writing a server 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -233,7 +231,7 @@ Our server application has two classes: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 implements the behaviour we require of our GreetingService. There are a 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 number of important features of gRPC being used here: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-``` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+```java 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   public void hello(Helloworld.HelloRequest req, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       StreamObserver<Helloworld.HelloReply> responseObserver) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     Helloworld.HelloReply reply = Helloworld.HelloReply.newBuilder().setMessage( 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -262,7 +260,7 @@ number of important features of gRPC being used here: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 other main feature required to provde the gRPC service; how to allow a service 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 implementation to be accessed from the network. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-``` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+```java 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   private void start() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     server = NettyServerBuilder.forPort(port) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				              .addService(GreetingsGrpc.bindService(new GreetingsImpl())) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -302,7 +300,7 @@ transport handling; its constructor accepts the host name and port of the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 service. The channel in turn is used to construct the Stub. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-``` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+```java 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   private final ChannelImpl channel; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   private final GreetingGrpc.GreetingBlockingStub blockingStub; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -324,7 +322,7 @@ It: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 - prints out the greeting 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-``` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+```java 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   public void greet(String name) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     logger.debug("Will try to greet " + name + " ..."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     try { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -344,7 +342,7 @@ It: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 The main method puts together the example so that it can be run from a command 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 line. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-``` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+```java 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /* Access a service running on the local machine on port 50051 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     HelloClient client = new HelloClient("localhost", 50051); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     String user = "world"; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -379,13 +377,13 @@ $ mvn package 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 We've added simple shell scripts to simplifying running the examples. Now 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 that they are built, you can run the server with: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-``` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+```sh 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 $ ./run_greetings_server.sh 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ``` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 and in another terminal window confirm that it receives a message. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-``` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+```sh 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 $ ./run_greetings_client.sh 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ``` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |