Hi Mike, Nick,

just wanted to tell that I got my extension code fixed and it now works with 
1.0.0. Thanks for spotting the issue and the hints.

Thanks & Best Regards, Joachim

 

Von: Mike Jumper <mjum...@apache.org> 
Gesendet: Montag, 14. Januar 2019 06:44
An: user@guacamole.apache.org
Betreff: Re: [ANNOUNCE] Apache Guacamole 1.0.0

 

On Sun, Jan 13, 2019 at 12:11 PM Joachim Lindenberg <joac...@lindenberg.one 
<mailto:joac...@lindenberg.one> > wrote:

Hi Nick,

thanks. I am attaching my source code. You´ll likely notice, Java is not my 
favorite programming language, but anyway. Testing the code could be more 
challenging. My software is available from 
https://software.lindenberg.one/backup, and the integration is documented at 
https://software.lindenberg.one/backup/en/documentation/guacamole-integration 
(replacing 0.9.14 by 1.0.0)... I actually also have some unit test classes but 
removed them do to passwords etc.

 

The goal of the extension is that my customers can fire up a virtual machine 
out of their backups of windows systems. E.g. in case their laptop is lost, 
they can access the most recent version from another system (keyboard and 
screen resolution makes sense though). There are multiple ways to start – via 
guacamole entry point, via my web  ui, and via the windows ui.

 

This error points you exactly where you need to look - there's a 
NullPointerException occuring in the ConfiguredGuacamoleSocket.java file, in 
the init() method, on line 128, which is called by the SimpleConnection 
connection() method, on line 124, etc.  You need to trace back why something 
null is being passed there (presumably from your custom extension) and correct 
that issue.

 

 

You are passing a null GuacamoleConfiguration to the constructor:

 

https://github.com/apache/guacamole-client/blob/801a5df9f1d7095c52e594dda1a5276fe8cf6524/guacamole-common/src/main/java/org/apache/guacamole/protocol/ConfiguredGuacamoleSocket.java#L128

 

As for your overridden connect(GuacamoleClientInformation info, Map<String, 
String> tokens) method, that is not being called because that is not the 
prototype of that function. The prototype has changed on git master, yes, but 
this API change was not part of 1.0.0. The connect() for Connectable in the 
1.0.0 extension API only takes a GuacamoleClientInformation. See:

 

http://guacamole.apache.org/doc/1.0.0/guacamole-ext/org/apache/guacamole/net/auth/Connectable.html#connect-org.apache.guacamole.protocol.GuacamoleClientInformation-

 

Since your connection is based on SimpleConnection, you're not actually 
overriding a method of SimpleConnection, but adding a new method which isn't 
used elsewhere. The original connect() function remains unoverridden and 
continues to be called.

 

I suggest wiping out your local Maven repository and rebuilding your extension. 
I haven't looked at your code, but assuming you're using a proper @Overrides 
annotation, I suspect your code won't compile due to there being no such 
function to override. If you recently built from guacamole-client git, your 
local Maven repository likely has a git master build of guacamole-ext (which 
would still have the 1.0.0 version number), not the guacamole-ext which is part 
of the 1.0.0 release and on Maven central.

 

Sure, but why is not my overridden method called? I want to do some magic 
(starting virtual machines) behind the scenes. This actually took most of the 
time to figure out what call sequence on which objects is done and where I can 
intercept – and then I didn´t really spend time to clean the code up once I got 
it to work – and also I see that would probably have been waste as now the 
inner logic changes.

 

There are *many* things that have changed between 0.9.14 and 1.0.0, and pretty 
much of all of those changes are intentional :-).

 

Sure, but what I kind of miss is a docuemtation what changed for extension 
coders and how to adopt to the changes. Or did I miss that?

 

 

Yep. What you're looking for is the "deprecation / compatibility notes" section 
of the release notes. We write one whenever a release breaks compatibility in 
some way with a past release, including changes to the extension API:

 

http://guacamole.apache.org/releases/1.0.0/#deprecation--compatibility-notes

 

The changes to SimpleUser and the Simple*Directory classes are deprecations and 
don't break anything directly. Your code will produce warnings during 
compilation, and you should migrate when possible, but it should continue to 
build:

 

http://guacamole.apache.org/releases/1.0.0/#deprecation-of-simpleuserdirectory-simpleconnectiondirectory-and-simpleconnectiongroupdirectory-classes

http://guacamole.apache.org/releases/1.0.0/#deprecation-of-simpleuser-convenience-constructors

 

There are changes to the User interface which would break the build for you if 
you implemented User directly, but users of AbstractUser or SimpleUser should 
be unaffected. Default implementations of the new functions are provided:

 

http://guacamole.apache.org/releases/1.0.0/#support-for-user-groups-1

 

If you continue chasing things down and things still aren't working for you, I 
suggest bringing this over to a new thread on the d...@guacamole.apache.org 
<mailto:d...@guacamole.apache.org>  list. The release announcement on the user@ 
list was meant to be just that - an announcement. It is probably not the best 
thread for a development discussion.

 

- Mike

 

Reply via email to