GithubHelp home page GithubHelp logo

xml-broker's Introduction

xml-broker -- XML-based Event-Broker
------------------------------------

This project implements a event-driven, service-oriented example-project. Services will register for certain events at a centralized broker. Upon recieving events, the broker will forward these events to all matching services via HTTP/Post-Request.

Inside this repository you will find an implementation of the broker and collection of some example projects to get started with programming clients and services that may register with the broker.

Since this project has been ported to Maven, building should be quite easy. Just download a current Maven version from http://maven.apache.org/download.html (>=3.0.0), extract the files to your favorite directory and add Mavens bin/ directory to your PATH.

Navigate to the root-directory of your local copy of the project and run "mvn package". All sub-projects will be compiled to jar / war files located inside the corresponding <sub-project>/target/ directory. 

For Eclipse "Maven Integration for Eclipse" (m2e) and "Maven Integration for WTP" should both be installed to make Eclipse Maven aware. After Eclipse is setup proparly, add the projects by using "Import..." --> "Maven" --> "Existing Maven Projects". Enter the path to your local copy of this project and you should see all subprojects listed.

   Have fun =)

xml-broker's People

Contributors

nnexai avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar

Forkers

kaiuwehorn

xml-broker's Issues

text/plain in get-Requests to Apps

There seems to be a problem with some of the dynamic web-pages generated from the example apps. In most cases a request will have the type text/plain (which will not be rendered correctly by browsers) even though setContentType("text/html") is used.

Dynamic service registration

Allow services to register and unregister for events dynamically (while the servlet is running).

Possible ways:

  • inline -- register and unregister are events the broker itself subscribed for
  • restful -- use html put / delete

Restful is preferred since this way other services may not subscribe to the registration events and thus gain information about other services.

XPath

Need a secure way to filter Expressions. (Could be misused to load external XML files etc..)

Error in XPathFilter -> deliver (should proxy recieved domtree)

Add ant-files

Write build-scripts using ant for all contained subprojects

CDATA

The Broker should not remove CDATA-Tags from given xml document.. this will most certainly lead to parse-errors at the services if not handled. A passable way to fix this is to use MultiXMLRootFilter.

Also the XPathFilter needs to be fixed.. it should also recieve the String representation of the given Document. The query should only contain a filter-expression meaning for "//event[@id=1]" it should be written as "@id=1" returning the original string if the query would return an element (this should be a bit faster, too ^^)

Mulithreading

Currently Post-Requests are handled as following:
/-> Deliver1
Req1 --> Parser --> Filter --> ... --> HttpDelivery --> Deliver2
x-> Deliver3
Req2 --> Parser --> Filter --> ... --> HttpDelivery --> Deliver4
-> Deliver5

This way every Stage needs to be fully thread-safe. One way to loosen this Requirement would be to multiplex events into a single stream (BlockingLinkedList?). Some Benchmarks are needed to decide for the right design

Persistend HTTP-Connections

Add a pool for connections that should be held open for a long time. This should be helpful for high-throughput.

During registration a service should be able to give a hint, if it supports streaming xml-events and allows the connection to stay open for a (long) period of time.

e.g <HTTPService event="log" url="http://..." streaming="true"/>

Fix NettyHTTPDeliverer

Delivery through netty is broken unreliable. The Speed-Test shows that under high pressure netty will drop some events (most likely this has to do with wrong synchronisation in the delivery class!).

Statistics

Need a way to measure throughput etc... Currently a combination of a Stream-injection tool (starts the brokers parser directly without the overhead of sending the file beforehand) and a service that collects all messages is used to generate a simple graph + table... need a way to automate this progress...

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.