Low-latency Financial Information Exchange (FIX) engine for the JVM

Overview

Philadelphia

Philadelphia is a low-latency Financial Information Exchange (FIX) engine for the JVM.

You can use Philadelphia to connect to stock exchanges, brokerage firms, and other network endpoints that use the FIX protocol. You can also use it to provide your own services using the FIX protocol.

Philadelphia is designed to exhibit low and predictable latency. To achieve this, it supports non-blocking, zero-copy networking and does not allocate any memory on message reception or transmission. It can achieve 7.7 µs round-trip time (RTT) over the loopback interface.

Philadelphia requires Java Runtime Environment (JRE) 8 or newer.

Download

See the latest release on GitHub.

Modules

Philadelphia contains the following libraries:

See the FIX Trading Community for the protocol specifications and Philadelphia Extras for additional FIX dialects.

Philadelphia contains the following applications:

  • Terminal Client is a simple console application for interacting with a FIX acceptor.

  • Code Generator is a simple console application for generating Philadelphia profiles for FIX dialects.

Philadelphia contains the following example applications:

Philadelphia contains the following test applications:

  • Performance Test contains microbenchmarks for the FIX protocol implementation.

Links

For more information on Philadelphia:

License

Copyright 2015 Philadelphia authors.

Released under the Apache License, Version 2.0. See LICENSE.txt for details.

