OC Expert Search – Mit Big Data den richtigen Experten finden

In einer Firma zu jedem Thema stets den richtigen Kopf zu finden, der einem damit weiterhelfen kann oder bereits Erfahrung gesammelt hat ist nicht immer leicht. Gerade für sehr innovative, neue oder aber auch exotische Themen gleicht dies der Suche nach der Nadel im Heuhaufen. Auch wir bei OPITZ CONSULTING sind mit diesem Problem konfrontiert, dass wir für die Herausforderungen der Kunden stets den richtigen Experten zur Hand haben möchten. Diesen zu finden erweist sich jedoch bei der Vielzahl an Themen oft schwierig und das Pflegen von Skill-Datenbanken ist in dem sehr schnelllebigen IT-Business mühseelig.

Ende letzten Jahres gingen wir diese Herausforderung mit einem neuen Ansatz an, weg von einem Ansatz Wissen durch Menschen zu strukturieren hin zu einem Ansatz jegliche Form von Daten zu nutzen, um daraus die gewüschten Informationen zu extrahieren. Wir gingen von der Voraussetzung aus, dass jemand der alle Daten innerhalb des OPITZ CONSULTING Intranets – Wissensdatenbanken, Foren, Blogs, Verträge, Profile, Projektberichte und -reports, Vertriebliche Dokumente, Fachartikel, etc. – und unserer extern genutzten Systemen wie Twitter oder unserem CattleCrew Blog lesen würde zu jedem Begriff, egal ob Kundenname, Methodik, Plattform oder Technologie, beurteilen könnte wer aus unserer Firma sich mit diesem Thema zumindest am meisten beschäftigt bzw. hierzu den aktivsten Austausch hat. Dies führte uns zu der Zielsetzung eine Maschine in die Lage zu versetzen verschiedenst strukturierte Daten zu verstehen und mit Personen in Korrelation zu setzen, um anschließend daraus abzuleiten wer mit welchen Themen wie viel Erfahrung gesammelt und sich tiefgehend damit beschäftigt hat und diese Informationen jedermann über eine intuitive Suchapplikmation zugänglich zu machen. Einen Anwendungsausschnitt der derzeit im Test befindlichen Applikation ist in folgendem Screenshot zu sehen:

OC Expert Search - Suche

Suche nach Big Data in OC Expert Search

Weiterlesen

Veröffentlicht unter Big Data, German | Verschlagwortet mit , , , | Hinterlasse einen Kommentar

Oracle Business Intelligence und Highcharts – ein starkes Paar

Zwei aktuelle Themen im Reporting-Umfeld sind Visual Business Intelligence und Big-Data-Visualisierung. Bei dem einen geht es um die optimale und zielgruppengerechte Informationsdarstellung und bei dem anderen um die grafische Aufbereitung von Zusammenhängen und Mustern. Visual Business Intelligence hat vor allem durch Success@Hichert an Bedeutung gewonnen. Leider ist kaum ein BI-Tool in der Lage, die Anforderungen von Prof. Hichert umzusetzen, da die Visualisierungsmöglichkeiten zwar vielfältig, aber oft zu statisch sind.

Parallel entwickeln sich Bibliotheken (oft auf JavaScript-Basis) wie D3 oder Highcharts, die neuartige und dynamische Visualisierungen versprechen. Aus diesem Grund hat OPITZ CONSULTING einen Prototypen gebaut, bei dem die Oracle BI Suite die Highcharts-Bibliothek für die Visualisierung verwendet. Somit werden völlig neue Darstellungsformen möglich.

Beispiel 1 – Abweichung des monatlichen Umsatzes im Vergleich zum Vormonat

Besonderheit: 0-Skala ist mittig, positive Werte gehen nach rechts und negative nach links, zweifarbige Darstellung der Balken abhängig von ihrer Ausrichtung

Chart1

Abweichung des monatlichen Umsatzes im Vergleich zum Vormonat

Beispiel 2 – Darstellung des Umsatzes zweier Produktgruppen im Jahresverlauf

Besonderheit: Die Linien verlaufen in Bereichen (im Hintergrund erkennbar), die signalisieren, ob der Umsatz klein, mittel oder groß ist. Fachlich vielleicht nicht gerade super, aber uns ist kein besseres Beispiel eingefallen (wink) 

Chart2

Darstellung des Umsatzes zweier Produktgruppen im Jahresverlauf

Beispiel 3 – Umsatzspanne einer Produktgruppe im Jahresverlauf

