I have a BizTalk demo connecting to an FTP server.
However, there are various exceptions that can occur such as:
The server may be unavailable
The username/password may change
File deletion after downloading may not work due to permissions etc.
These generate exceptions in the Error Log.
However, I can't see any easy way for me to handle these exceptions beyond
Writing a custom WMI adapter to poll the Error Log and try and match exceptions based on adapter name.
Using the Log functionality of the FTP adapter and parsing the log file for FTP exceptions.
Solutions on the internet seem to revolve around enabling "Failed Message Routing" or using the ESB Exception Handler. However, I believe both of these require actual messages, which there won't be if the adapter encounters an exception and fails to connect.
One possibility I've considered, but don't think is possible, is dynamically doing a "receive" in an orchestration, and catching exceptions there - is this possible?
If not, is there any way to catch an exception thrown by a receive adapter before messages are collected?
Thanks!
BizTalk will "handle" these exception cases by eventing an error and shutting down the receive location. This is normal and I think very reasonable behavior.
In this instance BizTalk has not stopped working. Other methods of receiving messages into the receive port will continue to work.
I am not sure what kind of handling you have in mind? There are plenty of ways you can monitor an event log.
What do you want to happen as a result of the exceptions?
In answer to your other question, you can "dynamically do a receive" by calling a .net component from an orchestration. You could have an orchestration which looped around an expression shape which "polled" the FTP server. In this case you would certainly have access to regular exception handling mechanisms.
PS. You are correct that failed message routing relies on there being a message. For example if an inbound message failed during pipeline processing.
Related
try to terminate a running ATP instance using the following API from oci java sdk.
TerminateDbSystemRequest terminateDbSystemRequest =
TerminateDbSystemRequest.builder().dbSystemId(dbSystemId).build();
databaseClient.terminateDbSystem(terminateDbSystemRequest);
an exception caught
Exception in thread "main" com.oracle.bmc.model.BmcException: (404, NotAuthorizedOrNotFound, false) Authorization failed or requested resource not found.
I can stop and start the atp instance successfully, just wondering which class should be used to terminate the atp instance.
That is the right code to perform the action you are trying to perform using the OCI Java SDK, but it looks like you are hitting one of the two below issues:
dbSystemId is not a valid DB System identifier. One way to confirm if you have the correct dbSystemId value is to confirm if you are able to stop and start the DB System using the same value.
dbSystemId is a valid DB System identifier, but the credentials you are using to terminate the DB System do not have the proper permissions to do so. One way to confirm if this is a permissions issue is to see if, using the same account whose credentials you are using from the Java SDK, you are able to terminate the DB System from the OCI web portal
I have an application (packaged software from a vendor) that runs on Oracle WebLogic.
There are few operations that, if I try them, I consistently get the following error page:
(WebLogic Bridge Message) Failure of Web Server bridge: No backend server available for connection: timed out after 10 seconds or idempotent set to OFF or method not idempotent.
The error occurs consistently almost exactly five minutes after I try the operation.
The page does not look like the typical error page you get when the application logic fails. It looks like something to do with the infrastructure (e.g., WebLogic configuration).
I am pursuing the issue with the software vendor, but that's not going well.
Has anyone seen this message and/or suggest an approach for diagnosing the root cause here?
Looks like you are using a Proxy Server between Browser and Weblogic Server. By seeing the error it's evident that proxy server unable to connect to back-end WLS server. You may have to enable proxy debugs to get more info.
I have a EJB application running on Glassfish server which stores data on MySQL DB which I call as Global DB.
I have two exact remote Swing applications which are stand alone applications accessing EJB's using RMI. They have their own local DB in case of lost connection.
My aim is to implement two phase commit protocol i.e to make one participant as coordinator and others as participants.
One method which I could think of was to implement using JMS i.e send a message across queue and make remote clients listen to these messages and take appropriate action.
I do this my sending a message on Buttonclick of one of the Swing application.
Problem is, even tough I have implemented MessageListener, onMessage() method does not receive any message for the other client.
Each Remote client has following properties set:
props.setProperty("java.naming.factory.initial", "com.sun.enterprise.naming.SerialInitContextFactory");
props.setProperty("java.naming.factory.url.pkgs", "com.sun.enterprise.naming");
props.setProperty("java.naming.factory.state", "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");
props.setProperty("org.omg.CORBA.ORBInitialHost", "localhost");
props.setProperty("org.omg.CORBA.ORBInitialPort", "3700");
This is to connect to Glassfish server and access the connectionFactory and Queue which I have already configured.
Is it because only application running on server are allowed to receive messages and not remote applications?
Any suggestions for topology for 2 PC are welcome.
For this, we used JMS for exchanging the messages between these systems i.e one acting as coordinator who will initiate the process by sending message on the queue and others will respond accordingly by sending back again a message on the queue.
Since you are using EJB,you can use JTA to manage transcation,it a standard implementation of two-phased commit protocal,and JMS support JTA too.
Here are my steps:
config the trans-attribute to Required/Mandatory /Supports, depends on you need.
in your client get UserTransaction by lookup jndi from the EJB server.
start the transaction from client.
commit/rollback the transaction at client side
This is the so called "Client owner tranaction design pattern". I suggest you to read the book javatransactionsbook
I am building a chat component(where all discussions are saved) for an application and I planned to have a long-polling server as an interface between the client machines and the rabbitmq server, that will parse format and enqueue messages in a job queue(on rabbitmq) to be handled by celery, which will then check if posting is allowed via checking the db for some information, etc, save the messages to a db, and enqueue them in rabbitmq again, this time to be consumed by the long-polling server to be pushed out to the client machines.
I planned to have one connection from the rabbit server to the long-polling server, containing many channels, that will each correspond to a nio socket channel, where a client machine is listening in on the other end.
The long polling server will be written using the Java Nio libraries. My question is, what would be an efficient way of sending the messages from the AMQP channel to the socketchannel to be pushed out to the clients?
From my understanding of NIO, the only time a selectionkey should be registered for OP_WRITE, is when a previously attempted write() call returned 0. In this case though, I am interested in writing to a socketchannel when information is present on the corresponding AMQP channel. How can I alert the socket channel once data comes in on its corresponding amqp channel so that I may send data through the socketchannel to the client?
Just call write()! No need to 'tell' the SocketChannel anything. Then if write() returns zero, do the OP_WRITE stuff.
I create a Flex application that works with a browser using a database with the MySQL server that I can create, modify and delete data from a database.
The problem I encounter now is that I want to see my program with Adobe AIR (virtual machine). At the display that does not pose a problem. The problem is that air can not reach the database server is located in the MySQ. the error message displayed is as follows:
"Error : client.Error.MessageSend - Channel.connect.failed error NetConnection.Call.Failled : HTTP: Status 404:url:'http://xxx.swf/xxx/messagebroker/amf' - Send failed"
Thank you kindly explain to me why I obtain this error? and why do I get to work with the browser but not with AIR? and do work well with AIR application "Client - Server"?
I await your answers or comments with pleasure
It would be best to have some service on the server-side to serve as a facade to database operations. Thus:
you will work with a limited interface from your flex client
you won't need to store DB credentials on the client (this is security flaw - anyone can connect to your database and drop anything)
you won't need special firewall permissions (or mysql port configurations) for your clients - most servers don't allow external parties to connect to port 3306
You can use BlazeDS for that, or you can create your own solution, if the case is simple enough (I actually didn't like the way BlazeDS handles stuff when I had to make this choice a while ago)
The exception you are getting is actually in the AMF broker messaging rather than any of the other technologies. Check whether the URL shown in the message really returns 404.
If you are getting a 404 error then your BlazeDS servlet is not running. Make sure you didn't get any errors when you started Tomcat.