• Flux News
  • Flux Blogs
  • David
  • Eric
  • Arul
  • Brian
  • Flux Website

Flux Blogs

Statistics: Blogs: 5 Blog Posts: 64   1 2 3 ... 5 Previous Next
Items per page
0

A maintenance release for Flux 7.7 is now available and includes four improvements and several bug fixes.

Flux 7.7.6 downloads are available here:
my.fluxcorp.com (for Flux customers)

The latest version of Flux is available from:
www.fluxcorp.com/download (for Flux evaluators)

The following maintenance changes were made in this Flux maintenance release, version 7.7.6.

Improvements:

  1. (FLUX-463) Made the default engine bind name for the Desktop Designer configurable via a Java properties file.
  2. (FLUX-371) Added support for loading resources from JAR files located in the flow chart's listener class path.
  3. (FLUX-492) Added a configuration option to remove the "remember me" check box when signing into an engine in the Operations Console.
Bug Fixes:
  1. (FLUX-461) If the file_transfer_debug configuration option was set to true and a Secure FTP host was used, the expected debug output would not be generated. Fixed.
  2. (FLUX-430) If a File Not Exist Trigger criteria include used variable substitution and the file limit was set to a value greater than zero, a ClassCastException would occur. Fixed.
  3. (FLUX-457) Transferring files using a Secure FTP host did not work correctly with some Secure FTP servers. Fixed.
  4. (FLUX-454) Cluster networking utilized the User Datagram Protocol (UDP) when configured to use the Transfer Control Protocol (TCP). Fixed.
  5. (FLUX-203) If a flow chart was resubmitted to the engine soon after completing execution, an EngineException would occur. Fixed.
  6. (FLUX-495) Agents registered to an engine would fail to re-register if the engine was restarted. Fixed.
  7. (FLUX-343) The SQLException was not logged when Flux obtained an invalid database connection. Fixed.
  8. (FLUX-496) When running Flux against Sun JDK 6, cluster networking did not work correctly and the log displayed the error message "Unable to initalize the Flux network cache". Fixed.
  9. (FLUX-486) If an agent encountered an error while running a Process Action, a NullPointerException could be thrown. Fixed.

0 Comments 0 References Permalink
0

Message level security focuses on securing the end to end communication within a single security context. It could be implemented using a combination of techniques such as message integrity, security tokens to verify messages, and message confidentiality.

Using this approach guarantees users that the communication between the client applications and the Flux engine and agent are secured and messages can never be tampered during transmission. This also ensures only a Flux client can handshake with the Flux engine or agent.

Flux implements message level security in 8.0 release for all communication between the remote engine and clients, including agents. In traditional Flux application level security, the operations on an engine is typically secured using JAAS modules (login/logout needs to be performed on every invocation on the engine), supported in both local and remote Flux engines.

Flux uses UsernameToken profile as defined in the OASIS WS-Security specification "Username Token Profile 1.1"
for engine-agent and engine-client communications. This specification addresses how a web service consumer can supply a UsernameToken as a means of identifying the requestor by "username", and using a password to authenticate that identity to the web service producer.

With this enhancement, agents can now securely communicate with remote engines and engines can securely communicate with agents. Flux clients communicating with the remote engines will be secured too. This opens up multiple options for users needing to secure remote engines either using application level security or message level security or both.

In essence, message-level security prevents clients from accessing remote engine or agent operations anonymously without providing a valid UsernameToken.

0 Comments 0 References Permalink
0

Ode to Code in david @ flux

Posted by david 05-Aug-2008

Simple code
That works and is small
Is my favorite algorithm
Of them all

0 Comments 0 References Permalink
0

SOA (Service Oriented Architecture) is an acronym that has been gaining in popularity over the past few years:
http://www.google.com/trends?q=soa

We're not a company to jump on the acronym bandwagon. One good reason is that there are simply too many acronyms to support, even if you are only playing in the Java playground. That's usually made quite apparent to me in the morning when I visit TheServerSide.com.

Flux has been the backbone of Service Oriented Architectures. It's nothing new. You won't find a slew of marketing acronyms scattered throughout our website though. Why not?

We focus on solutions rather than technology. This is largely driven by the KISS principle. I believe that adopting and supporting every popular Java acronym would make Flux more complex rather than easier to use.

So, how can Flux be the backbone of a Service Oriented Architecture? It's possible with the current Flux release. A lot of the enhancements coming in future releases build on the ability of the Flux engine to be the glue of a Service Oriented Architecture.

Web services can be easily invoked from a Flux flow chart, or job. The “Web Service Action” is there to meet this need. Simply point the Web Service Action to a WSDL, pass data from the flow chart to the web service, obtain the result from the web service, and store the result in the flow chart.