Besonderheit: Hier wird die Verteilung der Umsätze (min/max und Spanne) im Jahresverlauf dargestellt. Es ist erkennbar, wo die Spanne besonders groß ist, wo das Maximus besonders hoch ist und wie sich die zeitliche Verteilung darstellt.

Chart3

Umsatzspanne einer Produktgruppe im Jahresverlauf

Beispiel 4 – Heatmap: Umsatzverteilung nach Zeit und Produktgruppe
Besonderheit: Es wird der Quartalsumsatz einer Produktgruppe dargestellt. Je dunkler, desto höher. Somit sind Häufungen optisch gut erkennbar (z. B. gute Umsätze in Q5/2010 und Q6/2010 über alle Produktgruppen hinweg).

Heatmap: Umsatzverteilung nach Zeit und Produktgruppe

Heatmap: Umsatzverteilung nach Zeit und Produktgruppe

Technische Umsetzung

Um diese Visualisierungen nutzen zu können, muss die sogenannte “Narrative View” verwendet werden. Diese gliedert sich in die 3 Bereiche Prefix, Narrative und Postfix.

Narrative View

Narrative View in Oracle BI

Im Prefix-Abschnitt muss die JavaScript-Bibliothek eingebunden werden:

<!DOCTYPE html>
<html>

<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
<script
src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script src="http://code.highcharts.com/highcharts.js"></script>
<script src="http://code.highcharts.com/highcharts-more.js"></script>
</head>

<body>
<div id="container" style="width: 100%; height: 500px;"></div>
<script>
var cat = [];
var ser = [];
var revenue = [];

Im Narrativebereich werden nun die im Code verwendeten Arrays cat und revenue dynamisch mit Hilfe des OBIEE-Eigenen Befehls @ gefühlt. Dieser ermöglicht einen Zugriff auf die Datenwerte. @2 liefert die Daten der 2. Spalte, @3 der Dritten usw.

Das ganze sieht dann wie folgt aus.

cat.push('@2');
revenue.push(@3)

Zu guter Letzt muss der Bereich Postfix mit dem Rest des Codes befüllt werden (siehe hierzu auch die Highcharts-Dokumentataion)

ser.push({
name : 'Delta zum durchschnittl. monatl. Umsatz',
data : revenue
});
// Define the scalar for the yAxis   
var MaxValue = Math.abs(Math.max.apply(null, revenue));
var MinValue = Math.abs(Math.min.apply(null, revenue));
if (MaxValue < MinValue) {
MaxValue = MinValue;
};
$(function() {
$(document)
.ready(
function() {
    $('#container')
            .highcharts(
                    {
                        chart : {
                            type : 'bar'
                        },
                        title : {
                            text : 'Delta zum durchschnittl. monatl. Umsatz in Prozent'
                        },
                        xAxis : [ {
                            categories : cat
                        //  reversed: false,
                        } ],
                        yAxis : {
                            stackLabels : {
                                enabled : true,
                                formatter : function() {
                                    var stackItem = this;
                                    var allStacks = stackItem.axis.stacks;
                                    for ( var key in allStacks) {
                                        if (allStacks[key][stackItem.x] == stackItem) {
                                            var oppositeKey = stackItem.isNegative ? key
                                                    .slice(1)
                                                    : '-'
                                                            + key;
                                            var oppositeItem = allStacks[oppositeKey][stackItem.x];
                                            if (oppositeItem === undefined) {
                                                return Highcharts
                                                        .numberFormat(stackItem.total);
                                            } else {
                                                var sum = stackItem.total
                                                        + oppositeItem.total;
                                                if (stackItem.isNegative
                                                        ^ sum > 0) {
                                                    return Highcharts
                                                            .numberFormat(sum);
                                                }
                                            }
                                        }
                                    }
                                },
                            },
                            title : {
                                text : null
                            },
                            labels : {
                                formatter : function() {
                                    return this.value
                                            + '%';
                                }
                            },
                            min : -1 * (MaxValue),
                            max : MaxValue
                        },
                        plotOptions : {
                            series : {
                                stacking : 'normal',
                                negativeColor : '#E02525'
                            },
                            bar : {
                                color : '#25E054',
                            }
                        },
                        tooltip : {
                            formatter : function() {
                                return '<b>'
                                        + this.series.name
                                        + ', für '
                                        + this.point.category
                                        + '</b><br/>'
                                        + 'Abweichung: '
                                        + this.point.y
                                        + ' %';
                            }
                        },
                        series : ser
                    });
});
});
</script>
</body>
</html>

Fazit

