WebMethods 61 Developer New User Frustrations

The so-called developer tool sucks! It is a torture to a developer. If you lay all the so-called service steps one by one and never need to modify it later, it may work. If you ever dare to change something later, I would recommend the following procedure to save you a lot of time and headache:

  1. Save a copy the integration or rename it;
  2. Delete the one you need to modify;
  3. Re-write everything.

Do you have any better way?

Certainly Developer 6.1 is much different from the old developer tool. My personal pet peeves:

  1. No option to change the name of the services back to the old format, without the full namespace. The full namespace makes the service name very long, often pushing any comments on the step off the right side of the screen.
  2. No way to make the pipeline area at the bottom cover the entire bottom of the screen while still keep properties visible.
  3. If running in anything less than 1024x768 resolution, it’s very difficult to get all the panes on the screen at the same time.
  4. There’s no way to connect to older versions of webMethods, so I have to keep multiple versions of Developer around to have access to all my environments.

Having said all that, though - I don’t think that “Developer 6.1 sucks”. It’s very possible to get your work done, and some things are even easier. For example, you can now view both the flow steps and the results pipeline at the same time while debugging. I’m glad webMethods is trying their best to improve the development tools.

Skip: I’ve gotten used to it - one thing that helps is using the ‘perspective’ views. There’s one for development, one for testing and one for the details (results). Think of them as the old tabs - with one click you just go to the details perspective (set it up to have the results as the full width of the screen).

Frustration:
What exactly do you want to change in your flow? There’s almost never a reason to delete a flow entirely and start over unless you created a bad design yourself.

I agree that Developer 6.1 is much different from the old WM developer tools and better than the old ones. But I don’t think it is a good development tool (UI is not a big issue to me). Many of the WM developers are traditional java or C programmers. WM Developer tool broke many “common sense” to the programming tradition. Probaly I need to learn more undocumented tricks from this forum.

Here is one some example I experienced:

Simple integration, with step A, B, C, D, where A is a DB adapter service. I had a typo when I created A. After I finished the integration I realized it. Problem: I cannot rename the output document name for A. I had to delete A and rebuild it to solve a simple typo. Of course if you don’t mind a document being called “DBServer” while it should be “DBService”, then the problem doesn’t exist. When I did the delete, I had to allow the integration to delete A.

Branch: I though it was implementation for “case” but I was wrong. Here is the pseudo code:

Loop A.results
Map A.results.anyvalue to temp
Branch on A.results.flag:
A1: logic, clean up temp by a drop
A2: logic, clean up temp by a drop
Then, temp is not available in the pipeline of A2 because it is dropped in A1. A1 and A2 are mutual exclusive. Whatever A1 does shouldn’t effect A2. Furthermore, it could be helpful if the pipeline can implement the concept of block and scope instead of having everything as global variables.

Transaction: wm.art.startTransaction
Want to debug something with XA_transaction? Disable the transaction steps. Want to go production? Enable them back. Error? disable them and debug.

Delete a step (by mistake), Save, and put it back. You will see some maps related to the output of that step turn “blue”. Solution: Delete the maps and redo it. I think the reason is that the save also does a code generation and compilation, which requie the pipeline to be cleaned.

OneWorld adapter? The customers are free QA people.

Multi-instance of an adapter? Not a good idea. The queue only supports one-lane traffic.

And etc, etc…

I don’t want to offend or argue with any reader here. If my tone in this post is sarcastic, please don’t take it personal. I just don’t like to tool and I have to use it. So I dislike it, and I need to learn more.

Yes there are some idiosyncrasies!

For your first comment, why can’t you just rename the output variable in your first step (adapter service) then just remap the new variable in the 2nd step.

2nd comment - (the branch steps). Realize that when you drop something in the pipeline it is at design time not run time. So if the first branch isn’t executed the variables won’t be dropped. This you have to live with.

Yes the global concept is bad from past history. There are many frameworks now implementing the “pipeline” as a design pattern where documents can flow through the pipeline and be modified at various points in the flow.

Good luck with your learning experience. Have a positive attitude if you can. I personally love the product not just because the pay is much better having a niche skill!

