Setting up Eclipse Neon for Enterprise Java development on the Hyperledger Fabric virtual image

Introduction

In the last post, we built the fabric-sdk-java which can be found at https://github.com/hyperledger/fabric-sdk-java and ran the end-to-end Java integrated tests on the Hyperledger Linux virtual image. Now we want to be able to debug by stepping through the Java code line by line in Eclipse.

In addition, although this step is optional, we will install a Java application server because in the near future we will want to interact with Hyperledger from a Java application deployed as an Enterprise Archive.

Steps we will follow

  • Modify the Vagrant configuration file to open VirtualBox on virtual image start and download Eclipse
  • Install a lightweight XServer on our virtual image
  • Fix graphical user interface screen resolution issues in our virtual image with the Virtualbox client utilities
  • Install Eclipse
  • Install Firefox and a graphical text editor
  • Add an Eclipse add-on ( IBM WebSphere Developer Tools Beta ) which will allow us to install server components for the IBM application servers
  • Install the WebSphereApplication Server V9.0 Tools to Eclipse
  • Download and install IBM Installation Manager
  • Install the WebSphere Application Server V9.0 application server on our Linux virtual image
  • Install a WebSphere Application Server profile
  • Import the fabric-sdk-java project into Eclipse
  • Fix the Maven pom.xml
  • Build the project using Maven
  • Start Hyperledger
  • Step through the code

Assumptions

I assume you are not intimidated by a Linux command line.

You should have registered at IBM Bluemix for a free account.

Modify the Vagrant configuration file to open VirtualBox on virtual image start and download Eclipse

First, let’s edit our C:\gocode\fabric_java_latest\fabric\devenv\Vagrantfile

I cheat here and use Notepad++ in Windows instead of vi in Cygwin. You can have two NotePad ++ window instances open at the same time if you add:

-multiInst

here:

40.png

Back to editing the Vagrantfile.

We will add the following lines to view Virtualbox and to add some video memory:

vb.gui = true
vb.customize [“modifyvm”, :id, ‘–vram’, ’64’]

And we will modify the following line to add lots of RAM to Linux:

vb.customize [‘modifyvm’, :id, ‘–memory’, ‘16384’]

It will look like this:

41.png

Next I will inspire myself from the excellent blog post at https://blog.versioneye.com/2015/05/05/setting-up-a-dev-environment-with-vagrant/

It’s important to note as the blog points out that you could add the following commands to the vagrant provisioning script at C:\gocode\fabric_java_latest\fabric\devenv\setup.sh in order to be able to build the entire virtual image again from scratch in fully automated fashion. Right now, however, I’ve made backups and I’ll make my changes on the already built virtual image.

Open a Cygwin prompt. Go to the base folder of the virtual image:

cd /cygdrive/c/gocode/fabric_java_latest/fabric/devenv/

Download Eclipse Neon 64-bit in a folder that is synced between Windows and the Ubuntu virtual image:

wget http://mirror.math.princeton.edu/pub/eclipse//oomph/epp/neon/R3/eclipse-inst-linux64.tar.gz

42

Let’s restart our virtual image with the extra mem we added in the Vagrantfile:

vagrant reload

Log in to the virtual machine:

vagrant ssh

First we will change the root (sudo) password as well as user ubuntu’s password which will be used to log in to the virtual image through Virtualbox:

sudo su –

passwd

passwd ubuntu

exit

43.png

Install a lightweight XServer on our virtual image

Now let’s install the XServer, the locales, etc as described in the blog post mentioned above by doing the following commands one by one:

sudo apt-get install -y xfce4 virtualbox-guest-dkms virtualbox-guest-utils virtualbox-guest-x11
sudo apt-get install gnome-icon-theme-full tango-icon-theme
sudo echo “allowed_users=anybody” > /etc/X11/Xwrapper.config
sudo echo “LANG=en_US.UTF-8” >> /etc/environment
sudo echo “LANGUAGE=en_US.UTF-8” >> /etc/environment
sudo echo “LC_ALL=en_US.UTF-8” >> /etc/environment
sudo echo “LC_CTYPE=en_US.UTF-8” >> /etc/environment
sudo apt-get install virtualbox-guest-additions-iso
sudo mkdir /mnt

