First version 2.0.0 release.
git-svn-id: https://brutex.net/svn/xservices/trunk@203 e7e49efb-446e-492e-b9ec-fcafc1997a86master
parent
d37d23b253
commit
adcefa1bba
|
@ -91,10 +91,6 @@ dependencies {
|
|||
|
||||
implementation "org.quartz-scheduler:quartz:2.3.2"
|
||||
|
||||
//implementation "org.apache.logging.log4j:log4j-core:2.20.0"
|
||||
//implementation "org.apache.logging.log4j:log4j-web:2.20.0"
|
||||
//implementation "org.apache.logging.log4j:log4j-1.2-api:2.20.0"
|
||||
//implementation "org.apache.logging.log4j:log4j-slf4j18-impl:2.18.0"
|
||||
implementation "org.slf4j:slf4j-api:2.0.7"
|
||||
|
||||
runtimeOnly "org.slf4j:slf4j-simple:2.0.7"
|
||||
|
|
|
@ -0,0 +1,354 @@
|
|||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.eclipse.org/alf/schema/EventBase/1"
|
||||
attributeFormDefault="unqualified" elementFormDefault="qualified"
|
||||
targetNamespace="http://www.eclipse.org/alf/schema/EventBase/1">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
Copyright Notice The material in this document is Copyright
|
||||
(c) Serena Software, Inc. and others, 2005, 2006, 2007 Terms and
|
||||
Conditions: The Eclipse Foundation makes available all
|
||||
content in this document ("Content"). Unless otherwise
|
||||
indicated below, the Content is provided to you under the
|
||||
terms and conditions of the Eclipse Public License Version
|
||||
1.0 ("EPL"). A copy of the EPL is available at
|
||||
http://www.eclipse.org/legal/epl-v10.html. For purposes of
|
||||
the EPL, "Program" will mean the Content. If you did not
|
||||
receive this Content directly from the Eclipse Foundation,
|
||||
the Content is being redistributed by another party
|
||||
("Redistributor") and different terms and conditions may
|
||||
apply to your use of any object code in the Content. Check
|
||||
the Redistributor's license that was provided with the
|
||||
Content. If you did not receive any such license, contact
|
||||
the Redistributor. Unless otherwise indicated below, the
|
||||
terms and conditions of the EPL still apply to the Content.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:complexType name="EventBaseType">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
EventBaseType is a container for that portion of an ALF
|
||||
Event that is generally set by the Tool that raises the
|
||||
event.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:sequence>
|
||||
<xs:element name="EventId" type="SourceEventIdType"/>
|
||||
<xs:element name="Timestamp" nillable="true" type="TimestampType"/>
|
||||
<xs:element name="EventType" type="EventTypeType"/>
|
||||
<xs:element name="ObjectType" type="ObjectTypeType"/>
|
||||
<xs:element name="ObjectId" type="ObjectIdType"/>
|
||||
<xs:element name="Source" type="SourceType"/>
|
||||
<xs:element name="User" type="CredentialsType"/>
|
||||
<xs:element minOccurs="0" name="EventControl" type="EmBaseType"/>
|
||||
<xs:element minOccurs="0" name="BaseExtension" type="BaseExtensionType"/>
|
||||
</xs:sequence>
|
||||
<xs:anyAttribute/>
|
||||
</xs:complexType>
|
||||
<xs:complexType name="EmBaseType">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
EventControlType is a container for that portion of an
|
||||
ALF Event that is generally set by the ALF EventManager.
|
||||
In some cases, ALF compliant tools may set some fields,
|
||||
in particular when the event is a result of an ALF
|
||||
service call to that tool from a ServiceFlow.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:sequence>
|
||||
<xs:element name="EmEventId" type="EventIdType"/>
|
||||
<xs:element name="EmTimestamp" type="TimestampType"/>
|
||||
<xs:element name="PrecedingEmEventId" type="EventIdType"/>
|
||||
<xs:element name="ApplicationName" type="ApplicationNameType"/>
|
||||
<xs:element name="EventMatchName" type="EventMatchNameType"/>
|
||||
<xs:element name="ServiceFlowName" type="ServiceFlowNameType"/>
|
||||
<xs:element name="ServiceFlowId" type="ServiceFlowIdType"/>
|
||||
<xs:element name="Callback" type="xs:boolean"/>
|
||||
<xs:element name="Environment" type="EnvironmentType"/>
|
||||
<xs:element name="EmUser" type="CredentialsType"/>
|
||||
<xs:element minOccurs="0" name="AttemptCount" type="xs:int"/>
|
||||
<xs:element minOccurs="0" name="EmExtension" type="EmExtensionType"/>
|
||||
</xs:sequence>
|
||||
<xs:anyAttribute/>
|
||||
</xs:complexType>
|
||||
<xs:simpleType name="SourceEventIdType">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
A id that uniquely identifies the Event instance at the source.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:maxLength value="36"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
<xs:simpleType name="EventIdType">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
A UUID that uniquely identifies the Event instance.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:maxLength value="36"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
<xs:simpleType name="ServiceFlowIdType">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
A UUID that uniquely identifies the ServiceFlow
|
||||
instance.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:maxLength value="36"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
<xs:simpleType name="TimestampType">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
The date and timestamp when the EventManager received
|
||||
the Event. This element may be left empty by the event
|
||||
emitter, in which case, the Event Manager will supply a
|
||||
value.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:restriction base="xs:dateTime"/>
|
||||
</xs:simpleType>
|
||||
<xs:simpleType name="EventTypeType">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
A string indicating the type of event. EventType
|
||||
designates the verb. That is what action happened to the
|
||||
Objects that triggered the event.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:restriction base="xs:string"/>
|
||||
</xs:simpleType>
|
||||
<xs:simpleType name="ObjectIdType">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
An ObjectId identifies the entity or relationship that
|
||||
changed within a tool. The identifier must be unique for
|
||||
a particular instance of the source tool. The format of
|
||||
this element will not be standardized by ALF. The
|
||||
primary purpose is to allow subsequent ServiceFlows to
|
||||
uniquely identify (and perhaps access) the object that
|
||||
triggered the event.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:restriction base="xs:string"/>
|
||||
</xs:simpleType>
|
||||
<xs:simpleType name="ObjectTypeType">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
The type of entity involved. Note that the word entity
|
||||
is taken in its broadest sense, referring to whatever
|
||||
artifact a tool was operating on. For example, for a
|
||||
data modeling tool, an E-R relationship is a type of
|
||||
entity (i.e., and ObjectType) to ALF.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:restriction base="xs:string"/>
|
||||
</xs:simpleType>
|
||||
<xs:complexType name="SourceType">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
A Source element is a container type that describes the
|
||||
source of the event. ProductCallbackURI is optional for
|
||||
tools that don't provide a listener to accept the
|
||||
callback from a tool or serviceflow at a later time.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:sequence>
|
||||
<xs:element name="Product" type="ProductType"/>
|
||||
<xs:element name="ProductVersion" type="ProductVersionType"/>
|
||||
<xs:element name="ProductInstance" type="ProductInstanceType"/>
|
||||
<xs:element minOccurs="0" name="ProductCallbackURI" type="ProductCallbackURIType"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
<xs:simpleType name="ProductType">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
A descriptive name for the tool (i.e., program) that
|
||||
emitted the Event. Note that this is a datatype for a
|
||||
Product element.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:restriction base="xs:string"/>
|
||||
</xs:simpleType>
|
||||
<xs:simpleType name="ProductCallbackURIType">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
The web service endpoint for tools that support
|
||||
callbacks from ServiceFlows for additional information.
|
||||
The element content is optional for transient tools that
|
||||
may not be running at a later time, and so cannot accept
|
||||
a callback. Constantly running (server) tools that
|
||||
support callbacks should supply a URI.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:restriction base="xs:anyURI"/>
|
||||
</xs:simpleType>
|
||||
<xs:simpleType name="ProductInstanceType">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
A unique string identifying the instance of the tool.
|
||||
This is useful when there may be multiple instances of a
|
||||
product working within an instance of ALF.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:restriction base="xs:string"/>
|
||||
</xs:simpleType>
|
||||
<xs:simpleType name="ProductVersionType">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
The release version of the product, such as 5.06
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:restriction base="xs:string"/>
|
||||
</xs:simpleType>
|
||||
<xs:complexType name="ALFSecurityType">
|
||||
<xs:sequence>
|
||||
<xs:element name="UsernameToken">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="Username" type="xs:string"/>
|
||||
<xs:element name="Password" type="xs:string"/>
|
||||
<xs:any maxOccurs="unbounded" minOccurs="0" processContents="lax"/>
|
||||
</xs:sequence>
|
||||
<xs:anyAttribute/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:any maxOccurs="unbounded" minOccurs="0" processContents="lax"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
<xs:complexType name="CredentialsType">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
A structure to hold security
|
||||
authentication-relevant data. If present the
|
||||
data within may be encrypted.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:sequence>
|
||||
<xs:element minOccurs="0" name="ALFSecurity" type="ALFSecurityType"/>
|
||||
<xs:any maxOccurs="unbounded" minOccurs="0" namespace="##other" processContents="lax"/>
|
||||
</xs:sequence>
|
||||
<xs:anyAttribute/>
|
||||
</xs:complexType>
|
||||
<xs:simpleType name="ApplicationNameType">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
The name of the ALF application to which this event
|
||||
belongs. Depending on the emitting tool, events may or
|
||||
may not be associated with an ALF application. If the
|
||||
emitting tool has the information available then it can
|
||||
provide the ALF ApplicationName as an additional
|
||||
information to distinguish the event.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:restriction base="xs:string"/>
|
||||
</xs:simpleType>
|
||||
<xs:simpleType name="EventMatchNameType">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
The name of the event match within the ALF Application
|
||||
that matches this event. This fields is set by the Event
|
||||
Manager when it dispatches the event.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:restriction base="xs:string"/>
|
||||
</xs:simpleType>
|
||||
<xs:simpleType name="ServiceFlowNameType">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
The name of the service flow withing the event match
|
||||
that matches this event. This field is set by the Event
|
||||
Manager when it dispatches the event.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:restriction base="xs:string"/>
|
||||
</xs:simpleType>
|
||||
<xs:simpleType name="EnvironmentType">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
The name of the environment in which this event is being
|
||||
raised. This element will be set by the ALF Event
|
||||
manager from its installation configuration.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:restriction base="xs:string"/>
|
||||
</xs:simpleType>
|
||||
<xs:simpleType name="ALFSchemaVersionType">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="1.0"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
<xs:complexType name="BaseExtensionType">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
Place holder type for future extensions of
|
||||
BaseExtensionType
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:sequence>
|
||||
<xs:any maxOccurs="unbounded" namespace="##targetNamespace" processContents="lax"/>
|
||||
</xs:sequence>
|
||||
<xs:anyAttribute/>
|
||||
</xs:complexType>
|
||||
<xs:complexType name="EmExtensionType">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
Place holder type for future extensions of EmBaseType
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:sequence>
|
||||
<xs:any maxOccurs="unbounded" namespace="##targetNamespace" processContents="lax"/>
|
||||
</xs:sequence>
|
||||
<xs:anyAttribute/>
|
||||
</xs:complexType>
|
||||
<xs:complexType name="DetailExtensionType">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
Place holder type for vocabulary based Event payload
|
||||
"details"
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:sequence>
|
||||
<xs:any maxOccurs="unbounded" namespace="##other" processContents="lax"/>
|
||||
</xs:sequence>
|
||||
<xs:anyAttribute/>
|
||||
</xs:complexType>
|
||||
<xs:complexType name="CustomExtensionType">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
Place holder type for custom Event payload "extensions"
|
||||
##other namespace is recommended but ##any is specified allowing more primitive sources
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:sequence>
|
||||
<xs:any maxOccurs="unbounded" namespace="##any" processContents="lax"/>
|
||||
</xs:sequence>
|
||||
<xs:anyAttribute/>
|
||||
</xs:complexType>
|
||||
<xs:complexType name="ALFEventType">
|
||||
<xs:sequence>
|
||||
<xs:element name="Base" type="EventBaseType"/>
|
||||
<xs:element minOccurs="0" name="Detail" type="DetailExtensionType"/>
|
||||
<xs:element minOccurs="0" name="Extension" type="CustomExtensionType"/>
|
||||
<xs:any maxOccurs="unbounded" minOccurs="0" namespace="##other" processContents="lax"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute default="1.0" name="version" type="ALFSchemaVersionType"/>
|
||||
</xs:complexType>
|
||||
<xs:complexType name="ALFEventResponseType">
|
||||
<xs:sequence>
|
||||
<xs:any maxOccurs="unbounded" minOccurs="0" processContents="lax"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
<xs:complexType name="ALFEventWithReplyResponseType">
|
||||
<xs:sequence>
|
||||
<xs:any maxOccurs="unbounded" minOccurs="0" processContents="lax"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
<!-- Element declaration for creating documents -->
|
||||
<xs:element name="ALFEventNoticeDoc" type="ALFEventType"/>
|
||||
|
||||
</xs:schema>
|
|
@ -0,0 +1,202 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<wsdl:definitions name="ALFEventManager" targetNamespace="http://www.eclipse.org/alf/schema/EventBase/1" xmlns="http://www.eclipse.org/alf/schema/EventBase/1" xmlns:evt="http://www.eclipse.org/alf/schema/EventBase/1" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:tns="http://www.eclipse.org/alf/schema/EventBase/1" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
|
||||
<wsdl:documentation>
|
||||
WARNING: PRELIMINARY VERSION SUBJECT TO CHANGE
|
||||
|
||||
Copyright Notice The material in this document is Copyright (c)
|
||||
Serena Software, Inc. and others, 2005, 2006, 2007, 2008 Terms and
|
||||
Conditions: The Eclipse Foundation makes available all content
|
||||
in this document ("Content"). Unless otherwise indicated below,
|
||||
the Content is provided to you under the terms and conditions of
|
||||
the Eclipse Public License Version 1.0 ("EPL"). A copy of the
|
||||
EPL is available at http://www.eclipse.org/legal/epl-v10.html.
|
||||
For purposes of the EPL, "Program" will mean the Content. If you
|
||||
did not receive this Content directly from the Eclipse
|
||||
Foundation, the Content is being redistributed by another party
|
||||
("Redistributor") and different terms and conditions may apply
|
||||
to your use of any object code in the Content. Check the
|
||||
Redistributor's license that was provided with the Content. If
|
||||
you did not receive any such license, contact the Redistributor.
|
||||
Unless otherwise indicated below, the terms and conditions of
|
||||
the EPL still apply to the Content.
|
||||
</wsdl:documentation>
|
||||
<wsdl:types>
|
||||
<xsd:schema elementFormDefault="qualified" targetNamespace="http://www.eclipse.org/alf/schema/EventBase/1" xmlns="http://www.eclipse.org/alf/schema/EventBase/1" xmlns:evt="http://www.eclipse.org/alf/schema/EventBase/1">
|
||||
<xsd:include schemaLocation="ALFEventBase_1.xsd"/>
|
||||
|
||||
<!-- Document Literal EventNotice service document elements -->
|
||||
|
||||
<xsd:element name="ALFEventNoticeDoc" type="evt:ALFEventType">
|
||||
</xsd:element>
|
||||
|
||||
<xsd:element name="ALFEventNoticeDocResponse" type="evt:ALFEventResponseType">
|
||||
</xsd:element>
|
||||
|
||||
<xsd:element name="ALFEventNoticeWithReplyDoc" type="evt:ALFEventType">
|
||||
</xsd:element>
|
||||
|
||||
<xsd:element name="ALFEventNoticeWithReplyDocResponse" type="evt:ALFEventWithReplyResponseType">
|
||||
</xsd:element>
|
||||
|
||||
|
||||
<!-- EventNoticeWithReply exceptions -->
|
||||
|
||||
<xsd:complexType name="NoEventActionMatchFaultType">
|
||||
<xsd:sequence>
|
||||
<xsd:any maxOccurs="unbounded" minOccurs="0"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
|
||||
<xsd:element name="NoEventActionMatchFault" type="evt:NoEventActionMatchFaultType">
|
||||
</xsd:element>
|
||||
|
||||
<xsd:complexType name="ServiceFlowNotAvailableFaultType">
|
||||
<xsd:sequence>
|
||||
<xsd:any maxOccurs="unbounded" minOccurs="0"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
|
||||
<xsd:element name="ServiceFlowNotAvailableFault" type="evt:ServiceFlowNotAvailableFaultType">
|
||||
</xsd:element>
|
||||
|
||||
<xsd:complexType name="ServiceFlowFaultType">
|
||||
<xsd:sequence>
|
||||
<xsd:any maxOccurs="unbounded" minOccurs="0"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
|
||||
<xsd:element name="ServiceFlowFault" type="evt:ServiceFlowFaultType">
|
||||
</xsd:element>
|
||||
|
||||
<xsd:complexType name="UnexpectedFaultType">
|
||||
<xsd:sequence>
|
||||
<xsd:any maxOccurs="unbounded" minOccurs="0"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
|
||||
<xsd:element name="UnexpectedFault" type="evt:UnexpectedFaultType">
|
||||
</xsd:element>
|
||||
|
||||
</xsd:schema>
|
||||
</wsdl:types>
|
||||
<wsdl:message name="EventNoticeWithReplyDocResponse">
|
||||
<wsdl:part name="EventNoticeWithReplyDocResponse" element="ALFEventNoticeWithReplyDocResponse">
|
||||
</wsdl:part>
|
||||
</wsdl:message>
|
||||
<wsdl:message name="EventNotice">
|
||||
<wsdl:part name="EventNotice" type="ALFEventType">
|
||||
</wsdl:part>
|
||||
</wsdl:message>
|
||||
<wsdl:message name="EventNoticeDocResponse">
|
||||
<wsdl:part name="EventNoticeDocResponse" element="ALFEventNoticeDocResponse">
|
||||
</wsdl:part>
|
||||
</wsdl:message>
|
||||
<wsdl:message name="EventNoticeWithReplyResponse">
|
||||
<wsdl:part name="EventNoticeWithReplyResponse" type="ALFEventWithReplyResponseType">
|
||||
</wsdl:part>
|
||||
</wsdl:message>
|
||||
|
||||
<wsdl:message name="EventNoticeDoc">
|
||||
<wsdl:part name="EventNoticeDoc" element="ALFEventNoticeDoc">
|
||||
</wsdl:part>
|
||||
</wsdl:message>
|
||||
|
||||
|
||||
<wsdl:message name="EventNoticeWithReplyDoc">
|
||||
<wsdl:part name="EventNoticeWithReplyDoc" element="ALFEventNoticeWithReplyDoc">
|
||||
</wsdl:part>
|
||||
</wsdl:message>
|
||||
<wsdl:message name="UnexpectedFault">
|
||||
<wsdl:part name="UnexpectedFault" element="UnexpectedFault">
|
||||
</wsdl:part>
|
||||
</wsdl:message>
|
||||
<wsdl:message name="EventNoticeResponse">
|
||||
<wsdl:part name="EventNoticeResponse" type="ALFEventResponseType">
|
||||
</wsdl:part>
|
||||
</wsdl:message>
|
||||
<wsdl:message name="NoEventActionMatchFault">
|
||||
<wsdl:part name="NoEventActionMatchFault" element="NoEventActionMatchFault">
|
||||
</wsdl:part>
|
||||
</wsdl:message>
|
||||
<wsdl:message name="ServiceFlowNotAvailableFault">
|
||||
<wsdl:part name="ServiceFlowNotAvailableFault" element="ServiceFlowNotAvailableFault">
|
||||
</wsdl:part>
|
||||
</wsdl:message>
|
||||
<wsdl:message name="ServiceFlowFault">
|
||||
<wsdl:part name="ServiceFlowFault" element="ServiceFlowFault">
|
||||
</wsdl:part>
|
||||
</wsdl:message>
|
||||
<wsdl:message name="EventNoticeWithReply">
|
||||
<wsdl:part name="EventNoticeWithReply" type="ALFEventType">
|
||||
</wsdl:part>
|
||||
</wsdl:message>
|
||||
<wsdl:portType name="ALFEventManagerDocLit">
|
||||
|
||||
<wsdl:operation name="EventNotice">
|
||||
<wsdl:input message="EventNoticeDoc" wsaw:Action="urn:EventNotice">
|
||||
</wsdl:input>
|
||||
<wsdl:output message="EventNoticeDocResponse" wsaw:Action="urn:EventNotice">
|
||||
</wsdl:output>
|
||||
<wsdl:fault name="UnexpectedFault" message="UnexpectedFault">
|
||||
</wsdl:fault>
|
||||
</wsdl:operation>
|
||||
|
||||
|
||||
<wsdl:operation name="EventNoticeWithReply">
|
||||
<wsdl:input message="EventNoticeWithReplyDoc" wsaw:Action="urn:EventNoticeWithReply">
|
||||
</wsdl:input>
|
||||
<wsdl:output message="EventNoticeWithReplyDocResponse" wsaw:Action="urn:EventNoticeWithReply">
|
||||
</wsdl:output>
|
||||
<wsdl:fault name="ServiceFlowNotAvailableFault" message="ServiceFlowNotAvailableFault">
|
||||
</wsdl:fault>
|
||||
<wsdl:fault name="ServiceFlowFault" message="ServiceFlowFault">
|
||||
</wsdl:fault>
|
||||
<wsdl:fault name="NoEventActionMatchFault" message="NoEventActionMatchFault">
|
||||
</wsdl:fault>
|
||||
<wsdl:fault name="UnexpectedFault" message="UnexpectedFault">
|
||||
</wsdl:fault>
|
||||
</wsdl:operation>
|
||||
</wsdl:portType>
|
||||
|
||||
<wsdl:binding name="ALFEventManagerDocLitSOAP" type="ALFEventManagerDocLit">
|
||||
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
|
||||
<wsdl:operation name="EventNotice">
|
||||
<soap:operation soapAction="urn:EventNotice" style="document"/>
|
||||
<wsdl:input>
|
||||
<soap:body use="literal"/>
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<soap:body use="literal"/>
|
||||
</wsdl:output>
|
||||
<wsdl:fault name="UnexpectedFault">
|
||||
<soap:fault name="UnexpectedFault" use="literal"/>
|
||||
</wsdl:fault>
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="EventNoticeWithReply">
|
||||
<soap:operation soapAction="urn:EventNoticeWithReply" style="document"/>
|
||||
<wsdl:input>
|
||||
<soap:body use="literal"/>
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<soap:body use="literal"/>
|
||||
</wsdl:output>
|
||||
<wsdl:fault name="ServiceFlowNotAvailableFault">
|
||||
<soap:fault name="ServiceFlowNotAvailableFault" use="literal"/>
|
||||
</wsdl:fault>
|
||||
<wsdl:fault name="ServiceFlowFault">
|
||||
<soap:fault name="ServiceFlowFault" use="literal"/>
|
||||
</wsdl:fault>
|
||||
<wsdl:fault name="NoEventActionMatchFault">
|
||||
<soap:fault name="NoEventActionMatchFault" use="literal"/>
|
||||
</wsdl:fault>
|
||||
<wsdl:fault name="UnexpectedFault">
|
||||
<soap:fault name="UnexpectedFault" use="literal"/>
|
||||
</wsdl:fault>
|
||||
</wsdl:operation>
|
||||
</wsdl:binding>
|
||||
<wsdl:service name="ALFEventManagerDocLit">
|
||||
<wsdl:port name="ALFEventManagerDocLitSOAP" binding="ALFEventManagerDocLitSOAP">
|
||||
<soap:address location="http://localhost:8085/eventmanager/services/ALFEventManagerDocLit/"/>
|
||||
</wsdl:port>
|
||||
</wsdl:service>
|
||||
</wsdl:definitions>
|
|
@ -1,10 +1,13 @@
|
|||
|
||||
package net.brutex.xservices.types.alfevent;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlAnyElement;
|
||||
import javax.xml.bind.annotation.XmlType;
|
||||
import org.w3c.dom.Element;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -17,7 +20,7 @@ import javax.xml.bind.annotation.XmlType;
|
|||
* <complexContent>
|
||||
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
|
||||
* <sequence>
|
||||
* <any minOccurs="0"/>
|
||||
* <any processContents='lax' maxOccurs="unbounded" minOccurs="0"/>
|
||||
* </sequence>
|
||||
* </restriction>
|
||||
* </complexContent>
|
||||
|
@ -33,30 +36,36 @@ import javax.xml.bind.annotation.XmlType;
|
|||
public class ALFEventResponseType {
|
||||
|
||||
@XmlAnyElement(lax = true)
|
||||
protected Object any;
|
||||
protected List<Object> any;
|
||||
|
||||
/**
|
||||
* Ruft den Wert der any-Eigenschaft ab.
|
||||
* Gets the value of the any property.
|
||||
*
|
||||
* @return
|
||||
* possible object is
|
||||
* <p>
|
||||
* This accessor method returns a reference to the live list,
|
||||
* not a snapshot. Therefore any modification you make to the
|
||||
* returned list will be present inside the JAXB object.
|
||||
* This is why there is not a <CODE>set</CODE> method for the any property.
|
||||
*
|
||||
* <p>
|
||||
* For example, to add a new item, do as follows:
|
||||
* <pre>
|
||||
* getAny().add(newItem);
|
||||
* </pre>
|
||||
*
|
||||
*
|
||||
* <p>
|
||||
* Objects of the following type(s) are allowed in the list
|
||||
* {@link Element }
|
||||
* {@link Object }
|
||||
*
|
||||
*
|
||||
*/
|
||||
public Object getAny() {
|
||||
return any;
|
||||
public List<Object> getAny() {
|
||||
if (any == null) {
|
||||
any = new ArrayList<Object>();
|
||||
}
|
||||
|
||||
/**
|
||||
* Legt den Wert der any-Eigenschaft fest.
|
||||
*
|
||||
* @param value
|
||||
* allowed object is
|
||||
* {@link Object }
|
||||
*
|
||||
*/
|
||||
public void setAny(Object value) {
|
||||
this.any = value;
|
||||
return this.any;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -145,8 +145,8 @@ public class ALFEventType {
|
|||
*
|
||||
* <p>
|
||||
* Objects of the following type(s) are allowed in the list
|
||||
* {@link Object }
|
||||
* {@link Element }
|
||||
* {@link Object }
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
|
|
@ -1,10 +1,13 @@
|
|||
|
||||
package net.brutex.xservices.types.alfevent;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlAnyElement;
|
||||
import javax.xml.bind.annotation.XmlType;
|
||||
import org.w3c.dom.Element;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -17,7 +20,7 @@ import javax.xml.bind.annotation.XmlType;
|
|||
* <complexContent>
|
||||
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
|
||||
* <sequence>
|
||||
* <any minOccurs="0"/>
|
||||
* <any processContents='lax' maxOccurs="unbounded" minOccurs="0"/>
|
||||
* </sequence>
|
||||
* </restriction>
|
||||
* </complexContent>
|
||||
|
@ -33,30 +36,36 @@ import javax.xml.bind.annotation.XmlType;
|
|||
public class ALFEventWithReplyResponseType {
|
||||
|
||||
@XmlAnyElement(lax = true)
|
||||
protected Object any;
|
||||
protected List<Object> any;
|
||||
|
||||
/**
|
||||
* Ruft den Wert der any-Eigenschaft ab.
|
||||
* Gets the value of the any property.
|
||||
*
|
||||
* @return
|
||||
* possible object is
|
||||
* <p>
|
||||
* This accessor method returns a reference to the live list,
|
||||
* not a snapshot. Therefore any modification you make to the
|
||||
* returned list will be present inside the JAXB object.
|
||||
* This is why there is not a <CODE>set</CODE> method for the any property.
|
||||
*
|
||||
* <p>
|
||||
* For example, to add a new item, do as follows:
|
||||
* <pre>
|
||||
* getAny().add(newItem);
|
||||
* </pre>
|
||||
*
|
||||
*
|
||||
* <p>
|
||||
* Objects of the following type(s) are allowed in the list
|
||||
* {@link Element }
|
||||
* {@link Object }
|
||||
*
|
||||
*
|
||||
*/
|
||||
public Object getAny() {
|
||||
return any;
|
||||
public List<Object> getAny() {
|
||||
if (any == null) {
|
||||
any = new ArrayList<Object>();
|
||||
}
|
||||
|
||||
/**
|
||||
* Legt den Wert der any-Eigenschaft fest.
|
||||
*
|
||||
* @param value
|
||||
* allowed object is
|
||||
* {@link Object }
|
||||
*
|
||||
*/
|
||||
public void setAny(Object value) {
|
||||
this.any = value;
|
||||
return this.any;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,255 @@
|
|||
|
||||
package net.brutex.xservices.types.alfevent;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlAnyAttribute;
|
||||
import javax.xml.bind.annotation.XmlAnyElement;
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlType;
|
||||
import javax.xml.namespace.QName;
|
||||
import org.w3c.dom.Element;
|
||||
|
||||
|
||||
/**
|
||||
* <p>Java-Klasse für ALFSecurityType complex type.
|
||||
*
|
||||
* <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
|
||||
*
|
||||
* <pre>
|
||||
* <complexType name="ALFSecurityType">
|
||||
* <complexContent>
|
||||
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
|
||||
* <sequence>
|
||||
* <element name="UsernameToken">
|
||||
* <complexType>
|
||||
* <complexContent>
|
||||
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
|
||||
* <sequence>
|
||||
* <element name="Username" type="{http://www.w3.org/2001/XMLSchema}string"/>
|
||||
* <element name="Password" type="{http://www.w3.org/2001/XMLSchema}string"/>
|
||||
* <any processContents='lax' maxOccurs="unbounded" minOccurs="0"/>
|
||||
* </sequence>
|
||||
* <anyAttribute/>
|
||||
* </restriction>
|
||||
* </complexContent>
|
||||
* </complexType>
|
||||
* </element>
|
||||
* <any processContents='lax' maxOccurs="unbounded" minOccurs="0"/>
|
||||
* </sequence>
|
||||
* </restriction>
|
||||
* </complexContent>
|
||||
* </complexType>
|
||||
* </pre>
|
||||
*
|
||||
*
|
||||
*/
|
||||
@XmlAccessorType(XmlAccessType.FIELD)
|
||||
@XmlType(name = "ALFSecurityType", namespace = "http://www.eclipse.org/alf/schema/EventBase/1", propOrder = {
|
||||
"usernameToken",
|
||||
"any"
|
||||
})
|
||||
public class ALFSecurityType {
|
||||
|
||||
@XmlElement(name = "UsernameToken", namespace = "http://www.eclipse.org/alf/schema/EventBase/1", required = true)
|
||||
protected ALFSecurityType.UsernameToken usernameToken;
|
||||
@XmlAnyElement(lax = true)
|
||||
protected List<Object> any;
|
||||
|
||||
/**
|
||||
* Ruft den Wert der usernameToken-Eigenschaft ab.
|
||||
*
|
||||
* @return
|
||||
* possible object is
|
||||
* {@link ALFSecurityType.UsernameToken }
|
||||
*
|
||||
*/
|
||||
public ALFSecurityType.UsernameToken getUsernameToken() {
|
||||
return usernameToken;
|
||||
}
|
||||
|
||||
/**
|
||||
* Legt den Wert der usernameToken-Eigenschaft fest.
|
||||
*
|
||||
* @param value
|
||||
* allowed object is
|
||||
* {@link ALFSecurityType.UsernameToken }
|
||||
*
|
||||
*/
|
||||
public void setUsernameToken(ALFSecurityType.UsernameToken value) {
|
||||
this.usernameToken = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the value of the any property.
|
||||
*
|
||||
* <p>
|
||||
* This accessor method returns a reference to the live list,
|
||||
* not a snapshot. Therefore any modification you make to the
|
||||
* returned list will be present inside the JAXB object.
|
||||
* This is why there is not a <CODE>set</CODE> method for the any property.
|
||||
*
|
||||
* <p>
|
||||
* For example, to add a new item, do as follows:
|
||||
* <pre>
|
||||
* getAny().add(newItem);
|
||||
* </pre>
|
||||
*
|
||||
*
|
||||
* <p>
|
||||
* Objects of the following type(s) are allowed in the list
|
||||
* {@link Element }
|
||||
* {@link Object }
|
||||
*
|
||||
*
|
||||
*/
|
||||
public List<Object> getAny() {
|
||||
if (any == null) {
|
||||
any = new ArrayList<Object>();
|
||||
}
|
||||
return this.any;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* <p>Java-Klasse für anonymous complex type.
|
||||
*
|
||||
* <p>Das folgende Schemafragment gibt den erwarteten Content an, der in dieser Klasse enthalten ist.
|
||||
*
|
||||
* <pre>
|
||||
* <complexType>
|
||||
* <complexContent>
|
||||
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
|
||||
* <sequence>
|
||||
* <element name="Username" type="{http://www.w3.org/2001/XMLSchema}string"/>
|
||||
* <element name="Password" type="{http://www.w3.org/2001/XMLSchema}string"/>
|
||||
* <any processContents='lax' maxOccurs="unbounded" minOccurs="0"/>
|
||||
* </sequence>
|
||||
* <anyAttribute/>
|
||||
* </restriction>
|
||||
* </complexContent>
|
||||
* </complexType>
|
||||
* </pre>
|
||||
*
|
||||
*
|
||||
*/
|
||||
@XmlAccessorType(XmlAccessType.FIELD)
|
||||
@XmlType(name = "", propOrder = {
|
||||
"username",
|
||||
"password",
|
||||
"any"
|
||||
})
|
||||
public static class UsernameToken {
|
||||
|
||||
@XmlElement(name = "Username", namespace = "http://www.eclipse.org/alf/schema/EventBase/1", required = true)
|
||||
protected String username;
|
||||
@XmlElement(name = "Password", namespace = "http://www.eclipse.org/alf/schema/EventBase/1", required = true)
|
||||
protected String password;
|
||||
@XmlAnyElement(lax = true)
|
||||
protected List<Object> any;
|
||||
@XmlAnyAttribute
|
||||
private Map<QName, String> otherAttributes = new HashMap<QName, String>();
|
||||
|
||||
/**
|
||||
* Ruft den Wert der username-Eigenschaft ab.
|
||||
*
|
||||
* @return
|
||||
* possible object is
|
||||
* {@link String }
|
||||
*
|
||||
*/
|
||||
public String getUsername() {
|
||||
return username;
|
||||
}
|
||||
|
||||
/**
|
||||
* Legt den Wert der username-Eigenschaft fest.
|
||||
*
|
||||
* @param value
|
||||
* allowed object is
|
||||
* {@link String }
|
||||
*
|
||||
*/
|
||||
public void setUsername(String value) {
|
||||
this.username = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Ruft den Wert der password-Eigenschaft ab.
|
||||
*
|
||||
* @return
|
||||
* possible object is
|
||||
* {@link String }
|
||||
*
|
||||
*/
|
||||
public String getPassword() {
|
||||
return password;
|
||||
}
|
||||
|
||||
/**
|
||||
* Legt den Wert der password-Eigenschaft fest.
|
||||
*
|
||||
* @param value
|
||||
* allowed object is
|
||||
* {@link String }
|
||||
*
|
||||
*/
|
||||
public void setPassword(String value) {
|
||||
this.password = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the value of the any property.
|
||||
*
|
||||
* <p>
|
||||
* This accessor method returns a reference to the live list,
|
||||
* not a snapshot. Therefore any modification you make to the
|
||||
* returned list will be present inside the JAXB object.
|
||||
* This is why there is not a <CODE>set</CODE> method for the any property.
|
||||
*
|
||||
* <p>
|
||||
* For example, to add a new item, do as follows:
|
||||
* <pre>
|
||||
* getAny().add(newItem);
|
||||
* </pre>
|
||||
*
|
||||
*
|
||||
* <p>
|
||||
* Objects of the following type(s) are allowed in the list
|
||||
* {@link Element }
|
||||
* {@link Object }
|
||||
*
|
||||
*
|
||||
*/
|
||||
public List<Object> getAny() {
|
||||
if (any == null) {
|
||||
any = new ArrayList<Object>();
|
||||
}
|
||||
return this.any;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a map that contains attributes that aren't bound to any typed property on this class.
|
||||
*
|
||||
* <p>
|
||||
* the map is keyed by the name of the attribute and
|
||||
* the value is the string value of the attribute.
|
||||
*
|
||||
* the map returned by this method is live, and you can add new attribute
|
||||
* by updating the map directly. Because of this design, there's no setter.
|
||||
*
|
||||
*
|
||||
* @return
|
||||
* always non-null
|
||||
*/
|
||||
public Map<QName, String> getOtherAttributes() {
|
||||
return otherAttributes;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -11,6 +11,7 @@ import javax.xml.bind.annotation.XmlAnyAttribute;
|
|||
import javax.xml.bind.annotation.XmlAnyElement;
|
||||
import javax.xml.bind.annotation.XmlType;
|
||||
import javax.xml.namespace.QName;
|
||||
import org.w3c.dom.Element;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -28,7 +29,7 @@ import javax.xml.namespace.QName;
|
|||
* <complexContent>
|
||||
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
|
||||
* <sequence>
|
||||
* <any namespace='targetnamespace' maxOccurs="unbounded"/>
|
||||
* <any processContents='lax' namespace='http://www.eclipse.org/alf/schema/EventBase/1' maxOccurs="unbounded"/>
|
||||
* </sequence>
|
||||
* <anyAttribute/>
|
||||
* </restriction>
|
||||
|
@ -67,6 +68,7 @@ public class BaseExtensionType {
|
|||
*
|
||||
* <p>
|
||||
* Objects of the following type(s) are allowed in the list
|
||||
* {@link Element }
|
||||
* {@link Object }
|
||||
*
|
||||
*
|
||||
|
|
|
@ -9,6 +9,7 @@ import javax.xml.bind.annotation.XmlAccessType;
|
|||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlAnyAttribute;
|
||||
import javax.xml.bind.annotation.XmlAnyElement;
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlType;
|
||||
import javax.xml.namespace.QName;
|
||||
import org.w3c.dom.Element;
|
||||
|
@ -16,8 +17,9 @@ import org.w3c.dom.Element;
|
|||
|
||||
/**
|
||||
*
|
||||
* A structure to hold security authentication-relevant data.
|
||||
* If present the data within may be encrypted.
|
||||
* A structure to hold security
|
||||
* authentication-relevant data. If present the
|
||||
* data within may be encrypted.
|
||||
*
|
||||
*
|
||||
* <p>Java-Klasse für CredentialsType complex type.
|
||||
|
@ -29,7 +31,8 @@ import org.w3c.dom.Element;
|
|||
* <complexContent>
|
||||
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
|
||||
* <sequence>
|
||||
* <any processContents='lax' maxOccurs="unbounded" minOccurs="0"/>
|
||||
* <element name="ALFSecurity" type="{http://www.eclipse.org/alf/schema/EventBase/1}ALFSecurityType" minOccurs="0"/>
|
||||
* <any processContents='lax' namespace='##other' maxOccurs="unbounded" minOccurs="0"/>
|
||||
* </sequence>
|
||||
* <anyAttribute/>
|
||||
* </restriction>
|
||||
|
@ -41,15 +44,42 @@ import org.w3c.dom.Element;
|
|||
*/
|
||||
@XmlAccessorType(XmlAccessType.FIELD)
|
||||
@XmlType(name = "CredentialsType", namespace = "http://www.eclipse.org/alf/schema/EventBase/1", propOrder = {
|
||||
"alfSecurity",
|
||||
"any"
|
||||
})
|
||||
public class CredentialsType {
|
||||
|
||||
@XmlElement(name = "ALFSecurity", namespace = "http://www.eclipse.org/alf/schema/EventBase/1")
|
||||
protected ALFSecurityType alfSecurity;
|
||||
@XmlAnyElement(lax = true)
|
||||
protected List<Object> any;
|
||||
@XmlAnyAttribute
|
||||
private Map<QName, String> otherAttributes = new HashMap<QName, String>();
|
||||
|
||||
/**
|
||||
* Ruft den Wert der alfSecurity-Eigenschaft ab.
|
||||
*
|
||||
* @return
|
||||
* possible object is
|
||||
* {@link ALFSecurityType }
|
||||
*
|
||||
*/
|
||||
public ALFSecurityType getALFSecurity() {
|
||||
return alfSecurity;
|
||||
}
|
||||
|
||||
/**
|
||||
* Legt den Wert der alfSecurity-Eigenschaft fest.
|
||||
*
|
||||
* @param value
|
||||
* allowed object is
|
||||
* {@link ALFSecurityType }
|
||||
*
|
||||
*/
|
||||
public void setALFSecurity(ALFSecurityType value) {
|
||||
this.alfSecurity = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the value of the any property.
|
||||
*
|
||||
|
@ -68,8 +98,8 @@ public class CredentialsType {
|
|||
*
|
||||
* <p>
|
||||
* Objects of the following type(s) are allowed in the list
|
||||
* {@link Object }
|
||||
* {@link Element }
|
||||
* {@link Object }
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
|
|
@ -17,6 +17,7 @@ import org.w3c.dom.Element;
|
|||
/**
|
||||
*
|
||||
* Place holder type for custom Event payload "extensions"
|
||||
* ##other namespace is recommended but ##any is specified allowing more primitive sources
|
||||
*
|
||||
*
|
||||
* <p>Java-Klasse für CustomExtensionType complex type.
|
||||
|
@ -28,7 +29,7 @@ import org.w3c.dom.Element;
|
|||
* <complexContent>
|
||||
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
|
||||
* <sequence>
|
||||
* <any processContents='lax' namespace='##other' maxOccurs="unbounded"/>
|
||||
* <any processContents='lax' maxOccurs="unbounded"/>
|
||||
* </sequence>
|
||||
* <anyAttribute/>
|
||||
* </restriction>
|
||||
|
@ -67,8 +68,8 @@ public class CustomExtensionType {
|
|||
*
|
||||
* <p>
|
||||
* Objects of the following type(s) are allowed in the list
|
||||
* {@link Object }
|
||||
* {@link Element }
|
||||
* {@link Object }
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
|
|
@ -16,7 +16,8 @@ import org.w3c.dom.Element;
|
|||
|
||||
/**
|
||||
*
|
||||
* Place holder type for vocabulary based Event payload "details"
|
||||
* Place holder type for vocabulary based Event payload
|
||||
* "details"
|
||||
*
|
||||
*
|
||||
* <p>Java-Klasse für DetailExtensionType complex type.
|
||||
|
@ -67,8 +68,8 @@ public class DetailExtensionType {
|
|||
*
|
||||
* <p>
|
||||
* Objects of the following type(s) are allowed in the list
|
||||
* {@link Object }
|
||||
* {@link Element }
|
||||
* {@link Object }
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
|
|
@ -31,7 +31,7 @@ import javax.xml.namespace.QName;
|
|||
* <complexContent>
|
||||
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
|
||||
* <sequence>
|
||||
* <element name="EmEventId" type="{http://www.w3.org/2001/XMLSchema}string"/>
|
||||
* <element name="EmEventId" type="{http://www.eclipse.org/alf/schema/EventBase/1}EventIdType"/>
|
||||
* <element name="EmTimestamp" type="{http://www.eclipse.org/alf/schema/EventBase/1}TimestampType"/>
|
||||
* <element name="PrecedingEmEventId" type="{http://www.eclipse.org/alf/schema/EventBase/1}EventIdType"/>
|
||||
* <element name="ApplicationName" type="{http://www.eclipse.org/alf/schema/EventBase/1}ApplicationNameType"/>
|
||||
|
@ -41,6 +41,7 @@ import javax.xml.namespace.QName;
|
|||
* <element name="Callback" type="{http://www.w3.org/2001/XMLSchema}boolean"/>
|
||||
* <element name="Environment" type="{http://www.eclipse.org/alf/schema/EventBase/1}EnvironmentType"/>
|
||||
* <element name="EmUser" type="{http://www.eclipse.org/alf/schema/EventBase/1}CredentialsType"/>
|
||||
* <element name="AttemptCount" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/>
|
||||
* <element name="EmExtension" type="{http://www.eclipse.org/alf/schema/EventBase/1}EmExtensionType" minOccurs="0"/>
|
||||
* </sequence>
|
||||
* <anyAttribute/>
|
||||
|
@ -63,6 +64,7 @@ import javax.xml.namespace.QName;
|
|||
"callback",
|
||||
"environment",
|
||||
"emUser",
|
||||
"attemptCount",
|
||||
"emExtension"
|
||||
})
|
||||
public class EmBaseType {
|
||||
|
@ -88,6 +90,8 @@ public class EmBaseType {
|
|||
protected String environment;
|
||||
@XmlElement(name = "EmUser", namespace = "http://www.eclipse.org/alf/schema/EventBase/1", required = true)
|
||||
protected CredentialsType emUser;
|
||||
@XmlElement(name = "AttemptCount", namespace = "http://www.eclipse.org/alf/schema/EventBase/1")
|
||||
protected Integer attemptCount;
|
||||
@XmlElement(name = "EmExtension", namespace = "http://www.eclipse.org/alf/schema/EventBase/1")
|
||||
protected EmExtensionType emExtension;
|
||||
@XmlAnyAttribute
|
||||
|
@ -325,6 +329,30 @@ public class EmBaseType {
|
|||
this.emUser = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Ruft den Wert der attemptCount-Eigenschaft ab.
|
||||
*
|
||||
* @return
|
||||
* possible object is
|
||||
* {@link Integer }
|
||||
*
|
||||
*/
|
||||
public Integer getAttemptCount() {
|
||||
return attemptCount;
|
||||
}
|
||||
|
||||
/**
|
||||
* Legt den Wert der attemptCount-Eigenschaft fest.
|
||||
*
|
||||
* @param value
|
||||
* allowed object is
|
||||
* {@link Integer }
|
||||
*
|
||||
*/
|
||||
public void setAttemptCount(Integer value) {
|
||||
this.attemptCount = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Ruft den Wert der emExtension-Eigenschaft ab.
|
||||
*
|
||||
|
|
|
@ -11,6 +11,7 @@ import javax.xml.bind.annotation.XmlAnyAttribute;
|
|||
import javax.xml.bind.annotation.XmlAnyElement;
|
||||
import javax.xml.bind.annotation.XmlType;
|
||||
import javax.xml.namespace.QName;
|
||||
import org.w3c.dom.Element;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -27,7 +28,7 @@ import javax.xml.namespace.QName;
|
|||
* <complexContent>
|
||||
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
|
||||
* <sequence>
|
||||
* <any namespace='targetnamespace' maxOccurs="unbounded"/>
|
||||
* <any processContents='lax' namespace='http://www.eclipse.org/alf/schema/EventBase/1' maxOccurs="unbounded"/>
|
||||
* </sequence>
|
||||
* <anyAttribute/>
|
||||
* </restriction>
|
||||
|
@ -66,6 +67,7 @@ public class EmExtensionType {
|
|||
*
|
||||
* <p>
|
||||
* Objects of the following type(s) are allowed in the list
|
||||
* {@link Element }
|
||||
* {@link Object }
|
||||
*
|
||||
*
|
||||
|
|
|
@ -29,7 +29,7 @@ import javax.xml.namespace.QName;
|
|||
* <complexContent>
|
||||
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
|
||||
* <sequence>
|
||||
* <element name="EventId" type="{http://www.eclipse.org/alf/schema/EventBase/1}EventIdType"/>
|
||||
* <element name="EventId" type="{http://www.eclipse.org/alf/schema/EventBase/1}SourceEventIdType"/>
|
||||
* <element name="Timestamp" type="{http://www.eclipse.org/alf/schema/EventBase/1}TimestampType"/>
|
||||
* <element name="EventType" type="{http://www.eclipse.org/alf/schema/EventBase/1}EventTypeType"/>
|
||||
* <element name="ObjectType" type="{http://www.eclipse.org/alf/schema/EventBase/1}ObjectTypeType"/>
|
||||
|
@ -63,7 +63,7 @@ public class EventBaseType {
|
|||
|
||||
@XmlElement(name = "EventId", namespace = "http://www.eclipse.org/alf/schema/EventBase/1", required = true)
|
||||
protected String eventId;
|
||||
@XmlElement(name = "Timestamp", namespace = "http://www.eclipse.org/alf/schema/EventBase/1", required = true)
|
||||
@XmlElement(name = "Timestamp", namespace = "http://www.eclipse.org/alf/schema/EventBase/1", required = true, nillable = true)
|
||||
@XmlSchemaType(name = "dateTime")
|
||||
protected XMLGregorianCalendar timestamp;
|
||||
@XmlElement(name = "EventType", namespace = "http://www.eclipse.org/alf/schema/EventBase/1", required = true)
|
||||
|
|
|
@ -24,7 +24,7 @@ import javax.xml.namespace.QName;
|
|||
@XmlRegistry
|
||||
public class ObjectFactory {
|
||||
|
||||
private final static QName _EventNotice_QNAME = new QName("http://www.eclipse.org/alf/schema/EventBase/1", "EventNotice");
|
||||
private final static QName _ALFEventNoticeDoc_QNAME = new QName("http://www.eclipse.org/alf/schema/EventBase/1", "ALFEventNoticeDoc");
|
||||
|
||||
/**
|
||||
* Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: net.brutex.xservices.types.alfevent
|
||||
|
@ -33,6 +33,14 @@ public class ObjectFactory {
|
|||
public ObjectFactory() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Create an instance of {@link ALFSecurityType }
|
||||
*
|
||||
*/
|
||||
public ALFSecurityType createALFSecurityType() {
|
||||
return new ALFSecurityType();
|
||||
}
|
||||
|
||||
/**
|
||||
* Create an instance of {@link ALFEventType }
|
||||
*
|
||||
|
@ -121,13 +129,21 @@ public class ObjectFactory {
|
|||
return new EmBaseType();
|
||||
}
|
||||
|
||||
/**
|
||||
* Create an instance of {@link ALFSecurityType.UsernameToken }
|
||||
*
|
||||
*/
|
||||
public ALFSecurityType.UsernameToken createALFSecurityTypeUsernameToken() {
|
||||
return new ALFSecurityType.UsernameToken();
|
||||
}
|
||||
|
||||
/**
|
||||
* Create an instance of {@link JAXBElement }{@code <}{@link ALFEventType }{@code >}}
|
||||
*
|
||||
*/
|
||||
@XmlElementDecl(namespace = "http://www.eclipse.org/alf/schema/EventBase/1", name = "EventNotice")
|
||||
public JAXBElement<ALFEventType> createEventNotice(ALFEventType value) {
|
||||
return new JAXBElement<ALFEventType>(_EventNotice_QNAME, ALFEventType.class, null, value);
|
||||
@XmlElementDecl(namespace = "http://www.eclipse.org/alf/schema/EventBase/1", name = "ALFEventNoticeDoc")
|
||||
public JAXBElement<ALFEventType> createALFEventNoticeDoc(ALFEventType value) {
|
||||
return new JAXBElement<ALFEventType>(_ALFEventNoticeDoc_QNAME, ALFEventType.class, null, value);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -51,10 +51,11 @@ public class EventEmitter implements Job, InterruptableJob {
|
|||
* Move event table data to snapshot
|
||||
*/
|
||||
|
||||
Connection con = null;
|
||||
Connection fcon = null;
|
||||
try {
|
||||
con = pool.getConnection();
|
||||
|
||||
try( Connection con = pool.getConnection();
|
||||
Connection fcon = fpool.getConnection();
|
||||
) {
|
||||
|
||||
con.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
|
||||
con.setAutoCommit(false);
|
||||
Statement stmt = con.createStatement();
|
||||
|
@ -65,7 +66,7 @@ public class EventEmitter implements Job, InterruptableJob {
|
|||
con.commit(); //all events moved from tbl_events to tbl_events_snap at this point
|
||||
|
||||
|
||||
fcon = fpool.getConnection();
|
||||
|
||||
PreparedStatement errorPrepSql = fcon.prepareStatement(moveErrorSQL);
|
||||
|
||||
PreparedStatement del = con.prepareStatement(deleteSQL);
|
||||
|
@ -83,7 +84,8 @@ public class EventEmitter implements Job, InterruptableJob {
|
|||
long event_ts = rs.getLong(6);
|
||||
boolean bretry = false;
|
||||
|
||||
SimpleSoap ss = new SimpleSoap( url, id, IOUtils.toString(c.getCharacterStream()));
|
||||
//SimpleSoap ss = new SimpleSoap( url, id, IOUtils.toString(c.getAsciiStream()c.getCharacterStream()));
|
||||
SimpleSoap ss = new SimpleSoap(url, id, c.getSubString(1L, (int) c.length()));
|
||||
int retry = 0;
|
||||
Reader response = null;
|
||||
String rsp = "";
|
||||
|
@ -152,14 +154,6 @@ public class EventEmitter implements Job, InterruptableJob {
|
|||
} catch (IOException e) {
|
||||
log.error("Exception in SQL execution: {}", e.getMessage());
|
||||
throw new RuntimeException(e);
|
||||
} finally {
|
||||
try {
|
||||
if(fcon!=null) fcon.close();
|
||||
if(con!=null) con.close();
|
||||
} catch (SQLException e) {
|
||||
log.error("Error closing the database connections: {}", e.getMessage());
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,83 @@
|
|||
package net.brutex.xservices.util;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.h2.jdbcx.JdbcConnectionPool;
|
||||
import org.quartz.*;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.Reader;
|
||||
import java.io.StringReader;
|
||||
import java.sql.*;
|
||||
import java.time.Instant;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.concurrent.atomic.AtomicLong;
|
||||
|
||||
@Slf4j
|
||||
@DisallowConcurrentExecution
|
||||
public class EventLogCleanerJob implements Job, InterruptableJob {
|
||||
|
||||
private final AtomicBoolean isInterrupted = new AtomicBoolean(false);
|
||||
|
||||
@Override
|
||||
public void execute(JobExecutionContext context) throws JobExecutionException {
|
||||
final Instant d = Instant.now();
|
||||
final long ts = d.toEpochMilli();
|
||||
|
||||
log.info("EventLogCleaner is executing now.");
|
||||
final EventmanagerConfiguration conf = (EventmanagerConfiguration) context.getMergedJobDataMap()
|
||||
.get(EventmanagerConfiguration.KEY);
|
||||
|
||||
final JdbcConnectionPool fpool = (JdbcConnectionPool) context.getMergedJobDataMap().get("fdbConnection");
|
||||
final JdbcConnectionPool mpool = (JdbcConnectionPool) context.getMergedJobDataMap().get("mdbConnection");
|
||||
|
||||
final String moveSQL = "INSERT INTO brutex.tbl_events_all DIRECT SELECT * FROM MEM_ALL_EVENTS " +
|
||||
"where btx_timestamp < " + (ts-5000) + " ";
|
||||
final String deleteTable = "DELETE FROM MEM_ALL_EVENTS where btx_timestamp < " + (ts-5000);
|
||||
final String deleteMemTable = "DELETE FROM brutex.tbl_events_all where btx_timestamp < " + (ts-5000);
|
||||
|
||||
|
||||
/**
|
||||
* Move event table data to all events log
|
||||
*/
|
||||
|
||||
|
||||
try (Connection fcon = fpool.getConnection();
|
||||
Connection mcon = mpool.getConnection()){
|
||||
fcon.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
|
||||
fcon.setAutoCommit(false);
|
||||
Statement stmt = fcon.createStatement();
|
||||
stmt.execute(moveSQL);
|
||||
int count = stmt.getUpdateCount();
|
||||
fcon.commit();
|
||||
Statement mstm = mcon.createStatement();
|
||||
|
||||
|
||||
mstm.execute(deleteMemTable);
|
||||
int count2 = mstm.getUpdateCount();
|
||||
mcon.commit();
|
||||
|
||||
log.info("EventLogCleaner moved '{}/ deleted {}' events into the persistence space.", count, count2);
|
||||
|
||||
} catch (SQLException e) {
|
||||
log.error("Exception in SQL execution: {}", e.getMessage());
|
||||
throw new JobExecutionException(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Called by the <code>{@link Scheduler}</code> when a user
|
||||
* interrupts the <code>Job</code>.
|
||||
* </p>
|
||||
*
|
||||
* @throws UnableToInterruptJobException if there is an exception while interrupting the job.
|
||||
*/
|
||||
@Override
|
||||
public synchronized void interrupt() throws UnableToInterruptJobException {
|
||||
isInterrupted.set(true);
|
||||
log.warn("EventLogCleaner received and interrupt.");
|
||||
Thread.currentThread().interrupt();
|
||||
}
|
||||
}
|
|
@ -8,6 +8,8 @@ import org.apache.commons.configuration2.FileBasedConfiguration;
|
|||
import org.apache.commons.configuration2.PropertiesConfiguration;
|
||||
import org.apache.commons.configuration2.builder.FileBasedConfigurationBuilder;
|
||||
import org.apache.commons.configuration2.builder.PropertiesBuilderParametersImpl;
|
||||
import org.apache.commons.configuration2.event.ConfigurationEvent;
|
||||
import org.apache.commons.configuration2.event.EventListener;
|
||||
import org.apache.commons.configuration2.ex.ConfigurationException;
|
||||
|
||||
import javax.servlet.ServletContext;
|
||||
|
@ -39,13 +41,15 @@ public class EventmanagerConfiguration {
|
|||
private int interval;
|
||||
private String jdbc_memdb;
|
||||
private String jdbc_filedb;
|
||||
private boolean isEmitterActive = true;
|
||||
private int cleaner_interval;
|
||||
|
||||
|
||||
public synchronized EventmanagerConfiguration refreshConfig() {
|
||||
log.trace("Reading EventmanagerConfiguration from file eventmanager.properties.");
|
||||
FileBasedConfigurationBuilder<FileBasedConfiguration> builder =
|
||||
new FileBasedConfigurationBuilder<FileBasedConfiguration>(PropertiesConfiguration.class)
|
||||
.configure(new PropertiesBuilderParametersImpl().setFileName("eventmanager.properties"));
|
||||
.configure(new PropertiesBuilderParametersImpl().setFileName("../eventmanager.properties"));
|
||||
|
||||
try {
|
||||
Configuration config = builder.getConfiguration();
|
||||
|
@ -55,6 +59,8 @@ public class EventmanagerConfiguration {
|
|||
this.interval = config.getInt("interval", 10);
|
||||
this.jdbc_memdb = config.getString("memdb", "jdbc:h2:mem:lockdb;DB_CLOSE_DELAY=-1;");
|
||||
this.jdbc_filedb = config.getString("fdb", "jdbc:h2:mem:lockdb;DB_CLOSE_DELAY=-1;");
|
||||
this.isEmitterActive = config.getBoolean("emitter_active", true);
|
||||
this.cleaner_interval = config.getInt("cleaner_interval", 5);
|
||||
|
||||
|
||||
} catch (ConfigurationException e) {
|
||||
|
|
|
@ -15,6 +15,8 @@ import java.sql.ResultSet;
|
|||
import java.sql.SQLException;
|
||||
import java.sql.Statement;
|
||||
import java.time.Instant;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.Date;
|
||||
import java.util.concurrent.atomic.AtomicLong;
|
||||
|
||||
import static org.quartz.TriggerBuilder.newTrigger;
|
||||
|
@ -48,12 +50,12 @@ public class MiscServiceServletContextListener implements ServletContextListener
|
|||
*/
|
||||
private static JdbcConnectionPool getDbPool(String dbConnectString) {
|
||||
JdbcConnectionPool p = JdbcConnectionPool.create(dbConnectString, "", "");
|
||||
p.setMaxConnections(16);
|
||||
p.setLoginTimeout(5);
|
||||
try {
|
||||
Connection c = p.getConnection();
|
||||
p.setMaxConnections(256);
|
||||
p.setLoginTimeout(20);
|
||||
try (Connection c = p.getConnection();){
|
||||
Statement s = c.createStatement();
|
||||
s.execute(dbinit);
|
||||
c.commit();
|
||||
log.trace("Running SQL against database '{}': '{}'", dbConnectString, dbinit);
|
||||
c.close();
|
||||
log.debug("Successfully created schema for database 'Brutex' at '{}'.", dbConnectString);
|
||||
|
@ -72,12 +74,18 @@ public class MiscServiceServletContextListener implements ServletContextListener
|
|||
log.debug("Active jobs to be terminated: {}", scheduler.getCurrentlyExecutingJobs());
|
||||
|
||||
JobKey key = JobKey.jobKey("ALFEmitter");
|
||||
JobKey cleanerkey = JobKey.jobKey("EventLogCleaner");
|
||||
synchronized (scheduler) {
|
||||
if (!scheduler.isShutdown() && scheduler.checkExists(key) ) {
|
||||
scheduler.interrupt(key);
|
||||
scheduler.deleteJob(key);
|
||||
log.info("Gracefully stopped the ALFEventEmitter job.");
|
||||
}
|
||||
if (!scheduler.isShutdown() && scheduler.checkExists(cleanerkey) ) {
|
||||
scheduler.interrupt(cleanerkey);
|
||||
scheduler.deleteJob(cleanerkey);
|
||||
log.info("Gracefully stopped the ALFEventEmitter job.");
|
||||
}
|
||||
if (!scheduler.isShutdown()) {
|
||||
scheduler.shutdown(true);
|
||||
}
|
||||
|
@ -98,12 +106,19 @@ public class MiscServiceServletContextListener implements ServletContextListener
|
|||
Connection con = fdbpool.getConnection();
|
||||
Statement s = con.createStatement();
|
||||
|
||||
final String insert = "INSERT INTO brutex.tbl_events SELECT * from LINK UNION SELECT " + "btx_event_type, btx_id, btx_obj_type, btx_obj_id, btx_timestamp, btx_event from LINK2;";
|
||||
final String insert = "INSERT INTO brutex.tbl_events SELECT * from MEM_INBOUND UNION SELECT " + "btx_event_type, btx_id, btx_obj_type, btx_obj_id, btx_timestamp, btx_event from MEM_OUTBOUND;";
|
||||
s.execute(insert);
|
||||
int count = s.getUpdateCount();
|
||||
log.info("Persisted {} rows in file-based database.", count);
|
||||
log.info("Persisted {} active event rows in file-based database.", count);
|
||||
|
||||
final String save_all = "INSERT INTO brutex.tbl_events_all SELECT * from MEM_ALL_EVENTS;";
|
||||
s.execute(save_all);
|
||||
count = s.getUpdateCount();
|
||||
log.info("Persisted {} event rows from all_events log in file-based database", count);
|
||||
|
||||
log.info("Shutting down in-memory database. Closing file-based database. Please wait ...");
|
||||
s.execute("SHUTDOWN;");
|
||||
|
||||
con.close();
|
||||
log.info("Shutting down databases complete.");
|
||||
} catch (SQLException e) {
|
||||
|
@ -141,9 +156,8 @@ public class MiscServiceServletContextListener implements ServletContextListener
|
|||
//Load events from file based database into in-memory database
|
||||
try {
|
||||
log.info("Start recovery of previously unsend alf events. Trying to load them into in-memory database.");
|
||||
final String link = "CREATE LINKED TABLE IF NOT EXISTS LINK('org.h2.Driver', '"+configuration.getJdbc_memdb()+"', '', '', 'brutex.tbl_events'); " +
|
||||
"CREATE LINKED TABLE IF NOT EXISTS LINK2('org.h2.Driver', '"+configuration.getJdbc_memdb()+"', '', '', 'brutex.tbl_events_snap');";
|
||||
final String recoverSQL = "INSERT INTO LINK DIRECT SELECT * FROM brutex.tbl_events;";
|
||||
final String link = getLinkSQL();
|
||||
final String recoverSQL = "INSERT INTO MEM_INBOUND DIRECT SELECT * FROM brutex.tbl_events;";
|
||||
final String truncate = "TRUNCATE TABLE brutex.tbl_events;";
|
||||
int count = 0;
|
||||
Connection con = fdbpool.getConnection();
|
||||
|
@ -163,17 +177,33 @@ public class MiscServiceServletContextListener implements ServletContextListener
|
|||
throw new RuntimeException(e);
|
||||
}
|
||||
//Start initial run of the emitter
|
||||
if(configuration.isEmitterActive()) {
|
||||
startEmitterImmediate(egres, (Scheduler) context.getAttribute("scheduler"));
|
||||
}
|
||||
|
||||
private synchronized void startEmitterImmediate(AtomicLong egres_counter, Scheduler scheduler) {
|
||||
//Start mem db log cleaner
|
||||
if(configuration.getCleaner_interval()>0) {
|
||||
startEventLogCleaner((Scheduler) context.getAttribute("scheduler"));
|
||||
}
|
||||
}
|
||||
|
||||
private String getLinkSQL() {
|
||||
final String dbDriverClass = "org.h2.Driver";
|
||||
final String link = "CREATE LINKED TABLE IF NOT EXISTS MEM_INBOUND('"+dbDriverClass+"', '"+configuration.getJdbc_memdb()+"', '', '', 'brutex.tbl_events'); " +
|
||||
"CREATE LINKED TABLE IF NOT EXISTS MEM_OUTBOUND('"+dbDriverClass+"', '"+configuration.getJdbc_memdb()+"', '', '', 'brutex.tbl_events_snap'); " +
|
||||
"CREATE LINKED TABLE IF NOT EXISTS MEM_ALL_EVENTS('"+dbDriverClass+"', '"+configuration.getJdbc_memdb()+"', '', '', 'brutex.tbl_events_all') AUTOCOMMIT OFF; " +
|
||||
"";
|
||||
return link;
|
||||
}
|
||||
|
||||
private synchronized void startEmitterImmediate(AtomicLong egres, Scheduler scheduler) {
|
||||
try {
|
||||
if (!scheduler.checkExists(JobKey.jobKey("ALFEmitter"))) {
|
||||
JobDetail job2 = JobBuilder.newJob(EventEmitter.class).withIdentity("ALFEmitter").build();
|
||||
job2.getJobDataMap().put("mdbConnection", mempool);
|
||||
job2.getJobDataMap().put("fdbConnection", fdbpool);
|
||||
job2.getJobDataMap().put("run_key", Instant.now().toEpochMilli());
|
||||
job2.getJobDataMap().put("egres_counter", egres_counter);
|
||||
job2.getJobDataMap().put("egres_counter", egres);
|
||||
job2.getJobDataMap().put(EventmanagerConfiguration.KEY, EventmanagerConfiguration.getInstance());
|
||||
SimpleTrigger t = (SimpleTrigger) newTrigger().withIdentity("ALFEmitter").startNow().build();
|
||||
scheduler.scheduleJob(job2, t);
|
||||
|
@ -183,6 +213,27 @@ public class MiscServiceServletContextListener implements ServletContextListener
|
|||
}
|
||||
}
|
||||
|
||||
private void startEventLogCleaner(Scheduler scheduler) {
|
||||
try {
|
||||
if (!scheduler.checkExists(JobKey.jobKey("EventLogCleaner"))) {
|
||||
JobDetail job2 = JobBuilder.newJob(EventLogCleanerJob.class).withIdentity("EventLogCleaner").build();
|
||||
job2.getJobDataMap().put("mdbConnection", mempool);
|
||||
job2.getJobDataMap().put("fdbConnection", fdbpool);
|
||||
job2.getJobDataMap().put("run_key", Instant.now().toEpochMilli());
|
||||
job2.getJobDataMap().put(EventmanagerConfiguration.KEY, EventmanagerConfiguration.getInstance());
|
||||
SimpleTrigger t = (SimpleTrigger) newTrigger().withIdentity("EventLogCleaner")
|
||||
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
|
||||
.withIntervalInMinutes(configuration.getCleaner_interval())
|
||||
.repeatForever())
|
||||
.startAt(Date.from(Instant.now().plus(configuration.getCleaner_interval(), ChronoUnit.MINUTES)))
|
||||
.build();
|
||||
scheduler.scheduleJob(job2, t);
|
||||
}
|
||||
} catch (SchedulerException ex) {
|
||||
log.error("Could not start EventLogCleaner to process existing queue directly after startup: {}", ex.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
private void readConfiguration(ServletContext ctx) {
|
||||
/* Configure ServletContext attributes using configuration object*/
|
||||
EventmanagerConfiguration c = EventmanagerConfiguration.getInstance().refreshConfig();
|
||||
|
|
|
@ -22,11 +22,14 @@ import org.apache.http.client.ClientProtocolException;
|
|||
import org.apache.http.client.entity.EntityBuilder;
|
||||
import org.apache.http.client.fluent.Request;
|
||||
import org.apache.http.client.fluent.Response;
|
||||
import org.apache.http.entity.ContentType;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.Reader;
|
||||
import java.nio.charset.Charset;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
|
||||
|
||||
|
@ -69,10 +72,12 @@ public class SimpleSoap {
|
|||
public Reader sendSoap(boolean isDropResponse) {
|
||||
Reader response = null;
|
||||
long start = System.currentTimeMillis();
|
||||
EntityBuilder entitybuilder = EntityBuilder.create();
|
||||
entitybuilder.setContentEncoding("UTF-8");
|
||||
entitybuilder.setText(soapBody);
|
||||
HttpEntity entity = entitybuilder.build();
|
||||
|
||||
HttpEntity entity = EntityBuilder.create()
|
||||
.setText(soapBody)
|
||||
.setContentType(ContentType.create("text/xml", StandardCharsets.UTF_8))
|
||||
.setContentEncoding("UTF-8")
|
||||
.build();
|
||||
|
||||
log.trace("Sending event '{}' to target ALF Event Manager.", id);
|
||||
|
||||
|
@ -81,7 +86,7 @@ public class SimpleSoap {
|
|||
try {
|
||||
Response resp = Request.Post(url)
|
||||
.addHeader("Accept", "text/xml")
|
||||
.addHeader("Content-Type", "text/xml; charset=utf-8")
|
||||
//.addHeader("Content-Type", "text/xml; charset=utf-8")
|
||||
.addHeader("SOAPAction", "")
|
||||
.body(entity).execute();
|
||||
|
||||
|
|
|
@ -74,6 +74,7 @@ public interface MiscService {
|
|||
public abstract BigInteger lock(@WebParam(name="id") @XmlElement(nillable = false) String id,
|
||||
@WebParam(name="objectId") @XmlElement(nillable = false) String objectId) throws XServicesFault;
|
||||
|
||||
@WebMethod(operationName="EventNotice")
|
||||
public abstract ALFEventResponseType mergeALFEvent(@WebParam(name="EventNotice", targetNamespace = "http://www.eclipse.org/alf/schema/EventBase/1") ALFEventType event) throws XServicesFault;
|
||||
@WebMethod(operationName="", action = "EventNotice")
|
||||
@SOAPBinding(use = SOAPBinding.Use.LITERAL, style = SOAPBinding.Style.DOCUMENT, parameterStyle = SOAPBinding.ParameterStyle.BARE)
|
||||
public abstract ALFEventResponseType mergeALFEvent(@WebParam(name="ALFEventNoticeDoc", targetNamespace = "http://www.eclipse.org/alf/schema/EventBase/1") ALFEventType event) throws XServicesFault;
|
||||
}
|
||||
|
|
|
@ -41,6 +41,7 @@ import javax.xml.bind.JAXBContext;
|
|||
import javax.xml.bind.JAXBElement;
|
||||
import javax.xml.bind.JAXBException;
|
||||
import javax.xml.bind.Marshaller;
|
||||
import javax.xml.namespace.QName;
|
||||
import javax.xml.ws.WebServiceContext;
|
||||
import javax.xml.ws.handler.MessageContext;
|
||||
import java.io.StringReader;
|
||||
|
@ -63,12 +64,13 @@ import static org.quartz.TriggerBuilder.newTrigger;
|
|||
* @author Brian Rosenberger, bru@brutex.de
|
||||
*/
|
||||
@Slf4j
|
||||
@WebService(targetNamespace="http://ws.xservices.brutex.net", endpointInterface="net.brutex.xservices.ws.MiscService", serviceName="MiscService")
|
||||
@WebService(targetNamespace = "http://ws.xservices.brutex.net", endpointInterface = "net.brutex.xservices.ws.MiscService", serviceName = "MiscService")
|
||||
public class MiscServiceImpl
|
||||
implements MiscService {
|
||||
|
||||
@Resource
|
||||
private WebServiceContext context;
|
||||
|
||||
public MiscServiceImpl() throws SchedulerException {
|
||||
}
|
||||
|
||||
|
@ -174,7 +176,6 @@ public class MiscServiceImpl
|
|||
public BigInteger lock(String id, String objectId) throws XServicesFault {
|
||||
|
||||
|
||||
|
||||
final String conString = "jdbc:h2:mem:lockdb;DB_CLOSE_DELAY=10;" +
|
||||
"INIT=CREATE SCHEMA IF NOT EXISTS brutex\\;" +
|
||||
// "SET SCHEMA brutex\\;" +
|
||||
|
@ -227,6 +228,8 @@ public class MiscServiceImpl
|
|||
final Instant d = Instant.now();
|
||||
final long ts = d.toEpochMilli();
|
||||
|
||||
MessageContext cont = context.getMessageContext();
|
||||
|
||||
//Get Parameters from the Servlet Context
|
||||
final ServletContext servletContext =
|
||||
(ServletContext) context.getMessageContext().get(MessageContext.SERVLET_CONTEXT);
|
||||
|
@ -251,29 +254,33 @@ public class MiscServiceImpl
|
|||
log.debug("Event id '{}', type '{}' received for object '{}' with object_id '{}'.",
|
||||
eventId, eventType, objectType, objectId);
|
||||
|
||||
final String mergeStatememt = "MERGE INTO brutex.tbl_events " +
|
||||
final String mergeStatememt = "SELECT btx_id FROM OLD TABLE (MERGE INTO brutex.tbl_events " +
|
||||
"KEY (btx_event_type, btx_obj_type, btx_obj_id) " +
|
||||
"VALUES (?,?,?,?,?,?);";
|
||||
"VALUES (?,?,?,?,?,?));";
|
||||
|
||||
final String insertAll = "INSERT INTO brutex.tbl_events_all VALUES (?,?,?,?,?,?,?)";
|
||||
|
||||
|
||||
try {
|
||||
try (Connection con = pool.getConnection()) {
|
||||
Marshaller m = JAXBContext.newInstance(ALFEventType.class).createMarshaller();
|
||||
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
|
||||
m.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
|
||||
JAXBElement<ALFEventType> e = of.createEventNotice(event);
|
||||
m.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
|
||||
JAXBElement<ALFEventType> e = of.createALFEventNoticeDoc(event);
|
||||
StringWriter sw = new StringWriter();
|
||||
m.marshal(e, sw);
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
sb.append(" <soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" " +
|
||||
"xmlns:ns=\"http://www.eclipse.org/alf/schema/EventBase/1\">\n");
|
||||
sb.append("<soapenv:Body>\n");
|
||||
sb.append("<ns:EventNotice>\n");
|
||||
|
||||
sb.append(sw);
|
||||
sb.append("</ns:EventNotice>\n");
|
||||
|
||||
sb.append("</soapenv:Body>");
|
||||
sb.append("</soapenv:Envelope>");
|
||||
|
||||
Connection con = pool.getConnection();
|
||||
|
||||
PreparedStatement prep = con.prepareStatement(mergeStatememt);
|
||||
prep.setString(1, eventType);
|
||||
prep.setString(2, eventId);
|
||||
|
@ -281,12 +288,35 @@ public class MiscServiceImpl
|
|||
prep.setString(4, objectId);
|
||||
prep.setLong(5, ts);
|
||||
prep.setClob(6, new StringReader(sb.toString()));
|
||||
ResultSet r = prep.executeQuery();
|
||||
con.commit();
|
||||
String supersed_id = null;
|
||||
if (r.next()) {
|
||||
supersed_id = r.getString(1);
|
||||
log.trace("Event '{}' superseded event '{}'", eventId, supersed_id);
|
||||
} else {
|
||||
log.trace("Event '{}' inserted into outgoing queue.", eventId);
|
||||
}
|
||||
|
||||
|
||||
/* Write all into permanent storage */
|
||||
//Connection fcon = fpool.getConnection();
|
||||
prep = con.prepareStatement(insertAll);
|
||||
prep.setString(1, eventType);
|
||||
prep.setString(2, eventId);
|
||||
prep.setString(3, objectType);
|
||||
prep.setString(4, objectId);
|
||||
prep.setLong(5, ts);
|
||||
prep.setString(6, supersed_id);
|
||||
prep.setClob(7, new StringReader(sb.toString()));
|
||||
prep.execute();
|
||||
|
||||
con.commit();
|
||||
con.close();
|
||||
|
||||
ingres_counter.incrementAndGet();
|
||||
|
||||
if (conf.isEmitterActive()) {
|
||||
synchronized (scheduler) {
|
||||
if (!scheduler.checkExists(JobKey.jobKey("ALFEmitter"))) {
|
||||
JobDetail job2 = JobBuilder.newJob(EventEmitter.class)
|
||||
|
@ -307,6 +337,7 @@ public class MiscServiceImpl
|
|||
scheduler.scheduleJob(job2, t);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (JAXBException | SQLException | SchedulerException e) {
|
||||
log.error(e.getMessage());
|
||||
throw new XServicesFault(e);
|
||||
|
|
|
@ -4,7 +4,7 @@ CREATE SCHEMA IF NOT EXISTS brutex;
|
|||
CREATE TABLE IF NOT EXISTS brutex.tbl_events
|
||||
(
|
||||
btx_event_type VARCHAR(128) NOT NULL,
|
||||
btx_id VARCHAR(32) NOT NULL,
|
||||
btx_id VARCHAR(128) NOT NULL,
|
||||
btx_obj_type VARCHAR(32) NOT NULL,
|
||||
btx_obj_id VARCHAR(32) NOT NULL,
|
||||
btx_timestamp BIGINT NOT NULL,
|
||||
|
@ -12,12 +12,13 @@ CREATE TABLE IF NOT EXISTS brutex.tbl_events
|
|||
);
|
||||
CREATE INDEX IF NOT EXISTS brutex.btx_idx_key ON brutex.tbl_events (btx_obj_id, btx_obj_type, btx_event_type);
|
||||
CREATE INDEX IF NOT EXISTS brutex.btx_idx_ts ON brutex.tbl_events (btx_timestamp ASC);
|
||||
CREATE INDEX IF NOT EXISTS brutex.btx_idx_id ON brutex.tbl_events (btx_id);
|
||||
|
||||
|
||||
CREATE TABLE IF NOT EXISTS brutex.tbl_events_snap
|
||||
(
|
||||
btx_event_type VARCHAR(128) NOT NULL,
|
||||
btx_id VARCHAR(32) NOT NULL,
|
||||
btx_id VARCHAR(128) NOT NULL,
|
||||
btx_obj_type VARCHAR(32) NOT NULL,
|
||||
btx_obj_id VARCHAR(32) NOT NULL,
|
||||
btx_timestamp BIGINT NOT NULL,
|
||||
|
@ -30,7 +31,7 @@ CREATE INDEX IF NOT EXISTS brutex.btx_idx_ts ON brutex.tbl_events_snap (btx_time
|
|||
CREATE TABLE IF NOT EXISTS brutex.tbl_events_errors
|
||||
(
|
||||
btx_event_type VARCHAR(128) NOT NULL,
|
||||
btx_id VARCHAR(32) NOT NULL,
|
||||
btx_id VARCHAR(128) NOT NULL,
|
||||
btx_obj_type VARCHAR(32) NOT NULL,
|
||||
btx_obj_id VARCHAR(32) NOT NULL,
|
||||
btx_timestamp BIGINT NOT NULL,
|
||||
|
@ -40,3 +41,17 @@ CREATE TABLE IF NOT EXISTS brutex.tbl_events_errors
|
|||
);
|
||||
CREATE INDEX IF NOT EXISTS brutex.btx_idx_ts ON brutex.tbl_events_errors (btx_timestamp ASC);
|
||||
CREATE INDEX IF NOT EXISTS brutex.btx_idx_retry ON brutex.tbl_events_errors (btx_retry);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS brutex.tbl_events_all
|
||||
(
|
||||
btx_event_type VARCHAR(128) NOT NULL,
|
||||
btx_id VARCHAR(128) NOT NULL,
|
||||
btx_obj_type VARCHAR(32) NOT NULL,
|
||||
btx_obj_id VARCHAR(32) NOT NULL,
|
||||
btx_timestamp BIGINT NOT NULL,
|
||||
btx_supersed_id VARCHAR(128),
|
||||
btx_event CLOB
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS brutex.btx_idx_ssed ON brutex.tbl_events_all (btx_supersed_id);
|
||||
CREATE INDEX IF NOT EXISTS brutex.btx_idx_ts ON brutex.tbl_events_all (btx_timestamp ASC);
|
|
@ -0,0 +1,10 @@
|
|||
select
|
||||
(select count(*) from MEM_INBOUND) as INBOUND_Queue,
|
||||
(select count(*) from MEM_OUTBOUND) as OUTBOUND_Queue ,
|
||||
|
||||
(select count(*) from mem_all_events) as IN_MEMORY_LOG,
|
||||
(select count(*) from brutex.tbl_events_all) as FILE_LOG,
|
||||
(select count(*) from brutex.tbl_events_errors) as ERROR_COUNT,
|
||||
|
||||
((select count(*) from brutex.tbl_events_all where btx_supersed_id is not null) + (select count(*) from mem_all_events where btx_supersed_id is not null)) as MERGED_EVENTS
|
||||
FROM DUAL;
|
|
@ -1,6 +1,7 @@
|
|||
|
||||
# The target ALF Event Manager to forward processed events to
|
||||
target.url = http://localhost:8099/ALFEventManager/services/ALFEventManagerSOAP
|
||||
#target.url = http://localhost:8099/ALFEventManager/services/ALFEventManagerSOAP
|
||||
target.url = http://localhost:8085/eventmanager/services/ALFEventManagerDocLit
|
||||
|
||||
# Merging interval in seconds
|
||||
# This specifies the minimum time the service will merge incoming events before starting
|
||||
|
@ -19,3 +20,15 @@ memdb = jdbc:h2:mem:lockdb;DB_CLOSE_DELAY=-1;
|
|||
# This is the JDBC connection string.
|
||||
# default: fdb = jdbc:h2:file:~/alf_event_db
|
||||
fdb = jdbc:h2:file:~/alf_event_db
|
||||
|
||||
|
||||
# Activate Emitter
|
||||
# Default is true, otherwise XServices will receive events, but not make any attempt to
|
||||
# forward them. Memory inbound queue will only be written to disk when the service is
|
||||
# gracefully stopped.
|
||||
emitter_active = true
|
||||
|
||||
# EventLogCleaner interval in minutes, how often to move all registered events from memory to the file based
|
||||
# storage. For trace and debugging purpose. Default value is every 5 minutes. A value of zero or smaller
|
||||
# deactivates the cleaner. Value in minutes.
|
||||
cleaner_interval = 4
|
|
@ -131,16 +131,17 @@
|
|||
<servlet>
|
||||
<servlet-name>H2Console</servlet-name>
|
||||
<servlet-class>org.h2.server.web.WebServlet</servlet-class>
|
||||
<!--
|
||||
<!-- this should be deactivated or protected -->
|
||||
<init-param>
|
||||
<param-name>webAllowOthers</param-name>
|
||||
<param-value></param-value>
|
||||
<param-value>true</param-value>
|
||||
</init-param>
|
||||
<init-param>
|
||||
<!--
|
||||
<init-param>
|
||||
<param-name>trace</param-name>
|
||||
<param-value></param-value>
|
||||
</init-param>
|
||||
-->
|
||||
</init-param>
|
||||
-->
|
||||
<load-on-startup>1</load-on-startup>
|
||||
</servlet>
|
||||
<servlet-mapping>
|
||||
|
|
Loading…
Reference in New Issue