First Comment:
(1) You cannot rename the name of the output doc of a DB adapter service;

(2)If you change the output docname in the pipeline of flow service (the caller to the DB Adapter service), as soon as you save it, the name will be reversed to the old name.

Second comment:

You misunderstood what I said. I was talking about design time. If you drop temp in A1, then you won’t see temp in the pipeline of A2 at design time. My point is that this shouldn’t happen since it is a switch case scenario. It should know that something done in an “if” shouldn’t effect the stuff in “else”.

Third comment:

Agree. The concept is good. But we are also programmers, besides Document type, we may need local variables occasionally, such as the temp in my case. A code example:

{
int flag
int temp = GetValue(doc.f1);

if(flag==1)
{
…logic around temp
drop temp;
}
else if (flag==2)
{
//I want to see temp here. But Developer doesn’t have it because it is dropped above
}

Last comment: Strongly agree. I will try to have a positive attitude since a negative one won’t help.

It is nice exchanging ideas with all of you here. If possible, could the admin change the title of this thread? I don’t like the tool, but I don’t want to convey any aggressive or offensive sense the users who like WM Developer (and I didn’t mean to in the beginning, I was just frustrated by the tool). Let’s just talk technical stuff.

Thanks!

P.S. Is the niche market for WM sustainable? No offense, we are on the same boat.

Correction:

That switch…case problem is not persistent on my machine. It may be a side effect of other operations (delete, rename…). I will also re-install the Developer to see if there was any issue with the installation itself.

Sorry about the confusion.

Regards.

I have a ‘select’ adapter service. I can rename any output variable I want. If you really can’t do this in your case, just add a map step after to call the service and map it to another document with the name you want. Sometimes you have to remap though if you get a new version of an XML schema for example which is largely different from the previous version. Equate this to changing your XSLT to follow the new schema.

I understood what you meant about design time. I said you have to live with it. But you can get around it by not dropping the variable in the first branch so you see it in other branch steps. Then drop after the branch is complete (so the variable’s in the pipeline a bit longer - no biggie). You can drop into java any time you want if you want to use local variables, or create a variable at the beginning of each branch step and drop it at the end of each branch step. Do this for each branch step similar to creating a local variable in each case. In java you would have to declare the local variable inside each case step. To mimic this you would create a variable and drop it within in branch step using map steps or whatever.

A better approach for you might be to ask how to something can be done in webMethods similar to what you’ve done in code. But generally speaking the idea is to perform your business logic outside of webMethods (in SAP, J2EE server, oracle stored procs,etc) so you can still do it the way you’re used to.

webMethods niche won’t last forever but since we are smart we will keep on top of new technologies to keep the demand for our skills up.

I agree with most of your points.

I still need to use the WM platform. My complaint was that it is against the traditional programmer’s thinking. WM does provide many goodies, such as guranteed delivery, transaction management, etc. On a high level, it provides an integration platform, whcih is good. But on the detail level (development), the overhead is a headache. There are too many things in WM beyond your expection. Yes, you can always get the work done with some workaround. Eventually I got my work done. But I didn’t feel comfortable with it.

Have you ever used BEA or Biztalk? As a senior WM user, what do you think?

Another tech question: How do you escalate exceptions? I can use a try…catch sequence to wrap on a service. If I want to call the service from another service, how do I keep the structure?

Example:

Service 1:

sequence
seq1 try
logic
seq catch
GetLastError…

service 2:

Sequence
sequence try

service 1
service m
service n
sequence catch

I would like to jump to the catch and bypass m and n if service 1 fails. Any idea? Thanks!

Typically we only use try/catch sequences if you want to handle the exception. This means it’s usually only done at the top level service (the entry point to all subsequent flows). In your example, service1 wouldn’t have a try/catch sequence so the exception would propagate from service1 up to service2 (the calling service).

If you need to catch the exception in service1, you can rethrow it in the catch block (similar to java). Or sometimes I trap a db insert error so I can continue with the next iteration, but higher level services would be unaware of this exception of course. I like to use a throwServiceException java service instead of the EXIT and signal failure flow step.

Over time I’ve learned to keep the flows as simple as possible, use other systems for the business logic and use webmethods to shunt the files around using as much configuration rather than development as possible (using TN, etc).

People I’ve talked to have said that Biztalk and Tibco is more painful than webMethods but I haven’t used them. I am a J2EE convert and I much prefer webMethods or at least integration over web app development. In either case I find the majority of the time spent is gathering requirements and doing design rather than development in either case.

my two cents…

over time - I have gone from deep frustration to down right appreciation!

I think you’ll find that the flow platform that webmethods has invented is extremely powerful. I view programming very differently now.

I think a healthy balance of OO best practices mixed in with the straight forward linear/sequential nature of flow can produce great results.

As with all programming - the first steps are painfull and the resulting code is likely a mess. It will get better.

Question regarding exception for the experienced users:

I am trying to make a service as below:

loop
try{…logic…}
catch(ServiceException)
{
public error notification but not exit the loop
}

My problem is that in the try block, if something is wrong, the whole service exits. I would like to have the loop keep going. How do I do this? And How do I catch the ServiceException thrown in a step? Thanks!

Another question regarding transaction:

Read DB1.T1

Loop DB1.T1.results

try
art.startTransaction
update DB2.T2
update DB2.T3
update DB1.T1 (mark the flag in T1 as “processed”)
commitTransaction
catch
rollbacktransaction

end loop

This is related to my question above since the sequence try-catch simulation cannot bring the flow back to the loop if result[i] causes problem. And I want to keep the loop going. (I could use getLastError and detect if lastError is null. Any better way?)

I have all the DB adapters support XA_Transaction, but then the flow doesn’t allow me to put atr.startTransaction, with error NSException. How do I maintain a transaction within a loop? To use art.transaction, do I have to turn on XA support? (I want to keep the data integrity for each loop step but I don’t want one bad record to stop the others)

Any idea? Thanks a lot!

P.S. I start to get better understanding as I dig into the tool now.

LessFrustration

look more closely at “Repeat” step especially at “Repeat on failure” part

Thahir

Yes, I thought the exit on failure in the loop would perform as a “continue” statement. But it actually acts as a “break” + system.exit(). The exit on success and done are working as expected. Thanks!

Frustration,

First of all, welcome to WM Users! We’re glad to have you hear as a new user of the webMethods products.

Second, thanks to Will et all for patiently attempting to answer the questions buried in your ranting. In the future, you’ll have better luck here with a bit more balanced approach. The members here are some of the world’s leading webMethods developer and architects. Bring your questions with a positive outlook on life and you’ll be amazed at the quality of the responses you’ll receive.

Lastly, take a minute and register using this link http://www.wmusers.com/join/. We hope you’ll become a regular poster here.

Regards,

Mark Carlson
WM Users Forum Moderator

Dear Mark,

Thanks for the comments and thanks for changing the thread title. But please be careful when you refer other people’s talk as “ranting”, which may convey a very negative sense. Except for the initial post, all my questions were clearly described in a professional way and not buried in “ranting”. If you want the users to bring in positive outlook, as a moderator, please don’t use negative word yourself.

If you think it is inappropriate to have this thread open, please delete it.

Thanks for all the replies!

Best Regards

I think the combination of the anonymous identity, original title for this thread and your initial post qualified as a flame or rant. I agree that subsequent posts (from all parties) were more substantive and are the reason that I didn’t delete this thread.

Sign up as a registered member and visit often. We welcome your questions and feedback.

Mark

When you have an unregistered username of Frustratration then switch it LessFrustration, start your first post with the product “sucks” and then identify yourself as a new user to the product, people may get the wrong idea.

Here’s some advice.

  1. Join the group and by that I mean register. It’s nice to know who we’re talking to. The more users we have the more voice we have. I’m always amazed at how many voyeurs they are on this community.
  2. Post your questions, we will respond!
  3. Reply to some post and help someone else out. Share the knowledge. That’s how we all learn.

Lighten up and welcome to the group.

No replies Needed!

My experience with 6.1 developer is very pleasing. With a week’s work in 6.1 developer GUI, i can’t think of going bak to 4.6 developer.
Mouse wheel works in 6.1, many other new tabs and increases productivity.