Javascript-Bibliotheken ermöglichen es, bisher unmögliche Visualisierungen in BI-Tools nachzurüsten. Gerade unter Visual-BI- und Big-Data-Aspekten ist dies sehr interessant.

Einige Bibliotheken sind frei, andere lizenzpflichtig für kommerzielle Zwecke (aber bezahlbar). Einige sind sehr aufwändig zu integrieren und zu verstehen (wie D3), andere sind eingängig und relativ schnell angewendet (wie Highcharts).

Veröffentlicht unter Analytics, Oracle Analytics | Hinterlasse einen Kommentar

New ACM book: Thriving on adaptability

Keith Swenson published his new book on ACM titled “Thriving on Adaptability”. Find details here: futstrat.com/books/ThrivingOnAdaptability.php  

image001-712782

We are very proud that we were able to contribute a whole chapter to this book:

Ontology-based ACM – The Need for Truly Adaptive Systems

Jürgen Kress, Clemens Utschig-Utschig, Hajo Normann, Torsten Winterberg

After seven months of traveling Curiosity lands on Mars. The engineers in NASA mission control are excited to start scientific research. These scientists have a special challenge; the Mars rover is so far away and the signal takes so long, that they need to rely on automation in order to maintain control in the wildest scenarios. There are many decisions that must be made on a daily, and even on a minute-to-minute basis. Involving the scientist in every possible decision, given the round trip time to consult and answer, would slow the research to – literally – a crawl. The scientists who operate the rover are knowledge workers. Just like knowledge workers in a business setting, they must figure out how to accomplish goals, as they uncover new information that affects their goals. The automation that they use built into Curiosity is very much like the business processes that businesses use to achieve their goals: the process works fine as long as the situation matches what was expected. But what happens to a business process when confronted with something unexpected? This chapter takes us on an exploration of how to adapt to the unexpected–including a Little Green Man–using the Mars Curiosity as an entertaining, but highly enlightening example.

Veröffentlicht unter Uncategorized | Hinterlasse einen Kommentar

DOAG 2014 Konferenz: IT-Sicherheit und OFM: Eine Herkulesaufgabe?

Es gab am 20. Juni in Nürnberg den DOAG 2014 Konferenz. Mein Kollege Frank Burkhardt und ich haben dort einen Vortrag über „IT-Sicherheit und OFM: Eine Herkulesaufgabe?“. Hier finden Sie unser Abstract und unsere Präsentation:
Die Anforderungen, die heute an IT-Sicherheitsexperten gestellt werden, erinnern mitunter an die scheinbar unlösbaren Aufgaben des Herkules in der griechischen Sage. Doch nicht jeder Security-Spezialist ist ein IT-Muskelmann. Und allein die traditionellen IT-Sicherheitsansätze und Maßnahmen reichen nicht aus, um neue technische aber auch organisatorische Fragen zu beantworten. Welche Lösungsansätze bietet Oracle aus diesem Dilemma? Nach einer kurzen Einführung in die Problematik stellen die Referenten die Security-Konzepte von Oracle vor und richten danach einen besonderen Fokus auf Oracle WebLogic Server und Oracle Plattform Security Services (OPSS).
Diese Themen stehen dabei Mittelpunkt:
– Herausforderungen der IT-Sicherheit in weltweit vernetzten Systeme
– IT-Sicherheitsarchitektur und der Ansatz von Oracle
– Oracle Fusion Middleware und Bausteine der Sicherheitstechnologie von Oracle: WLS, OAM, OID, OVD, WebGate
Sichere Systeme: Best Practice und Erfahrungsberichte zu Authentication, Authorization, Single-Sign-On (SSO), Secure Socket Layer (SSL) und Security Assertion Markup Language (SAML)
Link zu unserer Präsentation:

https://thecattlecrew.files.wordpress.com/2015/01/it-security_doag_20141120.pdf

Veröffentlicht unter Architecture, Conference, German, Oracle FMW, Oracle IDM, Weblogic Server | Verschlagwortet mit | Hinterlasse einen Kommentar

SAP Design Studio – Bericht-Bericht-Schnittstelle (RRI) und Open Document

Ab Version 1.4 wird die Bericht-Bericht-Schnittstelle (Report-Report-Interface) nun auch im Design Studio unterstützt.

Die Bericht-Bericht-Schnittstelle wird im SAP BW gepflegt und steuert Absprünge zwischen einer Quelle (BEx Query) zu einem Zielobjekt.

Beim Design Studio werden zwei Arten der Weitergabe unterschieden:

  1. Absprung mit automatischer Weiter­gabe der Filter an eine Zielquery (nur Design Studio).
  2. Absprung in andere Zieldokumente (z.B. Crystal Reports, Design Studio) über eine Web-Adresse analog Open Document.