sudo mkdir /mnt/cdrom

Exit from the virtual image:

exit

Restart the virtual image:

vagrant reload

In the 800×600 resolution VirtualBox window, login as user ubuntu:

44

We’re in! A command prompt, that is. Start the XServer with command:

sudo startxfce4&

This will bring up a nice small 800 x 600  graphical user interface:

46.png

Fix graphical user interface screen resolution issues in our virtual image with the Virtualbox client utilities

I don’t know about you, but I myself refuse to code in Eclipse with a small resolution like that. Let’s make our screen bigger.

In the graphical user interface, open a terminal:

47.png

Before going further, to copy and paste in this UTerm terminal, select the text and left click your mouse. To paste, click the middle button of your mouse (i.e. the scroller on my mouse).

Do commands:

sudo mount -o loop /usr/share/virtualbox/VBoxGuestAdditions.iso /mnt/cdrom

cd /mnt/cdrom

sudo ./VBoxLinuxAdditions.run

The screen will be fixed now after a virtual image restart. Log out of the graphical user interface.

In Cygwin:

vagrant reload

In the 800×600 resolution VirtualBox window, login as user ubuntu:

44

Start the XServer with command (or find it with the up arrow):

sudo startxfce4&

Wonder of wonders, the UI fills our monitor display:

48.png

Install Eclipse

In the graphical user interface, open a terminal:

47.png
mkdir /home/ubuntu/eclipse

mkdir /home/ubuntu/workspace

cd /opt/eclipse-installer/

# You must be in graphics mode for the installer to work:
sudo ./eclipse-inst

49
Select installation folder: /home/ubuntu/eclipse:

51.png

# accept licenses

# accept certificates

Select /home/ubuntu/workspace as an Eclipse workspace:

53.png

Right-click on the screen and select menu “Create Launcher…”

54.png

55.png

Double click the “Eclipse Neon” link on the desktop, accept to “Mark as executable”, launch again and here we go with Neon:

56

Install Firefox and a graphical text editor

For some reason my default web browser was glitchy, so in the graphical user interface, I opened a terminal:

47.png

And installed Firefox:

sudo apt-get install firefox

And while at it, I also installed a half decent graphical text editor:

sudo apt-get install kate

Once installed, I launched the Firefox web browser from the terminal by typing:

firefox

Add an Eclipse add-on ( IBM WebSphere Developer Tools Beta ) which will allow us to install server components for the IBM application servers

In the browser, I headed to:

https://developer.ibm.com/wasdev/downloads/#asset/tools-WebSphere_Developer_Tools_Beta

50.png

The file here was released: 16 May 2017.

And while Eclipse Neon is open, I clicked the “Install” button at the bottom of the web page and dragged it over the Eclipse workspace:

51

A “Confirm Selected Features” dialog pops up. I’m greedy, so I select all:

52

I click the Confirm > button. I get a warning IBM WebSphere Application Server Liberty Developer Tools Beta (April 2017) is not available and do I want to proceed anyway? I click Yes.

I accept the license agreements and click the Finish button. It takes a while to conclude. Long enough to go fetcch a coffee.

53.png

At the end, you will be prompted to restart Eclipse Neon, click Yes:

55

Install the WebSphereApplication Server V9.0 Tools to Eclipse

After Eclipse has restarted, click menu Help > Install WebSphere Software…

59.png

Click to install the “WebSphere Application Server V9.0 Tools”:

60

The button becomes “Install pending”. Click the Finish button:

61.png

In the next window, click the Next button:

62.png

Accept the license and click the Finish button. It takes a while:

63.png

At this point, I got a 500 Server error in the middle of the install. I clicked click menu Help > Install WebSphere Software… and restarted the install and it picked up where it left off and finished gracefully.

