Wednesday, September 26, 2007

One week of beta1 - Party time with Web Services.

So yesterday I blogged about installing NB 6.0 beta1. I just installed the dev build of the 25th, but I used beta1 for about a week on our mobile multi-player game. I was developing the backend last week on Glassfish v2b58g.

As with the installation everything runs quite smoothly, although you shouldn't be looking in the messages.log, since it is not stacktrace free. So far I haven't been able to relate these stacktraces to problems in NB. Well maybe, sometimes NB freezes, it just isn't doing anything, not even consuming CPU, not even writing log entries, but when I switch between applications on my XP box, NB doesn't even come up. I do see some stacktraces in messages.log, but since it doesn't have timestamps, I'm not sure where to put them in the time-space-continuum. Killing java.exe works and I can start NB without problems. I don't even get a message stating that NB is still running.

Sofar I've been using NB to develop my JavaEE backend for the game, which is a EJB 3 solution using TopLink and JavaDB for storage, and WS for interfacing with the client app. I'm using the SWING client that NB can pretty much generate for you to test the WS.

That is actually a cool feature, you just import the WSDL files of the WS you want to connect to and than drag-n-drop the operations in the WSDL into your sources and NB will generate all the code. This is pretty magical stuff, and I use the word 'magical' deliberately, since the documentation on this feature is not very clear. Now I must admit that I didn't read the documentation extensively. The thing that is not clear to me is how I can switch from the generated Java classes that make up the arguments and results of the operations I call to the classes that are actually used by the WS. That is how I will use the code in the mobile client, I have a JAR file that contains the classes for interfacing with the backend by the frontend and those classes I want to use in my tests as well, for obvious reasons. The documentation at first and second glance isn't really clear on how to change this behavior.
There's another gripe I have with this feature of NB to generate the code based on the WSDL: When you change the WSDL or rather the interface of the WS and therefore the WSDL, NB doesn't pick this up automatically, instead you have to refresh the WSDL yourself. There is a checkbox unchecked when you refresh the client that allows you to overwrite the local WSDL with the original WSDL, but there's nowhere to be found what this means. What it means to leave it unchecked or to check it. I have no idea what the impact is to leave it unchecked, as you guess, I check it all the time. Guess I'll file an issue on this right after posting this blog.

One other issue I have with the SWING client and its WS support, is with ANT. All ANT code used is generated by NB, yet I see the following warning: Consider using / so that wsimport won't do unnecessary compilation and have no idea as how to respond to this... well I do, I ignore it. I have no clue as to how to change my ANT file in order to prevent wsimport to do unnecessary compilation. So far it hasn't hurt me too much that stuff is being compiled over and over again. It only takes seconds on my box, so why worry.

For some reason the mobile library I created (it's a JAR file) and am depending on in my JavaEE project is not being compiled when it changed. Well NB isn't building that project when it builds my main project, although there is a clear dependency. But I noticed that with a JavaEE project I created in beta1 that depends on this library is building this dependency, so I guess it's an artifact of an older NB version. I have to look into this.

Well sofar for my experiences in the WS area with NB 6 beta1. All in all I am very happy, NB is rather stable, although I need to kill java.exe every now and then.


1 comment:

Roderico said...

Thanks for your blog, Iwan.
The generated artifacts are in the build/generated directory of your project. You can view these files from the Files view (select the "Files" tab).
We try to make the interaction with these files as transparent as possible, i.e., through the drag and drop mechanism that you spoke about in your blog. From thereon, you can use code completion or the navigation facilities in the source editor (e.g., Navigate/Go to Source) to navigate to these generated files.
In the from-wsdl scenarios, that is, creating a client or a webservice from WSDL, the original WSDL is copied into the project. The checkbox gives the user a chance to recopy the original WSDL (in the case that is has changed) into the project upon which regeneration is based.
In NB 6.0, you can also create a web service from WSDL iteratively using the UI which we call the Web Service Designer. Any new operation that is added or removed are reflected in both the implementation class as well as the WSDL that is copied in the project.