Being able to invoke web services (whether they are internal to your enterprise or hosted by a business partner) is one piece of the SOA puzzle. The piece is to wait for a web service to be invoked and perform a task. This is somewhat trivial. Just create a web service using your web service framework of choice (I prefer JAX-WS and Apache CXF myself) and call Flux APIs from the web service.

What Flux APIs would you likely call with from the web service? There are usually two options that satisfy most requirements. One is to simply call Engine.put() to schedule a Flux job when the web service is invoked. The other option is to publish a message to a Flux flow chart, which will then process the message from the web service.

Here's the meat of the example. Just wrap this in a web service and start designing your SOA flow charts:

// Get a Flux Factory and Engine Helper
Factory factory = Factory.makeInstance();
EngineHelper engineHelper = factory.makeEngineHelper();
 
// Connect to an RMI Flux engine
Engine engine = factory.lookupRmiEngine("localhost");
 
// Get a messaging helper and create a new MessageDefinition
MessagingHelper messagingHelper = engineHelper.makeMessagingHelper();
MessageDefinition messageDefinition = messagingHelper.makeMessageDefinition();
 
// Add some data to the message
Map messageProperties = <b>new</b> HashMap();
messageProperties.put("JOB_NAME", "/orderForecast");
messageProperties.put("CLIENT_ID", "112");
messageProperties.put("USER_ID", "9999");
messageDefinition.setMessageProperties(messageProperties);
 
// Publish the message to the Flux engine
MessageAdministrator msgAdmin = engine.getMessageAdministrator();
msgAdmin.publish(messageDefinition, "ws_publisher");

This code snippet simply publishes a message to a Flux engine. A flow chart would be designed to begin with a Flux "Message Trigger" and process the incoming message when the web service is invoked. You would likely obtain data from whoever invoked the web service and put that data into the message before publishing it. I've just used static data for illustration purposes.

This ought to be enough ideas to get you started on your own Flux-based SOA solution. I've started on some development work that could make all of this much easier, without requiring any code. If I am successful, then you will be able to satisfy all of your SOA requirements by using simple a drag-n-drop and fill in the boxes interface.

Let me know if you are interested and I can create a working example to illustrate these concepts. It's simple yet very powerful stuff!

0 Comments 0 References Permalink
0

Do you need some help? in brian @ flux

Posted by brian 31-Jul-2008

Often, you need a little help. Projects pile up, deadlines loom and you still need a life. If you feel that your team could use some quick training, consulting on your Flux app, or you just need some general Java expertise; think about Flux Professional Services.

We offer online, on and off site services that can be tailored to meet your specific needs. The link above shows what is available and the associated costs. If you any questions or wish to discuss what this might do for you, please contact us.

0 Comments 0 References Permalink
1

R.I.P. flux.Factory in david @ flux

Posted by david 26-Jun-2008

Eight years ago, I wrote the first version of Flux's Factory class. It was the starting point for Flux users. Flux users would first make an instance of Flux's Factory class and then use it to create other objects involved in Flux programming.

Yesterday, I deleted the Factory class from the upcoming Flux 8.0 code base.

rip.jpg

Back in 2000, using the factory design pattern was the natural choice for Flux. These days, it's become clear that Flux needs to use simple classes instead of the factory design pattern.

It felt good to simplify. :)

1 Comments 0 References Permalink
0

Recent Flux Customer: Enfusion

0 Comments 0 References Permalink
0

On a fairly regular basis, we're asked how Flux is different than one of the large, enterprise-class job schedulers like AutoSys and CONTROL-M. The short answer is: apples and oranges.

contrast and compare.png

Is someone on your team doing Java development?

Answer Yes: an embeddable Java job scheduler is the lightweight solution I would use.

Answer No: a stand-alone job scheduler server like AutoSys, CONTROL-M, etc is the heavyweight solution I would use.

I've written a short technical article that addresses this topic. I hope you find it useful if you're sorting out whether you should use an embeddable, lightweight Java job scheduler like Flux or a stand-alone, heavyweight job scheduler server like CONTROL-M or AutoSys.

What's your opinion? Leave a comment or call me on skype at flux.david

0 Comments 0 References Permalink
0

REST Action in Flux 8.0 in arul @ flux

Posted by arul 19-Jun-2008