After completion, you are prompted to restart Eclipse. Go ahead.

64.png

Download and install IBM Installation Manager

Next, in Firefox open a new tab and surf to URL:

https://geekflare.com/ibm-im-installation-guide/

And click on the link to download IBM Installation Manager:

54.png

This led me to an IBM login window where I was able to use my free IBM Bluemix account. Or, alternately, you can create a new account here.

Once in, click to download the “IBM Installation Manager Install Kit for all x86_64 Linux versions“:

56.png

Select to Save File and click OK:

57

It takes a while:

58

Once downloaded, we will cut and paste the zip in a folder synced between windows and the virtual image. This will give us ample hard drive space to play around in. We open the containing folder:

65

Cut the zip and paste it into /opt/gopath/src/github.com/hyperledger/fabric/devenv/

66

This corresponds to your Windows folder:

C:\gocode\fabric_java_latest\fabric\devenv\

Still in the virtual image, open a terminal:

47.png

Do commands:

cd /opt/gopath/src/github.com/hyperledger/fabric/devenv

mkdir iim

cd iim

mv ../agent.installer.linux.gtk.x86_64_1.8.2000.20150303_1526.zip

unzip agent.installer.linux.gtk.x86_64_1.8.2000.20150303_1526

./install

This will launch the IBM Installation Manager UI:

67

In the next window, click the Next button:

68

Accept the license.

For disk space limitation reasons, change the Installation Manager Directory to:

/opt/gopath/src/github.com/hyperledger/fabric/devenv/IBM/InstallationManager/eclipse

69.png

In the summary window, click Install :

70

After it has completed, click the Restart Installation Manager button:

71

Install the WebSphere Application Server V9.0 application server on our Linux virtual image

At this point we are at a crossroad. To create an entyerprise Java application which will communicaate with Hyperledger, we could use different application servers. The free ones include Tomcat or IBM WebSphere Liberty.

I will be installing the full blown WebSphere Application Server V9.0. There is a free WAS Developer version available at:

https://www.ibm.com/developerworks/downloads/ws/wasdevelopers/index.html

Login at that page using your free IBM Bluemix account.

Next, go to the following web page for instructions:

https://developer.ibm.com/wasdev/downloads/#asset/WAS_traditional_for_Developers

This is what you need to look at:

72.png

In the Linux virtual image, in IBM Installation Manager which has restarted, click menu File > Preferences… as pictured below:

73.png

In the window that appears, click the Add Repository… button:

74

Enter the URL mentioned in the IBM web page above and click OK:

75

You are prompted to enter your Bluemix account login and password. Go ahead and check the checkbox.

Next, you are prompted to create a master password for the secure storage. Put user ubuntu’s Linux password here :

76.png

Click OK to close the Repositories window:

77

Next, in IBM Installation Manager click Install:

78.png

You will be prompted to update IBM Installation Manager. Click Yes:

79.png

When it’s done, you are prompted to restart IBM Installation Manager. Click the OK button:

80.png

Next, in IBM Installation Manager click Install again:

78.png

Enter the Secure Storage password which is user ubuntu’s password.

In the next window, we will check IBM WebSphere Application Server (ILAN) and subcomponents. You could actually install Liberty as well side by side. Personally, I have found it rquires too much of my patience to configure server resources in Liberty. I like the regular WAS’s administrative console better. Click the Next > button:

81

Wait a while. I the Install Packages window that comes up, click the Next > button:

82

Accept the license agreement and click the Next > button.

For disk space limitation reasons, change the Installation Manager Directory to a folder actually synced from Windows (notice the available space I have that location in the screen capture below, a bit more that the 2GB on the Linux virtual image):

/opt/gopath/src/github.com/hyperledger/fabric/devenv/IBM/IMShared

and click the Next button:

83.png

In the next window, we will change the Installation Directory (again, for disk space reasons) to:

/opt/gopath/src/github.com/hyperledger/fabric/devenv/IBM/WebSphere/AppServer

and click on the Next > button:

84.png