Die hinterlegten Sprungziele können dann über das Kontextmenu abgerufen werden.

1. Absprung über Zielquery

Bei dieser Variante werden analog zu Analysis Office in der Bericht-Bericht-Schnittstelle zu einer Query eine oder mehrere Zielqueries hinterlegt.

Als Sprungziel wird innerhalb der BI Platform nur eine Design Studio Applikation unterstützt, die fest hinterlegt werden muss. Diese Applikation darf nur eine DataSource besitzen und sollte so angelegt werden, dass die gewünschte Query beim Start geladen wird.

Die Filter und der Name der entsprechenden Query werden von der Bericht-Bericht-Schnittstelle auto­matisch mitgegeben.

Der Absprung erfolgt über das Kontextmenü, wobei automatisch die Merkmale der ausgewählten Zeile als Filter mitgegeben werden.

2. Absprung über Webadresse

Bei dieser Variante wird als Webadresse ein Open Document-Link hinterlegt.

Die Filter müssen hier im Gegensatz zur ersten Variante in den Zuordnungsdetails einzeln fest hinterlegt werden.

Der Absprung erfolgt über das Kontextmenü, wobei die in der Bericht-Bericht-Schnittstelle fest hinterlegten Filter der ausgewählten Zeile als Filter mitgegeben werden.

Als Empfänger über eine Webadresse können folgende Tools fungieren:

Crystal Reports, Web Intelligence, Analysis Office, Analysis OLAP, Design Studio

Veröffentlicht unter Analytics, SAP Design Studio | Hinterlasse einen Kommentar

Oracle Service Bus 12c: Retrieving Username from HTTP Basic authentication token

Using HTTP Basic authentication is a common mechanism to check user’s authenticity, when creating REST-enabled API’s to prevent applications and it’s functionalities from unathorized access. Service Bus 12c (SB) supports this authentication method by using a OWSM security policy. The corresponding authentication information are transported in the HTTP header.
In some cases, for example when only user-relevant data should be determined when querying information from Enterprise Information Systems (EIS), the information about the current user that are available  in the HTTP header might be helpful. As an alternative the username information could be transported in the payload of each Service Call, e.g. as a query parameter.
In the following I will describe, which steps are needed to extract the username from the HTTP header, so transporting the same information twice, in the header and the payload, can be avoided.
Starting point is a simple HelloWorld service, which expects a valid HTTP Basic authentication token. In the example a corresponding OWSM policy is used to realize this. The service as such has an operation “greet” that takes no parameter. As result, it returns a personalized salution based on the passed authorization header.
Enabling_HTTP_Basic_Auth_on_Proxies

Enabling HTTP basic authentication on proxy services

In the Proxy Service configuration it has to be ensured that the option “Get all headers” is enabled in the transport configuration. Unfortunately setting this option is not sufficient, because SB removes Security information from the HTTP header before entering the processing pipeline. To force SB to keep the authentication information the additional java option “-Dcom.bea.wli.sb.transports.http.GetHttpAuthorizationHeaderAllowed=true” has to be added in setDomainEnv.sh. A server restart is needed to enable the updated JVM settings.
Parsing out the username from the HTTP basic authentication token is done by a Java Callout that call a static method from a Java class that does the needed “magic”.
public class UsernameExtractor {

  public static String extract(String pHttpAuthenticationToken) {

    final String authenticationTokenWithoutBasicPrefix = pHttpAuthenticationToken
      .substring(6);

    final String base64DecodedAuthorizationString = new String(DatatypeConverter
      .parseBase64Binary(authenticationTokenWithoutBasicPrefix));

    return base64DecodedAuthorizationString.split(":")[0];
  }
}
The Java class from above is packaged in form of a JAR file, which is added to the corresponding HelloWorld project. The invocation is done by using a Java callout during message processing in the pipeline.
Parsing_username_from_HTTP_Basic_auth_token

Parsing out the username from HTTP header using a Java Callout

After deploying the HelloWorld SB service to Oracle Service Bus 12c, the service can be tested using SOAP UI.
SoapUI_Test_HelloWorldService

Resulting salutation after service invocation

As it can be seen from the result, the service works as expected. The resulting salutation contains the username passed with the corresponding authentication information in the HTTP header.
Veröffentlicht unter Oracle FMW, Oracle Service Bus, SOA, Weblogic Server | Verschlagwortet mit , | Hinterlasse einen Kommentar