Comments
  • Accessing FIXSession inside FIXStatusListener

    Accessing FIXSession inside FIXStatusListener

    In the example Initiator a FIXStatusListener is passed to the FIXSession as anonymous class (see here). For more complicated FIXStatusListeners (or for multiple active FIXSessions) it's not convenient to pass it as anonymous class and thus I ended up with the repetitive and bit awkward pattern

    BaseFixStatusListener statusListener = new BaseFixStatusListener();
    FIXSession fixSession = new FIXSession(channel, fixConfig, inbound, statusListener);
    statusListener.setFIXSession(fixSession);
    

    Where the BaseFixStatusListener has a setFIXSession method. If you always want to access the FIXSession in a FixStatusListener it might make sense to add such a setter method to the interface, or similar.

    enhancement 
    opened by jheusser 13
  • Allow to pass other channel types

    Allow to pass other channel types

    Raising this pull request as a proposal for issue #236

    The change changes the raw signature of FIXConnection.getChannel() in backwards incompatible way. The migration fix for existing usages would be to either specify generic parameter or to downcast.

    I have made the FIXInitiatorTest abstract and pushed the current implementation into a FIXInitiatorSocketTest subclass. I have also added FIXInitiatorPipeTest as an example of how to use the new functionality.

    opened by ddimtirov 12
  • philadelphia-client: Add 'expect' command

    philadelphia-client: Add 'expect' command

    Philadelphia Terminal Client can run scripts nowadays. For testing FIX acceptors, an expect command would be useful. The syntax of the command could be similar to the syntax of the send command. For example:

    expect 35=A|98=0|108=30
    

    On the other hand, it should also be possible to skip the expectation for a specific field value, such as the OrderID(37) and ExecID(17) values here:

    expect 35=8|37|11=1|17|150=0|39=0|55=AAPL|54=1|38=100|151=100|14=0|6=0.00
    

    Like send, expect should expect the fields in the specified order.

    An open question is how expect commands should match with incoming messages. Should the expect commands form a FIFO queue against the first of which an incoming message is matched? What should happen if an expectation fails?

    enhancement help wanted 
    opened by jvirtanen 11
  • dalvikvm: GC_FOR-ALLOC

    dalvikvm: GC_FOR-ALLOC

    When y run philadelphia on an android device, I receive a lot of messages like: D/dalvikvm: GC_FOR_ALLOC freed 1025K, 47% free 8909K/16584K, paused 21ms, total 22ms D/dalvikvm: GC_FOR_ALLOC freed 2232K, 47% free 8905K/16584K, paused 23ms, total 23ms

    opened by benitovc 9
  • Clean up the API by removing FIXConnection.getChannel()

    Clean up the API by removing FIXConnection.getChannel()

    Removing getChannel() and introducing a second connection constructor with upstream and downstream pipe, allows us to get rid of virtually all generics and simplify the pipe code. It is also increases the encapsulation of the connection opening the possibility of alternative (non-channel based) transports for exotic scenarios, without affecting client code.

    While the getChannel() may look like logical necessity, in practice it was not used in this codebase and I don't find usages in my codebase. If I wanted to get a handle of it, I could have gotten it at the place of constructing the connection.

    opened by ddimtirov 8
  • Implement buffer direct allocation in FIXValue

    Implement buffer direct allocation in FIXValue

    This pull request is meant for discussion and early feedback.

    I thought using a ByteBuffer (with direct allocation) as storage instead of an array could improve performance but my experiments show that the performance has actually decreased (see attached result files). output_test_original.txt output_test_bytebuffer.txt.

    However, it looks that the benchmark: asString has improved.

    In another experiment I noticed that direct allocation has actually decreased the performance further.

    Next steps could be to not use direct allocation and to do the ByteBuffer allocation in FIXMessage. But I will wait for feedback.

    opened by arturo-salinas 8
  • Allow to pass other channel types

    Allow to pass other channel types

    In our testing, we would like to use pipe channels rather than socket channels.

    Looking at the uses of the channel, we should be able to swap the SocketChannel type in FIXConnetion with ByteChannel.

    There would be negative impact of breaking the SocketChannel FIXConnection::getChannel() (it would change the return type)

    Please indicate whether you would consider a Pull Request.

    opened by ddimtirov 7
  • handleLogon() not triggered in case of unexpected msgSeqNum

    handleLogon() not triggered in case of unexpected msgSeqNum

    According to the FIX-specification, chapter "Synchronization after successful logon" --> Link the acknowledgment for the logon is transferred, before the resend request for possible missing message is sent. Philadelphia handles this well, except the logon message is not triggered in the case when msgSeqNum != rxMsgSeqNum

    The sequence number comparison in the MessageHandler of FIXConnection could/should be extended with for example:

    if (msgSeqNum != rxMsgSeqNum) {
    	if (msgType.byteAt(0) == Logon) {
    		handleLogon(message);
    	}
    	handleMsgSeqNum(message, msgType, msgSeqNum);
    	return;
    }
    
    opened by dmech 6
  • Reduce size of FIXSession.MessageHandler method

    Reduce size of FIXSession.MessageHandler method

    This is an issue / PR, the commits just make it clearer.

    Every FIX message passes through the FIXSession.MessageHandler.message method, so it's on the critical path of most FIX applications. Unfortunately with 391 bytes in size it's the only method in Philadelphia larger than the 325 bytes default jvm hot method inline size.

    The commit below reduces the size of the method to 315 bytes which allows inlining. Running the Philadelphia ping pong test before:

    @ 275   com.paritytrading.philadelphia.FIXSession$MessageHandler::message (391 bytes)   hot method too big
    

    after:

    @ 275   com.paritytrading.philadelphia.FIXSession$MessageHandler::message (315 bytes)   inline (hot)
    

    The removal of the check at line 553 should be fine as any message with 2 bytes message type is not the most common message type and caught by the default-case in the switch statement (assuming no such message type would match 0-A in the first byte which would be retarded). As we are not doing the length check anymore we directly access the char at offset 0, and if there's no match it passes it downstream.

    opened by jheusser 6
  • Make Joda Time optional at runtime

    Make Joda Time optional at runtime

    I am using Philadelphia Fix in a command line utility that I'm packaging as a GraalVM executable, and the Joda Time is a pet peeve of mine as it adds 2 MB to the total size of the executable,

    I am proposing the following changes, and I would submit a PR if I get an indication that they are desirable.

    Background:
    Looking at the use of Joda Time in Philadelphia codebase I see it is limited to FIXTimestamps, FIXConnection and FIXValue. From Joda time, we use DateTimeZone, ReadableDateTime and MutableDateTime,

    Proposal:
    I would like to propose the following:

    • In FIXTimestamps, add an overloaded append() method that accepts a long timestamp and formats it as UTC date.
    • In FIXConnection, change the type of currentTime from MutableDateTime with long. This will also simplify updateCurrentTimestamp() and reduce copying (not that it matters that much).
    • In FIXValue, add more getter and setter overloads using long timestamp
      • Question: do we also wand JSR310 overloads? Convenient, but allocating garbage when we don't want it.

    Expected result:

    • This will make the library interoperate better with our existing code, without having to convert to intermediate Joda Time representation.
    • In the case of GraaVM NI, Gradle Shade relocation, minimization, etc. if the Joda time is not explicitly used, the code and dependency would be automatically removed.
    opened by ddimtirov 5
  • philadelphia-core: Fix EndSeqNo(16) handling

    philadelphia-core: Fix EndSeqNo(16) handling

    The value 0 for the EndSeqNo(16) field in a ResendRequest(2) message should represent infinity and correspond to all subsequent messages after the message referred to by the BeginSeqNo(7) field.

    As noticed by @mhartememx, the handling for this value is currently broken. Fix this.

    opened by jvirtanen 5
  • philadelphia-core: Introduce message capacity

    philadelphia-core: Introduce message capacity

    Simplify configuration by introducing the concept of message capacity: the number of fields a message container can hold. A message container starts at its initial message capacity and grows when necessary until it reaches its maximum message capacity.

    This change introduces one conditional statement on the fast path, in the FIXMessage#addField() method. Based on the performance test, this has no measurable impact. Note that for the best performance, an application should still set the initial and the maximum message capacity to the same value, as growing a message container will have discernible effect.

    opened by jvirtanen 0
  • Run Philadelphia against QuickFIX/J acceptance test suite

    Run Philadelphia against QuickFIX/J acceptance test suite

    QuickFIX/J has a large acceptance test suite written in a simple domain-specific language (DSL) not unlike the one FIXInitiatorTest uses. Due to the comprehensive nature of this acceptance test suite, at least two other FIX protocol implementations, Artio and Imandra, have support for it (1, 2).

    It would be valuable to be able to run also Philadelphia against the QuickFIX/J acceptance test suite. Let's explore on this issue what would be the best way to do that.

    enhancement 
    opened by jvirtanen 0