In the next window, I keep the English translation as is and click on the Next > button.

In the next window, I expand the tree view and select the Sample applications and click on the Next > button:

85.png

In the next summary window, click on the Install button:

86.png

This will take quite a while!

Once completed, click the Finish button:

87.png

Exit the IBM Installation Manager.

Install a WebSphere Application Server profile

In the top Linux user interface menu, click Applications > System > Profile Management Tool `:

90

The WebSphere Customization Tool launches. We’re going to create a WAS profile. Click the Create… button:

91

In the next window, click the Next > button:

92.png

In the next window, keep the “Typical profile creation” selection and click on the Next > button.

In the Administrative security, uncheck the “Enable administrative security” checkbox and click on the Next > button:

93.png

In the Profile Creation Summary window, note the profile path and profile name. Then click the Create button:

94

This takes a while to complete.

Accept to launch the First steps console and click the Finish button:

95.png

In the Fist steps window, click on the “Installation verification” link:

96.png

Looking good:

97.png

Close the window, Exit the First Steps window. Close the WebSphere Customization Toolbox 9.0 window. Close the Uterm window.

Adding WebSphere Application Server 9.0 to Eclipse

The only wondow still open is Eclipse. Let’s customize it a bit first.

Add line numbers by going to menu Window > Preferences > General > Editors  > Text Editors > check the “Show line numbers” checkbox

Add a Console tab by going menu Window > Show View > Console

Add Problems and Progress tabs by going menu Window > Show View > Other… 

In the Show View window that comes up, expand General in the tree view, select Problems and Progress and click the OK button:

99.png

Stop the automatic jumping to the Servers tab by going menu Window > Preferences > Server and uncheck “Show Servers view when server state changes”, then click OK:

4.png

Stop the automatic jumping to the Console tab when a log is added and remote console log limit by going menu Window > Preferences > Run/Debug > Console > uncheck the “Limit console output” checkbox >  uncheck “Show when program writes to standard out” > uncheck “Show when program writes to standard error“:

6

In the Servers tab, delete the Web Preview Server by right-clicking on it > Delete:

100.png

Click OK.

Next, click on the “create a new server” link in the Servers tab.

In the window that comes up, I select “WebSphere Application Server traditional V9.0” in the server type tree view, shorten the Server name a bit and click on the Next > button:

101.png

In the next window, we browse to our Installation folder which for disk space reasons we placed at:

/opt/gopath/src/github.com/hyperledger/fabric/devenv/IBM/WebSphere/AppServer

Leave the JRE as is. Click the Next > button:

102

In the next window, leave everything as is and click the Finish button:

104.png

We now have a “WAS 9.0 locahost” server in our Servers tab:

1.png

It started automatically.

Right click on “WAS 9.0 locahost” > Properties > WebSphere Application to display product version, useful port information and log location:

3.png

Click OK to close the Properties window.

Now to stop our server from automatically building and deploying, double-click on “WAS 9.0 locahost” to bring up the “WAS 9.0 localhost” top pane >  expand Publishing > select the “Never publish automatically” radio button > click the top left Save button:

7

To open the WebSphere Administration Console, right-click on “WAS 9.0 locahost”  > Administration > Run Administrative Console

8

The console will appear in a Firefox web browser window . It takes a while to come up. We set it up so we don’t have to type in a password and it goes right in without a log in screen (improvement over version 8, 7, 6…):

9.png

Import the fabric-sdk-java project into Eclipse

In Eclipse’s Enterprise Explorer pane (top left), right-click > Import > Import

10

In the Import window that comes up, expand General in the tree view and select Maven > Existing Maven Projects and click the Next > button:

21.png

In the Import Maven Projects window that comes up, click the Browse… button:

22

Click “+ Other Locations” in the next Linux dialog:

23

Click on “Computer” in the next window:

24.png

Navigate to /opt/gopath/src/github.com/hyperledger/fabric/devenv/fabric-sdk-java and click the OK button:

25.png

Keep the next window settings as is and click the Finish button:

26.png

Expand the new fabric-java-sdk project in the Enterprise Explorer tab:

27.png

Update dependencies by right-clicking on the project name > Maven > Update Project...

28.png

You can see the results in the Maven Console:

29

Fix the Maven pom.xml

The expected outcome at this point would be to just build the project the regular way and Maven would do just do its magic. This was not my experience. I caught two nasty build errors which read:

The error listed is:

1 required artifact is missing.

for artifact:
org.hyperledger.fabric-sdk-java:fabric-sdk-java:jar:1.0.0-alpha2

from the specified remote repositories:
central (https://repo.maven.apache.org/maven2, releases=true, snapshots=false)

at org.xolstice.maven.plugin.protobuf.AbstractProtocMojo.resolveBinaryArtifact(AbstractProtocMojo.java:962)
at org.xolstice.maven.plugin.protobuf.AbstractProtocMojo.execute(AbstractProtocMojo.java:489)
at org.xolstice.maven.plugin.protobuf.AbstractProtocCompileMojo.execute(AbstractProtocCompileMojo.java:31)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
at org.eclipse.m2e.core.internal.embedder.MavenImpl.execute(MavenImpl.java:331)
at org.eclipse.m2e.core.internal.embedder.MavenImpl$11.call(MavenImpl.java:1362)
at org.eclipse.m2e.core.internal.embedder.MavenImpl$11.call(MavenImpl.java:1)
at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:176)
at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:112)
at org.eclipse.m2e.core.internal.embedder.MavenImpl.execute(MavenImpl.java:1360)
at org.eclipse.m2e.core.project.configurator.MojoExecutionBuildParticipant.build(MojoExecutionBuildParticipant.java:52)
at org.eclipse.m2e.core.internal.builder.MavenBuilderImpl.build(MavenBuilderImpl.java:137)
at org.eclipse.m2e.core.internal.builder.MavenBuilder$1.method(MavenBuilder.java:172)
at org.eclipse.m2e.core.internal.builder.MavenBuilder$1.method(MavenBuilder.java:1)
at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod$1$1.call(MavenBuilder.java:115)
at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:176)
at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:112)
at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod$1.call(MavenBuilder.java:105)
at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:176)
at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:151)
at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:99)
at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod.execute(MavenBuilder.java:86)
at org.eclipse.m2e.core.internal.builder.MavenBuilder.build(MavenBuilder.java:200)
at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:735)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:206)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:246)
at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:301)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:304)
at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:360)
at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:383)
at org.eclipse.core.internal.resources.Workspace.buildInternal(Workspace.java:487)
at org.eclipse.core.internal.resources.Workspace.build(Workspace.java:406)
at org.eclipse.ui.actions.BuildAction$1.runInWorkspace(BuildAction.java:285)
at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:39)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
Caused by: org.apache.maven.artifact.resolver.MultipleArtifactsNotFoundException: Missing:
———-
1) com.google.protobuf:protoc:exe:${os.detected.classifier}:3.0.0

Try downloading the file manually from the project website.

Then, install it using the command:
mvn install:install-file -DgroupId=com.google.protobuf -DartifactId=protoc -Dversion=3.0.0 -Dclassifier=${os.detected.classifier} -Dpackaging=exe -Dfile=/path/to/file

Alternatively, if you host your own repository you can deploy the file there:
mvn deploy:deploy-file -DgroupId=com.google.protobuf -DartifactId=protoc -Dversion=3.0.0 -Dclassifier=${os.detected.classifier} -Dpackaging=exe -Dfile=/path/to/file -Durl=[url] -DrepositoryId=[id]

Path to dependency:
1) org.hyperledger.fabric-sdk-java:fabric-sdk-java:jar:1.0.0-alpha2
2) com.google.protobuf:protoc:exe:${os.detected.classifier}:3.0.0

I was baffled and Google this a bit. I read Volkan Yazici’s blog post on “Compiling Protocol Buffers Sources in Maven” at http://vlkan.com/blog/post/2015/11/27/maven-protobuf/

I emailed Volkan and asked him if he had an idea and he very kindly wrote back, saying:

I guess Eclipse could not resolve the ${os.detected.classifier} property dynamically injected by the os-maven-plugin. Try replacing occurrences of ${os.detected.classifier} with their hardcoded values, e.g., linux-x86_64. (See https://github.com/trustin/os-maven-plugin for list of available options).

So I edited my pom.xml, replacing two instances of ${os.detected.classifier} with linux-x86_64. Here attached is that modified pom.xml file renamed ad “pom.doc” so WordPress would allow me to add it. It is best viewed in Notepad++:

pom

Build the project using Maven

At this point, what I should have done is “menu Project > Clean…” in Eclipse followed by a “menu Project > Build Project” and that should have built fine. But I was distracted, and skipped the clean step and got one error:

An IO error occured (org.xolstice.maven.plugins:protobuf-maven-plugin:0.5.0:compile-custom:default:generate-sources)

org.apache.maven.plugin.MojoExecutionException: An IO error occured
(…)  Caused by: java.io.IOException: Directory /opt/gopath/src/github.com/hyperledger/fabric/devenv/fabric-sdk-java/target/protoc-dependencies/6056016fa52e6e795c6b7e22bc022718/google unable to be deleted.

No problem, I tell myself. I’ll just close Eclipse, open a terminal in Linux and type command:

sudo rm -Rf /opt/gopath/src/github.com/hyperledger/fabric/devenv/fabric-sdk-java/target/protoc-dependencies/6056016fa52e6e795c6b7e22bc022718/google

Restart Eclipse and build. That will be easy, right?

So after quite a few minutes feebly struggling to copy and paste into the virtual image terminal, I followed the advice at https://askubuntu.com/questions/617629/how-to-enable-cut-or-copy-paste-in-xterm and in the Applications > Accessories > Kate created a new text file called /home/ubuntu/XTerm containing:

XTerm*Background: black
XTerm*Foreground: green
XTerm*SaveLines: 2000
XTerm*faceName: Ubuntu mono
XTerm*faceSize: 12
XTerm*rightScrollBar: true
XTerm*ScrollBar: true
XTerm*scrollTtyOutput: false
XTerm*VT100.Translations: #override \
      Shift CtrlV: insert-selection(CLIPBOARD) \n\ 
      Shift CtrlV: insert-selection(PRIMARY) \n\ 
      Shift: select-start() \n\ 
      Shift: select-extend() \n\ 
      Shift: select-end(CLIPBOARD) \n\

I saved the text file, launched a new terminal and was able to paste half-decently with SHIFT-CTRL-V. Thank you, Simon!

2.png

Restarted Eclipse. Did a “menu Project > Clean…” in Eclipse followed by a “menu Project > Build Project” and that worked, I got a clean build.

3

Start Hyperledger Fabric

Referring to my previous blog post, I see that I have to start the pers using the following commands in a Linux terminal:

cd /opt/gopath/src/github.com/hyperledger/fabric/sdkintegration

docker-compose down;  rm -rf /var/hyperledger/*; docker-compose up --force-recreate

We leave this terminal window open.

Step through the code

Taking a look at my previous post, from the end-to-end integration test logs in file mvn-integration-test.doc, we can see where I could place some break points:

5.png

I decided Chain.java line 329 is interesting so that’s where I placed a breakpoint:

6.png

I launch the Debugger by right-clicking  on org.hyperledger.fabric.sdkintegration.End2endIT.java > Debug As… > JUnit Test

7.png

And the code execution pauses at the expected break point.

To celebrate success, I created a screen capture movie of me stepping through the Java code in Debug mode viewable on Youtube here:

https://www.youtube.com/watch?v=5bAimyuEy8I

(end of post)

Bertrand Szoghy, 2017-05, Quebec City.

Advertisements

2 thoughts on “Setting up Eclipse Neon for Enterprise Java development on the Hyperledger Fabric virtual image

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s