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.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"
|
implementation "org.slf4j:slf4j-api:2.0.7"
|
||||||
|
|
||||||
runtimeOnly "org.slf4j:slf4j-simple: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;
|
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.XmlAccessType;
|
||||||
import javax.xml.bind.annotation.XmlAccessorType;
|
import javax.xml.bind.annotation.XmlAccessorType;
|
||||||
import javax.xml.bind.annotation.XmlAnyElement;
|
import javax.xml.bind.annotation.XmlAnyElement;
|
||||||
import javax.xml.bind.annotation.XmlType;
|
import javax.xml.bind.annotation.XmlType;
|
||||||
|
import org.w3c.dom.Element;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -17,7 +20,7 @@ import javax.xml.bind.annotation.XmlType;
|
||||||
* <complexContent>
|
* <complexContent>
|
||||||
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
|
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
|
||||||
* <sequence>
|
* <sequence>
|
||||||
* <any minOccurs="0"/>
|
* <any processContents='lax' maxOccurs="unbounded" minOccurs="0"/>
|
||||||
* </sequence>
|
* </sequence>
|
||||||
* </restriction>
|
* </restriction>
|
||||||
* </complexContent>
|
* </complexContent>
|
||||||
|
@ -33,30 +36,36 @@ import javax.xml.bind.annotation.XmlType;
|
||||||
public class ALFEventResponseType {
|
public class ALFEventResponseType {
|
||||||
|
|
||||||
@XmlAnyElement(lax = true)
|
@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
|
* <p>
|
||||||
* possible object is
|
* 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 }
|
* {@link Object }
|
||||||
*
|
*
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
public Object getAny() {
|
public List<Object> getAny() {
|
||||||
return any;
|
if (any == null) {
|
||||||
|
any = new ArrayList<Object>();
|
||||||
}
|
}
|
||||||
|
return this.any;
|
||||||
/**
|
|
||||||
* Legt den Wert der any-Eigenschaft fest.
|
|
||||||
*
|
|
||||||
* @param value
|
|
||||||
* allowed object is
|
|
||||||
* {@link Object }
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public void setAny(Object value) {
|
|
||||||
this.any = value;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -145,8 +145,8 @@ public class ALFEventType {
|
||||||
*
|
*
|
||||||
* <p>
|
* <p>
|
||||||
* Objects of the following type(s) are allowed in the list
|
* Objects of the following type(s) are allowed in the list
|
||||||
* {@link Object }
|
|
||||||
* {@link Element }
|
* {@link Element }
|
||||||
|
* {@link Object }
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,10 +1,13 @@
|
||||||
|
|
||||||
package net.brutex.xservices.types.alfevent;
|
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.XmlAccessType;
|
||||||
import javax.xml.bind.annotation.XmlAccessorType;
|
import javax.xml.bind.annotation.XmlAccessorType;
|
||||||
import javax.xml.bind.annotation.XmlAnyElement;
|
import javax.xml.bind.annotation.XmlAnyElement;
|
||||||
import javax.xml.bind.annotation.XmlType;
|
import javax.xml.bind.annotation.XmlType;
|
||||||
|
import org.w3c.dom.Element;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -17,7 +20,7 @@ import javax.xml.bind.annotation.XmlType;
|
||||||
* <complexContent>
|
* <complexContent>
|
||||||
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
|
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
|
||||||
* <sequence>
|
* <sequence>
|
||||||
* <any minOccurs="0"/>
|
* <any processContents='lax' maxOccurs="unbounded" minOccurs="0"/>
|
||||||
* </sequence>
|
* </sequence>
|
||||||
* </restriction>
|
* </restriction>
|
||||||
* </complexContent>
|
* </complexContent>
|
||||||
|
@ -33,30 +36,36 @@ import javax.xml.bind.annotation.XmlType;
|
||||||
public class ALFEventWithReplyResponseType {
|
public class ALFEventWithReplyResponseType {
|
||||||
|
|
||||||
@XmlAnyElement(lax = true)
|
@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
|
* <p>
|
||||||
* possible object is
|
* 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 }
|
* {@link Object }
|
||||||
*
|
*
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
public Object getAny() {
|
public List<Object> getAny() {
|
||||||
return any;
|
if (any == null) {
|
||||||
|
any = new ArrayList<Object>();
|
||||||
}
|
}
|
||||||
|
return this.any;
|
||||||
/**
|
|
||||||
* Legt den Wert der any-Eigenschaft fest.
|
|
||||||
*
|
|
||||||
* @param value
|
|
||||||
* allowed object is
|
|
||||||
* {@link Object }
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public void setAny(Object value) {
|
|
||||||
this.any = value;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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.XmlAnyElement;
|
||||||
import javax.xml.bind.annotation.XmlType;
|
import javax.xml.bind.annotation.XmlType;
|
||||||
import javax.xml.namespace.QName;
|
import javax.xml.namespace.QName;
|
||||||
|
import org.w3c.dom.Element;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -28,7 +29,7 @@ import javax.xml.namespace.QName;
|
||||||
* <complexContent>
|
* <complexContent>
|
||||||
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
|
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
|
||||||
* <sequence>
|
* <sequence>
|
||||||
* <any namespace='targetnamespace' maxOccurs="unbounded"/>
|
* <any processContents='lax' namespace='http://www.eclipse.org/alf/schema/EventBase/1' maxOccurs="unbounded"/>
|
||||||
* </sequence>
|
* </sequence>
|
||||||
* <anyAttribute/>
|
* <anyAttribute/>
|
||||||
* </restriction>
|
* </restriction>
|
||||||
|
@ -67,6 +68,7 @@ public class BaseExtensionType {
|
||||||
*
|
*
|
||||||
* <p>
|
* <p>
|
||||||
* Objects of the following type(s) are allowed in the list
|
* Objects of the following type(s) are allowed in the list
|
||||||
|
* {@link Element }
|
||||||
* {@link Object }
|
* {@link Object }
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
|
|
|
@ -9,6 +9,7 @@ import javax.xml.bind.annotation.XmlAccessType;
|
||||||
import javax.xml.bind.annotation.XmlAccessorType;
|
import javax.xml.bind.annotation.XmlAccessorType;
|
||||||
import javax.xml.bind.annotation.XmlAnyAttribute;
|
import javax.xml.bind.annotation.XmlAnyAttribute;
|
||||||
import javax.xml.bind.annotation.XmlAnyElement;
|
import javax.xml.bind.annotation.XmlAnyElement;
|
||||||
|
import javax.xml.bind.annotation.XmlElement;
|
||||||
import javax.xml.bind.annotation.XmlType;
|
import javax.xml.bind.annotation.XmlType;
|
||||||
import javax.xml.namespace.QName;
|
import javax.xml.namespace.QName;
|
||||||
import org.w3c.dom.Element;
|
import org.w3c.dom.Element;
|
||||||
|
@ -16,8 +17,9 @@ import org.w3c.dom.Element;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* A structure to hold security authentication-relevant data.
|
* A structure to hold security
|
||||||
* If present the data within may be encrypted.
|
* authentication-relevant data. If present the
|
||||||
|
* data within may be encrypted.
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* <p>Java-Klasse für CredentialsType complex type.
|
* <p>Java-Klasse für CredentialsType complex type.
|
||||||
|
@ -29,7 +31,8 @@ import org.w3c.dom.Element;
|
||||||
* <complexContent>
|
* <complexContent>
|
||||||
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
|
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
|
||||||
* <sequence>
|
* <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>
|
* </sequence>
|
||||||
* <anyAttribute/>
|
* <anyAttribute/>
|
||||||
* </restriction>
|
* </restriction>
|
||||||
|
@ -41,15 +44,42 @@ import org.w3c.dom.Element;
|
||||||
*/
|
*/
|
||||||
@XmlAccessorType(XmlAccessType.FIELD)
|
@XmlAccessorType(XmlAccessType.FIELD)
|
||||||
@XmlType(name = "CredentialsType", namespace = "http://www.eclipse.org/alf/schema/EventBase/1", propOrder = {
|
@XmlType(name = "CredentialsType", namespace = "http://www.eclipse.org/alf/schema/EventBase/1", propOrder = {
|
||||||
|
"alfSecurity",
|
||||||
"any"
|
"any"
|
||||||
})
|
})
|
||||||
public class CredentialsType {
|
public class CredentialsType {
|
||||||
|
|
||||||
|
@XmlElement(name = "ALFSecurity", namespace = "http://www.eclipse.org/alf/schema/EventBase/1")
|
||||||
|
protected ALFSecurityType alfSecurity;
|
||||||
@XmlAnyElement(lax = true)
|
@XmlAnyElement(lax = true)
|
||||||
protected List<Object> any;
|
protected List<Object> any;
|
||||||
@XmlAnyAttribute
|
@XmlAnyAttribute
|
||||||
private Map<QName, String> otherAttributes = new HashMap<QName, String>();
|
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.
|
* Gets the value of the any property.
|
||||||
*
|
*
|
||||||
|
@ -68,8 +98,8 @@ public class CredentialsType {
|
||||||
*
|
*
|
||||||
* <p>
|
* <p>
|
||||||
* Objects of the following type(s) are allowed in the list
|
* Objects of the following type(s) are allowed in the list
|
||||||
* {@link Object }
|
|
||||||
* {@link Element }
|
* {@link Element }
|
||||||
|
* {@link Object }
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -17,6 +17,7 @@ import org.w3c.dom.Element;
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* Place holder type for custom Event payload "extensions"
|
* 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.
|
* <p>Java-Klasse für CustomExtensionType complex type.
|
||||||
|
@ -28,7 +29,7 @@ import org.w3c.dom.Element;
|
||||||
* <complexContent>
|
* <complexContent>
|
||||||
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
|
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
|
||||||
* <sequence>
|
* <sequence>
|
||||||
* <any processContents='lax' namespace='##other' maxOccurs="unbounded"/>
|
* <any processContents='lax' maxOccurs="unbounded"/>
|
||||||
* </sequence>
|
* </sequence>
|
||||||
* <anyAttribute/>
|
* <anyAttribute/>
|
||||||
* </restriction>
|
* </restriction>
|
||||||
|
@ -67,8 +68,8 @@ public class CustomExtensionType {
|
||||||
*
|
*
|
||||||
* <p>
|
* <p>
|
||||||
* Objects of the following type(s) are allowed in the list
|
* Objects of the following type(s) are allowed in the list
|
||||||
* {@link Object }
|
|
||||||
* {@link Element }
|
* {@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.
|
* <p>Java-Klasse für DetailExtensionType complex type.
|
||||||
|
@ -67,8 +68,8 @@ public class DetailExtensionType {
|
||||||
*
|
*
|
||||||
* <p>
|
* <p>
|
||||||
* Objects of the following type(s) are allowed in the list
|
* Objects of the following type(s) are allowed in the list
|
||||||
* {@link Object }
|
|
||||||
* {@link Element }
|
* {@link Element }
|
||||||
|
* {@link Object }
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -31,7 +31,7 @@ import javax.xml.namespace.QName;
|
||||||
* <complexContent>
|
* <complexContent>
|
||||||
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
|
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
|
||||||
* <sequence>
|
* <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="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="PrecedingEmEventId" type="{http://www.eclipse.org/alf/schema/EventBase/1}EventIdType"/>
|
||||||
* <element name="ApplicationName" type="{http://www.eclipse.org/alf/schema/EventBase/1}ApplicationNameType"/>
|
* <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="Callback" type="{http://www.w3.org/2001/XMLSchema}boolean"/>
|
||||||
* <element name="Environment" type="{http://www.eclipse.org/alf/schema/EventBase/1}EnvironmentType"/>
|
* <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="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"/>
|
* <element name="EmExtension" type="{http://www.eclipse.org/alf/schema/EventBase/1}EmExtensionType" minOccurs="0"/>
|
||||||
* </sequence>
|
* </sequence>
|
||||||
* <anyAttribute/>
|
* <anyAttribute/>
|
||||||
|
@ -63,6 +64,7 @@ import javax.xml.namespace.QName;
|
||||||
"callback",
|
"callback",
|
||||||
"environment",
|
"environment",
|
||||||
"emUser",
|
"emUser",
|
||||||
|
"attemptCount",
|
||||||
"emExtension"
|
"emExtension"
|
||||||
})
|
})
|
||||||
public class EmBaseType {
|
public class EmBaseType {
|
||||||
|
@ -88,6 +90,8 @@ public class EmBaseType {
|
||||||
protected String environment;
|
protected String environment;
|
||||||
@XmlElement(name = "EmUser", namespace = "http://www.eclipse.org/alf/schema/EventBase/1", required = true)
|
@XmlElement(name = "EmUser", namespace = "http://www.eclipse.org/alf/schema/EventBase/1", required = true)
|
||||||
protected CredentialsType emUser;
|
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")
|
@XmlElement(name = "EmExtension", namespace = "http://www.eclipse.org/alf/schema/EventBase/1")
|
||||||
protected EmExtensionType emExtension;
|
protected EmExtensionType emExtension;
|
||||||
@XmlAnyAttribute
|
@XmlAnyAttribute
|
||||||
|
@ -325,6 +329,30 @@ public class EmBaseType {
|
||||||
this.emUser = value;
|
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.
|
* 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.XmlAnyElement;
|
||||||
import javax.xml.bind.annotation.XmlType;
|
import javax.xml.bind.annotation.XmlType;
|
||||||
import javax.xml.namespace.QName;
|
import javax.xml.namespace.QName;
|
||||||
|
import org.w3c.dom.Element;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -27,7 +28,7 @@ import javax.xml.namespace.QName;
|
||||||
* <complexContent>
|
* <complexContent>
|
||||||
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
|
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
|
||||||
* <sequence>
|
* <sequence>
|
||||||
* <any namespace='targetnamespace' maxOccurs="unbounded"/>
|
* <any processContents='lax' namespace='http://www.eclipse.org/alf/schema/EventBase/1' maxOccurs="unbounded"/>
|
||||||
* </sequence>
|
* </sequence>
|
||||||
* <anyAttribute/>
|
* <anyAttribute/>
|
||||||
* </restriction>
|
* </restriction>
|
||||||
|
@ -66,6 +67,7 @@ public class EmExtensionType {
|
||||||
*
|
*
|
||||||
* <p>
|
* <p>
|
||||||
* Objects of the following type(s) are allowed in the list
|
* Objects of the following type(s) are allowed in the list
|
||||||
|
* {@link Element }
|
||||||
* {@link Object }
|
* {@link Object }
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
|
|
|
@ -29,7 +29,7 @@ import javax.xml.namespace.QName;
|
||||||
* <complexContent>
|
* <complexContent>
|
||||||
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
|
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
|
||||||
* <sequence>
|
* <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="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="EventType" type="{http://www.eclipse.org/alf/schema/EventBase/1}EventTypeType"/>
|
||||||
* <element name="ObjectType" type="{http://www.eclipse.org/alf/schema/EventBase/1}ObjectTypeType"/>
|
* <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)
|
@XmlElement(name = "EventId", namespace = "http://www.eclipse.org/alf/schema/EventBase/1", required = true)
|
||||||
protected String eventId;
|
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")
|
@XmlSchemaType(name = "dateTime")
|
||||||
protected XMLGregorianCalendar timestamp;
|
protected XMLGregorianCalendar timestamp;
|
||||||
@XmlElement(name = "EventType", namespace = "http://www.eclipse.org/alf/schema/EventBase/1", required = true)
|
@XmlElement(name = "EventType", namespace = "http://www.eclipse.org/alf/schema/EventBase/1", required = true)
|
||||||
|
|
|
@ -24,7 +24,7 @@ import javax.xml.namespace.QName;
|
||||||
@XmlRegistry
|
@XmlRegistry
|
||||||
public class ObjectFactory {
|
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
|
* 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() {
|
public ObjectFactory() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create an instance of {@link ALFSecurityType }
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public ALFSecurityType createALFSecurityType() {
|
||||||
|
return new ALFSecurityType();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create an instance of {@link ALFEventType }
|
* Create an instance of {@link ALFEventType }
|
||||||
*
|
*
|
||||||
|
@ -121,13 +129,21 @@ public class ObjectFactory {
|
||||||
return new EmBaseType();
|
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 >}}
|
* Create an instance of {@link JAXBElement }{@code <}{@link ALFEventType }{@code >}}
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@XmlElementDecl(namespace = "http://www.eclipse.org/alf/schema/EventBase/1", name = "EventNotice")
|
@XmlElementDecl(namespace = "http://www.eclipse.org/alf/schema/EventBase/1", name = "ALFEventNoticeDoc")
|
||||||
public JAXBElement<ALFEventType> createEventNotice(ALFEventType value) {
|
public JAXBElement<ALFEventType> createALFEventNoticeDoc(ALFEventType value) {
|
||||||
return new JAXBElement<ALFEventType>(_EventNotice_QNAME, ALFEventType.class, null, 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
|
* Move event table data to snapshot
|
||||||
*/
|
*/
|
||||||
|
|
||||||
Connection con = null;
|
|
||||||
Connection fcon = null;
|
try( Connection con = pool.getConnection();
|
||||||
try {
|
Connection fcon = fpool.getConnection();
|
||||||
con = pool.getConnection();
|
) {
|
||||||
|
|
||||||
con.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
|
con.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
|
||||||
con.setAutoCommit(false);
|
con.setAutoCommit(false);
|
||||||
Statement stmt = con.createStatement();
|
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
|
con.commit(); //all events moved from tbl_events to tbl_events_snap at this point
|
||||||
|
|
||||||
|
|
||||||
fcon = fpool.getConnection();
|
|
||||||
PreparedStatement errorPrepSql = fcon.prepareStatement(moveErrorSQL);
|
PreparedStatement errorPrepSql = fcon.prepareStatement(moveErrorSQL);
|
||||||
|
|
||||||
PreparedStatement del = con.prepareStatement(deleteSQL);
|
PreparedStatement del = con.prepareStatement(deleteSQL);
|
||||||
|
@ -83,7 +84,8 @@ public class EventEmitter implements Job, InterruptableJob {
|
||||||
long event_ts = rs.getLong(6);
|
long event_ts = rs.getLong(6);
|
||||||
boolean bretry = false;
|
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;
|
int retry = 0;
|
||||||
Reader response = null;
|
Reader response = null;
|
||||||
String rsp = "";
|
String rsp = "";
|
||||||
|
@ -152,14 +154,6 @@ public class EventEmitter implements Job, InterruptableJob {
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
log.error("Exception in SQL execution: {}", e.getMessage());
|
log.error("Exception in SQL execution: {}", e.getMessage());
|
||||||
throw new RuntimeException(e);
|
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.PropertiesConfiguration;
|
||||||
import org.apache.commons.configuration2.builder.FileBasedConfigurationBuilder;
|
import org.apache.commons.configuration2.builder.FileBasedConfigurationBuilder;
|
||||||
import org.apache.commons.configuration2.builder.PropertiesBuilderParametersImpl;
|
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 org.apache.commons.configuration2.ex.ConfigurationException;
|
||||||
|
|
||||||
import javax.servlet.ServletContext;
|
import javax.servlet.ServletContext;
|
||||||
|
@ -39,13 +41,15 @@ public class EventmanagerConfiguration {
|
||||||
private int interval;
|
private int interval;
|
||||||
private String jdbc_memdb;
|
private String jdbc_memdb;
|
||||||
private String jdbc_filedb;
|
private String jdbc_filedb;
|
||||||
|
private boolean isEmitterActive = true;
|
||||||
|
private int cleaner_interval;
|
||||||
|
|
||||||
|
|
||||||
public synchronized EventmanagerConfiguration refreshConfig() {
|
public synchronized EventmanagerConfiguration refreshConfig() {
|
||||||
log.trace("Reading EventmanagerConfiguration from file eventmanager.properties.");
|
log.trace("Reading EventmanagerConfiguration from file eventmanager.properties.");
|
||||||
FileBasedConfigurationBuilder<FileBasedConfiguration> builder =
|
FileBasedConfigurationBuilder<FileBasedConfiguration> builder =
|
||||||
new FileBasedConfigurationBuilder<FileBasedConfiguration>(PropertiesConfiguration.class)
|
new FileBasedConfigurationBuilder<FileBasedConfiguration>(PropertiesConfiguration.class)
|
||||||
.configure(new PropertiesBuilderParametersImpl().setFileName("eventmanager.properties"));
|
.configure(new PropertiesBuilderParametersImpl().setFileName("../eventmanager.properties"));
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Configuration config = builder.getConfiguration();
|
Configuration config = builder.getConfiguration();
|
||||||
|
@ -55,6 +59,8 @@ public class EventmanagerConfiguration {
|
||||||
this.interval = config.getInt("interval", 10);
|
this.interval = config.getInt("interval", 10);
|
||||||
this.jdbc_memdb = config.getString("memdb", "jdbc:h2:mem:lockdb;DB_CLOSE_DELAY=-1;");
|
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.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) {
|
} catch (ConfigurationException e) {
|
||||||
|
|
|
@ -15,6 +15,8 @@ import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.sql.Statement;
|
import java.sql.Statement;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
|
import java.time.temporal.ChronoUnit;
|
||||||
|
import java.util.Date;
|
||||||
import java.util.concurrent.atomic.AtomicLong;
|
import java.util.concurrent.atomic.AtomicLong;
|
||||||
|
|
||||||
import static org.quartz.TriggerBuilder.newTrigger;
|
import static org.quartz.TriggerBuilder.newTrigger;
|
||||||
|
@ -48,12 +50,12 @@ public class MiscServiceServletContextListener implements ServletContextListener
|
||||||
*/
|
*/
|
||||||
private static JdbcConnectionPool getDbPool(String dbConnectString) {
|
private static JdbcConnectionPool getDbPool(String dbConnectString) {
|
||||||
JdbcConnectionPool p = JdbcConnectionPool.create(dbConnectString, "", "");
|
JdbcConnectionPool p = JdbcConnectionPool.create(dbConnectString, "", "");
|
||||||
p.setMaxConnections(16);
|
p.setMaxConnections(256);
|
||||||
p.setLoginTimeout(5);
|
p.setLoginTimeout(20);
|
||||||
try {
|
try (Connection c = p.getConnection();){
|
||||||
Connection c = p.getConnection();
|
|
||||||
Statement s = c.createStatement();
|
Statement s = c.createStatement();
|
||||||
s.execute(dbinit);
|
s.execute(dbinit);
|
||||||
|
c.commit();
|
||||||
log.trace("Running SQL against database '{}': '{}'", dbConnectString, dbinit);
|
log.trace("Running SQL against database '{}': '{}'", dbConnectString, dbinit);
|
||||||
c.close();
|
c.close();
|
||||||
log.debug("Successfully created schema for database 'Brutex' at '{}'.", dbConnectString);
|
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());
|
log.debug("Active jobs to be terminated: {}", scheduler.getCurrentlyExecutingJobs());
|
||||||
|
|
||||||
JobKey key = JobKey.jobKey("ALFEmitter");
|
JobKey key = JobKey.jobKey("ALFEmitter");
|
||||||
|
JobKey cleanerkey = JobKey.jobKey("EventLogCleaner");
|
||||||
synchronized (scheduler) {
|
synchronized (scheduler) {
|
||||||
if (!scheduler.isShutdown() && scheduler.checkExists(key) ) {
|
if (!scheduler.isShutdown() && scheduler.checkExists(key) ) {
|
||||||
scheduler.interrupt(key);
|
scheduler.interrupt(key);
|
||||||
scheduler.deleteJob(key);
|
scheduler.deleteJob(key);
|
||||||
log.info("Gracefully stopped the ALFEventEmitter job.");
|
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()) {
|
if (!scheduler.isShutdown()) {
|
||||||
scheduler.shutdown(true);
|
scheduler.shutdown(true);
|
||||||
}
|
}
|
||||||
|
@ -98,12 +106,19 @@ public class MiscServiceServletContextListener implements ServletContextListener
|
||||||
Connection con = fdbpool.getConnection();
|
Connection con = fdbpool.getConnection();
|
||||||
Statement s = con.createStatement();
|
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);
|
s.execute(insert);
|
||||||
int count = s.getUpdateCount();
|
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 ...");
|
log.info("Shutting down in-memory database. Closing file-based database. Please wait ...");
|
||||||
s.execute("SHUTDOWN;");
|
s.execute("SHUTDOWN;");
|
||||||
|
|
||||||
con.close();
|
con.close();
|
||||||
log.info("Shutting down databases complete.");
|
log.info("Shutting down databases complete.");
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
|
@ -141,9 +156,8 @@ public class MiscServiceServletContextListener implements ServletContextListener
|
||||||
//Load events from file based database into in-memory database
|
//Load events from file based database into in-memory database
|
||||||
try {
|
try {
|
||||||
log.info("Start recovery of previously unsend alf events. Trying to load them into in-memory database.");
|
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'); " +
|
final String link = getLinkSQL();
|
||||||
"CREATE LINKED TABLE IF NOT EXISTS LINK2('org.h2.Driver', '"+configuration.getJdbc_memdb()+"', '', '', 'brutex.tbl_events_snap');";
|
final String recoverSQL = "INSERT INTO MEM_INBOUND DIRECT SELECT * FROM brutex.tbl_events;";
|
||||||
final String recoverSQL = "INSERT INTO LINK DIRECT SELECT * FROM brutex.tbl_events;";
|
|
||||||
final String truncate = "TRUNCATE TABLE brutex.tbl_events;";
|
final String truncate = "TRUNCATE TABLE brutex.tbl_events;";
|
||||||
int count = 0;
|
int count = 0;
|
||||||
Connection con = fdbpool.getConnection();
|
Connection con = fdbpool.getConnection();
|
||||||
|
@ -163,17 +177,33 @@ public class MiscServiceServletContextListener implements ServletContextListener
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
//Start initial run of the emitter
|
//Start initial run of the emitter
|
||||||
|
if(configuration.isEmitterActive()) {
|
||||||
startEmitterImmediate(egres, (Scheduler) context.getAttribute("scheduler"));
|
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 {
|
try {
|
||||||
if (!scheduler.checkExists(JobKey.jobKey("ALFEmitter"))) {
|
if (!scheduler.checkExists(JobKey.jobKey("ALFEmitter"))) {
|
||||||
JobDetail job2 = JobBuilder.newJob(EventEmitter.class).withIdentity("ALFEmitter").build();
|
JobDetail job2 = JobBuilder.newJob(EventEmitter.class).withIdentity("ALFEmitter").build();
|
||||||
job2.getJobDataMap().put("mdbConnection", mempool);
|
job2.getJobDataMap().put("mdbConnection", mempool);
|
||||||
job2.getJobDataMap().put("fdbConnection", fdbpool);
|
job2.getJobDataMap().put("fdbConnection", fdbpool);
|
||||||
job2.getJobDataMap().put("run_key", Instant.now().toEpochMilli());
|
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());
|
job2.getJobDataMap().put(EventmanagerConfiguration.KEY, EventmanagerConfiguration.getInstance());
|
||||||
SimpleTrigger t = (SimpleTrigger) newTrigger().withIdentity("ALFEmitter").startNow().build();
|
SimpleTrigger t = (SimpleTrigger) newTrigger().withIdentity("ALFEmitter").startNow().build();
|
||||||
scheduler.scheduleJob(job2, t);
|
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) {
|
private void readConfiguration(ServletContext ctx) {
|
||||||
/* Configure ServletContext attributes using configuration object*/
|
/* Configure ServletContext attributes using configuration object*/
|
||||||
EventmanagerConfiguration c = EventmanagerConfiguration.getInstance().refreshConfig();
|
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.entity.EntityBuilder;
|
||||||
import org.apache.http.client.fluent.Request;
|
import org.apache.http.client.fluent.Request;
|
||||||
import org.apache.http.client.fluent.Response;
|
import org.apache.http.client.fluent.Response;
|
||||||
|
import org.apache.http.entity.ContentType;
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.io.Reader;
|
import java.io.Reader;
|
||||||
|
import java.nio.charset.Charset;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
|
|
||||||
|
@ -69,10 +72,12 @@ public class SimpleSoap {
|
||||||
public Reader sendSoap(boolean isDropResponse) {
|
public Reader sendSoap(boolean isDropResponse) {
|
||||||
Reader response = null;
|
Reader response = null;
|
||||||
long start = System.currentTimeMillis();
|
long start = System.currentTimeMillis();
|
||||||
EntityBuilder entitybuilder = EntityBuilder.create();
|
|
||||||
entitybuilder.setContentEncoding("UTF-8");
|
HttpEntity entity = EntityBuilder.create()
|
||||||
entitybuilder.setText(soapBody);
|
.setText(soapBody)
|
||||||
HttpEntity entity = entitybuilder.build();
|
.setContentType(ContentType.create("text/xml", StandardCharsets.UTF_8))
|
||||||
|
.setContentEncoding("UTF-8")
|
||||||
|
.build();
|
||||||
|
|
||||||
log.trace("Sending event '{}' to target ALF Event Manager.", id);
|
log.trace("Sending event '{}' to target ALF Event Manager.", id);
|
||||||
|
|
||||||
|
@ -81,7 +86,7 @@ public class SimpleSoap {
|
||||||
try {
|
try {
|
||||||
Response resp = Request.Post(url)
|
Response resp = Request.Post(url)
|
||||||
.addHeader("Accept", "text/xml")
|
.addHeader("Accept", "text/xml")
|
||||||
.addHeader("Content-Type", "text/xml; charset=utf-8")
|
//.addHeader("Content-Type", "text/xml; charset=utf-8")
|
||||||
.addHeader("SOAPAction", "")
|
.addHeader("SOAPAction", "")
|
||||||
.body(entity).execute();
|
.body(entity).execute();
|
||||||
|
|
||||||
|
|
|
@ -74,6 +74,7 @@ public interface MiscService {
|
||||||
public abstract BigInteger lock(@WebParam(name="id") @XmlElement(nillable = false) String id,
|
public abstract BigInteger lock(@WebParam(name="id") @XmlElement(nillable = false) String id,
|
||||||
@WebParam(name="objectId") @XmlElement(nillable = false) String objectId) throws XServicesFault;
|
@WebParam(name="objectId") @XmlElement(nillable = false) String objectId) throws XServicesFault;
|
||||||
|
|
||||||
@WebMethod(operationName="EventNotice")
|
@WebMethod(operationName="", action = "EventNotice")
|
||||||
public abstract ALFEventResponseType mergeALFEvent(@WebParam(name="EventNotice", targetNamespace = "http://www.eclipse.org/alf/schema/EventBase/1") ALFEventType event) throws XServicesFault;
|
@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.JAXBElement;
|
||||||
import javax.xml.bind.JAXBException;
|
import javax.xml.bind.JAXBException;
|
||||||
import javax.xml.bind.Marshaller;
|
import javax.xml.bind.Marshaller;
|
||||||
|
import javax.xml.namespace.QName;
|
||||||
import javax.xml.ws.WebServiceContext;
|
import javax.xml.ws.WebServiceContext;
|
||||||
import javax.xml.ws.handler.MessageContext;
|
import javax.xml.ws.handler.MessageContext;
|
||||||
import java.io.StringReader;
|
import java.io.StringReader;
|
||||||
|
@ -63,12 +64,13 @@ import static org.quartz.TriggerBuilder.newTrigger;
|
||||||
* @author Brian Rosenberger, bru@brutex.de
|
* @author Brian Rosenberger, bru@brutex.de
|
||||||
*/
|
*/
|
||||||
@Slf4j
|
@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
|
public class MiscServiceImpl
|
||||||
implements MiscService {
|
implements MiscService {
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private WebServiceContext context;
|
private WebServiceContext context;
|
||||||
|
|
||||||
public MiscServiceImpl() throws SchedulerException {
|
public MiscServiceImpl() throws SchedulerException {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -174,7 +176,6 @@ public class MiscServiceImpl
|
||||||
public BigInteger lock(String id, String objectId) throws XServicesFault {
|
public BigInteger lock(String id, String objectId) throws XServicesFault {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
final String conString = "jdbc:h2:mem:lockdb;DB_CLOSE_DELAY=10;" +
|
final String conString = "jdbc:h2:mem:lockdb;DB_CLOSE_DELAY=10;" +
|
||||||
"INIT=CREATE SCHEMA IF NOT EXISTS brutex\\;" +
|
"INIT=CREATE SCHEMA IF NOT EXISTS brutex\\;" +
|
||||||
// "SET SCHEMA brutex\\;" +
|
// "SET SCHEMA brutex\\;" +
|
||||||
|
@ -227,6 +228,8 @@ public class MiscServiceImpl
|
||||||
final Instant d = Instant.now();
|
final Instant d = Instant.now();
|
||||||
final long ts = d.toEpochMilli();
|
final long ts = d.toEpochMilli();
|
||||||
|
|
||||||
|
MessageContext cont = context.getMessageContext();
|
||||||
|
|
||||||
//Get Parameters from the Servlet Context
|
//Get Parameters from the Servlet Context
|
||||||
final ServletContext servletContext =
|
final ServletContext servletContext =
|
||||||
(ServletContext) context.getMessageContext().get(MessageContext.SERVLET_CONTEXT);
|
(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 '{}'.",
|
log.debug("Event id '{}', type '{}' received for object '{}' with object_id '{}'.",
|
||||||
eventId, eventType, objectType, objectId);
|
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) " +
|
"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();
|
Marshaller m = JAXBContext.newInstance(ALFEventType.class).createMarshaller();
|
||||||
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
|
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
|
||||||
m.setProperty(Marshaller.JAXB_FRAGMENT, 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();
|
StringWriter sw = new StringWriter();
|
||||||
m.marshal(e, sw);
|
m.marshal(e, sw);
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
|
|
||||||
sb.append(" <soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" " +
|
sb.append(" <soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" " +
|
||||||
"xmlns:ns=\"http://www.eclipse.org/alf/schema/EventBase/1\">\n");
|
"xmlns:ns=\"http://www.eclipse.org/alf/schema/EventBase/1\">\n");
|
||||||
sb.append("<soapenv:Body>\n");
|
sb.append("<soapenv:Body>\n");
|
||||||
sb.append("<ns:EventNotice>\n");
|
|
||||||
sb.append(sw);
|
sb.append(sw);
|
||||||
sb.append("</ns:EventNotice>\n");
|
|
||||||
sb.append("</soapenv:Body>");
|
sb.append("</soapenv:Body>");
|
||||||
sb.append("</soapenv:Envelope>");
|
sb.append("</soapenv:Envelope>");
|
||||||
|
|
||||||
Connection con = pool.getConnection();
|
|
||||||
PreparedStatement prep = con.prepareStatement(mergeStatememt);
|
PreparedStatement prep = con.prepareStatement(mergeStatememt);
|
||||||
prep.setString(1, eventType);
|
prep.setString(1, eventType);
|
||||||
prep.setString(2, eventId);
|
prep.setString(2, eventId);
|
||||||
|
@ -281,12 +288,35 @@ public class MiscServiceImpl
|
||||||
prep.setString(4, objectId);
|
prep.setString(4, objectId);
|
||||||
prep.setLong(5, ts);
|
prep.setLong(5, ts);
|
||||||
prep.setClob(6, new StringReader(sb.toString()));
|
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();
|
prep.execute();
|
||||||
|
|
||||||
con.commit();
|
con.commit();
|
||||||
con.close();
|
con.close();
|
||||||
|
|
||||||
ingres_counter.incrementAndGet();
|
ingres_counter.incrementAndGet();
|
||||||
|
|
||||||
|
if (conf.isEmitterActive()) {
|
||||||
synchronized (scheduler) {
|
synchronized (scheduler) {
|
||||||
if (!scheduler.checkExists(JobKey.jobKey("ALFEmitter"))) {
|
if (!scheduler.checkExists(JobKey.jobKey("ALFEmitter"))) {
|
||||||
JobDetail job2 = JobBuilder.newJob(EventEmitter.class)
|
JobDetail job2 = JobBuilder.newJob(EventEmitter.class)
|
||||||
|
@ -307,6 +337,7 @@ public class MiscServiceImpl
|
||||||
scheduler.scheduleJob(job2, t);
|
scheduler.scheduleJob(job2, t);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} catch (JAXBException | SQLException | SchedulerException e) {
|
} catch (JAXBException | SQLException | SchedulerException e) {
|
||||||
log.error(e.getMessage());
|
log.error(e.getMessage());
|
||||||
throw new XServicesFault(e);
|
throw new XServicesFault(e);
|
||||||
|
|
|
@ -4,7 +4,7 @@ CREATE SCHEMA IF NOT EXISTS brutex;
|
||||||
CREATE TABLE IF NOT EXISTS brutex.tbl_events
|
CREATE TABLE IF NOT EXISTS brutex.tbl_events
|
||||||
(
|
(
|
||||||
btx_event_type VARCHAR(128) NOT NULL,
|
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_type VARCHAR(32) NOT NULL,
|
||||||
btx_obj_id VARCHAR(32) NOT NULL,
|
btx_obj_id VARCHAR(32) NOT NULL,
|
||||||
btx_timestamp BIGINT 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_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_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
|
CREATE TABLE IF NOT EXISTS brutex.tbl_events_snap
|
||||||
(
|
(
|
||||||
btx_event_type VARCHAR(128) NOT NULL,
|
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_type VARCHAR(32) NOT NULL,
|
||||||
btx_obj_id VARCHAR(32) NOT NULL,
|
btx_obj_id VARCHAR(32) NOT NULL,
|
||||||
btx_timestamp BIGINT 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
|
CREATE TABLE IF NOT EXISTS brutex.tbl_events_errors
|
||||||
(
|
(
|
||||||
btx_event_type VARCHAR(128) NOT NULL,
|
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_type VARCHAR(32) NOT NULL,
|
||||||
btx_obj_id VARCHAR(32) NOT NULL,
|
btx_obj_id VARCHAR(32) NOT NULL,
|
||||||
btx_timestamp BIGINT 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_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 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
|
# 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
|
# Merging interval in seconds
|
||||||
# This specifies the minimum time the service will merge incoming events before starting
|
# 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.
|
# This is the JDBC connection string.
|
||||||
# default: fdb = jdbc:h2:file:~/alf_event_db
|
# default: fdb = jdbc:h2:file:~/alf_event_db
|
||||||
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>
|
||||||
<servlet-name>H2Console</servlet-name>
|
<servlet-name>H2Console</servlet-name>
|
||||||
<servlet-class>org.h2.server.web.WebServlet</servlet-class>
|
<servlet-class>org.h2.server.web.WebServlet</servlet-class>
|
||||||
<!--
|
<!-- this should be deactivated or protected -->
|
||||||
<init-param>
|
<init-param>
|
||||||
<param-name>webAllowOthers</param-name>
|
<param-name>webAllowOthers</param-name>
|
||||||
<param-value></param-value>
|
<param-value>true</param-value>
|
||||||
</init-param>
|
</init-param>
|
||||||
<init-param>
|
<!--
|
||||||
|
<init-param>
|
||||||
<param-name>trace</param-name>
|
<param-name>trace</param-name>
|
||||||
<param-value></param-value>
|
<param-value></param-value>
|
||||||
</init-param>
|
</init-param>
|
||||||
-->
|
-->
|
||||||
<load-on-startup>1</load-on-startup>
|
<load-on-startup>1</load-on-startup>
|
||||||
</servlet>
|
</servlet>
|
||||||
<servlet-mapping>
|
<servlet-mapping>
|
||||||
|
|
Loading…
Reference in New Issue