Releases(2.0.0)
  • 2.0.0(Oct 29, 2022)

    Release Notes

    See the upgrade instructions.

    • Make FIXCheckSums package-private (Jussi Virtanen)

      Despite being public, FIXCheckSums is essentially an internal utility class. Make it package-private to reflect this and gain more flexibility for the future.

    • Make FIXTags package-private (Jussi Virtanen)

      See above.

    • Remove FIXTimestamps (Jussi Virtanen)

      See above.

    • Improve FIXValue (Jussi Virtanen)

      Make the FIXValue class implement the CharSequence interface. Change the return type of the FIXValue#asString method from String to CharSequence to avoid memory allocation, and remove the FIXValue#asString(Appendable) and FIXValue#asString(StringBuilder) methods as superfluous.

      Split the FIXValue#setTimeOnly method into FIXValue#setTimeOnlyMillis and FIXTimeOnly#setTimeOnlySecs, and split the FIXValue#setTimestamp method into FIXValue#setTimestampMillis and FIXValue#setTimestampSecs.

      Remove the FIXValue#asCheckSum method.

    • Improve FIXConnection (Dimitar Dimitrov, dmech, Jussi Virtanen)

      Remove the Clock interface, and make the FIXConnection constructors to take the current timestamp in milliseconds instead. Replace the FIXConnection#updateCurrentTimestamp method with FIXConnection#setCurrentTimeMillis.

      Remove the FIXConnection#updateCompID method. Use FIXConnection#getSenderCompID and FIXValue#getTargetCompID together with the FIXValue methods instead.

      Add support for other channel types besides SocketChannel, and add support for separate channels for receiving and transmitting data. Remove the FIXConnection#getChannel method to facilitate this.

      Remove the FIXConnectionStatusListener#heartbeatTimeout method, and add the FIXHeartbeatTimeoutException class. Throw this exception when a heartbeat timeout is detected in the FIXConnection#keepAlive method.

      Make FIXConnectionStatusListener, and therefore the default administrative message handling, optional. This makes it possible for applications to handle inbound administrative messages themselves.

      Add the methods FIXConnection#setInMsgSeqNum, FIXConnection#setOutMsgSeqNum, FIXConnection#setSenderCompID, and FIXConnection#setTargetCompID. Rename the FIXConnection#getIncomingMsgSeqNum method to getInMsgSeqNum, and rename the FIXConnection#getOutgoingMsgSeqNum method to setOutMsgSeqNum.

    • Add FIXTimestamp (Jussi Virtanen)

      Replace uses of Joda-Time's MutableDateTime class and ReadableDateTime interface with a FIXTimestamp class. While its design is inspired by the java.time package and the LocalDateTime class in particular, it is mutable unlike LocalDateTime.

      With FIXTimestamp, the date and time operations on FIXValue become at best over three times as fast as they were with MutableDateTime. These benchmarks include the conversion from date and time fields into a timestamp in millisecods or vice versa. However, as FIXTimestamp internally stores the instant it represents in date and time fields rather than as a timestamp in milliseconds, these conversions only take place when explicitly invoking the FIXTimestamp#getEpochMilli and FIXTimestamp#setEpochMilli methods.

      This change removes the Joda-Time 2.x dependency.

    • Update FIX 4.3 support (Jussi Virtanen)

      Regenerate the FIX 4.3 support from the latest FIX Repository version.

    • Update FIXT 1.1 support (Jussi Virtanen)

      Regenerate the FIXT 1.1 support from the latest FIX Ochestra version.

    • Add FIX 4.0 support (Jussi Virtanen)

    • Add FIX 4.1 support (Jussi Virtanen)

    • Improve FIXConfig (Jussi Virtanen)

      Define constants for default values. Add a static FIXConfig.newBuilder method to simplify FIXConfig.Builder construction. Add a FIXConfig.DEFAULTS constant to simplify default configuration usage.

      Replace the FIXConfig#getVersion method with a FIXConfig#getBeginString method.

      Rename the FIXConfig#getIncomingMsgSeqNum method to FIXConfig#getInMsgSeqNum and the FIXConfig.Builder#getOutgoingMsgSeqNum method to FIXConfig#getOutMsgSeqNum. Rename the corresponding methods in FIXConfig.Builder similarly to FIXConfig.Builder#setInMsgSeqNum and FIXConfig.Builder#setOutMsgSeqNum.

    • Update FIX Latest support (Jussi Virtanen)

      Regenerate the FIX Latest support from the latest FIX Orchestra version, including Extension Packs up to EP272.

    Maven

    The following artifacts are available in the Central Repository:

    Group ID | Artifact ID | Version ---------------------------------|--------------------------|-------- com.paritytrading.philadelphia | philadelphia-core | 2.0.0 com.paritytrading.philadelphia | philadelphia-fix40 | 2.0.0 com.paritytrading.philadelphia | philadelphia-fix41 | 2.0.0 com.paritytrading.philadelphia | philadelphia-fix42 | 2.0.0 com.paritytrading.philadelphia | philadelphia-fix43 | 2.0.0 com.paritytrading.philadelphia | philadelphia-fix44 | 2.0.0 com.paritytrading.philadelphia | philadelphia-fix50 | 2.0.0 com.paritytrading.philadelphia | philadelphia-fix50sp1 | 2.0.0 com.paritytrading.philadelphia | philadelphia-fix50s2p | 2.0.0 com.paritytrading.philadelphia | philadelphia-fixlatest | 2.0.0 com.paritytrading.philadelphia | philadelphia-fixt11 | 2.0.0

    Source code(tar.gz)
    Source code(zip)
    philadelphia-2.0.0.zip(3.27 MB)
  • 1.3.2(Oct 28, 2022)

    Release Notes

    • Improve Logon(A) handling (dmech)

      Handle a Logon(A) message with too high MsgSeqNum(34) value, but send a Logout(5) message when receiving a Logon(A) message with too low MsgSeqNum(34) value.

    Maven

    The following artifacts are available in the Central Repository:

    Group ID | Artifact ID | Version ---------------------------------|--------------------------|-------- com.paritytrading.philadelphia | philadelphia-core | 1.3.2 com.paritytrading.philadelphia | philadelphia-fix42 | 1.3.2 com.paritytrading.philadelphia | philadelphia-fix43 | 1.3.2 com.paritytrading.philadelphia | philadelphia-fix44 | 1.3.2 com.paritytrading.philadelphia | philadelphia-fix50 | 1.3.2 com.paritytrading.philadelphia | philadelphia-fix50sp1 | 1.3.2 com.paritytrading.philadelphia | philadelphia-fix50s2p | 1.3.2 com.paritytrading.philadelphia | philadelphia-fixlatest | 1.3.2 com.paritytrading.philadelphia | philadelphia-fixt11 | 1.3.2

    Source code(tar.gz)
    Source code(zip)
    philadelphia-1.3.2.zip(5.01 MB)
  • 1.3.1(May 21, 2022)

    Release Notes

    • Fix MsgSeqNum(34) handling on SequenceReset(4) (Vadim Platonov, Jussi Virtanen)

      Do not increment the outgoing MsgSeqNum(34) value when sending a SequenceReset(4) message.

    • Improve Logout(5) handling (Vadim Platonov, Jussi Virtanen)

      Handle a Logout(5) message with too low MsgSeqNum(34) value, but still send a ResendRequest(2) message when receiving a Logout(5) message with too high MsgSeqNum(34) value.

    Maven

    The following artifacts are available in the Central Repository:

    Group ID | Artifact ID | Version ---------------------------------|--------------------------|-------- com.paritytrading.philadelphia | philadelphia-core | 1.3.1 com.paritytrading.philadelphia | philadelphia-fix42 | 1.3.1 com.paritytrading.philadelphia | philadelphia-fix43 | 1.3.1 com.paritytrading.philadelphia | philadelphia-fix44 | 1.3.1 com.paritytrading.philadelphia | philadelphia-fix50 | 1.3.1 com.paritytrading.philadelphia | philadelphia-fix50sp1 | 1.3.1 com.paritytrading.philadelphia | philadelphia-fix50s2p | 1.3.1 com.paritytrading.philadelphia | philadelphia-fixlatest | 1.3.1 com.paritytrading.philadelphia | philadelphia-fixt11 | 1.3.1

    Source code(tar.gz)
    Source code(zip)
    philadelphia-1.3.1.zip(5.00 MB)
  • 1.3.0(May 21, 2021)

    Release Notes

    • Improve FIXValueTest (Jussi Virtanen)

      Make test cases that rely on the side effect of an attempt to read an incomplete value from a buffer partially populating the value container to actually read a complete value.

      Improve test coverage for all FIXValue methods.

    • Optimize FIXValue (Jussi Virtanen)

      Decrease the bytecode size of the FIXValue#setDigits method from 44 to 31 bytes, which is within HotSpot's default maximum inline size of 35 bytes. This makes the following methods faster:

      • FIXValue#setCheckSum
      • FIXValue#setDate
      • FIXValue#setTimeOnly
      • FIXValue#setTimestamp

      Decrease the bytecode size of the FIXValue#setInt method from 102 to 79 bytes, making it faster.

      Decrease the bytecode size of the FIXValue#setFloat method from 177 to 161 bytes, making it faster.

    • Add FIXMessage(FIXConfig) (Jussi Virtanen)

    • Add FIXValue#toString (Jussi Virtanen)

    • Add FIXMessage#valueOf(int,int) and FIXMessage#indexOf(int,int) (Kasimir Torri)

      Make it possible to get the index or the value container of the first instance of a field with a specific tag, starting from a specific index.

    • Optimize FIXTimestamps (Jussi Virtanen)

      Decrease the bytecode size of the FIXTimestamps.setDigits method from 36 to 28 bytes, which is within HotSpot's default maximum inline size of 35 bytes. This makes the FIXTimestamps.append method faster.

    • Add FIXValue#asString(Appendable) (Jussi Virtanen)

    • Add FIXValue#contentEquals (Jussi Virtanen)

    • Add FIX Orchestra support to Philadelphia Code Generator (Jussi Virtanen)

    • Add FIX Latest support (Jussi Virtanen)

    • Improve FIXMessageParser (Jussi Virtanen)

      Optimize parsing of the BeginString(8), BodyLength(9), and CheckSum(10) values, making message parsing faster.

    • Fix EndSeqNo(16) handling (Marcus Harte, Jussi Virtanen)

      Handle the value 0 for the EndSeqNo(16) field in a ResendRequest(2) message correctly. This value represents infinity and corresponds to all subsequent messages after the message referred to by the BeginSeqNo(7) field.

    • Improve BeginSeqNo(7) handling (Marcus Harte, Jussi Virtanen)

      Respond with a Reject(3) message if the BeginSeqNo(7) value in a ResendRequest(2) message exceeds the current MsgSeqNum(34) value.

    • Improve NewSeqNo(36) handling (Marcus Harte, Jussi Virtanen)

      Limit the NewSeqNo(36) value in a subsequent SequenceReset(4) message to the current MsgSeqNum(34) if the EndSeqNo(16) value in the preceding ResendRequest(2) message exceeds it.

    Maven

    The following artifacts are available in the Central Repository:

    Group ID | Artifact ID | Version ---------------------------------|--------------------------|-------- com.paritytrading.philadelphia | philadelphia-core | 1.3.0 com.paritytrading.philadelphia | philadelphia-fix42 | 1.3.0 com.paritytrading.philadelphia | philadelphia-fix43 | 1.3.0 com.paritytrading.philadelphia | philadelphia-fix44 | 1.3.0 com.paritytrading.philadelphia | philadelphia-fix50 | 1.3.0 com.paritytrading.philadelphia | philadelphia-fix50sp1 | 1.3.0 com.paritytrading.philadelphia | philadelphia-fix50s2p | 1.3.0 com.paritytrading.philadelphia | philadelphia-fixlatest | 1.3.0 com.paritytrading.philadelphia | philadelphia-fixt11 | 1.3.0

    Source code(tar.gz)
    Source code(zip)
    philadelphia-1.3.0.zip(5.00 MB)
  • 1.2.0(Mar 3, 2020)

    Release Notes

    See the upgrade instructions.

    • Improve MsgType(35) handling (Jonathan Heusser, Jussi Virtanen)

      When checking for SequenceReset(4), check the first byte of the MsgType(35) value before checking its length. This avoids one conditional check for most messages.

      Remove a dead branch from the MsgType(35) switch statement following the MsgSeqNum(34) handling.

    • Fix send command in Philadelphia Terminal Client (Jussi Virtanen)

      Make it possible to send a message containing a field with whitespace characters.

    • Improve FIXValue#asFloat and FIXValue#setFloat (Jussi Virtanen)

    • Improve FIXValueTest (Jussi Virtanen)

    • Improve FIXConfigTest (Jan Nielsen)

    • Add example script for Philadelphia Terminal Client (Jussi Virtanen)

    • Mark FIXValue#asCheckSum() as deprecated (Jussi Virtanen)

    • Improve Philadelphia Terminal Client documentation (Jussi Virtanen)

    • Improve FIXMessageParserBenchmark (Jussi Virtanen)

      Add a benchmark for when the incoming CheckSum(10) check is disabled.

    • Improve FIXMessageParser (Jussi Virtanen)

      Having the incoming CheckSum(10) check in a separate method makes message parsing 9.6% faster in the performance test when the incoming CheckSum(10) check is disabled and 3.7% faster when it is enabled.

      Inlining parsing of BeginString(8), BodyLength(9), and CheckSum(10) tags makes message parsing further 5.9% faster in the performance test when the incoming CheckSum(10) check is disabled and 6.1% faster when it is enabled.

    • Fix wait command in Philadelphia Terminal Client (Jussi Virtanen)

      The wait command looked at received messages at an interval, stopping if the last received message had a matching MsgType(35) value. If two or more messages were received within one interval, the wait command might have missed a matching MsgType(35) value and erroneously continued waiting.

    • Remove transitive Joda-Time dependency (Jussi Virtanen)

      Replace the transitive Joda-Time 2.10.5 dependency with a Joda-Time 2.x dependency. This makes it possible for applications to manage their Joda-Time 2.x and Philadelphia Core dependencies independently.

    • Improve FIXValue#asTimeOnly (Jussi Virtanen)

      Set the fields all at once rather than one by one. This makes the method 33% faster.

    Maven

    The following artifacts are available in the Central Repository:

    Name | Artifact ID | Version -------------------------|-------------------------|-------- Philadelphia Core | philadelphia-core | 1.2.0 Philadelphia FIX 4.2 | philadelphia-fix42 | 1.2.0 Philadelphia FIX 4.3 | philadelphia-fix43 | 1.2.0 Philadelphia FIX 4.4 | philadelphia-fix44 | 1.2.0 Philadelphia FIX 5.0 | philadelphia-fix50 | 1.2.0 Philadelphia FIX 5.0 SP1 | philadelphia-fix50sp1 | 1.2.0 Philadelphia FIX 5.0 SP2 | philadelphia-fix50s2p | 1.2.0 Philadelphia FIXT 1.1 | philadelphia-fixt11 | 1.2.0

    The Group ID for all artifacts is com.paritytrading.philadelphia.

    Source code(tar.gz)
    Source code(zip)
    philadelphia-1.2.0.zip(4.95 MB)
  • 1.1.1(Jun 25, 2019)

    Release Notes

    • Fix message header buffer handling (Jussi Virtanen)

      Before manipulating the message header, invoke ByteBuffer#clear() to reset the buffer's limit back to its capacity.

    Maven

    The following artifacts are available in the Central Repository:

    Name | Artifact ID | Version -------------------------|-------------------------|-------- Philadelphia Core | philadelphia-core | 1.1.1 Philadelphia FIX 4.2 | philadelphia-fix42 | 1.1.1 Philadelphia FIX 4.3 | philadelphia-fix43 | 1.1.1 Philadelphia FIX 4.4 | philadelphia-fix44 | 1.1.1 Philadelphia FIX 5.0 | philadelphia-fix50 | 1.1.1 Philadelphia FIX 5.0 SP1 | philadelphia-fix50sp1 | 1.1.1 Philadelphia FIX 5.0 SP2 | philadelphia-fix50s2p | 1.1.1 Philadelphia FIXT 1.1 | philadelphia-fixt11 | 1.1.1

    The Group ID for all artifacts is com.paritytrading.philadelphia.

    Source code(tar.gz)
    Source code(zip)
    philadelphia-1.1.1.zip(5.40 MB)
  • 1.1.0(Jun 21, 2019)

    Release Notes

    • Improve FIXValue class (Jonathan Heusser, Jussi Virtanen)

      Make FIXValue#set() work correctly if the specified value container contains a value at a non-zero offset.

      Optimize the bytecode sizes of various methods so that they are under HotSpot's default maximum inline size of 35 bytes. Move the logic to construct and throw exceptions off the fast path. Replace a modulo operation with a bitwise AND operation.

    • Improve FIXConnection class (Jussi Virtanen)

      Simplify message header and trailer handling. Move the logic to handle unexpected MsgSeqNum(34) values as well as construct and throw exceptions off the fast path. Simplify TestRequest(1) and SequenceReset(4) handling.

      After sending a TestRequest(1) message, consider the keep-alive procedure successful on receiving any data from the other party, not just a Heartbeat(0) message.

      Optimize the bytecode sizes of FIXConnection#update() and FIXConnection#updateCompID() so that they are under HotSpot's default maximum inline size of 35 bytes. Note that after this change, these methods will throw a NullPointerException instead of an IllegalStateException if any of the required fields are not found.

    • Optimize FIXMessage class (Jussi Virtanen)

      Move the logic to construct and throw exceptions off the fast path.

    • Optimize FIXTimestamps class (Jussi Virtanen)

      Add a buffer to make formatting operations faster.

    • Improve FIXMessageParser class (Jonathan Heusser, Sergey Khomich, Jussi Virtanen)

      Make the class public. Replace a modulo operation with a bitwise AND operation. Add a performance test.

    • Add FIXValue#asBoolean() and FIXValue#setBoolean() methods (Jussi Virtanen)

    • Optimize FIXTags class (Jussi Virtanen)

      Move the logic to construct and throw exceptions off the fast path.

    • Improve code quality (Jan Nielsen, Jussi Virtanen)

      Clean up project dependencies. Clean up imports. Remove superfluous public modifiers. Use final modifier.

    • Improve Philadelphia Code Generator (Jussi Virtanen)

      Make Philadelphia Code Generator's version track Philadelphia's version. Add a comment to output files indicating that they have been automatically generated.

    • Improve Philadelphia Terminal Client (Jussi Virtanen)

      Handle Ctrl+C and Ctrl+D. Fix command completion.

    • Improve Philadelphia Example Initiator (Arturo Salinas)

      Fix coordinated omission: instead of sending the next message right after receiving the previous message, send messages at regular intervals.

    • Upgrade to Joda-Time 2.10.2 (Jussi Virtanen)

    Maven

    The following artifacts are available in the Central Repository:

    Name | Artifact ID | Version -------------------------|-------------------------|-------- Philadelphia Core | philadelphia-core | 1.1.0 Philadelphia FIX 4.2 | philadelphia-fix42 | 1.1.0 Philadelphia FIX 4.3 | philadelphia-fix43 | 1.1.0 Philadelphia FIX 4.4 | philadelphia-fix44 | 1.1.0 Philadelphia FIX 5.0 | philadelphia-fix50 | 1.1.0 Philadelphia FIX 5.0 SP1 | philadelphia-fix50sp1 | 1.1.0 Philadelphia FIX 5.0 SP2 | philadelphia-fix50s2p | 1.1.0 Philadelphia FIXT 1.1 | philadelphia-fixt11 | 1.1.0

    The Group ID for all artifacts is com.paritytrading.philadelphia.

    Source code(tar.gz)
    Source code(zip)
    philadelphia-1.1.0.zip(5.40 MB)
  • 1.0.0(Aug 17, 2018)

    Release Notes

    • Remove FIXField class
    • Add FIXMessage#tagAt() method
    • Add FIXMessage#valueAt() method
    • Rename FIXMessage#findIndex() method to indexOf()
    • Rename FIXMessage#findField() method to valueOf()
    • Optimize TCP socket handling
    • Add FIXMessage.fromString() method
    • Rename FIXSession class to FIXConnection
    • Rename FIXStatusListener class to FIXConnectionStatusListener
    • Upgrade to Joda-Time 2.10

    See the upgrade instructions for more details.

    Maven

    The following artifacts are available in the Central Repository:

    Name | Artifact ID | Version -------------------------|-------------------------|-------- Philadelphia Core | philadelphia-core | 1.0.0 Philadelphia FIX 4.2 | philadelphia-fix42 | 1.0.0 Philadelphia FIX 4.3 | philadelphia-fix43 | 1.0.0 Philadelphia FIX 4.4 | philadelphia-fix44 | 1.0.0 Philadelphia FIX 5.0 | philadelphia-fix50 | 1.0.0 Philadelphia FIX 5.0 SP1 | philadelphia-fix50sp1 | 1.0.0 Philadelphia FIX 5.0 SP2 | philadelphia-fix50s2p | 1.0.0 Philadelphia FIXT 1.1 | philadelphia-fixt11 | 1.0.0

    The Group ID for all artifacts is com.paritytrading.philadelphia.

    Source code(tar.gz)
    Source code(zip)
    philadelphia-1.0.0.zip(10.83 MB)
  • 0.7.0(Jun 25, 2018)

    Release Notes

    • Add comment support to Philadelphia Terminal Client
    • Add input file support to Philadelphia Terminal Client
    • Improve messages command in Philadelphia Terminal Client
    • Add sleep command to Philadelphia Terminal Client
    • Add wait command to Philadelphia Terminal Client
    • Make Clock interface public
    • Add FIXMessage#findIndex method
    • Clean up MatchType(574) handling in Philadelphia FIX 5.0
    • Add Philadelphia Code Generator

    Maven

    The following artifacts are available in the Central Repository:

    Name | Artifact ID | Version -------------------------|-------------------------|-------- Philadelphia Core | philadelphia-core | 0.7.0 Philadelphia FIX 4.2 | philadelphia-fix42 | 0.7.0 Philadelphia FIX 4.3 | philadelphia-fix43 | 0.7.0 Philadelphia FIX 4.4 | philadelphia-fix44 | 0.7.0 Philadelphia FIX 5.0 | philadelphia-fix50 | 0.7.0 Philadelphia FIX 5.0 SP1 | philadelphia-fix50sp1 | 0.7.0 Philadelphia FIX 5.0 SP2 | philadelphia-fix50s2p | 0.7.0 Philadelphia FIXT 1.1 | philadelphia-fixt11 | 0.7.0

    The Group ID for all artifacts is com.paritytrading.philadelphia.

    Source code(tar.gz)
    Source code(zip)
    philadelphia-0.7.0.zip(9.42 MB)
  • 0.6.1(Mar 6, 2018)

    Release Notes

    • Add FIXMessage#toString() method
    • Add FIXConfig#toString() method
    • Use System.arraycopy() in FIXValue#set() method

    Maven

    The following artifacts are available in the Central Repository:

    Name | Artifact ID | Version -------------------------|-------------------------|-------- Philadelphia Core | philadelphia-core | 0.6.1 Philadelphia FIX 4.2 | philadelphia-fix42 | 0.6.1 Philadelphia FIX 4.3 | philadelphia-fix43 | 0.6.1 Philadelphia FIX 4.4 | philadelphia-fix44 | 0.6.1 Philadelphia FIX 5.0 | philadelphia-fix50 | 0.6.1 Philadelphia FIX 5.0 SP1 | philadelphia-fix50sp1 | 0.6.1 Philadelphia FIX 5.0 SP2 | philadelphia-fix50s2p | 0.6.1 Philadelphia FIXT 1.1 | philadelphia-fixt11 | 0.6.1

    The Group ID for all artifacts is com.paritytrading.philadelphia.

    Source code(tar.gz)
    Source code(zip)
    philadelphia-0.6.1.zip(9.41 MB)
  • 0.6.0(Aug 13, 2017)

    Release Notes

    • Extract Philadelphia FIX 4.2 module
    • Extract Philadelphia FIX 4.3 module
    • Extract Philadelphia FIX 4.4 module
    • Extract Philadelphia FIX 5.0 module
    • Extract Philadelphia FIX 5.0 SP1 module
    • Extract Philadelphia FIX 5.0 SP2 module
    • Extract Philadelphia FIXT 1.1 module
    • Add alias for CxlRejResponseTo(434) value
    • Add FIXValue#copyTo method
    • Clean up QuoteCondition(276) values
    • Make incoming CheckSum(10) check optional
    • Use direct byte buffer
    • Improve FIXSession performance
    • Improve project structure
    • Upgrade to Joda-Time 2.9.9

    Maven

    The following artifacts are available in the Central Repository:

    Name | Artifact ID | Version -------------------------|-------------------------|-------- Philadelphia Core | philadelphia-core | 0.6.0 Philadelphia FIX 4.2 | philadelphia-fix42 | 0.6.0 Philadelphia FIX 4.3 | philadelphia-fix43 | 0.6.0 Philadelphia FIX 4.4 | philadelphia-fix44 | 0.6.0 Philadelphia FIX 5.0 | philadelphia-fix50 | 0.6.0 Philadelphia FIX 5.0 SP1 | philadelphia-fix50sp1 | 0.6.0 Philadelphia FIX 5.0 SP2 | philadelphia-fix50s2p | 0.6.0 Philadelphia FIXT 1.1 | philadelphia-fixt11 | 0.6.0

    The Group ID for all artifacts is com.paritytrading.philadelphia.

    Source code(tar.gz)
    Source code(zip)
    philadelphia-0.6.0.zip(9.40 MB)
  • 0.5.0(Dec 8, 2016)

  • 0.4.0(Dec 8, 2016)

    • Expose next incoming and outgoing MsgSeqNum(34)
    • Expose SenderCompID(49) and TargetCompID(56)
    • Fix handling of incoming message too long to fit into receive buffer
    Source code(tar.gz)
    Source code(zip)
  • 0.3.0(Dec 8, 2016)

  • 0.2.2(Dec 8, 2016)

  • 0.2.1(Dec 8, 2016)

  • 0.2.0(Dec 8, 2016)

    • Add session parameter to session status listener
    • Add FIXT 1.1 support
    • Handle incoming message too long to fit into receive buffer
    • Add terminal client
    • Add FIX 5.0 support
    • Add FIX 5.0 Service Pack 1 support
    • Add FIX 5.0 Service Pack 2 support
    • Upgrade to Java 8
    Source code(tar.gz)
    Source code(zip)
  • 0.1.0(Dec 8, 2016)

