//xservices/trunk/src/main/java/net/brutex/xservices/types/alfevent/ALFEventBase_1.xsd |
---|
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> |
//xservices/trunk/src/main/java/net/brutex/xservices/types/alfevent/ALFEventManagerDocLit.xsd |
---|
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> |
//xservices/trunk/src/main/java/net/brutex/xservices/types/alfevent/ALFEventResponseType.java |
---|
1,10 → 1,13 |
package net.brutex.xservices.types.alfevent; |
import java.util.ArrayList; |
import java.util.List; |
import javax.xml.bind.annotation.XmlAccessType; |
import javax.xml.bind.annotation.XmlAccessorType; |
import javax.xml.bind.annotation.XmlAnyElement; |
import javax.xml.bind.annotation.XmlType; |
import org.w3c.dom.Element; |
/** |
17,7 → 20,7 |
* <complexContent> |
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> |
* <sequence> |
* <any minOccurs="0"/> |
* <any processContents='lax' maxOccurs="unbounded" minOccurs="0"/> |
* </sequence> |
* </restriction> |
* </complexContent> |
33,30 → 36,36 |
public class ALFEventResponseType { |
@XmlAnyElement(lax = true) |
protected Object any; |
protected List<Object> any; |
/** |
* Ruft den Wert der any-Eigenschaft ab. |
* Gets the value of the any property. |
* |
* @return |
* possible object is |
* {@link Object } |
* <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. |
* |
*/ |
public Object getAny() { |
return any; |
} |
/** |
* Legt den Wert der any-Eigenschaft fest. |
* <p> |
* For example, to add a new item, do as follows: |
* <pre> |
* getAny().add(newItem); |
* </pre> |
* |
* @param value |
* allowed object is |
* |
* <p> |
* Objects of the following type(s) are allowed in the list |
* {@link Element } |
* {@link Object } |
* |
* |
*/ |
public void setAny(Object value) { |
this.any = value; |
public List<Object> getAny() { |
if (any == null) { |
any = new ArrayList<Object>(); |
} |
return this.any; |
} |
} |
//xservices/trunk/src/main/java/net/brutex/xservices/types/alfevent/ALFEventType.java |
---|
145,8 → 145,8 |
* |
* <p> |
* Objects of the following type(s) are allowed in the list |
* {@link Element } |
* {@link Object } |
* {@link Element } |
* |
* |
*/ |
//xservices/trunk/src/main/java/net/brutex/xservices/types/alfevent/ALFEventWithReplyResponseType.java |
---|
1,10 → 1,13 |
package net.brutex.xservices.types.alfevent; |
import java.util.ArrayList; |
import java.util.List; |
import javax.xml.bind.annotation.XmlAccessType; |
import javax.xml.bind.annotation.XmlAccessorType; |
import javax.xml.bind.annotation.XmlAnyElement; |
import javax.xml.bind.annotation.XmlType; |
import org.w3c.dom.Element; |
/** |
17,7 → 20,7 |
* <complexContent> |
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> |
* <sequence> |
* <any minOccurs="0"/> |
* <any processContents='lax' maxOccurs="unbounded" minOccurs="0"/> |
* </sequence> |
* </restriction> |
* </complexContent> |
33,30 → 36,36 |
public class ALFEventWithReplyResponseType { |
@XmlAnyElement(lax = true) |
protected Object any; |
protected List<Object> any; |
/** |
* Ruft den Wert der any-Eigenschaft ab. |
* Gets the value of the any property. |
* |
* @return |
* possible object is |
* {@link Object } |
* <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. |
* |
*/ |
public Object getAny() { |
return any; |
} |
/** |
* Legt den Wert der any-Eigenschaft fest. |
* <p> |
* For example, to add a new item, do as follows: |
* <pre> |
* getAny().add(newItem); |
* </pre> |
* |
* @param value |
* allowed object is |
* |
* <p> |
* Objects of the following type(s) are allowed in the list |
* {@link Element } |
* {@link Object } |
* |
* |
*/ |
public void setAny(Object value) { |
this.any = value; |
public List<Object> getAny() { |
if (any == null) { |
any = new ArrayList<Object>(); |
} |
return this.any; |
} |
} |
//xservices/trunk/src/main/java/net/brutex/xservices/types/alfevent/ALFSecurityType.java |
---|
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; |
} |
} |
} |
//xservices/trunk/src/main/java/net/brutex/xservices/types/alfevent/BaseExtensionType.java |
---|
11,6 → 11,7 |
import javax.xml.bind.annotation.XmlAnyElement; |
import javax.xml.bind.annotation.XmlType; |
import javax.xml.namespace.QName; |
import org.w3c.dom.Element; |
/** |
28,7 → 29,7 |
* <complexContent> |
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> |
* <sequence> |
* <any namespace='targetnamespace' maxOccurs="unbounded"/> |
* <any processContents='lax' namespace='http://www.eclipse.org/alf/schema/EventBase/1' maxOccurs="unbounded"/> |
* </sequence> |
* <anyAttribute/> |
* </restriction> |
67,6 → 68,7 |
* |
* <p> |
* Objects of the following type(s) are allowed in the list |
* {@link Element } |
* {@link Object } |
* |
* |
//xservices/trunk/src/main/java/net/brutex/xservices/types/alfevent/CredentialsType.java |
---|
9,6 → 9,7 |
import javax.xml.bind.annotation.XmlAccessorType; |
import javax.xml.bind.annotation.XmlAnyAttribute; |
import javax.xml.bind.annotation.XmlAnyElement; |
import javax.xml.bind.annotation.XmlElement; |
import javax.xml.bind.annotation.XmlType; |
import javax.xml.namespace.QName; |
import org.w3c.dom.Element; |
16,8 → 17,9 |
/** |
* |
* A structure to hold security authentication-relevant data. |
* If present the data within may be encrypted. |
* A structure to hold security |
* authentication-relevant data. If present the |
* data within may be encrypted. |
* |
* |
* <p>Java-Klasse für CredentialsType complex type. |
29,7 → 31,8 |
* <complexContent> |
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> |
* <sequence> |
* <any processContents='lax' maxOccurs="unbounded" minOccurs="0"/> |
* <element name="ALFSecurity" type="{http://www.eclipse.org/alf/schema/EventBase/1}ALFSecurityType" minOccurs="0"/> |
* <any processContents='lax' namespace='##other' maxOccurs="unbounded" minOccurs="0"/> |
* </sequence> |
* <anyAttribute/> |
* </restriction> |
41,10 → 44,13 |
*/ |
@XmlAccessorType(XmlAccessType.FIELD) |
@XmlType(name = "CredentialsType", namespace = "http://www.eclipse.org/alf/schema/EventBase/1", propOrder = { |
"alfSecurity", |
"any" |
}) |
public class CredentialsType { |
@XmlElement(name = "ALFSecurity", namespace = "http://www.eclipse.org/alf/schema/EventBase/1") |
protected ALFSecurityType alfSecurity; |
@XmlAnyElement(lax = true) |
protected List<Object> any; |
@XmlAnyAttribute |
51,6 → 57,30 |
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. |
* |
* <p> |
68,8 → 98,8 |
* |
* <p> |
* Objects of the following type(s) are allowed in the list |
* {@link Element } |
* {@link Object } |
* {@link Element } |
* |
* |
*/ |
//xservices/trunk/src/main/java/net/brutex/xservices/types/alfevent/CustomExtensionType.java |
---|
17,6 → 17,7 |
/** |
* |
* Place holder type for custom Event payload "extensions" |
* ##other namespace is recommended but ##any is specified allowing more primitive sources |
* |
* |
* <p>Java-Klasse für CustomExtensionType complex type. |
28,7 → 29,7 |
* <complexContent> |
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> |
* <sequence> |
* <any processContents='lax' namespace='##other' maxOccurs="unbounded"/> |
* <any processContents='lax' maxOccurs="unbounded"/> |
* </sequence> |
* <anyAttribute/> |
* </restriction> |
67,8 → 68,8 |
* |
* <p> |
* Objects of the following type(s) are allowed in the list |
* {@link Element } |
* {@link Object } |
* {@link Element } |
* |
* |
*/ |
//xservices/trunk/src/main/java/net/brutex/xservices/types/alfevent/DetailExtensionType.java |
---|
16,7 → 16,8 |
/** |
* |
* Place holder type for vocabulary based Event payload "details" |
* Place holder type for vocabulary based Event payload |
* "details" |
* |
* |
* <p>Java-Klasse für DetailExtensionType complex type. |
67,8 → 68,8 |
* |
* <p> |
* Objects of the following type(s) are allowed in the list |
* {@link Element } |
* {@link Object } |
* {@link Element } |
* |
* |
*/ |
//xservices/trunk/src/main/java/net/brutex/xservices/types/alfevent/EmBaseType.java |
---|
31,7 → 31,7 |
* <complexContent> |
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> |
* <sequence> |
* <element name="EmEventId" type="{http://www.w3.org/2001/XMLSchema}string"/> |
* <element name="EmEventId" type="{http://www.eclipse.org/alf/schema/EventBase/1}EventIdType"/> |
* <element name="EmTimestamp" type="{http://www.eclipse.org/alf/schema/EventBase/1}TimestampType"/> |
* <element name="PrecedingEmEventId" type="{http://www.eclipse.org/alf/schema/EventBase/1}EventIdType"/> |
* <element name="ApplicationName" type="{http://www.eclipse.org/alf/schema/EventBase/1}ApplicationNameType"/> |
41,6 → 41,7 |
* <element name="Callback" type="{http://www.w3.org/2001/XMLSchema}boolean"/> |
* <element name="Environment" type="{http://www.eclipse.org/alf/schema/EventBase/1}EnvironmentType"/> |
* <element name="EmUser" type="{http://www.eclipse.org/alf/schema/EventBase/1}CredentialsType"/> |
* <element name="AttemptCount" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/> |
* <element name="EmExtension" type="{http://www.eclipse.org/alf/schema/EventBase/1}EmExtensionType" minOccurs="0"/> |
* </sequence> |
* <anyAttribute/> |
63,6 → 64,7 |
"callback", |
"environment", |
"emUser", |
"attemptCount", |
"emExtension" |
}) |
public class EmBaseType { |
88,6 → 90,8 |
protected String environment; |
@XmlElement(name = "EmUser", namespace = "http://www.eclipse.org/alf/schema/EventBase/1", required = true) |
protected CredentialsType emUser; |
@XmlElement(name = "AttemptCount", namespace = "http://www.eclipse.org/alf/schema/EventBase/1") |
protected Integer attemptCount; |
@XmlElement(name = "EmExtension", namespace = "http://www.eclipse.org/alf/schema/EventBase/1") |
protected EmExtensionType emExtension; |
@XmlAnyAttribute |
326,6 → 330,30 |
} |
/** |
* 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. |
* |
* @return |
//xservices/trunk/src/main/java/net/brutex/xservices/types/alfevent/EmExtensionType.java |
---|
11,6 → 11,7 |
import javax.xml.bind.annotation.XmlAnyElement; |
import javax.xml.bind.annotation.XmlType; |
import javax.xml.namespace.QName; |
import org.w3c.dom.Element; |
/** |
27,7 → 28,7 |
* <complexContent> |
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> |
* <sequence> |
* <any namespace='targetnamespace' maxOccurs="unbounded"/> |
* <any processContents='lax' namespace='http://www.eclipse.org/alf/schema/EventBase/1' maxOccurs="unbounded"/> |
* </sequence> |
* <anyAttribute/> |
* </restriction> |
66,6 → 67,7 |
* |
* <p> |
* Objects of the following type(s) are allowed in the list |
* {@link Element } |
* {@link Object } |
* |
* |
//xservices/trunk/src/main/java/net/brutex/xservices/types/alfevent/EventBaseType.java |
---|
29,7 → 29,7 |
* <complexContent> |
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> |
* <sequence> |
* <element name="EventId" type="{http://www.eclipse.org/alf/schema/EventBase/1}EventIdType"/> |
* <element name="EventId" type="{http://www.eclipse.org/alf/schema/EventBase/1}SourceEventIdType"/> |
* <element name="Timestamp" type="{http://www.eclipse.org/alf/schema/EventBase/1}TimestampType"/> |
* <element name="EventType" type="{http://www.eclipse.org/alf/schema/EventBase/1}EventTypeType"/> |
* <element name="ObjectType" type="{http://www.eclipse.org/alf/schema/EventBase/1}ObjectTypeType"/> |
63,7 → 63,7 |
@XmlElement(name = "EventId", namespace = "http://www.eclipse.org/alf/schema/EventBase/1", required = true) |
protected String eventId; |
@XmlElement(name = "Timestamp", namespace = "http://www.eclipse.org/alf/schema/EventBase/1", required = true) |
@XmlElement(name = "Timestamp", namespace = "http://www.eclipse.org/alf/schema/EventBase/1", required = true, nillable = true) |
@XmlSchemaType(name = "dateTime") |
protected XMLGregorianCalendar timestamp; |
@XmlElement(name = "EventType", namespace = "http://www.eclipse.org/alf/schema/EventBase/1", required = true) |
//xservices/trunk/src/main/java/net/brutex/xservices/types/alfevent/ObjectFactory.java |
---|
24,7 → 24,7 |
@XmlRegistry |
public class ObjectFactory { |
private final static QName _EventNotice_QNAME = new QName("http://www.eclipse.org/alf/schema/EventBase/1", "EventNotice"); |
private final static QName _ALFEventNoticeDoc_QNAME = new QName("http://www.eclipse.org/alf/schema/EventBase/1", "ALFEventNoticeDoc"); |
/** |
* Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: net.brutex.xservices.types.alfevent |
34,6 → 34,14 |
} |
/** |
* Create an instance of {@link ALFSecurityType } |
* |
*/ |
public ALFSecurityType createALFSecurityType() { |
return new ALFSecurityType(); |
} |
/** |
* Create an instance of {@link ALFEventType } |
* |
*/ |
122,12 → 130,20 |
} |
/** |
* Create an instance of {@link ALFSecurityType.UsernameToken } |
* |
*/ |
public ALFSecurityType.UsernameToken createALFSecurityTypeUsernameToken() { |
return new ALFSecurityType.UsernameToken(); |
} |
/** |
* Create an instance of {@link JAXBElement }{@code <}{@link ALFEventType }{@code >}} |
* |
*/ |
@XmlElementDecl(namespace = "http://www.eclipse.org/alf/schema/EventBase/1", name = "EventNotice") |
public JAXBElement<ALFEventType> createEventNotice(ALFEventType value) { |
return new JAXBElement<ALFEventType>(_EventNotice_QNAME, ALFEventType.class, null, value); |
@XmlElementDecl(namespace = "http://www.eclipse.org/alf/schema/EventBase/1", name = "ALFEventNoticeDoc") |
public JAXBElement<ALFEventType> createALFEventNoticeDoc(ALFEventType value) { |
return new JAXBElement<ALFEventType>(_ALFEventNoticeDoc_QNAME, ALFEventType.class, null, value); |
} |
} |
//xservices/trunk/src/main/java/net/brutex/xservices/util/EventEmitter.java |
---|
51,10 → 51,11 |
* Move event table data to snapshot |
*/ |
Connection con = null; |
Connection fcon = null; |
try { |
con = pool.getConnection(); |
try( Connection con = pool.getConnection(); |
Connection fcon = fpool.getConnection(); |
) { |
con.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE); |
con.setAutoCommit(false); |
Statement stmt = con.createStatement(); |
65,7 → 66,7 |
con.commit(); //all events moved from tbl_events to tbl_events_snap at this point |
fcon = fpool.getConnection(); |
PreparedStatement errorPrepSql = fcon.prepareStatement(moveErrorSQL); |
PreparedStatement del = con.prepareStatement(deleteSQL); |
83,7 → 84,8 |
long event_ts = rs.getLong(6); |
boolean bretry = false; |
SimpleSoap ss = new SimpleSoap( url, id, IOUtils.toString(c.getCharacterStream())); |
//SimpleSoap ss = new SimpleSoap( url, id, IOUtils.toString(c.getAsciiStream()c.getCharacterStream())); |
SimpleSoap ss = new SimpleSoap(url, id, c.getSubString(1L, (int) c.length())); |
int retry = 0; |
Reader response = null; |
String rsp = ""; |
152,16 → 154,8 |
} catch (IOException e) { |
log.error("Exception in SQL execution: {}", e.getMessage()); |
throw new RuntimeException(e); |
} finally { |
try { |
if(fcon!=null) fcon.close(); |
if(con!=null) con.close(); |
} catch (SQLException e) { |
log.error("Error closing the database connections: {}", e.getMessage()); |
throw new RuntimeException(e); |
} |
} |
} |
/** |
//xservices/trunk/src/main/java/net/brutex/xservices/util/EventLogCleanerJob.java |
---|
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(); |
} |
} |
//xservices/trunk/src/main/java/net/brutex/xservices/util/EventmanagerConfiguration.java |
---|
8,6 → 8,8 |
import org.apache.commons.configuration2.PropertiesConfiguration; |
import org.apache.commons.configuration2.builder.FileBasedConfigurationBuilder; |
import org.apache.commons.configuration2.builder.PropertiesBuilderParametersImpl; |
import org.apache.commons.configuration2.event.ConfigurationEvent; |
import org.apache.commons.configuration2.event.EventListener; |
import org.apache.commons.configuration2.ex.ConfigurationException; |
import javax.servlet.ServletContext; |
39,6 → 41,8 |
private int interval; |
private String jdbc_memdb; |
private String jdbc_filedb; |
private boolean isEmitterActive = true; |
private int cleaner_interval; |
public synchronized EventmanagerConfiguration refreshConfig() { |
45,7 → 49,7 |
log.trace("Reading EventmanagerConfiguration from file eventmanager.properties."); |
FileBasedConfigurationBuilder<FileBasedConfiguration> builder = |
new FileBasedConfigurationBuilder<FileBasedConfiguration>(PropertiesConfiguration.class) |
.configure(new PropertiesBuilderParametersImpl().setFileName("eventmanager.properties")); |
.configure(new PropertiesBuilderParametersImpl().setFileName("../eventmanager.properties")); |
try { |
Configuration config = builder.getConfiguration(); |
55,6 → 59,8 |
this.interval = config.getInt("interval", 10); |
this.jdbc_memdb = config.getString("memdb", "jdbc:h2:mem:lockdb;DB_CLOSE_DELAY=-1;"); |
this.jdbc_filedb = config.getString("fdb", "jdbc:h2:mem:lockdb;DB_CLOSE_DELAY=-1;"); |
this.isEmitterActive = config.getBoolean("emitter_active", true); |
this.cleaner_interval = config.getInt("cleaner_interval", 5); |
} catch (ConfigurationException e) { |
//xservices/trunk/src/main/java/net/brutex/xservices/util/MiscServiceServletContextListener.java |
---|
15,6 → 15,8 |
import java.sql.SQLException; |
import java.sql.Statement; |
import java.time.Instant; |
import java.time.temporal.ChronoUnit; |
import java.util.Date; |
import java.util.concurrent.atomic.AtomicLong; |
import static org.quartz.TriggerBuilder.newTrigger; |
48,12 → 50,12 |
*/ |
private static JdbcConnectionPool getDbPool(String dbConnectString) { |
JdbcConnectionPool p = JdbcConnectionPool.create(dbConnectString, "", ""); |
p.setMaxConnections(16); |
p.setLoginTimeout(5); |
try { |
Connection c = p.getConnection(); |
p.setMaxConnections(256); |
p.setLoginTimeout(20); |
try (Connection c = p.getConnection();){ |
Statement s = c.createStatement(); |
s.execute(dbinit); |
c.commit(); |
log.trace("Running SQL against database '{}': '{}'", dbConnectString, dbinit); |
c.close(); |
log.debug("Successfully created schema for database 'Brutex' at '{}'.", dbConnectString); |
72,6 → 74,7 |
log.debug("Active jobs to be terminated: {}", scheduler.getCurrentlyExecutingJobs()); |
JobKey key = JobKey.jobKey("ALFEmitter"); |
JobKey cleanerkey = JobKey.jobKey("EventLogCleaner"); |
synchronized (scheduler) { |
if (!scheduler.isShutdown() && scheduler.checkExists(key) ) { |
scheduler.interrupt(key); |
78,6 → 81,11 |
scheduler.deleteJob(key); |
log.info("Gracefully stopped the ALFEventEmitter job."); |
} |
if (!scheduler.isShutdown() && scheduler.checkExists(cleanerkey) ) { |
scheduler.interrupt(cleanerkey); |
scheduler.deleteJob(cleanerkey); |
log.info("Gracefully stopped the ALFEventEmitter job."); |
} |
if (!scheduler.isShutdown()) { |
scheduler.shutdown(true); |
} |
98,12 → 106,19 |
Connection con = fdbpool.getConnection(); |
Statement s = con.createStatement(); |
final String insert = "INSERT INTO brutex.tbl_events SELECT * from LINK UNION SELECT " + "btx_event_type, btx_id, btx_obj_type, btx_obj_id, btx_timestamp, btx_event from LINK2;"; |
final String insert = "INSERT INTO brutex.tbl_events SELECT * from MEM_INBOUND UNION SELECT " + "btx_event_type, btx_id, btx_obj_type, btx_obj_id, btx_timestamp, btx_event from MEM_OUTBOUND;"; |
s.execute(insert); |
int count = s.getUpdateCount(); |
log.info("Persisted {} rows in file-based database.", count); |
log.info("Persisted {} active event rows in file-based database.", count); |
final String save_all = "INSERT INTO brutex.tbl_events_all SELECT * from MEM_ALL_EVENTS;"; |
s.execute(save_all); |
count = s.getUpdateCount(); |
log.info("Persisted {} event rows from all_events log in file-based database", count); |
log.info("Shutting down in-memory database. Closing file-based database. Please wait ..."); |
s.execute("SHUTDOWN;"); |
con.close(); |
log.info("Shutting down databases complete."); |
} catch (SQLException e) { |
141,9 → 156,8 |
//Load events from file based database into in-memory database |
try { |
log.info("Start recovery of previously unsend alf events. Trying to load them into in-memory database."); |
final String link = "CREATE LINKED TABLE IF NOT EXISTS LINK('org.h2.Driver', '"+configuration.getJdbc_memdb()+"', '', '', 'brutex.tbl_events'); " + |
"CREATE LINKED TABLE IF NOT EXISTS LINK2('org.h2.Driver', '"+configuration.getJdbc_memdb()+"', '', '', 'brutex.tbl_events_snap');"; |
final String recoverSQL = "INSERT INTO LINK DIRECT SELECT * FROM brutex.tbl_events;"; |
final String link = getLinkSQL(); |
final String recoverSQL = "INSERT INTO MEM_INBOUND DIRECT SELECT * FROM brutex.tbl_events;"; |
final String truncate = "TRUNCATE TABLE brutex.tbl_events;"; |
int count = 0; |
Connection con = fdbpool.getConnection(); |
163,10 → 177,26 |
throw new RuntimeException(e); |
} |
//Start initial run of the emitter |
if(configuration.isEmitterActive()) { |
startEmitterImmediate(egres, (Scheduler) context.getAttribute("scheduler")); |
} |
private synchronized void startEmitterImmediate(AtomicLong egres_counter, Scheduler scheduler) { |
//Start mem db log cleaner |
if(configuration.getCleaner_interval()>0) { |
startEventLogCleaner((Scheduler) context.getAttribute("scheduler")); |
} |
} |
private String getLinkSQL() { |
final String dbDriverClass = "org.h2.Driver"; |
final String link = "CREATE LINKED TABLE IF NOT EXISTS MEM_INBOUND('"+dbDriverClass+"', '"+configuration.getJdbc_memdb()+"', '', '', 'brutex.tbl_events'); " + |
"CREATE LINKED TABLE IF NOT EXISTS MEM_OUTBOUND('"+dbDriverClass+"', '"+configuration.getJdbc_memdb()+"', '', '', 'brutex.tbl_events_snap'); " + |
"CREATE LINKED TABLE IF NOT EXISTS MEM_ALL_EVENTS('"+dbDriverClass+"', '"+configuration.getJdbc_memdb()+"', '', '', 'brutex.tbl_events_all') AUTOCOMMIT OFF; " + |
""; |
return link; |
} |
private synchronized void startEmitterImmediate(AtomicLong egres, Scheduler scheduler) { |
try { |
if (!scheduler.checkExists(JobKey.jobKey("ALFEmitter"))) { |
JobDetail job2 = JobBuilder.newJob(EventEmitter.class).withIdentity("ALFEmitter").build(); |
173,7 → 203,7 |
job2.getJobDataMap().put("mdbConnection", mempool); |
job2.getJobDataMap().put("fdbConnection", fdbpool); |
job2.getJobDataMap().put("run_key", Instant.now().toEpochMilli()); |
job2.getJobDataMap().put("egres_counter", egres_counter); |
job2.getJobDataMap().put("egres_counter", egres); |
job2.getJobDataMap().put(EventmanagerConfiguration.KEY, EventmanagerConfiguration.getInstance()); |
SimpleTrigger t = (SimpleTrigger) newTrigger().withIdentity("ALFEmitter").startNow().build(); |
scheduler.scheduleJob(job2, t); |
183,6 → 213,27 |
} |
} |
private void startEventLogCleaner(Scheduler scheduler) { |
try { |
if (!scheduler.checkExists(JobKey.jobKey("EventLogCleaner"))) { |
JobDetail job2 = JobBuilder.newJob(EventLogCleanerJob.class).withIdentity("EventLogCleaner").build(); |
job2.getJobDataMap().put("mdbConnection", mempool); |
job2.getJobDataMap().put("fdbConnection", fdbpool); |
job2.getJobDataMap().put("run_key", Instant.now().toEpochMilli()); |
job2.getJobDataMap().put(EventmanagerConfiguration.KEY, EventmanagerConfiguration.getInstance()); |
SimpleTrigger t = (SimpleTrigger) newTrigger().withIdentity("EventLogCleaner") |
.withSchedule(SimpleScheduleBuilder.simpleSchedule() |
.withIntervalInMinutes(configuration.getCleaner_interval()) |
.repeatForever()) |
.startAt(Date.from(Instant.now().plus(configuration.getCleaner_interval(), ChronoUnit.MINUTES))) |
.build(); |
scheduler.scheduleJob(job2, t); |
} |
} catch (SchedulerException ex) { |
log.error("Could not start EventLogCleaner to process existing queue directly after startup: {}", ex.getMessage()); |
} |
} |
private void readConfiguration(ServletContext ctx) { |
/* Configure ServletContext attributes using configuration object*/ |
EventmanagerConfiguration c = EventmanagerConfiguration.getInstance().refreshConfig(); |
//xservices/trunk/src/main/java/net/brutex/xservices/util/SimpleSoap.java |
---|
22,11 → 22,14 |
import org.apache.http.client.entity.EntityBuilder; |
import org.apache.http.client.fluent.Request; |
import org.apache.http.client.fluent.Response; |
import org.apache.http.entity.ContentType; |
import java.io.BufferedReader; |
import java.io.IOException; |
import java.io.InputStreamReader; |
import java.io.Reader; |
import java.nio.charset.Charset; |
import java.nio.charset.StandardCharsets; |
import java.util.concurrent.atomic.AtomicBoolean; |
69,11 → 72,13 |
public Reader sendSoap(boolean isDropResponse) { |
Reader response = null; |
long start = System.currentTimeMillis(); |
EntityBuilder entitybuilder = EntityBuilder.create(); |
entitybuilder.setContentEncoding("UTF-8"); |
entitybuilder.setText(soapBody); |
HttpEntity entity = entitybuilder.build(); |
HttpEntity entity = EntityBuilder.create() |
.setText(soapBody) |
.setContentType(ContentType.create("text/xml", StandardCharsets.UTF_8)) |
.setContentEncoding("UTF-8") |
.build(); |
log.trace("Sending event '{}' to target ALF Event Manager.", id); |
if(isInterrupted.get()) return null; |
81,7 → 86,7 |
try { |
Response resp = Request.Post(url) |
.addHeader("Accept", "text/xml") |
.addHeader("Content-Type", "text/xml; charset=utf-8") |
//.addHeader("Content-Type", "text/xml; charset=utf-8") |
.addHeader("SOAPAction", "") |
.body(entity).execute(); |
//xservices/trunk/src/main/java/net/brutex/xservices/ws/MiscService.java |
---|
74,6 → 74,7 |
public abstract BigInteger lock(@WebParam(name="id") @XmlElement(nillable = false) String id, |
@WebParam(name="objectId") @XmlElement(nillable = false) String objectId) throws XServicesFault; |
@WebMethod(operationName="EventNotice") |
public abstract ALFEventResponseType mergeALFEvent(@WebParam(name="EventNotice", targetNamespace = "http://www.eclipse.org/alf/schema/EventBase/1") ALFEventType event) throws XServicesFault; |
@WebMethod(operationName="", action = "EventNotice") |
@SOAPBinding(use = SOAPBinding.Use.LITERAL, style = SOAPBinding.Style.DOCUMENT, parameterStyle = SOAPBinding.ParameterStyle.BARE) |
public abstract ALFEventResponseType mergeALFEvent(@WebParam(name="ALFEventNoticeDoc", targetNamespace = "http://www.eclipse.org/alf/schema/EventBase/1") ALFEventType event) throws XServicesFault; |
} |
//xservices/trunk/src/main/java/net/brutex/xservices/ws/impl/MiscServiceImpl.java |
---|
41,6 → 41,7 |
import javax.xml.bind.JAXBElement; |
import javax.xml.bind.JAXBException; |
import javax.xml.bind.Marshaller; |
import javax.xml.namespace.QName; |
import javax.xml.ws.WebServiceContext; |
import javax.xml.ws.handler.MessageContext; |
import java.io.StringReader; |
69,6 → 70,7 |
@Resource |
private WebServiceContext context; |
public MiscServiceImpl() throws SchedulerException { |
} |
174,7 → 176,6 |
public BigInteger lock(String id, String objectId) throws XServicesFault { |
final String conString = "jdbc:h2:mem:lockdb;DB_CLOSE_DELAY=10;" + |
"INIT=CREATE SCHEMA IF NOT EXISTS brutex\\;" + |
// "SET SCHEMA brutex\\;" + |
227,6 → 228,8 |
final Instant d = Instant.now(); |
final long ts = d.toEpochMilli(); |
MessageContext cont = context.getMessageContext(); |
//Get Parameters from the Servlet Context |
final ServletContext servletContext = |
(ServletContext) context.getMessageContext().get(MessageContext.SERVLET_CONTEXT); |
251,29 → 254,33 |
log.debug("Event id '{}', type '{}' received for object '{}' with object_id '{}'.", |
eventId, eventType, objectType, objectId); |
final String mergeStatememt = "MERGE INTO brutex.tbl_events " + |
final String mergeStatememt = "SELECT btx_id FROM OLD TABLE (MERGE INTO brutex.tbl_events " + |
"KEY (btx_event_type, btx_obj_type, btx_obj_id) " + |
"VALUES (?,?,?,?,?,?);"; |
"VALUES (?,?,?,?,?,?));"; |
final String insertAll = "INSERT INTO brutex.tbl_events_all VALUES (?,?,?,?,?,?,?)"; |
try { |
try (Connection con = pool.getConnection()) { |
Marshaller m = JAXBContext.newInstance(ALFEventType.class).createMarshaller(); |
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); |
m.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE); |
JAXBElement<ALFEventType> e = of.createEventNotice(event); |
m.setProperty(Marshaller.JAXB_ENCODING, "UTF-8"); |
JAXBElement<ALFEventType> e = of.createALFEventNoticeDoc(event); |
StringWriter sw = new StringWriter(); |
m.marshal(e, sw); |
StringBuilder sb = new StringBuilder(); |
sb.append(" <soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" " + |
"xmlns:ns=\"http://www.eclipse.org/alf/schema/EventBase/1\">\n"); |
sb.append("<soapenv:Body>\n"); |
sb.append("<ns:EventNotice>\n"); |
sb.append(sw); |
sb.append("</ns:EventNotice>\n"); |
sb.append("</soapenv:Body>"); |
sb.append("</soapenv:Envelope>"); |
Connection con = pool.getConnection(); |
PreparedStatement prep = con.prepareStatement(mergeStatememt); |
prep.setString(1, eventType); |
prep.setString(2, eventId); |
281,12 → 288,35 |
prep.setString(4, objectId); |
prep.setLong(5, ts); |
prep.setClob(6, new StringReader(sb.toString())); |
ResultSet r = prep.executeQuery(); |
con.commit(); |
String supersed_id = null; |
if (r.next()) { |
supersed_id = r.getString(1); |
log.trace("Event '{}' superseded event '{}'", eventId, supersed_id); |
} else { |
log.trace("Event '{}' inserted into outgoing queue.", eventId); |
} |
/* Write all into permanent storage */ |
//Connection fcon = fpool.getConnection(); |
prep = con.prepareStatement(insertAll); |
prep.setString(1, eventType); |
prep.setString(2, eventId); |
prep.setString(3, objectType); |
prep.setString(4, objectId); |
prep.setLong(5, ts); |
prep.setString(6, supersed_id); |
prep.setClob(7, new StringReader(sb.toString())); |
prep.execute(); |
con.commit(); |
con.close(); |
ingres_counter.incrementAndGet(); |
if (conf.isEmitterActive()) { |
synchronized (scheduler) { |
if (!scheduler.checkExists(JobKey.jobKey("ALFEmitter"))) { |
JobDetail job2 = JobBuilder.newJob(EventEmitter.class) |
307,6 → 337,7 |
scheduler.scheduleJob(job2, t); |
} |
} |
} |
} catch (JAXBException | SQLException | SchedulerException e) { |
log.error(e.getMessage()); |
throw new XServicesFault(e); |