REST is an architectural style in which software components are modeled as resources accessed over the web which are identified by unique URIs. These resources are traditionally accessed using HTTP. For example, the typical CRUD operations involve read (HTTP GET), create (HTTP POST), update (HTTP PUT), delete (HTTP DELETE). All these operations can be modeled using REST interface. There are some popular web search APIs which are modeled as REST interfaces. One such example is Yahoo Search API (http://developer.yahoo.com/search/rest.html).

Flux 8.0 will ship with a built-in REST Action. The REST Action will allow you to invoke REST services from flow charts and use the result, or response, from the REST service throughout subsequence actions in the flow chart.

The REST service URL is followed by the actual query parameters, which take the form argument=value. Multiple parameters are separated by an ampersand (&). Here is how the REST Action can be used with in a flow chart in Flux 8.0.

Engine engine = new Engine();

FlowChart job = new FlowChart("REST Action Example");

// Create the Rest Action
RestAction restAction = job.makeRestAction("REST GET Action");

// Specify the URL the rest action is to use.
restAction.setUrl("http://search.yahooapis.com/WebSearchService/V1/webSearch");

// Specify the action type.
restAction.setActionType("get");

// Specify the arguments to pass to the method.
Properties inputParams = new Properties();
inputParams.put("appid", "YahooDemo");
inputParams.put("query", "rest");
inputParams.put("results", "2");

restAction.setInputParams(inputParams);

// Create a Console Action to display the result from the Web service
ConsoleAction consoleAction = job.makeConsoleAction("Display REST Action Result");

// Variable susbtitution is used to access the RESULT flow context variable
consoleAction.setMessage("The result from the REST service is: ${result}\n");

// Make the REST Action flow into the Console Action
restAction.addFlow(consoleAction);

// Schedule the job for immediate execution.
String jobId = engine.put(job);

// Start the engine.
engine.start();

// Give the engine a chance to run the job, up to 5 seconds.
engine.join(jobId, "+5s");

// Clean up the resources.
engine.dispose();

This program invokes the Yahoo Search API and the response is printed to the console.

If you have requirements to integrate a Flux application with a RESTful service, REST Action comes handy in providing this simple integration.

0 Comments 0 References Permalink
0

A maintenance release for Flux 7.7 is now available and includes four improvements and several bug fixes.

Flux 7.7.5 downloads are available here:
my.fluxcorp.com (for Flux customers)

The latest version of Flux is available from:
www.fluxcorp.com/download (for Flux evaluators)

The following maintenance changes were made in this Flux maintenance release, version 7.7.5.

Improvements:

  1. Improved file actions and triggers to allow periods in base directories.
  2. Added support for string-to-string maps in the Web-based Designer.
  3. Added support for Firefox 3 in the Web-based Designer.
  4. Added support for configuring the default project name and copyright string in the Desktop Designer.
Bug Fixes:
  1. A ClassCastException occurred when running a File Delete Action with an FTP host specified. Fixed.
  2. An exception occurred when attempting to search the reporting logs in the Operations Console. Fixed.
  3. An error occurred when attempting to save a flow chart to the local drive from the repository in the Operations Console. Fixed.
  4. Using the guided flow chart rescheduled in the Operations Console could cause an error. Fixed.
  5. A SQLException occurred when calling Engine.getLongestRuntime(). Fixed.
  6. The File Rename Action was not working properly when using a remote host with a file path specified for the file criteria target. Fixed.
  7. Flow charts containing string maps could not be saved from the desktop or Web-based Designer. Fixed.
  8. If a File Action used an FTP, SFTP, or FTPS host and the target file was already present, the source file would be copied to the base directory of the target host. Fixed.

0 Comments 0 References Permalink
0

Summertime is here! Unless, of course, you are one of our south of the equator customers or if you happen to be here in Billings, MT where the sun seems to have forgotten us. Now that winter is behind us, the creative juices can start to flow. Of course, we all have jobs so you need to get inspired, work out the details, and submit a plan by the time your Thursday planning meeting is scheduled. And remember, budget doesn't grow on trees, so keep your Inspiration cheap.

Where in the world are you going to find a new idea? You know, the one that doesn't cost too much? Why don't you try looking at some of the Flux features you aren't using.

demo_flowchart.png

Wow, even better, Inspiration that doesn't require a purchase order! With over 40 triggers and actions, Flux just might be able to solve a problem that has been lying there for a while now. If you are like most customers, you are only scratching the surface of what Flux could be doing for you.

If you are under the gun to come of with a flash of brilliance without spending any money. You can also take a quick peek at our Features Chart to see if there is something that you can use.

0 Comments 0 References Permalink
0

Recent Flux Customer: The Clearing House

0 Comments 0 References Permalink
0


Flux jobs are executed in a job tree. The job tree is similar to the concept of a file system where jobs (like files) are stored in namespaces (or folders). Each job has a namespace where it executes. All jobs execute underneath the root namespace and can execute in sub-namespaces.

For example, a Flux job that runs a monthly payroll report for a client may execute under the following namespace:

/client1/reports/payroll/monthly/Report1000

With many clients, you could easily have hundreds of reports to process. Using one job template, or flow chart, for all of the monthly payroll reports would be ideal. There will be some issues that we will need to address in the design of the job template to ensure we have a proper design to serve all of the clients.

Each client will have a different server (FTP, SFTP, etc.) where the report files are to be uploaded. We will need to support this somehow. There may be other variables between the monthly payroll reports for each client as well.

Flux has a built-in mechanism that can really assist us in satisfying the requirement of variable data between our jobs. This feature is called the "runtime configuration". You can store any Java object in the runtime configuration. String properties can be loaded from a standard Java properties or any property can be created using the Flux Java API.

Here's an example of a runtime configuration file:

/payrollReportDir=reports/payroll

/username=reports

/client1/reportServer=reports.client1.com

/client2/reportServer=reports.client2.com

/client3/reportServer=reports.client3.com

/client4/reportServer=reports.client4.com

There are five runtime configuration properties defined in this file. There is one defined at the root level and one property defined for each client (client1-4).


We can easily access these properties from our job using the Flux runtime variable substitution mechanism. For example, we can using ${runtime reportServer} as the server name in any File action or trigger. We can also use ${runtime payrollReportDir}. The runtime configuration tree will be searched for a matching property starting in the namespace where the job is executing. All jobs will upload reports to the “reports/payroll” directory as the reports user on the file server and any job running under /client1 will use the reports.client1.com server.


http://blogs.fluxcorp.com/servlet/JiveServlet/downloadImage/1039/reportServerCriteria.png
Runtime configuration properties allow you to have properties whose value changes based on where the job is executed. This feature allows you to build dynamic job templates that can simplify your enterprise jobs.

0 Comments 0 References Permalink
0

A maintenance release for Flux 7.5 is now available and includes one improvement and several bug fixes.

Flux 7.5.3 downloads are available here:
my.fluxcorp.com (for Flux customers)

The latest version of Flux is available from:
www.fluxcorp.com/download (for Flux evaluators)

The following maintenance changes were made in this Flux maintenance release, version 7.5.3.

Improvements:


  1. Flow charts names are now case-sensitive in order to reduce database deadlocks. WARNING: This could have a negative impact on your application. Please test and make appropriate changes.

Bug Fixes:


  1. The Flux engine could become blocked and cease processing jobs under a heavy load. Fixed.
  2. Confirming a Business Process Trigger on a stopped engine would result in a NullPointerException. Fixed.
  3. All engines running in the same JVM logged to the same log file. Fixed.
  4. Using an unsupported XML parser would display XML errors to the engine console. Fixed.
  5. Icons indicating the state of engines in the engines page of the Operations Console were sometimes incorrect. Fixed.
  6. Clicking a flow chart in the flow charts page of the Operations Console
    could cause a JavaScript error when using a secure engine. Fixed.
  7. A File Move Action using multiple Simple File Target Criteria would only move files to the first target criteria. Fixed.
  8. Running a flow chart with a checkpoint (a flow that publishes messages)
    could cause a message iterator to close prematurely. Fixed.
  9. JavaScript exceptions occurred when embedding the Web-based Designer as a JavaScript widget. Fixed.
  10. A NullPointerException could occur when removing a running sub flow chart. Fixed.
  11. A ClassCastException occurred when editing action variables in the Web-based Designer. Fixed.
  12. An EngineException occurred when running the software developer's security example. Fixed.
  13. Regular expression special characters were not allowed inside variable values when using substitution. Fixed.
  14. A NullPointerException occurred when attempting to access the
    Web-based Workflow Designer of the Operations Console on an engine
    configured to use external security. Fixed.
  15. A NullPointerException occurred when accessing the security page of the
    Operations Console on an engine configured to use external security.
    Fixed.
  16. When using a UNC file host, regular expression excludes were not working properly. Fixed.
  17. An exception occurred when using a Process Action in a sub flow chart with an agent pool defined. Fixed.

0 Comments 0 References Permalink
0

A maintenance release for Flux 7.7 is now available and includes several bug fixes.

Flux 7.7.4 downloads are available here:
my.fluxcorp.com (for Flux customers)

The latest version of Flux is available from:
www.fluxcorp.com/download (for Flux evaluators)

The following maintenance changes were made in this Flux maintenance release, version 7.7.4.

Bug Fixes:


  1. In the Operations Console, applying a filter to the Flow Charts page did not work properly. Fixed.
  2. Running a flow chart with a checkpoint (a flow that publishes messages) could cause a message iterator to close prematurely. Fixed.
  3. Agents and Engines with cluster networking enabled would not dispose correctly. Fixed.
  4. Regular expression special characters were not allowed inside variable values when using substitution. Fixed.
  5. A Class Cast Exception would occur if a flow chart containing a runtime data map was exported to the engine. Fixed.

0 References Permalink
1 2 3 ... 5 Previous Next