Owner
Parity
Open source trading infrastructure
Parity
Equivalent Exchange 3 Apache 2 Equivalent Exchange 3 pahimar Equivalent-Exchange-3. Mods for Minecraft. License: Apache 2 , .

Welcome to Equivalent Exchange 3! All versions are available here Minecraft Forums page Compiling EE3 - For those that want the latest unreleased feat

Rob Davis 709 Dec 15, 2022
Table-Computing (Simplified as TC) is a distributed light weighted, high performance and low latency stream processing and data analysis framework. Milliseconds latency and 10+ times faster than Flink for complicated use cases.

Table-Computing Welcome to the Table-Computing GitHub. Table-Computing (Simplified as TC) is a distributed light weighted, high performance and low la

Alibaba 34 Oct 14, 2022
Crypto-Exchange / Coin-Exchange /BitExchange

Crypto-Exchange / Coin-Exchange /BitExchange

null 28 Aug 1, 2022
Lightning Memory Database (LMDB) for Java: a low latency, transactional, sorted, embedded, key-value store

LMDB for Java LMDB offers: Transactions (full ACID semantics) Ordered keys (enabling very fast cursor-based iteration) Memory-mapped files (enabling o

null 680 Dec 23, 2022
A gulp of low latency Java

SmoothieMap SmoothieMap is a Map implementation for Java with the lowest memory usage and absence of rehash latency spikes. Under the hood, it is a ve

null 278 Oct 31, 2022
Deploys an agent to fix CVE-2021-44228 (Log4j RCE vulnerability) in a running JVM process

-- This repository has been archived -- Further development of this tool will continue at corretto/hotpatch-for-apache-log4j2. Thanks for sharing, com

Volker Simonis 108 Dec 23, 2021
Similar to the minimap application, this program gets information from the center of the screen and displays information about that creature from a database.

New-World-CreatureInfo Similar to the minimap application, this program gets information from the center of the screen and displays information about

Mal Ball 2 Sep 21, 2022
Financial-level flexible distributed transaction solution

Financial-level flexible distributed transaction solution

dromara 3.9k Dec 30, 2022
Squadio-App is a Users-Accounts financial system. exposes Rest APIs with JWT authentication/Authorization process .

squadio-app Description Squadio-App is a Users-Accounts financial system. exposes Rest APIs with JWT authentication/Authorization process . How to Run

Bashar Othman 1 Jan 29, 2022
Spring REST API for financial management, developed with Java 11, JWT for authentication, JUnit for unit testing and Oracle Database

control_financial Spring REST API for financial management, developed with Java 11, JWT for authentication, JUnit for unit testing and Oracle Database

Vinicius Cassaro 1 May 27, 2022
Drools is a rule engine, DMN engine and complex event processing (CEP) engine for Java.

An open source rule engine, DMN engine and complex event processing (CEP) engine for Java™ and the JVM Platform. Drools is a business rule management

KIE (Drools, OptaPlanner and jBPM) 4.9k Dec 31, 2022
fabric-carpet extension mod which attempts to fix as many vanilla bugs as possible. Feel free to add as many fixes as you want!

Carpet-Fixes Fabric Carpet extension mod which attempts to fix as many vanilla bugs as possible! Feel free to contribute by adding as many fixes as yo

Fx Morin 90 Jan 6, 2023
Tinker is a hot-fix solution library for Android, it supports dex, library and resources update without reinstall apk.

Tinker Tinker is a hot-fix solution library for Android, it supports dex, library and resources update without reinstalling apk. Getting started Add t

Tencent 16.6k Dec 30, 2022
Simple plugin made for TimBW HCF to fix pearling noclip exploit

Simple plugin made for TimBW HCF to fix pearling noclip exploit. It currently can prevent pearl glitching throught blocks, and fences like all servers! Basic features implemented, so you can use this in production. ??

null 2 Aug 10, 2022
This project allows the exchange of files between your local disk and a D64 image (Commodore 64 image disk) . Ce projet permet l'échange de fichiers entre votre disque local et une image D64 (Image de disquette du Commodore 64).

DiskToolC64 Ce projet permet l'échange de fichiers entre votre disque local et une image D64 (Image de disquette du Commodore 64). Introduction Les fi

Eddy BRIERE 3 Oct 12, 2022
Create your Java crypto trading bot in minutes. Our Spring boot starter takes care of exchange connections, accounts, orders, trades, and positions so you can focus on building your strategies.

Quick Start | Documentation | Discord | Twitter Create and run your java crypto trading bot in minutes Our Spring boot starter takes care of exchange

Cassandre 442 Jan 3, 2023
Currency Exchange Rate Rest Api

Spring Boot Currency Exchange Project This is a currency exchange Rest Api application which is developed using Spring Boot Framework. How to Run This

null 1 Jan 21, 2022
An extension for Keycloak, that enables web-based sign in with Apple and token exchange

Apple Identity Provider for Keycloak ?? This repository represents an extension for Keycloak, which enables Sign in with Apple for web-based applicati

Klaus Betz 58 Dec 29, 2022
Budget Proof Key for Code Exchange (PKCE) implementation using Java Spring-boot

Low Budget Proof Key for Code Exchange (PKCE) Implementation using Java Spring-boot Just for fun, low budget implementation of PKCE Auth Flow using a

Hardik Singh Behl 10 Dec 11, 2022
Utilities for latency measurement and reporting

LatencyUtils A latency stats tracking package The LatencyUtils package includes useful utilities for tracking latencies. Especially in common in-proce

null 440 Nov 14, 2022