Test-driven development using the Oracle SOA Suite

As in all software projects, quality assurance with thorough testing in integration projects is a key factor to success. Test-driven development focuses exactly on this aspect: unit and integration testing of integration elements must be done as soon as possible. The tests used in these phases must also be reproducible so that they can be run automatically in case of changes in the integration logic, thus guaranteeing that no unintended changes are made.

Oracle SOA/BPM Suite is a powerful tool suite for integration. This article shows how test-driven development can be done with the Oracle tooling. Integration elements built with Oracle SOA/BPM Suite are SCA composites made up of several components. Since mainly the integration layer is concerned, there is quite often heavy usage of external web services, database adapters, etc. The composites also usually have an inbound interface the invocation of which is the starting point of the integration logic.

As it can be seen from above, the key to testing SCA composites is to define an inbound message and assert the data found in various other messages during the integration logic. Some easy scenarios can instantly be identified. XSLT transformations within the composites can be unit-tested without the complete logic itself for example. Likewise, end2end testing is also easily done – at least for a web service interface – thus assuring at least that the result is what we expected. The problem is that for end2end testing, the correct functionality of back-end systems is a prerequisite. If the back-end functionality is developed parallel to the integration logic, end2end testing is far away from test-driven development.

There is, however, a possibility offered by the tooling itself: the composite test framework. With the help of this framework incoming messages can be defined and for each wire (a connection between two components or – more importantly for our purpose – a connection between a component and an external service/adapter) assertions and emulates can be specified. That means if a service is not yet available, its responses can be emulated within Oracle SOA/BPM Suite. Furthermore, outbound service requests and responses for services already available can be checked for correctness with the help of assertions. Multiple test scenarios can be defined and deployed with the composite itself. After deployment, the defined test cases can be started and the test results examined. There are also Ant scripts available so that a nightly test of all integration elements can theoretically be integrated into an appropriate continuous integration run. More information on the composite test framework can be found here for example.

This framework is, however, not completely adequate for real test-driven development. As stated before, assertions and emulates are defined on the wires – meaning that the wires (which are defined as part of the integration logic development) are required first before tests can be created. In case of reorganization of the integration logic, wires are often dropped and recreated. Dropping a wire means that all assertions and emulates in all tests are dropped too. Complex XML structures can be externalized so that they are still available in this case but the assertions and emulates need to be defined again after the wire is recreated. Another difficulty are the static emulates and assertions required by the tooling. In case of loops for example where a component calls an external service multiple times, defining an emulation of the service means that the services always return the same response which is not always satisfactory.

Although the composite test framework itself is not extensible, a lot of functionality is available through the help of the public APIs. With the help of these APIs and some Java knowledge an own test framework not having these limitations can be constructed. The goal is to have a single framework supporting all test aspects of the integration layer. Unit testing of XSLT artifacts can be easily integrated into this Java framework. Following functionality is an excerpt of what is possible by using the SOA Suite APIs:

  • Rerouting external references to a mock service implemented in the same framework (in Java) including changing references to standard web services so that database or file adapters can also be mocked for example
  • Human task handling (finishing the human task with a predefined outcome and predefined values)
  • BPMN queries (traversal of BPMN nodes, checking of payload at given nodes)

The APIs are offering a lot more, so that the custom framework can easily support multiple test aspects required by the projects. Additionally, by extending the framework with the usage of the OSB APIs, integration elements implemented with OSB can also be tested in the same way. We are using the possibility of a custom test framework in almost all of our integration projects. To see the custom framework in action, take a look at our session held at the JAX conference (in German language).
Test creation can be truly done parallel to the integration logic development with the help of this custom framework. Only some SCA data (composite name and revision) and component data (service reference name for mocking, human task component name for human task mocking) is required to bind the assertion or emulation (mock services) defined in Java code to the correct location in the composite. Since everything is implemented in Java, dynamic mocks are not a problem at all. The possibilities that can be found in JUnit can also be easily applied to the test cases. A reorganization of the integration logic is not a problem because the test cases only reference logical names – these do not change often and even in case of a change during the refactoring, the tests can be easily modified to use the correct logical names. Since we are using standard JUnit tests, an integration into a continuous integration environment is also common practice.

We have seen that although the built-in testing possibilities of the SOA/BPM Suite are not completely adequate for a truly test-driven approach, the rich APIs provided by the tool suite makes the creation of a custom test framework possible. This custom framework is capable of supporting the thorough testing requirements of integration elements.

Veröffentlicht unter Oracle BPM Suite, Oracle SOA Suite | Ein Kommentar