Posts tagged Java

Developing and deploying Java Embedding activity in BPEL 2.0 in SOA Suite 11g calling a custom Java Class that has dependencies on 3rd party libraries

Java Embedded activity can call a custom Java class that relies on 3rd party Java libraries. This means that a lot of existing functionality from the Java open source community is at the disposal of the BPEL developer. This article shows a simple example of developing and deploying a BPEL process that uses Java Embedded Activity that calls a custom Java Class that uses Apache HttpClient to make Http POST calls. The article demonstrates how to develop the BPEL process, the Java Embedded activity, Java Class and how to deploy the SOA Composite application. It also presents the results of running the composite application.

Read the rest of this entry »

Create simple Java application to post JSON message to CometD Bayeux Channel using Apache HttpClient and Maven style NetBeans project

The objective discussed in this article is to post messages to a CometD Bayeux Channel with a standalone Java Class – without dependencies on CometD. For example to control from Java the Slideshow introduced in the synchronized Slideshow demo application created using CometD (see previous articles Push based synchronized Slideshow demo application implemented using CometD and jQuery running on Tomcat and Publishing to CometD Bayeux Channel from inside the Oracle Database – PL/SQL based push to CometD Web Client ).

This article describes the creation of a simple Java Class leveraging Apache HttpClient to post HTTP requests (JSON messages) to a CometD Bayeux Channel. The main point is to show working code with the lest dependencies, not an optimal program (it is far from optimal). The article demonstrates how NetBeans and Maven conspire here to make the task as simple as possible. The Maven support in NetBeans allows me to simply create a new Maven style project of (arche)type Java Application.

Read the rest of this entry »

Using custom functions in EL expressions in JSF 1.x

EL expressions are one of the main driving forces for JavaServer Faces. Most dynamic characteristics of pages and widgets are governed by EL expressions. In JSF 1.x, there are some limitations for EL expressions that can at times be a little frustrating. One of the limitations is the fact that no custom functions or operators can be used in EL expressions. Quite some time ago, I wrote this article – http://technology.amis.nl/blog/622/how-to-call-methods-from-el-expressions-pre-jsp-20-trick-for-jsps-with-jstl – to demonstrate a trick for using a Map interface implementation to access custom functionality from EL expression after all.

However, things can even be better. Rather than jumping through the somewhat elaborate hoops of implementing the Map and consructing complex EL expressions, there are two other approaches. One is to create a custom EL Resolver can configure it in the faces-config.xml. Another is discussed in this article. It involves registering custom Java methods as eligible for use in EL expressions. And that really makes life a lot easier. It allows us to create EL expressions such as:

#{cel:concat (cel:upper( bean.property), cel:max(bean2.property, bean3.property), cel:avg(bean4.list))}

or

#{cel:substr(bean.property, 1, 5)}

Read the rest of this entry »

Retrieve song lyrics in Java using Screenscraping with JSoup

