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); |