Posts Tagged ‘Progress Sonic’
Using Apache Commons Logging or Log4J with Custom Services
Agents with the Progress OpenEdge Adapter for Sonic 10.1A
Although it is not mentioned in the documentation, you need to add listeners to your service instances to use multiple agents at the same time.
Thanks to Régis for the original post.
How to Upgrade Sonic Workbench 7.6.2 to Eclipse 3.4
Refer to page 75 of the Progress Sonic Product Update Bulletin 7.6.2.
Oracle, MySQL and the EU: The Q&A
The article is great, although my favorite point is only discussed near the end:
In the abstract, it’s easy to see how Oracle could use MySQL as a complement to its flagship product; MySQL for low end, low margin accounts where Oracle doesn’t currently compete or, tactically, to undermine SQL Server and/or DB2 in particular accounts.
As a few folks have pointed out, the Oracle sales force is going to dislike MySQL even more than the Sun sales force did, as it is a low margin product competing – at least in some sense – with a high margin staple.
I also agree that Oracle and MySQL aren’t really competitors, unlike Sonic (proprietary and outdated) and FUSE (open source and leading-edge), which is another interesting story to follow.
http://redmonk.com/sogrady/2009/10/23/oracle-mysql-and-the-eu-the-qa/
Prestadores de Serviço com Progress Sonic ESB
Progress Sonic Customers List
If you have to mix references, you probably don’t think that you have enough.
http://www.sonicsoftware.com/customers/index.ssp
Many well-known customers are missing, go figure why.
Issue in Progress Sonic Workbench 7.6.2
When using the Asynchronous Event Dispatch API with a few thousand messages, I got a bunch of javax.naming.NameNotFoundException exceptions about temporary queues in MgmtBroker that Progress Sonic Workbench seems to fail to create.
No exceptions were thrown when the process ran from the JMS Test Client.
I will open a ticket ASAP.
Asynchronous Dispatching in Progress Sonic ESB 7.5+
All messages placed in the Outbox by a service are sent at one time. A service can create multiple messages and address them to multiple endpoints. None of these messages are sent until the entire service (XQServiceContext ctx) method has completed.
(from the page 89 of the Developer’s Guide)
[The Asynchronous Event Dispatch API] allows message dispatching at any time after service initialization and provides direct access to the framework dispatch mechanism instead of requiring messages to be placed in the service Outbox.
(from the page 321 of the Developer’s Guide)
public void service(final XQServiceContext ctx) {
final XQMessage msg = ...
final XQDispatch dispatcher = ctx.getDispatcher();
dispatcher.dispatch(msg);
}
There is a SentWithDispatch metric in 7.6 that is also of interest.
Headers vs. Properties in ESBs
Headers are commonly used for service-level information (e.g. HTTP or JMS headers copied from incoming messages) and properties, for message-level information (e.g. data saved from previous messages in the itinerary) that could be instead added to messages.
While Progress Sonic ESB stores them together in XQ messages, both Progress FUSE ESB and JBossESB store headers and properties apart.
SOAP Fault Handling in Java, .NET and Progress OpenEdge
Java
import javax.xml.soap.SOAPElement;
import javax.xml.ws.soap.SOAPFaultException;
public final class SOAPSample {
public static void main(final String[] args) {
try {
...
} catch (final SOAPFaultException e) {
final SOAPElement detail = (SOAPElement) e.getFault().getDetail().getElementsByTagNameNS("urn:soap-fault:details", "FaultDetail").item(0); // replace by the actual detail, if any, this is for the Progress OpenEdge Adapter for Sonic ESB
final SOAPElement msg = (SOAPElement) detail.getElementsByTagName("errorMessage").item(0);
throw new Exception(msg.getValue(), e));
}
}
}
.NET
using System.Web.Services.Protocols.SoapException;
public sealed class SOAPSample {
public static void main(const String[] args) {
try {
...
} catch (const SoapException Ex) {
throw new Exception(Ex.Detail["FaultDetail", "urn:soap-fault:details"]["errorMessage"].InnerText); // replace by the actual detail, if any, this is for the Progress OpenEdge Adapter for Sonic ESB
}
}
}
Progress OpenEdge w/o Detail
...
IF VALID-HANDLE(ERROR-STATUS:ERROR-OBJECT-DETAIL) THEN
DO:
RETURN ERROR ERROR-STATUS:ERROR-OBJECT-DETAIL:SOAP-FAULT-STRING.
END.
Progress OpenEdge w/ Detail
DEF VAR hFault AS HANDLE.
DEF VAR hDetail AS HANDLE.
DEF VAR hMsg AS HANDLE.
CREATE X-NODEREF hFault.
CREATE X-NODEREF hDetail.
CREATE X-NODEREF hMsg.
...
ERROR-STATUS:ERROR-OBJECT-DETAIL:SOAP-FAULT-DETAIL:GET-NODE(hFault).
IF VALID-HANDLE(hFault) THEN
DO:
hFault:GET-CHILD(hDetail, 1).
hDetail:GET-CHILD(hMsg, 1).
RETURN ERROR hMsg:NODE-VALUE.
END.