Last year I wrote about JSoup, a Java library that helps with screenscraping: Screenscraping from Java using jsoup – effective data gathering from websites (http://technology.amis.nl/blog/13121/screenscraping-from-java-using-jsoup-effective-data-gathering-from-websites). Last month I had another opportunity for using JSoup, this time to gather song lyrics for the songs on a CD. The context in this case was the internal SOA for Java Professionals training program at AMIS. The students did an assignment to complete the second block in this three-piece program. Their assignment required them to implement a Web Service that produced the CD Booklet for a certain CD – returned as PDF document with illustration, song titles and song lyrics. One of the resources we made available to the students was a Java Class that returned song lyrics. It was their challenge to integrate this class in a proper way in their application (be it PL/SQL, SOA Suite 11g or OSB based).

The LyricsGatherer is easily constructed using JSoup and the website http://www.songlyrics.com/ (that suffers from periodic and unfortunate loss of service) :

Image

Read the rest of this entry »

Stand-alone Java Client for jWebSocket Server – communicating from Java Client to Web Clients and vice versa over WebSockets

In a previous article, I have discussed the open source jWebSocket Server and a simple installation and configuration (http://technology.amis.nl/blog/14940/first-steps-with-jwebsocket-open-source-java-framework-for-websockets-installation-and-running-samples). Subsequently, I have shown the implementation of a web client for a synchronized Slideshow application, where WebSocket communication is used to perform Client 2 Client push (http://technology.amis.nl/blog/14949/push-based-synchronized-slideshow-web-application-implemented-using-websockets-and-jwebsocket-server-the-open-source-java-websocket-server). In a third article I have explained how jWebSocket server can be integrated with a Java application that can start the server and interact with it (http://technology.amis.nl/blog/14973/implementing-a-java-server-side-component-for-jwebsocket-server-for-websocket-interaction-with-web-clients). Finally in this article I demonstrate how a stand alone Java Client can connect to a ‘remote’ jWebSocket server and open WebSocket interactions with it.

The functionality realized in this article is a simple Java application that listens to slide selection events as pushed from the clients to the WebSocket and that also pushes slide change instructions over WebSockets to the clients. After starting the jWebSocket server and opening one or more clients, running the Java Application created in this article will guide all clients through a sequence of slides.

Image

and a few seconds later:

Image

Read the rest of this entry »

Implementing a Java Server Side component for jWebSocket Server for WebSocket interaction with Web Clients

In a previous post – http://technology.amis.nl/blog/14949/push-based-synchronized-slideshow-web-application-implemented-using-websockets-and-jwebsocket-server-the-open-source-java-websocket-server – I discussed the implementation of the synchronized slideshow application using Web (HTML/JavaScript) clients and jWebSocket as websocket server. In an earlier article, I described the same for the Kaazing WebSocket server – http://technology.amis.nl/blog/14777/push-based-synchronized-slideshow-web-application-implemented-using-websockets-and-kaazing-websocket-gateway – and both stories are (fortunately) fairly similar. In the Kaazing article I also described a Java based Server Side ‘client’ or ‘WebSocket interaction partner’. In the jWebSocket article, that part was missing and in this article I will rectify that.

This article will describe how a Java application can integrate with jWebSocket server – in fact: start the server from within the Java code -and subsequently register listeners that intercept WebSocket communication from other interaction partners such as Web clients. The Java application can also send messages to specific clients or broadcast to all clients. This article will merely scratch the service by describing how a simple Java application interacting in this way with jWebSocket server can be created in NetBeans 7.

Finding the information to achieve this was not very easy by the way. And finding out how a stand alone Java application can connect to a stand alone (separately running) jWebSocket server is still slightly beyond my reach.

Read the rest of this entry »

SOA Suite File Adapter Pre and Post processing using Valves and Pipelines

A quick note on the notion of valves and pipelines that can be configured in File (and FTP) Adapter Services and References (inbound and outbound) to perform file pre- and post processing on the files before they enter the composite application proper as XML or after they have left the composite application, turned from XML to their native format and before they are written out to file.

Valves can easily be created – in a way that reminds me of Servlet Filters – and the pipeline that can be configured with a chain of valves is also quite similar to a filter chain. A valve is custom Java Class that implements one or two specific interfaces. This class is packaged in a JAR file that is added to the classpath of the SOA Suite: the valve becomes part of the generic SOA Suite infrastructure, to be used potentially by multiple composite applications – not necessarily by just a single composite. Note however that use of a valve is configured in the File Adapter binding in every composite application that wants to leverage it.

Valves can be used for several operations. Some examples on the inbound end are:

  • filter files: only let through files or lines that are relevant
  • split files: let through structured data and write to grid or temp storage the associated attachments
  • pre-transform: convert binary (Word, PDF) to plain text or JSON to XML or CSV
  • security/validation: perform check on contents and decide whether to let through or not
  • throttle: slow down processing or wait for a toke to become available
  • decrypt, correct/enrich or unzip files
  • archive files in a more specific way than the file system copy currently supported by the file adapter

For outbound post-processing, a similar list could be composed.

Currently valves are not supported by JMS or Database Adapter – only for file and ftp. I have an inkling that this may change in the fairly near future, though this is only guesswork.

Note: it feels to me that some of the things valves can do regarding file and ftp adapter bindings, we can do through custom web service policies for web service and http binding – message pre- and post processing for inbound and outbound bindings respectively.

Read the rest of this entry »

(The slides from) Don’t Call us, We’ll Push you – on Cross Tier Push Architecture (JavaOne 2011)

I just completed my Birds of a Feather session at JavaOne 2011 about Push in an enterprise application architecture. Over 150 attendees were in the audience, many of them asking questions afterwards. It felt like it went well.

The slides for this session are below. I will post source code for the demos at some later stage.

OOW 2011 – What’s New, Improved and Coming in Oracle Application Development

20111003-110403.jpg

Currently at Tom Kyte’s session regarding topics new, improved or coming in Oracle Application Development. Tom told about the history APEX has gone thru and the current setup with the APEX Listener and even the “PL/SQL Gateway” was mentioned. I always have to laugh a bit because this last one touches the XDB Protocol Server which can do way more then only this PL/SQL extension for APEX which has been embedded in this XDB Protocol Server framework. There is a APEX book out there that touches a bit the possibilities of the framework, one of the reasons I will promote and explain it a bit more during conferences like UKOUG, because I think its a shame that people don’t know its full potential. Anyway. Tom stressed once again that APEX is a serious environment regarding the huge websites out there based on APEX supporting 1000th of user sessions. Also it nowadays had a better debug support (4.1) and use / support for ROWID, improved data upload and calendar wizard support and redesigned websheets in APEX 4.1.

Read the rest of this entry »

Fuzzy comparing (Dutch) person names with Java

Currently I’m working on a project and one ‘little’ functionality is to find a person from a list of which his name is most similar to an inputname. It’s not a big deal or a major thing, so we didn’t want to use search frameworks or other kind of systems. Googling on the internet I found some nice little coding to do fuzzy compares [ref 1]. I just changed it a bit to meet my requirements regarding person names, especially for Dutch person names.
Read the rest of this entry »